Imported Upstream version 0.9.12 upstream/0.9.12
authorAnas Nashif <anas.nashif@intel.com>
Tue, 29 Jan 2013 15:06:04 +0000 (07:06 -0800)
committerAnas Nashif <anas.nashif@intel.com>
Tue, 29 Jan 2013 15:06:04 +0000 (07:06 -0800)
158 files changed:
Android.mk [new file with mode: 0644]
COPYING
ChangeLog
INSTALL
Makefile.am
Makefile.in
NEWS
TODO
aclocal.m4
autogen.sh
compile
config.guess
config.h.in
config.sub
configure
configure.ac
depcomp
install-sh
ltmain.sh [changed mode: 0755->0644]
m4/ax_pthread.m4 [new file with mode: 0644]
m4/libtool.m4 [new file with mode: 0644]
m4/ltoptions.m4 [new file with mode: 0644]
m4/ltsugar.m4 [new file with mode: 0644]
m4/ltversion.m4 [new file with mode: 0644]
m4/lt~obsolete.m4 [new file with mode: 0644]
m4/pkg.m4 [new file with mode: 0644]
missing
src/Makefile.am
src/Makefile.in
src/check-exported-symbols.sh
src/check-internal-symbols.sh
src/check-libstdc++.sh
src/check-static-inits.sh
src/gen-arabic-table.py
src/hb-atomic-private.hh
src/hb-blob.cc
src/hb-buffer-private.hh
src/hb-buffer.cc
src/hb-buffer.h
src/hb-common.cc
src/hb-common.h
src/hb-coretext.cc
src/hb-coretext.h
src/hb-fallback-shape.cc
src/hb-font-private.hh
src/hb-font.cc
src/hb-font.h
src/hb-ft.cc
src/hb-glib.cc
src/hb-graphite2.cc
src/hb-graphite2.h
src/hb-icu-le.cc [new file with mode: 0644]
src/hb-icu-le/COPYING [new file with mode: 0644]
src/hb-icu-le/FontTableCache.cpp [new file with mode: 0644]
src/hb-icu-le/FontTableCache.h [new file with mode: 0644]
src/hb-icu-le/Makefile.am [new file with mode: 0644]
src/hb-icu-le/Makefile.in [new file with mode: 0644]
src/hb-icu-le/PortableFontInstance.cpp [new file with mode: 0644]
src/hb-icu-le/PortableFontInstance.h [new file with mode: 0644]
src/hb-icu-le/README [new file with mode: 0644]
src/hb-icu-le/cmaps.cpp [new file with mode: 0644]
src/hb-icu-le/cmaps.h [new file with mode: 0644]
src/hb-icu-le/letest.h [new file with mode: 0644]
src/hb-icu-le/license.html [new file with mode: 0644]
src/hb-icu-le/sfnt.h [new file with mode: 0644]
src/hb-mutex-private.hh
src/hb-object-private.hh
src/hb-old.cc
src/hb-old/Makefile.in
src/hb-open-file-private.hh
src/hb-open-type-private.hh
src/hb-ot-head-table.hh
src/hb-ot-hhea-table.hh
src/hb-ot-hmtx-table.hh
src/hb-ot-layout-common-private.hh
src/hb-ot-layout-gdef-table.hh
src/hb-ot-layout-gpos-table.hh
src/hb-ot-layout-gsub-table.hh
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout-private.hh
src/hb-ot-layout.cc
src/hb-ot-layout.h
src/hb-ot-map-private.hh
src/hb-ot-map.cc
src/hb-ot-maxp-table.hh
src/hb-ot-name-table.hh
src/hb-ot-shape-complex-arabic-fallback.hh [new file with mode: 0644]
src/hb-ot-shape-complex-arabic-table.hh
src/hb-ot-shape-complex-arabic.cc
src/hb-ot-shape-complex-default.cc [new file with mode: 0644]
src/hb-ot-shape-complex-indic-machine.hh
src/hb-ot-shape-complex-indic-machine.rl
src/hb-ot-shape-complex-indic-private.hh
src/hb-ot-shape-complex-indic-table.hh
src/hb-ot-shape-complex-indic.cc
src/hb-ot-shape-complex-misc.cc [deleted file]
src/hb-ot-shape-complex-private.hh
src/hb-ot-shape-complex-thai.cc [new file with mode: 0644]
src/hb-ot-shape-fallback-private.hh
src/hb-ot-shape-fallback.cc
src/hb-ot-shape-normalize-private.hh
src/hb-ot-shape-normalize.cc
src/hb-ot-shape-private.hh
src/hb-ot-shape.cc
src/hb-ot-tag.cc
src/hb-ot.h
src/hb-private.hh
src/hb-set-private.hh
src/hb-set.cc
src/hb-set.h
src/hb-shape-plan-private.hh
src/hb-shape-plan.cc
src/hb-shape-plan.h
src/hb-shape.cc
src/hb-shape.h
src/hb-shaper-list.hh
src/hb-shaper-private.hh
src/hb-shaper.cc
src/hb-tt-font.cc
src/hb-ucdn.cc [new file with mode: 0644]
src/hb-ucdn/COPYING [new file with mode: 0644]
src/hb-ucdn/Makefile.am [new file with mode: 0644]
src/hb-ucdn/Makefile.in [new file with mode: 0644]
src/hb-ucdn/README [new file with mode: 0644]
src/hb-ucdn/ucdn.c [new file with mode: 0644]
src/hb-ucdn/ucdn.h [new file with mode: 0644]
src/hb-ucdn/unicodedata_db.h [new file with mode: 0644]
src/hb-unicode-private.hh
src/hb-unicode.cc
src/hb-uniscribe.cc
src/hb-utf-private.hh [new file with mode: 0644]
src/hb-version.h
src/hb-warning.cc
src/hb.h
src/indic.cc [deleted file]
src/main.cc
src/test-size-params.cc [new file with mode: 0644]
src/test-would-substitute.cc
src/test.cc [new file with mode: 0644]
test/Makefile.in
test/api/Makefile.am
test/api/Makefile.in
test/api/test-buffer.c
test/api/test-object.c
test/api/test-ot-tag.c
test/api/test-set.c [new file with mode: 0644]
test/shaping/Makefile.in
test/shaping/hb_test_tools.py
util/Makefile.in
util/hb-ot-shape-closure.cc
util/hb-shape.cc
util/helper-cairo.cc
util/helper-cairo.hh
util/main-font-text.hh
util/options.cc
util/options.hh
util/shape-consumer.hh
util/view-cairo.hh

diff --git a/Android.mk b/Android.mk
new file mode 100644 (file)
index 0000000..832d55e
--- /dev/null
@@ -0,0 +1,74 @@
+##
+## Copyright (C) 2012 The Android Open Source Project
+##
+## Licensed under the Apache License, Version 2.0 (the "License");
+## you may not use this file except in compliance with the License.
+## You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+##
+
+LOCAL_PATH:= $(call my-dir)
+
+#############################################################
+#   build the harfbuzz library
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_ARM_MODE := arm
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES:= \
+       src/hb-blob.cc \
+       src/hb-buffer.cc \
+       src/hb-common.cc \
+       src/hb-fallback-shape.cc \
+       src/hb-font.cc \
+       src/hb-ot-tag.cc \
+       src/hb-set.cc \
+       src/hb-shape.cc \
+       src/hb-shape-plan.cc \
+       src/hb-shaper.cc \
+       src/hb-tt-font.cc \
+       src/hb-unicode.cc \
+       src/hb-warning.cc \
+       src/hb-ot-layout.cc \
+       src/hb-ot-map.cc \
+       src/hb-ot-shape.cc \
+       src/hb-ot-shape-complex-arabic.cc \
+       src/hb-ot-shape-complex-default.cc \
+       src/hb-ot-shape-complex-indic.cc \
+       src/hb-ot-shape-complex-thai.cc \
+       src/hb-ot-shape-normalize.cc \
+       src/hb-ot-shape-fallback.cc \
+       src/hb-icu.cc
+
+LOCAL_CPP_EXTENSION := .cc
+
+LOCAL_SHARED_LIBRARIES := \
+        libcutils \
+        libicuuc \
+        libicui18n \
+        libutils
+
+LOCAL_C_INCLUDES += \
+        $(LOCAL_PATH)/src \
+        external/icu4c/common
+
+LOCAL_CFLAGS += -DHB_NO_MT -DHAVE_OT -DHAVE_ICU
+
+LOCAL_LDLIBS += -lpthread
+
+LOCAL_MODULE:= libharfbuzz_ng
+
+include $(BUILD_SHARED_LIBRARY)
+
+
diff --git a/COPYING b/COPYING
index f6748da..9d1056f 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,6 @@
 HarfBuzz is licensed under the so-called "Old MIT" license.  Details follow.
+For parts of HarfBuzz that are licensed under different licenses see individual
+files names COPYING in subdirectories where applicable.
 
 Copyright © 2010,2011,2012  Google, Inc.
 Copyright © 2012  Mozilla Foundation
index 6fd88f4..014604b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+commit ac064a2db2b7a010d99527e183145286215aea81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Nov 21 01:14:19 2012 -0500
+
+    Rename hb_set_population() to hb_set_get_population()
+
+ src/hb-set.cc |    2 +-
+ src/hb-set.h  |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 16c914c2a6efeb6999054333985b1f711e33cf94
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Nov 21 01:04:15 2012 -0500
+
+    [Indic] One more try at unbreaking Khmer fonts
+
+    See comments and discussion on the list.
+
+ src/hb-ot-shape-complex-private.hh |   16 ++++++++++------
+ 1 files changed, 10 insertions(+), 6 deletions(-)
+
+commit e8cfdd7fa8d0fb66e0a261f3547e5824897e5131
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 19:07:06 2012 -0800
+
+    Start implementing collect_glyphs() operation
+
+    Not functional yet.
+
+ src/hb-ot-layout-gsub-table.hh       |  185
+ ++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gsubgpos-private.hh |   57 +++++++++++
+ src/hb-ot-layout.cc                  |   29 ++++++
+ src/hb-ot-layout.h                   |    4 +-
+ 4 files changed, 272 insertions(+), 3 deletions(-)
+
+commit 7d52e6601f0e695690cd168a288466746cf25300
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 18:49:54 2012 -0800
+
+    Whitespace
+
+ src/hb-coretext.cc                   |   32 ++++------
+ src/hb-icu-le.cc                     |    2 +-
+ src/hb-old.cc                        |   10 ++--
+ src/hb-open-file-private.hh          |    2 +-
+ src/hb-open-type-private.hh          |    2 +-
+ src/hb-ot-head-table.hh              |    2 +-
+ src/hb-ot-hhea-table.hh              |    2 +-
+ src/hb-ot-hmtx-table.hh              |    2 +-
+ src/hb-ot-layout-common-private.hh   |    2 +-
+ src/hb-ot-layout-gdef-table.hh       |    2 +-
+ src/hb-ot-layout-gpos-table.hh       |    2 +-
+ src/hb-ot-layout-gsub-table.hh       |    2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-ot-maxp-table.hh              |    2 +-
+ src/hb-ot-name-table.hh              |    2 +-
+ src/hb-ot-shape-complex-default.cc   |  109
+ +++++++++++++++++-----------------
+ src/hb-tt-font.cc                    |    2 +-
+ 17 files changed, 87 insertions(+), 92 deletions(-)
+
+commit 51bb498b7b07bff4a447405b72f09b68d07a3e95
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 14:08:05 2012 -0800
+
+    Minor
+
+ src/hb-ot-shape.cc |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 89ca8eeb83fedde06727d386369a0a39d410f12b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 13:53:40 2012 -0800
+
+    Implement hb_ot_layout_get_glyphs_in_class()
+
+ src/hb-ot-layout-common-private.hh |   24 ++++++++++++++++++++++++
+ src/hb-ot-layout-gdef-table.hh     |    2 ++
+ src/hb-ot-layout.cc                |    8 ++++++++
+ src/hb-ot-layout.h                 |    5 ++---
+ 4 files changed, 36 insertions(+), 3 deletions(-)
+
+commit 5a08ecf9200a6ac9b4ebb7ec5c13dcb42d8820ce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 13:34:29 2012 -0800
+
+    Implement hb_ot_layout_get_glyph_class()
+
+ src/hb-ot-layout-gdef-table.hh       |   10 +++++-----
+ src/hb-ot-layout-gpos-table.hh       |    8 ++++----
+ src/hb-ot-layout-gsub-table.hh       |    2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |   10 +++++-----
+ src/hb-ot-layout-private.hh          |   10 +++++++++-
+ src/hb-ot-layout.cc                  |    6 ++++++
+ src/hb-ot-layout.h                   |   14 ++++++--------
+ src/hb-ot-shape.cc                   |    4 ++--
+ 8 files changed, 38 insertions(+), 26 deletions(-)
+
+commit f9edd5d56bd219625f5b16b23eac53b4c4a8b194
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 13:23:37 2012 -0800
+
+    Implement hb_shape_plan_get_shaper()
+
+    Untested.
+
+ src/hb-shape-plan-private.hh |    1 +
+ src/hb-shape-plan.cc         |    7 +++++++
+ src/hb-shape-plan.h          |    4 +---
+ 3 files changed, 9 insertions(+), 3 deletions(-)
+
+commit 43b653150081a2f9dc6b7481229ac4cd952575dc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 13:12:35 2012 -0800
+
+    [Indic] Another try to unbreak Sinhala split matras
+
+    Just read the comments...
+
+ src/hb-ot-shape-complex-indic.cc                   |   43
+ ++++++++++++++++----
+ .../indic/script-sinhala/misc/MANIFEST             |    1 +
+ .../indic/script-sinhala/misc/split-matras.txt     |    4 ++
+ 3 files changed, 40 insertions(+), 8 deletions(-)
+
+commit 977f1740ace730dcdff8221a17f2a592c2ec7c74
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 13:10:07 2012 -0800
+
+    Unbreak tests
+
+ src/hb-ot-layout.h  |   14 +++++++-------
+ src/hb-shape-plan.h |    2 +-
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+commit eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Nov 16 12:39:23 2012 -0800
+
+    Plumbing to get shape plan and font into complex decompose function
+
+    So we can handle Sinhala split matras smartly...  Coming soon.
+
+ src/hb-ot-shape-complex-default.cc   |    6 ++--
+ src/hb-ot-shape-complex-indic.cc     |   14 ++++----
+ src/hb-ot-shape-complex-private.hh   |   16 +++++-----
+ src/hb-ot-shape-normalize-private.hh |   22 ++++++++++++-
+ src/hb-ot-shape-normalize.cc         |   56
+ +++++++++++++--------------------
+ src/hb-ot-shape.cc                   |    2 +-
+ 6 files changed, 61 insertions(+), 55 deletions(-)
+
+commit 3f82f8ff07a9d16a7c047129658c1bbedfdb5436
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Nov 15 18:45:31 2012 -0800
+
+    Rename hb_buffer_guess_properties() to
+    hb_buffer_guess_segment_properties()
+
+ src/hb-buffer-private.hh |    2 +-
+ src/hb-buffer.cc         |    6 +++---
+ src/hb-buffer.h          |    2 +-
+ src/hb-fallback-shape.cc |    2 +-
+ src/hb-ot-shape.cc       |    2 +-
+ src/hb-shape.cc          |    2 +-
+ 6 files changed, 8 insertions(+), 8 deletions(-)
+
+commit f30641038ba96e83950729b1bd9d86d2e98e46c5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Nov 15 18:39:46 2012 -0800
+
+    Bunch of independent changes (ouch)
+
+    API additions:
+
+       hb_segment_properties_t
+       HB_SEGMENT_PROPERTIES_DEFAULT
+       hb_segment_properties_equal()
+       hb_segment_properties_hash()
+
+       hb_buffer_set_segment_properties()
+       hb_buffer_get_segment_properties()
+
+       hb_ot_layout_glyph_class_t
+
+       hb_shape_plan_t
+       hb_shape_plan_create()
+       hb_shape_plan_create_cached()
+       hb_shape_plan_get_empty()
+       hb_shape_plan_reference()
+       hb_shape_plan_destroy()
+       hb_shape_plan_set_user_data()
+       hb_shape_plan_get_user_data()
+       hb_shape_plan_execute()
+
+       hb_ot_shape_plan_collect_lookups()
+
+    API changes:
+
+       Rename hb_ot_layout_feature_get_lookup_indexes() to
+       hb_ot_layout_feature_get_lookups().
+
+    New header file:
+
+       hb-shape-plan.h
+
+    And a bunch of prototyped but not implemented stuff.  Coming soon.
+    (Tests fail because of the prototypes right now.)
+
+ src/Makefile.am             |    2 +-
+ src/hb-buffer-private.hh     |   37 --------------
+ src/hb-buffer.cc            |   45 +++++++++++++++++-
+ src/hb-buffer.h             |   47 ++++++++++++++++--
+ src/hb-ot-layout-private.hh  |    8 ---
+ src/hb-ot-layout.cc         |   12 ++--
+ src/hb-ot-layout.h          |  108
+ +++++++++++++++++++++++++++++++++++++++--
+ src/hb-ot-map-private.hh     |    2 +-
+ src/hb-ot-map.cc            |   15 +++---
+ src/hb-ot-shape-private.hh   |   11 ++++-
+ src/hb-ot-shape.cc          |   52 ++++++++++++++------
+ src/hb-ot.h                 |    1 +
+ src/hb-shape-plan-private.hh |    3 +-
+ src/hb-shape-plan.cc        |   23 +++++++--
+ src/hb-shape-plan.h         |   50 +++++++++++++-------
+ src/hb-shaper-private.hh     |    2 -
+ src/hb-shaper.cc            |    2 +-
+ src/hb.h                    |    1 +
+ 18 files changed, 304 insertions(+), 117 deletions(-)
+
+commit 75da37dcb17aacc0be6bb006683a84aa31155938
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 18:39:23 2012 -0800
+
+    Minor
+
+ util/hb-ot-shape-closure.cc |  24 ++++++++++++------------
+ 1 files changed, 12 insertions(+), 12 deletions(-)
+
+commit e05a999495e6575f7cebd7f35db087d964f11ef6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 16:23:21 2012 -0800
+
+    Add hb_face_[sg]et_glyph_count()
+
+ src/hb-font-private.hh |    9 +++++++++
+ src/hb-font.cc                |   29 ++++++++++++++++++++++++++++-
+ src/hb-font.h         |    7 +++++++
+ 3 files changed, 44 insertions(+), 1 deletions(-)
+
+commit aec89de5641fbe1c3031d63dd5f40ec99bf2a538
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 16:15:42 2012 -0800
+
+    Add / modify set API a bit
+
+ src/hb-ot-shape.cc         |    2 +-
+ src/hb-set-private.hh      |   35 ++++++++++++++++-
+ src/hb-set.cc              |   86
+ +++++++++++++++++++++++++++++--------------
+ src/hb-set.h               |   55 ++++++++++++++++++---------
+ util/hb-ot-shape-closure.cc |   2 +-
+ 5 files changed, 128 insertions(+), 52 deletions(-)
+
+commit c54599ad269380c7aa28d885fcfd660fc2c10a7b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 16:14:23 2012 -0800
+
+    Minor
+
+ src/hb-buffer.cc |    2 +-
+ src/hb-buffer.h  |    8 +++-----
+ 2 files changed, 4 insertions(+), 6 deletions(-)
+
+commit d1aa143ca434fe272de21d2002768c83387b583b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 15:38:08 2012 -0800
+
+    [Thai] Remove U+0E2C from "AC" consonants
+
+    WinXP doesn't include it.
+
+ src/hb-ot-shape-complex-thai.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 362a990b2246f5448ecb9d600761f710aea7d42d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 14:57:31 2012 -0800
+
+    Rename hb_ot_layout_would_substitute_lookup() and
+    hb_ot_layout_substitute_closure_lookup()
+
+    To match upcoming API.
+
+ src/hb-ot-layout-private.hh     |    2 +-
+ src/hb-ot-layout.cc             |    8 ++++----
+ src/hb-ot-layout.h              |    4 ++--
+ src/hb-ot-map.cc                |    2 +-
+ src/hb-ot-shape-complex-indic.cc |    2 +-
+ src/test-would-substitute.cc    |    2 +-
+ 6 files changed, 10 insertions(+), 10 deletions(-)
+
+commit a4bef84e375b090c1bc7e4221b8e0ee435dfcbba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 13:29:51 2012 -0800
+
+    [util] Make hb-shape err if output-format is not understood
+
+    And list supported formats.
+
+ util/hb-shape.cc |    6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+commit 3cec819d39e45470d03085bb6fa132882cc85943
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 13:15:39 2012 -0800
+
+    Make the OT shaper default, even if CoreText or Uniscribe is enabled
+
+ src/hb-shaper-list.hh |   15 ++++++++-------
+ 1 files changed, 8 insertions(+), 7 deletions(-)
+
+commit 072ae7a982bf640804eee0b41525e7c328806bf5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 13:14:12 2012 -0800
+
+    Add hb_buffer_serialize_list_formats()
+
+ src/hb-buffer.cc |    6 ++++++
+ src/hb-buffer.h  |    3 +++
+ 2 files changed, 9 insertions(+), 0 deletions(-)
+
+commit f9edf1672511c3bcc3796cc79578ffea43b2bda1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 12:14:09 2012 -0800
+
+    Add buffer serialization / deserialization API
+
+    Two output formats for now: TEXT, and JSON.  For example:
+
+      hb-shape --output-format=json
+
+    Deserialization API is added, but not implemented yet.
+
+ src/hb-buffer.cc |  222
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h  |   42 ++++++++++
+ util/hb-shape.cc |   21 +++++-
+ util/options.cc  |   57 ++++----------
+ util/options.hh  |    7 +-
+ 5 files changed, 304 insertions(+), 45 deletions(-)
+
+commit fd0de881f4fc004da6f36d50a91d0e62f8eb4d8c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 10:47:14 2012 -0800
+
+    Avoid C++ undefined behavior
+
+    https://bugzilla.mozilla.org/show_bug.cgi?id=810823
+
+ src/hb-open-type-private.hh |   4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit f41dc2d35b23220d59d38990bb66f1cbd66a55b3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 15 10:36:43 2012 -0800
+
+    Fix undefined behavior in Indic dottedcircle
+
+    Chromium Issue 158998:     Conditional jump in harfbuzz-ng
+    http://code.google.com/p/chromium/issues/detail?id=158998
+
+ src/hb-ot-shape-complex-indic.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 1eb3e94fe99a072ce422e60ac4d4d89ef489b08a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 17:25:03 2012 -0800
+
+    [Thai] Implement PUA-based fallback shaping
+
+    As explained here:
+
+      http://linux.thai.net/~thep/th-otf/shaping.html
+
+    Our output now matches Uniscribe for old fonts (eg. XP Tahoma) with no
+    Thai GSUB table.
+
+ src/hb-ot-shape-complex-thai.cc |  217
+ +++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 217 insertions(+), 0 deletions(-)
+
+commit 851784f8372004e0a40b698c0cdc2d7db8629aa2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 16:24:05 2012 -0800
+
+    Improve shaper selection
+
+ src/hb-ot-map-private.hh          |    8 ++++----
+ src/hb-ot-map.cc                  |    6 ++++--
+ src/hb-ot-shape-complex-indic.cc   |   2 +-
+ src/hb-ot-shape-complex-private.hh |  13 ++++++++-----
+ src/hb-ot-shape-complex-thai.cc    |  24 ++++++++++++++++++++++--
+ 5 files changed, 39 insertions(+), 14 deletions(-)
+
+commit f3584d3a3a627e38dfd7769975a670db340d2a48
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 15:55:17 2012 -0800
+
+    Add test cases for Thai PUA shaping
+
+ .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |   1 +
+ .../shaper-thai/script-thai/misc/pua-shaping.txt   |  11 +++++++++++
+ 2 files changed, 12 insertions(+), 0 deletions(-)
+
+commit 43f04a7456419153cb03e610a825056a47824780
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 15:51:54 2012 -0800
+
+    Move Thai shaper into a separate file
+
+ src/Makefile.am                   |    3 +-
+ src/hb-ot-shape-complex-default.cc |  225 ++++++++++++++++++++++++
+ src/hb-ot-shape-complex-misc.cc    |  339
+ ------------------------------------
+ src/hb-ot-shape-complex-thai.cc    |  141 +++++++++++++++
+ 4 files changed, 368 insertions(+), 340 deletions(-)
+
+commit ba82325b7a6311b787ae47f41a56964e2f2cba9f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 15:36:53 2012 -0800
+
+    Add note re 'Phags-pa letter U+A872, which is Joining_Type=L
+
+ src/hb-ot-shape-complex-arabic.cc |   1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit d469fadce8290c7dda559c5927dd19df65f91c1a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 15:07:36 2012 -0800
+
+    [Indic] Exchange abort() for assert()
+
+ src/hb-ot-shape-complex-indic.cc |    7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+commit 0f80a89de99293ddbf0b8b815fe360677d057e38
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 15:05:19 2012 -0800
+
+    Don't route Kharoshthi through the Indic shaper
+
+    It's a simple, right-to-left, script.
+
+ src/hb-ot-shape-complex-private.hh |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit e67072bb179a5c17db04075de74215597fb43c82
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 15:00:53 2012 -0800
+
+    [Indic] Handle overstruck matra position
+
+ src/hb-ot-shape-complex-indic-private.hh |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 7e99e4f0740e47efda5882604954cb7d12700a4b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 14:09:46 2012 -0800
+
+    Reposition Lao marks
+
+    Lao marks are center-aligned, unlike Thai ones.
+
+ src/hb-ot-shape-fallback.cc |   4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 865745b5b87236651f5663cae3461db9cb505eed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 13:48:26 2012 -0800
+
+    Don't do fallback positioning for Indic and Thai shapers
+
+ src/hb-ot-shape-complex-arabic.cc  |   1 +
+ src/hb-ot-shape-complex-indic.cc   |   1 +
+ src/hb-ot-shape-complex-misc.cc    |   2 ++
+ src/hb-ot-shape-complex-private.hh |   1 +
+ src/hb-ot-shape.cc                |   20 +++++---------------
+ 5 files changed, 10 insertions(+), 15 deletions(-)
+
+commit 981748cb2e9b48b77177b19ec1f972cab7afda89
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 13:38:16 2012 -0800
+
+    [Indic] If Khmer fonts have a 'liga' feature, use generic shaper
+
+    Seems to produce more coherent results than trying the Indic shaper on
+    them.  I'm looking at you, Kh-* fonts...
+
+ src/hb-ot-shape-complex-private.hh |  21 +++++++++++++++++----
+ 1 files changed, 17 insertions(+), 4 deletions(-)
+
+commit 6b19fa48621dbf36d471d5005f6ae20df350954f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 11:38:50 2012 -0800
+
+    Adjust diff rule for the new hb-shape output format
+
+ test/shaping/hb_test_tools.py |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit dde5506fd963e3cec27c3389bb1fc092f86d1e06
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 11:37:04 2012 -0800
+
+    [Indic] Don't move virama with left matra
+
+    This is important for the Sinhala U+0DDA split matra since it
+    decomposes
+    to U+0DD9,U+0DCA where U+0DD9 is a left matra and U+0DCA is the
+    virama.
+    We don't want to move the virama with the left matra.
+    TEST: U+0D9A,U+0DDA
+
+    Note that we were already doing this in the Uniscribe bug
+    compatibility
+    mode.  We now do it all the time.
+
+ src/hb-ot-shape-complex-indic.cc |    8 ++++++--
+ 1 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 82c4d9880a2cd321f6426888511c5f0318f96ad5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 10:56:02 2012 -0800
+
+    Add Sinhala test case for split matra U+0DDA
+
+ .../indic/script-sinhala/misc/misc.txt                    |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit d04b12853167d756a8cccaf4154f0fd894bce6de
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 14 10:53:10 2012 -0800
+
+    Fix test
+
+ test/api/test-buffer.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 92f9bfed42f720c1fd78e795845542661aaf4f8a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 16:50:45 2012 -0800
+
+    Minor
+
+ src/hb-buffer.h |   26 ++++++++++++++------------
+ 1 files changed, 14 insertions(+), 12 deletions(-)
+
+commit 66ac2ff32e24f0d5658ca172147613081a133847
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 16:26:32 2012 -0800
+
+    API change: Remove "mask" from hb_buffer_add()
+
+    I don't expect anybody using hb_buffer_add(), so this shouldn't break
+    anyone's code.
+
+ src/hb-buffer-private.hh |    1 -
+ src/hb-buffer.cc        |    8 +++-----
+ src/hb-buffer.h         |    1 -
+ 3 files changed, 3 insertions(+), 7 deletions(-)
+
+commit 407f80d62589774f845ef1a6a0a7d841b09d57c6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 15:33:27 2012 -0800
+
+    [util] Add --bot / --eot / --preserve-default-ignorables
+
+ util/options.cc |    3 +++
+ util/options.hh |   12 ++++++++++++
+ 2 files changed, 15 insertions(+), 0 deletions(-)
+
+commit 78d41d8d69142ae95928b51215c0c0c5e3f5b3f0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 15:15:09 2012 -0800
+
+    Minor
+
+ util/options.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 321f73c16efa0730c96e001d65268f4927a0f735
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 15:12:24 2012 -0800
+
+    [util] Add --text-before and --text-after to hb-shape / hb-view
+
+    Use with Arabic, for example, to see the effect on joining.
+
+ util/hb-ot-shape-closure.cc |   4 +++-
+ util/main-font-text.hh      |   2 +-
+ util/options.cc            |    2 ++
+ util/options.hh            |   18 ++++++++++++++++--
+ util/shape-consumer.hh      |   6 ++++--
+ 5 files changed, 26 insertions(+), 6 deletions(-)
+
+commit e13f8d280bafc6a6b6e31e2eee587660b8333c56
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 15:12:06 2012 -0800
+
+    Fix UTF-8 backward iteration
+
+    Ouch!
+
+ src/hb-utf-private.hh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 5669a6cf418f3a8b9281c36e9d662d843be80433
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 15:11:51 2012 -0800
+
+    [Arabic] Fix post-context handling
+
+    Ouch!
+
+ src/hb-ot-shape-complex-arabic.cc |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 0c7df2222862122ebbdc8665a21d6771ef5e0252
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 14:42:35 2012 -0800
+
+    Add buffer flags
+
+    New API:
+
+       hb_buffer_flags_t
+
+       HB_BUFFER_FLAGS_DEFAULT
+       HB_BUFFER_FLAG_BOT
+       HB_BUFFER_FLAG_EOT
+       HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
+
+       hb_buffer_set_flags()
+       hb_buffer_get_flags()
+
+    We use the BOT flag to decide whether to insert dottedcircle if the
+    first char in the buffer is a combining mark.
+
+    The PRESERVE_DEFAULT_IGNORABLES flag prevents removal of characters
+    like
+    ZWNJ/ZWJ/...
+
+ src/hb-buffer-private.hh         |    1 +
+ src/hb-buffer.cc                 |   18 ++++++++++++++++
+ src/hb-buffer.h                  |   13 ++++++++++++
+ src/hb-ot-shape-complex-arabic.cc |   40
+ +++++++++++++++++++-----------------
+ src/hb-ot-shape.cc               |    9 +++++--
+ test/api/test-buffer.c                   |    9 ++++++++
+ 6 files changed, 68 insertions(+), 22 deletions(-)
+
+commit 1c7e55511a870f2689680ca8f977e00879f3b3e3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 14:42:22 2012 -0800
+
+    Minor fix
+
+    Ouch
+
+ src/hb-shape.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit c8d4f8b0fe56ce909e3ca07f8a30cb4fb940868b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 14:10:19 2012 -0800
+
+    Minor
+
+ test/api/test-object.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 82ecaff736e245e117d70b6ec1497508c6eb08d2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 13:57:52 2012 -0800
+
+    Add hb_buffer_clear()
+
+    Which is like _reset(), but does NOT clear unicode-funcs.
+
+ src/hb-buffer-private.hh |    1 +
+ src/hb-buffer.cc        |   15 +++++++++++++++
+ src/hb-buffer.h         |    4 ++++
+ test/api/test-buffer.c   |   22 +++++++++++++++++++++-
+ 4 files changed, 41 insertions(+), 1 deletions(-)
+
+commit da43a92b04929e93356ae393803ef101154d2267
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 13:48:26 2012 -0800
+
+    0.9.6
+
+ NEWS        |   28 ++++++++++++++++++++++++++++
+ configure.ac |    2 +-
+ 2 files changed, 29 insertions(+), 1 deletions(-)
+
+commit 0736915b8ed789a209205fec762997af3a8af89c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 12:35:35 2012 -0800
+
+    [Indic] Decompose Sinhala split matras the way old HarfBuzz /
+    Pango did
+
+    Had to do some refactoring to make this happen...
+
+    Under uniscribe bug compatibility mode, we still plit them
+    Uniscrie-style, but Jonathan and I convinced ourselves that there
+    is no
+    harm doing this the Unicode way.  This change makes that happen, and
+    unbreaks free Sinhala fonts.
+
+ src/hb-ot-shape-complex-arabic.cc    |    2 +
+ src/hb-ot-shape-complex-indic.cc     |   74 +++++++++-
+ src/hb-ot-shape-complex-misc.cc      |  133 ++++++++++++++++-
+ src/hb-ot-shape-complex-private.hh   |   28 +++-
+ src/hb-ot-shape-normalize-private.hh |    6 +-
+ src/hb-ot-shape-normalize.cc        |  278
+ +++++++++-------------------------
+ src/hb-ot-shape.cc                  |    5 +-
+ 7 files changed, 312 insertions(+), 214 deletions(-)
+
+commit c8149ca85ed97112778590bc9f090f3ee0254100
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 13 11:07:20 2012 -0800
+
+    [hb-shape] Adjust postioning output format
+
+    1. If there is any offset (x or y), print out both x and y offsets.
+
+    2. Always print out the advance in the major direction of the buffer.
+    Ie. even for zero-advance glyphs, print a "+0".  This is more
+    intuitive.
+
+ util/options.cc |   13 +++++++------
+ 1 files changed, 7 insertions(+), 6 deletions(-)
+
+commit 6fd5335622087e87739684f581aa9f88635ff970
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 18:42:18 2012 -0800
+
+    [Indic] Update auto-generated Indic machine to reflect previous commit
+
+ src/hb-ot-shape-complex-indic-machine.hh | 1126
+ +++++++++++++++---------------
+ 1 files changed, 567 insertions(+), 559 deletions(-)
+
+commit 9cac1338c4bc3e9034cbfa104291ed0329debefe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 18:41:22 2012 -0800
+
+    [Indic] Allow Consonant_Medial's after Consonant's
+
+    Mostly affects Myanmar, but also Tai Tham, Javanese, and Cham.  The
+    latter three are untested (no fonts!).
+
+ src/hb-ot-shape-complex-indic-machine.rl |    3 ++-
+ src/hb-ot-shape-complex-indic-private.hh |    7 ++++---
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+commit d187099cbab8e75f870a2bc9c23b6a1cf226905e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 18:38:06 2012 -0800
+
+    [Indic] Categorize Myanmar "tone marks" as nuktas
+
+ src/hb-ot-shape-complex-indic-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 8173f23f3f16972c2e8e0a120724533100acfda2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 18:37:20 2012 -0800
+
+    [Indic] Add config for Myanmar
+
+ src/hb-ot-shape-complex-indic.cc |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit 9e92978c8aa3d3cdab4d20c81698c56adbb3dbdd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 18:36:10 2012 -0800
+
+    [Indic] Route "new" Myanmar tag through the Indic shaper
+
+    Windows 8 adds a Myanmar shaper using the 'mym2' tag.  Route that
+    through the Indic shaper.  It's still very broken, but at least this
+    does NOT break old-style Myanmar shaping using the generic shaper.
+
+ src/hb-ot-shape-complex-private.hh |  14 +++++++-------
+ 1 files changed, 7 insertions(+), 7 deletions(-)
+
+commit 5ab3855f8106158ee7e68797e8c35e63e9216e5d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 18:27:42 2012 -0800
+
+    Choose shaper based on chosen OT script tag
+
+    For Arabic and Indic shapers, if the font doesn't have a script system
+    for the script, use default shaper.
+
+    Make an exception for Arabic script since we have fallback logic for
+    that one.
+
+ src/hb-ot-map-private.hh          |    4 ++++
+ src/hb-ot-shape-complex-private.hh |  11 +++++++++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+commit 9b37b4c5800b158f61602d2aba8a01349e24d251
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 18:23:38 2012 -0800
+
+    Make planner available to complex shaper choosing logic
+
+ src/hb-ot-shape-complex-private.hh |   4 ++--
+ src/hb-ot-shape.cc                |    2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 6fddf2d7397411bba8a23ac535e8b851495d3105
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 17:57:24 2012 -0800
+
+    Refactoring ot-map building to make chosen script available earlier
+
+ src/hb-ot-map-private.hh   |  13 +++++++---
+ src/hb-ot-map.cc          |   51
+ +++++++++++++++++++++++++-------------------
+ src/hb-ot-shape-private.hh |   4 +-
+ 3 files changed, 40 insertions(+), 28 deletions(-)
+
+commit f17ed8116e7b6429af3fa60bb43d5f4fac66eae3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 17:48:26 2012 -0800
+
+    Minor TODO
+
+ TODO |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit de796a6fb98f4deda276caa82266b7c830978e0b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 17:27:51 2012 -0800
+
+    Add "new" Myanmar OT Script tag
+
+    Windows 8 added support for Myanmar shaping using the "mym2"
+    script tag,
+    even though Windows never supported the old "mymr" tag.
+
+ src/hb-ot-tag.cc      |    2 ++
+ test/api/test-ot-tag.c |    1 +
+ 2 files changed, 3 insertions(+), 0 deletions(-)
+
+commit 27f52dc3f6bbb97594a44f27b180aed73d9e5608
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 16:54:03 2012 -0800
+
+    Add Myanmar tests from UTN#11
+
+ .../south-east-asian/script-myanmar/misc/MANIFEST  |   1 +
+ .../south-east-asian/script-myanmar/misc/utn11.txt |  34
+ ++++++++++++++++++++
+ 2 files changed, 35 insertions(+), 0 deletions(-)
+
+commit e9334ce97bb7f1de87fb211bb5a8168033629b14
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 14:57:02 2012 -0800
+
+    Break build when ragel is needed and missing
+
+ src/Makefile.am |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit dba186711e3f5e723f917b7104e849c4c525d3b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 14:48:33 2012 -0800
+
+    [Indic] Make more room in the table
+
+    To be used in upcoming commits.
+
+ src/hb-ot-shape-complex-indic-private.hh |   10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+commit c4be9917438c45b972ec76dc68409014110f0837
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 14:27:33 2012 -0800
+
+    Typo
+
+ src/hb-ot-shape-complex-indic.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 56be677781736bbedc80df6f6aaa2b5f0bc4041c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 14:09:40 2012 -0800
+
+    [Indic] Port 'pref' logic to look into font tables
+
+    ...instead of using a hardcoded list of Ra characters.
+
+ src/hb-ot-shape-complex-indic.cc |    7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+commit f2c0f59043c93c225274fc0c8177077d16c89d61
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 14:02:02 2012 -0800
+
+    [Indic] Port reph handling logic to look into font features
+
+    ...instead of using a hardcoded list of Ra characters.
+
+ src/hb-ot-shape-complex-indic.cc |   48
+ +++++++++++++++++++++++--------------
+ 1 files changed, 30 insertions(+), 18 deletions(-)
+
+commit 43149afbc0007ea075a7017c0e56056c3c0f3614
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 13:34:17 2012 -0800
+
+    Route MEETEI_MAYEK through the Indic shaper
+
+    Since it has a couple of left-"matras".
+
+ src/hb-ot-shape-complex-private.hh |   5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+commit d0905c3400085f9c0901c558ba1b81b5039510e4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 13:02:20 2012 -0800
+
+    Minor
+
+ src/hb-ot-head-table.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 365f27ab5ba025bf1be6a882ed213c695cbfed7e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 11:16:57 2012 -0800
+
+    Work around older compilers
+
+    As reported on the list:
+
+    I am seeing a similar problem building harfbuzz 0.9.5 with Apple gcc
+    4.0.1 on OS X 10.5 Leopard:
+
+    hb-ot-layout-common-private.hh:406: error: 'struct
+    OT::CoverageFormat1::Iter' is private
+    hb-ot-layout-common-private.hh:646: error: within this context
+    hb-ot-layout-common-private.hh:500: error: 'struct
+    OT::CoverageFormat2::Iter' is private
+    hb-ot-layout-common-private.hh:647: error: within this context
+    make[4]: *** [libharfbuzz_la-hb-ot-layout.lo] Error 1
+
+    Also reported as happening with MSVC 2005.
+
+ src/hb-ot-layout-common-private.hh |   6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+commit 6b389ddc3623d042ded4731f4d62dc354002fdd0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 11:02:56 2012 -0800
+
+    [Indic] Don't apply 'liga'
+
+    Uniscribe doesn't. And some fonts abuse this feature to get Indic
+    shaping working in non-complex applications like Adobe's apps.
+
+    No change in numbers:
+
+    BENGALI: 353897 out of 354188 tests passed. 291 failed (0.0821598%)
+    DEVANAGARI: 707337 out of 707394 tests passed. 57 failed (0.00805774%)
+    GUJARATI: 366440 out of 366457 tests passed. 17 failed (0.00463902%)
+    GURMUKHI: 60704 out of 60747 tests passed. 43 failed (0.0707854%)
+    KANNADA: 951046 out of 951913 tests passed. 867 failed (0.0910798%)
+    KHMER: 299074 out of 299124 tests passed. 50 failed (0.0167155%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1048011 out of 1048334 tests passed. 323 failed
+    (0.0308108%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%)
+    TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%)
+    TELUGU: 970557 out of 970573 tests passed. 16 failed (0.00164851%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-shape-complex-indic.cc |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit d05ac7dc3f2949e85f1fe996315b31b7aae370fe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 10:26:50 2012 -0800
+
+    Fix hb-ft glyph name for broken fonts that return empty glyph names
+
+ src/hb-ft.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 3bc22eb7b843c77706bb13fc332009097f247813
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 12 10:07:28 2012 -0800
+
+    Minor
+
+ util/options.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 4899801155cc0fef7a8aa58c33ac2d30ba34bcc3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 8 15:08:26 2012 -0800
+
+    U+A872 PHAGS-PA SUPERFIXED LETTER RA is "Right"-Joining
+
+ src/hb-ot-shape-complex-arabic.cc |   3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+commit 22a685836a59d1c02914761c02d3852810b83ec5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 5 15:20:10 2012 -0800
+
+    Adjust Mongolian shaping
+
+    For U+1880..U+1886 Uniscribe thinks they are non-joining.
+    For U+1887 Uniscribe thinks it's joining, but looks wrong to me.
+    For now, match Uniscribe.
+
+ src/hb-ot-shape-complex-arabic.cc |   3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+commit e6b86c8519f894bf7fe18d5c143276521fcacece
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 5 15:18:49 2012 -0800
+
+    Add test for non-joining Mongolian letters
+
+    For U+1880..U+1886 Uniscribe thinks they are non-joining.
+    For U+1887 Uniscribe thinks it's joining, but looks wrong to me.
+
+ .../shaper-arabic/script-mongolian/misc/MANIFEST   |   1 +
+ .../script-mongolian/misc/non-joining.txt         |    8 ++++++++
+ 2 files changed, 9 insertions(+), 0 deletions(-)
+
+commit c26a52fbe62e5ba4d0e1e2ba13bfb6ceb3f773dc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Nov 4 16:48:45 2012 -0800
+
+    Minor
+
+ src/hb-ot-shape-fallback.cc |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit f60d3ed35d94f1adcfd73ca05d03d7e81fb5de03
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Nov 4 16:44:47 2012 -0800
+
+    Minor
+
+ src/hb-set-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit f5e55754f962184d2fb7dcab837cdba56e8c7731
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 2 13:53:18 2012 -0700
+
+    Add Tifinagh test data
+
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |   2 ++
+ .../shaper-default/script-tifinagh/MANIFEST       |    1 +
+ .../shaper-default/script-tifinagh/misc/MANIFEST   |   1 +
+ .../shaper-default/script-tifinagh/misc/misc.txt   |  11 +++++++++++
+ 4 files changed, 15 insertions(+), 0 deletions(-)
+
+commit 10a33296e674ee84b9ed2df25cf373de7d020b8d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 2 13:38:55 2012 -0700
+
+    Minor
+
+ src/hb-ot-tag.cc |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit c21498afd857e78230f761ee5c9e73adece89dd0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 2 10:21:26 2012 -0700
+
+    Add Mongolian and 'Phags-pa joining test cases
+
+ test/shaping/texts/in-tree/shaper-arabic/MANIFEST  |   1 +
+ .../shaper-arabic/script-mongolian/misc/misc.txt   |   3 +++
+ .../in-tree/shaper-arabic/script-phags-pa/MANIFEST |   1 +
+ .../shaper-arabic/script-phags-pa/misc/MANIFEST    |   1 +
+ .../shaper-arabic/script-phags-pa/misc/misc.txt    |  14 ++++++++++++++
+ 5 files changed, 20 insertions(+), 0 deletions(-)
+
+commit 3ba7bc14ea652d27639f34109e51a497a678a54a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 1 20:05:04 2012 -0700
+
+    Implement 'Phags-pa shaping
+
+    Through the Arabic shaper. It's similar to Mongolian.
+
+ src/hb-ot-shape-complex-arabic.cc  |  15 ++++++++++++---
+ src/hb-ot-shape-complex-private.hh |   4 +---
+ 2 files changed, 13 insertions(+), 6 deletions(-)
+
+commit 431bef2e16c7888ca3960f5797432d3a20903550
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 1 16:26:01 2012 -0700
+
+    Minor build fix
+
+ test/api/Makefile.am |   10 +++++++++-
+ 1 files changed, 9 insertions(+), 1 deletions(-)
+
+commit da70111ab234e8b740ce6fb1789a1809fbec0c44
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Oct 31 13:45:30 2012 -0700
+
+    Don't clear buffer pre-context if no new context is being provided
+
+    Patch from Jonathan Kew.
+
+    Part of fixing:
+
+    Mozilla Bug 801410 - avoid inserting dotted-circle for run-initial
+    Unicode combining characters in "simple" scripts such as Latin
+
+    https://bugzilla.mozilla.org/show_bug.cgi?id=801410
+
+ src/hb-buffer.cc |    9 ++++++++-
+ 1 files changed, 8 insertions(+), 1 deletions(-)
+
+commit 0bc7a38463bfb37f12efeb1b8cb2024cf4a347bc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 22:02:45 2012 -0700
+
+    [OT] Fix ReverseChainingSubst
+
+    We should make it clear that we don't want output buffer in this case,
+    otherwise buffer->backtrack_len() would be wrong.
+
+ src/hb-buffer-private.hh      |    1 +
+ src/hb-buffer.cc              |   13 +++++++++++++
+ src/hb-ot-layout-gsub-table.hh |    1 +
+ 3 files changed, 15 insertions(+), 0 deletions(-)
+
+commit 2616689d159024d2b1cb1e68f9936b2129bf9be6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 21:51:56 2012 -0700
+
+    More tracing fixups
+
+ src/hb-ot-layout-gsubgpos-private.hh |   13 +++++++------
+ 1 files changed, 7 insertions(+), 6 deletions(-)
+
+commit 937f8d3871863b8b1ed1d8900cf41999d92ba30f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 21:49:33 2012 -0700
+
+    [Arabic] Enable dlig and mset for Arabic
+
+    That's what the spec says, and what Uniscribe does.
+
+ src/hb-ot-shape-complex-arabic.cc |   3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+commit 911ed096980630fd4a37bf2024036daae13a6056
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 19:42:19 2012 -0700
+
+    Ignore gid0 in test results
+
+ test/shaping/hb_test_tools.py |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit bc513add7999baf32f126ceebbd318105ee66985
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 19:03:55 2012 -0700
+
+    Add missing TRACE_RETURN
+
+ src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 10b88d89ef1efcfddbbfabd3669399b472c8a900
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 18:18:24 2012 -0700
+
+    Add Ethiopic test case
+
+    This sequence: U+120B,U+135F,U+120B with the Nyala font from Win7
+    exposes a GPOS bug in Uniscribe, in that the positioned mark is
+    wrongly
+    moved as a result a following kern.
+
+    This is the one "failure" in the Ethiopic test suite :-).
+
+    ETHIOPIC: 118900 out of 118901 tests passed. 1 failed (0.000841036%)
+
+ .../shaper-default/script-ethiopic/MANIFEST       |    1 +
+ .../shaper-default/script-ethiopic/misc/MANIFEST   |   1 +
+ .../shaper-default/script-ethiopic/misc/misc.txt   |   1 +
+ 3 files changed, 3 insertions(+), 0 deletions(-)
+
+commit 88d3c98e309e14c3115825d1d8d40d0b3eec2d97
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 16:27:02 2012 -0700
+
+    [Indic] Position pre-base reordering Ra after Chillus in Malayalam
+
+    The logic for pre-base reordering follows the left matra logic.
+    We had an exception for Malayalam/Tamil in the left matra
+    repositioning
+    which was not reflected in pre-base reordering.
+
+    Malayalam failures down from 337 to 323.
+
+    BENGALI: 353996 out of 354285 tests passed. 289 failed (0.0815727%)
+    DEVANAGARI: 707339 out of 707394 tests passed. 55 failed (0.00777502%)
+    GUJARATI: 366489 out of 366506 tests passed. 17 failed (0.0046384%)
+    GURMUKHI: 60769 out of 60809 tests passed. 40 failed (0.0657797%)
+    KANNADA: 951086 out of 951913 tests passed. 827 failed (0.0868777%)
+    KHMER: 299106 out of 299124 tests passed. 18 failed (0.00601757%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1048011 out of 1048334 tests passed. 323 failed
+    (0.0308108%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271726 out of 271847 tests passed. 121 failed (0.0445103%)
+    TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
+    TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-shape-complex-indic.cc |   35
+ +++++++++++++++++++++--------------
+ 1 files changed, 21 insertions(+), 14 deletions(-)
+
+commit 21bf796954678d02f136709cade43adef6f8f42b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 14:21:09 2012 -0700
+
+    Add missed file
+
+ src/hb-ucdn/COPYING |  13 +++++++++++++
+ 1 files changed, 13 insertions(+), 0 deletions(-)
+
+commit 01013a0f5c58d5d54a37e5b4d6692e0bbd4baf80
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 29 10:56:04 2012 -0700
+
+    Include config.h.in in tree
+
+    I typically don't like including generating files in tree.
+    But like to
+    make an exception for this, since this forms the canonical list of
+    options one would need to go through when building with alternative
+    build systems.
+
+ Makefile.am |   1 -
+ config.h.in | 160
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 160 insertions(+), 1 deletions(-)
+
+commit 02ed52169ad3bb48f4989f721b0c6572e064a712
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Oct 28 21:26:19 2012 -0700
+
+    Improve license information
+
+ COPYING                  |    2 ++
+ src/hb-icu-le/COPYING    |    2 ++
+ src/hb-icu-le/Makefile.am |   2 +-
+ src/hb-ucdn/Makefile.am   |   2 +-
+ src/hb-ucdn/README       |    7 +++++++
+ 5 files changed, 13 insertions(+), 2 deletions(-)
+
+commit 4c1d9244617e472464722e64d2cdbc1f9e8827f6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Oct 28 20:27:25 2012 -0700
+
+    Minor
+
+ src/hb-icu-le.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 38b015e57ffa75d3b078a368c23685beb7c3f946
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Oct 28 20:11:47 2012 -0700
+
+    Fix hb_buffer_set_length(buffer, 0)
+
+    Was causing invalid realloc()s.
+
+ src/hb-buffer.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit b7115b63be72e109b51f538ba581aed1017b2d55
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Oct 28 20:11:42 2012 -0700
+
+    Add XXX
+
+ src/hb-icu-le.cc |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 71ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Oct 28 19:18:11 2012 -0700
+
+    Port to ICU LayoutEngine C API
+
+    Incidentally, this makes it not crash with icu-le-hb anymore...
+    I'm not smart / stupid enough to spend two more days debugging C++
+    linking issues, and this is ABI-stable at least.
+
+ src/hb-icu-le.cc |   31 ++++++++++++++++---------------
+ 1 files changed, 16 insertions(+), 15 deletions(-)
+
+commit 0144f05e57088b30ac894cdae8b04b265d4dfbe7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Oct 26 13:48:06 2012 -0700
+
+    Remove unused members
+
+ src/hb-icu-le/PortableFontInstance.h |    3 ---
+ 1 files changed, 0 insertions(+), 3 deletions(-)
+
+commit cf3afd8979b1db76d437f428cbd51cb363e0d18e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Oct 25 16:32:54 2012 -0700
+
+    Rename and revamp is_zero_width() to be is_default_ignorable()
+
+    That's really the logic desired.  Except that MONGOLIAN VOWEL
+    SEPARATOR
+    is not default_ignorable but it really should be.  Reported to
+    Unicode.
+
+    Based on suggestion from Konstantin Ritt.
+
+ src/hb-fallback-shape.cc   |   2 +-
+ src/hb-ot-shape-private.hh |   4 +-
+ src/hb-ot-shape.cc        |    2 +-
+ src/hb-unicode-private.hh  |  90
+ ++++++++++++++++++++++++++++---------------
+ 4 files changed, 62 insertions(+), 36 deletions(-)
+
+commit a724139e641bf1592b1ff786a75a9de2ea8163cf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Oct 24 14:02:15 2012 -0700
+
+    Update TODO
+
+ TODO |   14 ++++++++++----
+ 1 files changed, 10 insertions(+), 4 deletions(-)
+
+commit 13c058472913b7b6d689f9022226079da65420b0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Oct 14 18:37:09 2012 -0500
+
+    0.9.5
+
+ NEWS        |   23 +++++++++++++++++++++++
+ configure.ac |    2 +-
+ 2 files changed, 24 insertions(+), 1 deletions(-)
+
+commit fecdfa95daf4916695f23e7dab89ab363be11b89
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Oct 7 17:19:58 2012 -0400
+
+    Fixup hb_ot_shape_closure()
+
+    Broke it when merged cmap mapping and normalizer.  Ouch!
+
+ src/hb-ot-shape.cc |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 2d1dcb3ce3354c2d5e2b4d1d291beb8d23cdea22
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Oct 7 17:13:46 2012 -0400
+
+    Mark debug message functions static
+
+ src/hb-private.hh |   6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 9947bd6daffb5ec76b67536575e7617ba4f10b1e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Oct 2 20:44:43 2012 -0400
+
+    Update UCDN to upstream commit
+    3f159c87824230b59af56e40e2db32caf6afa51a
+
+    - Unicode 6.2.0 goodness,
+    - Unassigned codepoints now have correct properties.  Passes test
+    suite.
+
+ src/hb-ucdn/unicodedata_db.h | 1966
+ ++++++++++++++++++++++--------------------
+ 1 files changed, 1036 insertions(+), 930 deletions(-)
+
+commit 32dbfcf763d1ae497d3c95de986a83441331678f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Oct 2 17:42:13 2012 -0400
+
+    Fix visibility of UCDN symbols
+
+ src/hb-ucdn.cc     |   2 --
+ src/hb-ucdn/ucdn.h |  19 +++++++++++++++++++
+ 2 files changed, 19 insertions(+), 2 deletions(-)
+
+commit 3f33f0d1f2603f22e86adffe3c3836136ba5e5fd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Oct 2 16:03:18 2012 -0400
+
+    Import UCDN into source tree
+
+    https://github.com/grigorig/ucdn
+
+ configure.ac                |   11 +-
+ src/Makefile.am             |    7 +
+ src/hb-ucdn.cc                      |  207 ++
+ src/hb-ucdn/Makefile.am      |   18 +
+ src/hb-ucdn/README          |   33 +
+ src/hb-ucdn/ucdn.c          |  282 +++
+ src/hb-ucdn/ucdn.h          |  290 +++
+ src/hb-ucdn/unicodedata_db.h | 4648
+ ++++++++++++++++++++++++++++++++++++++++++
+ src/hb-unicode.cc           |    3 +
+ 9 files changed, 5498 insertions(+), 1 deletions(-)
+
+commit 0e292eb2a2abbac152eeea2060e58b7a66449745
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Oct 2 14:59:00 2012 -0400
+
+    Remove Glib thread-safety support
+
+    Now that we have pthread detection in configure, we don't need Glib
+    anymore.  Glib will only be a Unicode data provider.
+
+ configure.ac            |    8 ++++----
+ src/hb-atomic-private.hh |   13 -------------
+ src/hb-mutex-private.hh  |   20 --------------------
+ 3 files changed, 4 insertions(+), 37 deletions(-)
+
+commit 66efe896483c58f3ef9bd218c02bb7ea604f68ee
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Oct 2 14:55:32 2012 -0400
+
+    Check for pthreads
+
+ configure.ac   |    7 +++++++
+ src/Makefile.am |    5 +++++
+ 2 files changed, 12 insertions(+), 0 deletions(-)
+
+commit 10a8162dddb8b39ae130fe5bb7d1819471fa7e06
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Oct 2 14:46:34 2012 -0400
+
+    Add ax_pthread.m4
+
+ m4/ax_pthread.m4 |  309
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 309 insertions(+), 0 deletions(-)
+
+commit 8ac34bc6ff1d0646503a45659b1846d8cf9c0603
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Oct 2 14:46:04 2012 -0400
+
+    Add pkg.m4 to git repo
+
+ m4/pkg.m4 |  157
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 157 insertions(+), 0 deletions(-)
+
+commit c7afac0aa6e51e6a49ebf13f72537398698c9e49
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Oct 2 14:44:47 2012 -0400
+
+    Add AC_CONFIG_MACRODIR
+
+ Makefile.am  |    2 ++
+ configure.ac |    2 ++
+ 2 files changed, 4 insertions(+), 0 deletions(-)
+
+commit f2eb3fa9dca8d21fae20c9b9dddad3245df74a05
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 21:35:35 2012 -0400
+
+    [OT] Only insert dottedcircle if at the beginning of paragraph
+
+    If the first char in the run is a combining mark, but there is text
+    before the run, don't insert dottedcircle.
+
+    Part of addressing:
+    https://bugzilla.redhat.com/show_bug.cgi?id=858736
+
+ src/hb-ot-shape.cc |   6 ++----
+ 1 files changed, 2 insertions(+), 4 deletions(-)
+
+commit bdc2fc8294da7f374701aafe9f5a82d60633946f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 21:32:35 2012 -0400
+
+    [Arabic] Respect Arabic joining from neighboring context
+
+    Now we respect Arabic joining across runs.
+
+ src/hb-ot-shape-complex-arabic.cc |   31 +++++++++++++++++++++++++++++--
+ 1 files changed, 29 insertions(+), 2 deletions(-)
+
+commit 05207a79e0ae1769c5feaebe3fd99bdf9cfcf834
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 17:44:53 2012 -0400
+
+    [buffer] Save pre/post textual context
+
+    To be used for a variety of purposes.  We save up to five characters
+    in each direction. No public API changes, everything is taken care
+    of already.  All clients need to do is to call hb_buffer_add_utf* with
+    the full text + segment info (or at least some context) instead of
+    just passing in the segment.
+
+    Various operations (hb_buffer_reset, hb_buffer_set_length,
+    hb_buffer_add*) automatically reset the relevant contexts.
+
+ src/hb-buffer-private.hh |   13 ++++++++++++-
+ src/hb-buffer.cc        |   44
+ ++++++++++++++++++++++++++++++++++++++++----
+ src/hb-buffer.h         |    2 +-
+ 3 files changed, 53 insertions(+), 6 deletions(-)
+
+commit 89ac39dbbe028e6379f64392f2e590e3f1fdd847
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 13:59:24 2012 -0400
+
+    Add hb_utf_prev()
+
+ src/hb-utf-private.hh |   71
+ +++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 69 insertions(+), 2 deletions(-)
+
+commit 70ea4ac6887c7057113d714a98e55738b6196562
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 12:30:16 2012 -0400
+
+    Slightly optimize UTF-8 parsing
+
+ src/hb-utf-private.hh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 4445e5e2ecc257a5d0fa2f2715bb7181a47346da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 12:26:12 2012 -0400
+
+    [buffer] Cleanup / optimize UTF-16 parsing a bit
+
+ src/hb-utf-private.hh |   12 +++++++-----
+ 1 files changed, 7 insertions(+), 5 deletions(-)
+
+commit 1f66c3c1a0eb869c0d85a015235313177e0cec62
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 11:42:16 2012 -0400
+
+    Add hb_utf_strlen()
+
+    Speeds up UTF-8 parsing by calling strlen().
+
+ src/hb-buffer.cc      |   13 ++-----------
+ src/hb-utf-private.hh |   22 ++++++++++++++++++++++
+ 2 files changed, 24 insertions(+), 11 deletions(-)
+
+commit 7f19ae7b9f806a2e35206b2ad41651c5f80b2537
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 11:22:28 2012 -0400
+
+    [buffer] Templatize UTF handling
+
+    Also move UTF routines into a separate file, to be reused from shapers
+    that need it.
+
+ src/Makefile.am       |    1 +
+ src/hb-buffer.cc      |  157
+ +++++++++++++------------------------------------
+ src/hb-utf-private.hh |  113 +++++++++++++++++++++++++++++++++++
+ 3 files changed, 155 insertions(+), 116 deletions(-)
+
+commit 0e0a4da9b7677a09e00d27313236e1f333864dd6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 11:09:04 2012 -0400
+
+    [buffer] Towards template'izing different UTF adders
+
+ src/hb-buffer.cc |   11 ++++++++++-
+ 1 files changed, 10 insertions(+), 1 deletions(-)
+
+commit 7d37280600c157f3c4eae8746e99511702a58e8f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 11:04:41 2012 -0400
+
+    Minor
+
+ src/hb-buffer.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 54d5da4ee9d902ff36473cec558137eef8f23825
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 25 10:50:41 2012 -0400
+
+    Remove unused indic.cc
+
+ src/Makefile.am |    6 +-----
+ src/indic.cc   |   51
+ ---------------------------------------------------
+ 2 files changed, 1 insertions(+), 56 deletions(-)
+
+commit fab7a71f110ed646745d54b23284537c50058c21
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 24 21:51:13 2012 -0400
+
+    [Indic] Import ragel-generated Indic machine in git
+
+    I don't expect ragel to be creating too much noise in its generated
+    output, and including this in-tree helps users right now.  We can
+    revisit this later if it proved to be too much trouble.
+
+ autogen.sh                              |    6 -
+ src/Makefile.am                         |    1 -
+ src/hb-ot-shape-complex-indic-machine.hh | 1314
+ ++++++++++++++++++++++++++++++
+ 3 files changed, 1314 insertions(+), 7 deletions(-)
+
+commit 20a840c7cd08069720050782b4533cde505df09a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 24 20:23:00 2012 -0400
+
+    Use a C++ linker on Windows
+
+    On Windows we don't care whether or not we link to libstdc++.
+    Seems to fix build with mingw32 on msys, as reported by Werner.
+
+ src/Makefile.am |    6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+commit eb7669a38072b66eef3bd905a93c4815bef3f0e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 18 19:42:06 2012 -0400
+
+    Better autofoo
+
+ src/Makefile.am |    5 +----
+ 1 files changed, 1 insertions(+), 4 deletions(-)
+
+commit d00f7d83750258eff915a3826700c4819e63e481
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 17 20:59:09 2012 -0400
+
+    Fix dependencies
+
+ src/Makefile.am |    5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+commit 811eefe225d20b20f1de20c6e62a0ebd6d89102a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 10 09:56:27 2012 -0400
+
+    Return NULL, not false
+
+    Oh well...
+
+ src/hb-open-type-private.hh |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 166b5cf7ec2d37fb54a909c437ccdec1edaf37aa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 7 14:55:07 2012 -0400
+
+    [Indic] Find syllables before any features are applied
+
+    With FreeSerif, it seems that the 'ccmp' feature does ligature
+    substituttions.  That was then causing syllable match failures.
+    We now
+    find syllables before any features have been applied.
+
+    Test sequence: U+0D9A,U+0DCA,U+200D,U+0DBB,U+0DCF
+
+ src/hb-ot-shape-complex-indic-machine.rl          |    4 +-
+ src/hb-ot-shape-complex-indic.cc                  |   56
+ ++++++++++++++------
+ .../indic/script-sinhala/misc/misc.txt                    |    1 +
+ 3 files changed, 43 insertions(+), 18 deletions(-)
+
+commit 96fdc04e5c6daafce3d45e7508418e4db94df44c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 22:26:16 2012 -0400
+
+    Add hb_buffer_[sg]et_content_type
+
+    And hb_buffer_content_type_t and enum values.
+
+ TODO                    |    1 +
+ src/hb-buffer-private.hh |    2 ++
+ src/hb-buffer.cc        |   34 ++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h         |   14 ++++++++++++++
+ src/hb-shape.cc         |    5 +++++
+ 5 files changed, 56 insertions(+), 0 deletions(-)
+
+commit e30ebd2794b37bd8ec716a258d5cb017fb1dfadc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 22:09:06 2012 -0400
+
+    Add hb_feature_to/from_string()
+
+ TODO            |    4 +-
+ src/hb-common.cc |    9 +++
+ src/hb-common.h  |    6 ++-
+ src/hb-shape.cc  |  168
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-shape.h   |   13 ++++
+ util/options.cc  |  132 +-----------------------------------------
+ 6 files changed, 201 insertions(+), 131 deletions(-)
+
+commit f67917161bbe317a33d6407fbc62ebffcafe7154
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 17:22:31 2012 -0400
+
+    [OT] Do per-ligature-component fallback mark positioning
+
+    With this in place, you can remove GDEF/GSUB/GPOS tables from Arabic
+    fonts and still get per-component marks positioned on
+    oh-yeah-fallback-formed LAM-ALEF ligatures with marks in between
+    the LAM
+    and ALEF.
+
+    Now *that*'s pretty cool, if a bit anachronistic...
+
+ src/hb-ot-shape-fallback.cc |  43
+ ++++++++++++++++++++++++++++++++++++-------
+ 1 files changed, 36 insertions(+), 7 deletions(-)
+
+commit 525c6855783a018d52867b9ece2ee90868ff1f91
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 16:02:07 2012 -0400
+
+    [OT] Make fallback mark positioning more robust
+
+    ...with clusters spanning multiple base characters.
+
+ src/hb-ot-shape-fallback.cc |  11 +++++++++--
+ 1 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 5d502443f5a07cbd0aa860dd71a0fa4ea8b6ff9f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 15:29:29 2012 -0400
+
+    [old] Clear offset array
+
+ src/hb-old.cc |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+commit 9433c218b4853442dd9ad53d0588a837a33dbf1e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 14:27:15 2012 -0400
+
+    [OT] Simplify fallback positioning condition
+
+ src/hb-ot-shape-fallback.cc |   3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+commit 028a1706f898bfcee0d14acfba47ebe1de09f0c4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 14:25:48 2012 -0400
+
+    Refactor common macro
+
+ src/hb-ot-shape-fallback.cc  |    5 +----
+ src/hb-ot-shape-normalize.cc |    5 +----
+ src/hb-ot-shape.cc          |    5 +----
+ src/hb-unicode-private.hh    |    9 +++++++++
+ 4 files changed, 12 insertions(+), 12 deletions(-)
+
+commit 07cfbe21b511056d5c3c75cbfe84e4e982c3e8fb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 01:16:39 2012 -0400
+
+    [OT] Streamline Arabic fallback shaping table
+
+ src/gen-arabic-table.py                   |    6 +-
+ src/hb-ot-shape-complex-arabic-fallback.hh |   2 +-
+ src/hb-ot-shape-complex-arabic-table.hh    |  266
+ ++++++++++++++--------------
+ 3 files changed, 137 insertions(+), 137 deletions(-)
+
+commit 82f6b6f388b801a1483854cb56a2cadbb94e0f2b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 6 01:12:50 2012 -0400
+
+    Minor
+
+ src/hb-ot-shape-complex-arabic-fallback.hh |  13 +++++++------
+ 1 files changed, 7 insertions(+), 6 deletions(-)
+
+commit fabd3113a98c5f4114f48920fa7ea38bd65a8d32
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Sep 5 22:19:28 2012 -0400
+
+    [OT] Port Arabic fallback shaping to synthetic GSUB
+
+    All of init/medi/fina/isol and rlig implemented.
+
+    Let there be dragons... ⻯
+
+ src/Makefile.am                           |    1 +
+ src/hb-open-type-private.hh               |   69 +++++---
+ src/hb-ot-layout-common-private.hh        |    9 +-
+ src/hb-ot-layout-gsub-table.hh                    |   11 +-
+ src/hb-ot-map-private.hh                  |    6 +
+ src/hb-ot-map.cc                          |    1 +
+ src/hb-ot-shape-complex-arabic-fallback.hh |  252
+ ++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-arabic.cc         |  158 +++++-------------
+ src/hb-ot-shape.cc                        |    7 +-
+ src/hb-private.hh                         |   11 +-
+ 10 files changed, 369 insertions(+), 156 deletions(-)
+
+commit f0b8ed1b6dd9f1d2b9084c101a6fc5dee0cc22a8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Sep 5 17:32:57 2012 -0400
+
+    [Indic] Allow "H,ZWJ,M"
+
+    Uniscribe accepts a Halant,ZWJ before matras.  Allow that.
+
+    BENGALI down from 295 to 291
+    DEVANAGARI down from 69 to 57
+    GUJARATI down from 19 to 17
+    KANNADA down from 871 to 867
+    MALAYALAM down from 340 to 337
+    TELUGU down from 20 to 16
+
+    Currently at:
+
+    BENGALI: 353897 out of 354188 tests passed. 291 failed (0.0821598%)
+    DEVANAGARI: 707337 out of 707394 tests passed. 57 failed (0.00805774%)
+    GUJARATI: 366440 out of 366457 tests passed. 17 failed (0.00463902%)
+    GURMUKHI: 60704 out of 60747 tests passed. 43 failed (0.0707854%)
+    KANNADA: 951046 out of 951913 tests passed. 867 failed (0.0910798%)
+    KHMER: 299077 out of 299124 tests passed. 47 failed (0.0157125%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1047997 out of 1048334 tests passed. 337 failed
+    (0.0321462%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%)
+    TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%)
+    TELUGU: 970557 out of 970573 tests passed. 16 failed (0.00164851%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-shape-complex-indic-machine.rl |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 4ed717ef61813fa16cf74f2874848e9feb81568f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Sep 5 17:21:17 2012 -0400
+
+    [Indic] Relax grammar
+
+    Now that we insert dotted-circle, tests break more easily when
+    our indic
+    machine breaks.
+
+    In particular, a few Devanagari tests were having sequences like
+    "C,H,ZWJ,N", and because of the ZWJ the Nukta does NOT get reordered
+    to
+    before the Halant as the grammar used to expect... Fixup.
+
+    Another case is as simple as "C,ZWJ,SM".
+
+    Fixes 10 out of 79 failures:
+
+    DEVANAGARI: 707325 out of 707394 tests passed. 69 failed (0.00975411%)
+
+ src/hb-ot-shape-complex-indic-machine.rl |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit aa7141efe49991a1160489106984e95163fe2ab8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Sep 5 15:54:21 2012 -0400
+
+    [Indic] Fix Khmer syllable-final coeng-consonant
+
+    Brings down Khmer failures from 162 to 47.
+
+    KHMER: 299077 out of 299124 tests passed. 47 failed (0.0157125%)
+
+    Also rebaselined some of the test files that had only-inherited lines.
+    Removing those, the stats are:
+
+    BENGALI: 353893 out of 354188 tests passed. 295 failed (0.0832891%)
+    DEVANAGARI: 707315 out of 707394 tests passed. 79 failed (0.0111678%)
+    GUJARATI: 366438 out of 366457 tests passed. 19 failed (0.00518478%)
+    GURMUKHI: 60704 out of 60747 tests passed. 43 failed (0.0707854%)
+    KANNADA: 951042 out of 951913 tests passed. 871 failed (0.0915%)
+    KHMER: 299077 out of 299124 tests passed. 47 failed (0.0157125%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1047994 out of 1048334 tests passed. 340 failed
+    (0.0324324%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%)
+    TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%)
+    TELUGU: 970553 out of 970573 tests passed. 20 failed (0.00206064%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+    Still some regressions, but some of the more egregious cases are
+    addressed.
+
+ src/hb-ot-shape-complex-indic-machine.rl |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit efb8d3eb713bca7cbfca41380a012bdb4d380e5c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Sep 5 15:50:47 2012 -0400
+
+    Fixup test failure reporting
+
+    After we implemented dotted-circle, we were still ignoring any tests
+    that had dottedcircle in it for any of the shapers.  That meant
+    that if
+    we wrongly outputted dottedcircle, the test was being ignored.  Ouch!
+
+    Fixing that shows regressions across the board.  Most are Uniscribe
+    bugs: NOT inserting dotted-circle when it should.  Some are arou
+    machine bugs.  This is in fact a nice way to catch Indic-machine
+    deficiencies and when I fix the regressions, our clusters should be
+    much closer to Uniscribe.  For now, we regressed from:
+
+    BENGALI: 353997 out of 354285 tests passed. 288 failed (0.0812905%)
+    DEVANAGARI: 707339 out of 707394 tests passed. 55 failed (0.00777502%)
+    GUJARATI: 366489 out of 366506 tests passed. 17 failed (0.0046384%)
+    GURMUKHI: 60769 out of 60809 tests passed. 40 failed (0.0657797%)
+    KANNADA: 951086 out of 951913 tests passed. 827 failed (0.0868777%)
+    KHMER: 299106 out of 299124 tests passed. 18 failed (0.00601757%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1048104 out of 1048416 tests passed. 312 failed
+    (0.0297592%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271747 out of 271847 tests passed. 100 failed (0.0367854%)
+    TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
+    TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+    To:
+
+    BENGALI: 353990 out of 354285 tests passed. 295 failed (0.0832663%)
+    DEVANAGARI: 707315 out of 707394 tests passed. 79 failed (0.0111678%)
+    GUJARATI: 366447 out of 366506 tests passed. 59 failed (0.016098%)
+    GURMUKHI: 60707 out of 60809 tests passed. 102 failed (0.167738%)
+    KANNADA: 951042 out of 951913 tests passed. 871 failed (0.0915%)
+    KHMER: 298962 out of 299124 tests passed. 162 failed (0.0541581%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1048074 out of 1048416 tests passed. 342 failed
+    (0.0326206%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%)
+    TAMIL: 1091835 out of 1091837 tests passed. 2 failed (0.000183178%)
+    TELUGU: 970553 out of 970573 tests passed. 20 failed (0.00206064%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+    Investigating.
+
+ test/shaping/hb_test_tools.py |    8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 27bd55bd2ca599d501f10c2fae81861137517e46
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Sep 5 15:11:14 2012 -0400
+
+    [Indic] Tamil does not have half-forms either
+
+    The Win7 Tamil font does not realy on this behavior, but the WinXP
+    version does.  Handle Tamil like Malayalam: Matras always move to
+    before base.
+
+    WinXP Tamil failures went down from 168964 (15.4752%) to 167
+    (0.0152953%) (two orders of magnitude reduction!).
+
+    Included in this is a minor fixup that actually fixed a few tests
+    with non-Tamil too.  Numbers at:
+
+    BENGALI: 353997 out of 354285 tests passed. 288 failed (0.0812905%)
+    DEVANAGARI: 707339 out of 707394 tests passed. 55 failed (0.00777502%)
+    GUJARATI: 366489 out of 366506 tests passed. 17 failed (0.0046384%)
+    GURMUKHI: 60769 out of 60809 tests passed. 40 failed (0.0657797%)
+    KANNADA: 951086 out of 951913 tests passed. 827 failed (0.0868777%)
+    KHMER: 299106 out of 299124 tests passed. 18 failed (0.00601757%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1048104 out of 1048416 tests passed. 312 failed
+    (0.0297592%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271747 out of 271847 tests passed. 100 failed (0.0367854%)
+    TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
+    TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-shape-complex-indic.cc |   10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 87b75d0a4aa03fe7a03e3bf7baf8ece131aec1bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 23:06:38 2012 -0400
+
+    [OT] Allow adding features with fallback implementation
+
+ src/hb-ot-map-private.hh |    7 ++++---
+ src/hb-ot-map.cc        |    6 ++++--
+ 2 files changed, 8 insertions(+), 5 deletions(-)
+
+commit 1d3947a6bda6986c9c7d993589053051c119cc81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 22:42:17 2012 -0400
+
+    Minor
+
+ src/hb-ot-layout-gpos-table.hh |    2 +-
+ src/hb-ot-layout-gsub-table.hh |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit b3b89b66586897a69b410ef02e7434691de84ae6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 21:13:17 2012 -0400
+
+    [OT] Add SubstLookup serialize API
+
+ src/hb-ot-layout-common-private.hh |   2 +-
+ src/hb-ot-layout-gsub-table.hh     |  65
+ +++++++++++++++++++++++++++++++++++-
+ 2 files changed, 65 insertions(+), 2 deletions(-)
+
+commit 715e03bc21d6adaa8e1f647235843839dc47dad1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 20:10:17 2012 -0400
+
+    Minor
+
+ src/hb-open-type-private.hh |   7 ++-----
+ 1 files changed, 2 insertions(+), 5 deletions(-)
+
+commit 652d1e0d64e47313ead2fc8318d1236f0e0d80ca
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 20:00:44 2012 -0400
+
+    [OT] Start adding Lookup-level serialize API
+
+ src/hb-ot-layout-common-private.hh |  20 +++++++++++++++++++-
+ 1 files changed, 19 insertions(+), 1 deletions(-)
+
+commit a930c68e9c50aade78c1eb0eef075c9c117e4ef6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 18:17:57 2012 -0400
+
+    [OT] More serialize.  Implements all basic GSUB subtables
+
+ src/hb-open-type-private.hh       |   53 +++++++++++++++-
+ src/hb-ot-layout-common-private.hh |   8 ++-
+ src/hb-ot-layout-gsub-table.hh     |  125
+ ++++++++++++++++++++++++++++--------
+ 3 files changed, 156 insertions(+), 30 deletions(-)
+
+commit 1b38b4e817d871b9549be65af6030bd0eea7f775
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 18:17:21 2012 -0400
+
+    Minor
+
+ src/hb-ot-layout-gsub-table.hh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit f7e81ce0b882aa942ae33c787e741c5e8e5a0173
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 15:32:37 2012 -0400
+
+    0.9.4
+
+ NEWS        |   18 ++++++++++++++++++
+ configure.ac |    2 +-
+ 2 files changed, 19 insertions(+), 1 deletions(-)
+
+commit 2bd9fe359839a653f7caae534bf768af1735f155
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 15:15:19 2012 -0400
+
+    Refactor
+
+ src/hb-ot-layout-gpos-table.hh       |    7 ++-----
+ src/hb-ot-layout-gsub-table.hh       |   16 +++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh |   13 +++----------
+ src/hb-ot-layout.cc                 |   23 +++++++++++++++++------
+ src/hb-ot-shape-complex-arabic.cc    |    4 +---
+ 5 files changed, 28 insertions(+), 35 deletions(-)
+
+commit a5ddd9e31cd7906c4b559aa5b2fafdae4b9c8935
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 4 14:55:00 2012 -0400
+
+    [OT] Really fix possible NULL dereference this time
+
+ src/hb-ot-layout-gsubgpos-private.hh |    8 ++++----
+ src/hb-ot-layout.cc                 |    6 +++---
+ src/hb-ot-shape-complex-arabic.cc    |    4 +++-
+ 3 files changed, 10 insertions(+), 8 deletions(-)
+
+commit 29416833584d7831ece84aaeada6f5ebba7828c0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 3 23:31:14 2012 -0400
+
+    [OT] Implement serialize() for AlternateSubst
+
+ src/hb-ot-layout-gsub-table.hh |   33 +++++++++++++++++++++++++++++++++
+ 1 files changed, 33 insertions(+), 0 deletions(-)
+
+commit 1f07e3382a1608b054cbf88b89fef74f6c485434
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 3 23:28:34 2012 -0400
+
+    [OT] Implement serialize() for MultiSubst
+
+ src/hb-open-type-private.hh   |   10 +++++++++
+ src/hb-ot-layout-gsub-table.hh |   43
+ ++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 53 insertions(+), 0 deletions(-)
+
+commit 4912030dfba740c822e200d33cbb5c6dbbeaf79e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 3 20:58:03 2012 -0400
+
+    Minor
+
+ src/hb-open-type-private.hh   |    4 ++--
+ src/hb-ot-layout-gsub-table.hh |    4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit f8fa2b5cf67b02d74514dec7885d03de73ec7349
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 3 20:19:46 2012 -0400
+
+    Fix possible NULL dereference
+
+    As reported by Kenichi Ishibashi.
+
+ src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 4b312fb288faa383a2c5bd3be0428f0e58e02699
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Sep 1 21:56:06 2012 -0400
+
+    [OT] Remove serialize alignment
+
+    Will reintroduce in a different way when we actually need it.
+
+ src/hb-open-type-private.hh |  24 +++++++++++-------------
+ 1 files changed, 11 insertions(+), 13 deletions(-)
+
+commit c61be03d6df122f18eebda3b29e42c9e768d45b9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Sep 1 21:43:38 2012 -0400
+
+    [OT] A bit more serialize
+
+ src/hb-open-type-private.hh       |   14 +++++++++++
+ src/hb-ot-layout-common-private.hh |   2 +-
+ src/hb-ot-layout-gsub-table.hh     |  43
+ ++++++++++++++++++++++++++++++++++-
+ 3 files changed, 56 insertions(+), 3 deletions(-)
+
+commit abcc5ac1fde1c493e4055dd2f27b8aade7713156
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Sep 1 21:30:17 2012 -0400
+
+    [OT] Improve serialize syntax
+
+    For some definition of improvement...
+
+ src/hb-open-type-private.hh   |    6 ++++--
+ src/hb-ot-layout-gsub-table.hh |    3 +--
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+commit bc5be24014371ceb811b9ffd37062ede63d87bb1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Sep 1 20:48:22 2012 -0400
+
+    [OT] Restart work on serialize()
+
+ src/hb-open-type-private.hh       |   39 +++++++++++++++++-----
+ src/hb-ot-layout-common-private.hh |  61
+ +++++++++++++++++------------------
+ src/hb-ot-layout-gsub-table.hh     |  13 ++++++++
+ 3 files changed, 73 insertions(+), 40 deletions(-)
+
+commit 6912e476dd92639c3ddf07ca51c8d4a262c8b3a5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Sep 1 20:38:45 2012 -0400
+
+    [OT] Insert dotted-circle for run-initial marks
+
+    Unfortunately if the font has GPOS and 'mark' feature does
+    not position mark on dotted-circle, our inserted dotted-circle
+    will not get the mark repositioned to itself.  Uniscribe cheats
+    here.
+
+    If there is no GPOS however, the fallback positioning kicks in
+    and sorts this out.
+
+    I'm not willing to address the first case.
+
+ src/hb-ot-shape.cc |  32 ++++++++++++++++++++++++++++++++
+ 1 files changed, 32 insertions(+), 0 deletions(-)
+
+commit 1d581ec384bc1780995e32e1c44103af57596eda
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Sep 1 20:06:26 2012 -0400
+
+    [OT] Fallback-position ccc=0 Thai / Lao marks
+
+    Not perfect, but so is fallback positioning in 2012...
+
+ src/hb-ot-shape-fallback.cc |  56
+ +++++++++++++++++++++++++++++++++++-------
+ 1 files changed, 46 insertions(+), 10 deletions(-)
+
+commit 3992b5ec4cb43d114d87ff7ee2b992bcf819c9cd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Sep 1 19:20:41 2012 -0400
+
+    Move code around
+
+ src/hb-ot-shape-fallback-private.hh |   5 ++++
+ src/hb-ot-shape-fallback.cc        |   46
+ +++++++++++++++++++++++-----------
+ src/hb-ot-shape-private.hh         |    6 ++++
+ src/hb-ot-shape.cc                 |    4 +++
+ 4 files changed, 46 insertions(+), 15 deletions(-)
+
+commit b85800f9de8976a7418ef9df467d3080c6ab0199
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 31 18:12:01 2012 -0400
+
+    [Indic] Implement dotted-circle insertion for broken clusters
+
+    No panic, we reeally insert dotted circle when it's absolutely broken.
+
+    Fixes most of the dotted-circle cases against Uniscribe. (for
+    Devanagari
+    fixes 80% of them, for Khmer 70%; the rest look like Uniscribe being
+    really bogus...)
+
+    I had to make a decision.  Apparently Uniscribe adds one dotted circle
+    to each broken character.  I tried that, but that goes wrong
+    easily with
+    split matras.  So I made it add only one dotted circle to an entire
+    broken syllable tail.  As in: "if there was a dotted circle here, this
+    would have formed a correct cluster."  That works better for split
+    stuff, and I like it more.
+
+ src/hb-buffer-private.hh                |    1 +
+ src/hb-buffer.cc                        |   10 ++++
+ src/hb-ot-shape-complex-indic-machine.rl |    4 +-
+ src/hb-ot-shape-complex-indic-private.hh |    2 +-
+ src/hb-ot-shape-complex-indic.cc        |   67
+ +++++++++++++++++++++++++++---
+ src/hb-ot-shape-normalize-private.hh    |    1 +
+ src/hb-ot-shape-normalize.cc            |   11 +++--
+ 7 files changed, 83 insertions(+), 13 deletions(-)
+
+commit 327d14ef188396006d54af976506ab6f8bb2869a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 31 16:49:34 2012 -0400
+
+    [Indic] Start adding dotted-circle instrastructure
+
+ src/hb-ot-shape-complex-indic-machine.rl |   19 ++++++------
+ src/hb-ot-shape-complex-indic.cc        |   46
+ +++++++++++++++++++++++++++--
+ 2 files changed, 51 insertions(+), 14 deletions(-)
+
+commit 1be368e96fb7de8c77bf992874e0d5bd6b272ebe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 31 16:29:17 2012 -0400
+
+    Minor
+
+ src/hb-buffer-private.hh |   16 +++++++++++++++-
+ src/hb-buffer.cc        |   15 ---------------
+ 2 files changed, 15 insertions(+), 16 deletions(-)
+
+commit 784f29d061a2939562eca0c4943feb01174aee00
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 31 14:06:26 2012 -0400
+
+    Minor
+
+ src/hb-ot-shape.cc |  12 ++++++++----
+ 1 files changed, 8 insertions(+), 4 deletions(-)
+
+commit 5a7f18767a87a3f07269d0814f984a98f86ab852
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 30 22:53:29 2012 -0400
+
+    [OT] Better fallback-position Thai / Lao ccc!=0 marks
+
+ src/hb-ot-shape-fallback.cc |   8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 9f2348de58f0f85593027378169bc03c4dd64e59
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 29 21:08:59 2012 -0400
+
+    [OT] Add serialize() for Coverage
+
+ src/hb-open-type-private.hh       |   34 ++++++++++++++++---
+ src/hb-ot-layout-common-private.hh |  62
+ ++++++++++++++++++++++++++++++++++++
+ 2 files changed, 90 insertions(+), 6 deletions(-)
+
+commit e901b954c6ec44ac3ae7fb3c326e6e7a40718e4b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 29 20:26:08 2012 -0400
+
+    [OT] Start adding serialize() API
+
+ src/hb-open-type-private.hh |  77
+ +++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 77 insertions(+), 0 deletions(-)
+
+commit 965c280de09b49d711cb78d629da321c802084de
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 29 13:59:16 2012 -0400
+
+    Add HB_BUFFER_ASSERT_VAR
+
+    To be used in places we access buffer vars...
+
+ src/hb-buffer-private.hh |    3 +++
+ src/hb-buffer.cc        |   16 ++++++++++++++++
+ 2 files changed, 19 insertions(+), 0 deletions(-)
+
+commit 0ccf9b64736559a230425fd131c9eb8aa3048221
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 29 11:53:26 2012 -0400
+
+    Move code around
+
+ src/hb-ot-shape.cc |  21 ++++++++++-----------
+ 1 files changed, 10 insertions(+), 11 deletions(-)
+
+commit 2fcbbdb41a322f54b61d9ce983ab54434504c5ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 29 11:11:54 2012 -0400
+
+    Port Arabic fallback ligating to share code with GSUB
+
+    This will eventually allow us to skip marks, as well as (fallback)
+    attach marks to ligature components of fallback-shaped Arabic.
+    That would be pretty cool. I kludged GDEF props in, so mark-skipping
+    works, but the produced ligature id/components will be cleared later
+    by substitute_start() et al.
+
+    Perhaps using a synthetic table for Arabic fallback shaping was
+    a better
+    idea.  The current approach has way too many layering violations...
+
+ src/hb-ot-layout-gsubgpos-private.hh |    4 ++
+ src/hb-ot-shape-complex-arabic.cc    |   72
+ +++++++++++++++++++++++-----------
+ src/hb-ot-shape.cc                  |    4 +-
+ 3 files changed, 56 insertions(+), 24 deletions(-)
+
+commit 5e399a8a45bddb49e06e2ca39df1ed04398c0aff
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 29 10:40:49 2012 -0400
+
+    Minor
+
+ src/hb-ot-layout-gsub-table.hh       |    1 -
+ src/hb-ot-layout-gsubgpos-private.hh |    1 -
+ 2 files changed, 0 insertions(+), 2 deletions(-)
+
+commit a177d027d1d0ad9539e30ed75d8652e0e8da20ff
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 23:18:22 2012 -0400
+
+    [GSUB] Move ligation logic over
+
+ src/hb-ot-layout-gsub-table.hh       |   78
+ ++++-----------------------------
+ src/hb-ot-layout-gsubgpos-private.hh |   80
+ ++++++++++++++++++++++++++++++++++
+ 2 files changed, 89 insertions(+), 69 deletions(-)
+
+commit 191fa885d9e0a2dce92dd8727cddd18495e62409
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 22:58:55 2012 -0400
+
+    [GSUB] Merge Ligature and context input matching
+
+    Looks better now...
+
+ TODO                                |    4 --
+ src/hb-ot-layout-gsub-table.hh       |   71
+ ++++++---------------------------
+ src/hb-ot-layout-gsubgpos-private.hh |   29 +++++++++++++-
+ 3 files changed, 40 insertions(+), 64 deletions(-)
+
+commit 93814ca7dc2a7251f861c1c47ba155ba6e6bdf19
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 22:24:51 2012 -0400
+
+    Start converging Ligature and match_input
+
+ src/hb-ot-layout-gsub-table.hh       |   58
+ ++++++++++++++++---------------
+ src/hb-ot-layout-gsubgpos-private.hh |   62
+ ++++++++++++++++++++++++++--------
+ 2 files changed, 78 insertions(+), 42 deletions(-)
+
+commit 2eef71737ea29ffadbb5a2be4a898b44f53f66ac
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 19:16:38 2012 -0400
+
+    [hb-icu-le] Add visbility
+
+ src/hb-icu-le/FontTableCache.h                |    6 ++++-
+ src/hb-icu-le/PortableFontInstance.cpp |   39
+ --------------------------------
+ src/hb-icu-le/PortableFontInstance.h  |    7 ++++-
+ src/hb-icu-le/cmaps.cpp               |    2 +-
+ src/hb-icu-le/cmaps.h                 |    5 +++-
+ src/hb-icu-le/letest.h                        |   14 +++++++++++
+ src/hb-icu-le/sfnt.h                  |    6 ++++-
+ 7 files changed, 34 insertions(+), 45 deletions(-)
+
+commit d59e28e49204ed609d8a1bf3c0f21ab5fc178337
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 19:08:36 2012 -0400
+
+    Minor
+
+ src/Makefile.am          |    6 +++++-
+ src/check-libstdc++.sh    |   2 +-
+ src/check-static-inits.sh |   4 ++--
+ 3 files changed, 8 insertions(+), 4 deletions(-)
+
+commit af169d2813ff8075288cd4a7811f0715e4fea3da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 19:08:22 2012 -0400
+
+    Minor
+
+ src/hb-icu-le/PortableFontInstance.h |    8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 52ff2681d88886e2165ced397966ba29c2073583
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 18:03:35 2012 -0400
+
+    Use VisualStudio-style atomic intrinsics on mingw32
+
+ src/hb-atomic-private.hh |   25 ++++++++++++++++++-------
+ 1 files changed, 18 insertions(+), 7 deletions(-)
+
+commit 7c8e844d92aa604fc4b396343721ea90eb83adb8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 17:57:49 2012 -0400
+
+    Use namespace for OpenType tables
+
+    Avoids USHORT, SHORT, ULONG, LONG clashes with Windows API.
+
+ src/hb-font.cc                              |   12 ++--
+ src/hb-open-file-private.hh         |    4 ++
+ src/hb-open-type-private.hh         |    9 ++--
+ src/hb-ot-head-table.hh             |    4 ++
+ src/hb-ot-hhea-table.hh             |    5 ++
+ src/hb-ot-hmtx-table.hh             |    6 ++
+ src/hb-ot-layout-common-private.hh   |    5 ++
+ src/hb-ot-layout-gdef-table.hh       |    4 ++
+ src/hb-ot-layout-gpos-table.hh       |    4 ++
+ src/hb-ot-layout-gsub-table.hh       |    4 ++
+ src/hb-ot-layout-gsubgpos-private.hh |    4 ++
+ src/hb-ot-layout-private.hh         |   12 +++-
+ src/hb-ot-layout.cc                 |   91
+ +++++++++++++++++-----------------
+ src/hb-ot-maxp-table.hh             |    4 ++
+ src/hb-ot-name-table.hh             |    4 ++
+ src/hb-uniscribe.cc                 |    8 +--
+ src/main.cc                         |    2 +
+ 17 files changed, 117 insertions(+), 65 deletions(-)
+
+commit dc5df5af6b349c3d9e4ab876864d9dec8096401f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 28 16:31:23 2012 -0400
+
+    Revert "Minor"
+
+    This reverts commit 3e0a03978b91994bb7fa7922593cbdfc50878dfc.
+
+    I know remember why that line is there :).
+
+ src/hb-ot-shape-complex-arabic.cc |   1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 3e0a03978b91994bb7fa7922593cbdfc50878dfc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 27 17:10:02 2012 -0400
+
+    Minor
+
+ src/hb-ot-shape-complex-arabic.cc |   1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+commit 667218a5b134728863a318c73070f4e323590bbd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 27 17:00:44 2012 -0400
+
+    Minor
+
+ src/hb-ot-shape-fallback.cc |   4 +---
+ 1 files changed, 1 insertions(+), 3 deletions(-)
+
+commit 30dd62251fcd04c2cbaa9b979d47ddbf62c6d460
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 27 16:54:34 2012 -0400
+
+    Only fallback-position glyphs if we have the ccc
+
+    Previously, ccc=0 Thai / Lao marks were being
+    mispositioned.  Don't touch them.
+
+ src/hb-ot-shape-fallback.cc |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit e1ba62811a61afb046d349e578cd141363c7fb34
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 27 16:28:05 2012 -0400
+
+    Center unknown marks horizontally
+
+ src/hb-ot-shape-fallback.cc |   1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit a4e75e4128751bb902117abc1a59dce4f2147672
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 27 15:54:15 2012 -0400
+
+    Minor
+
+ test/shaping/hb_test_tools.py |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 23b0e9d7dc801e11640979af3c2b00649a519bb1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Aug 26 14:30:18 2012 -0400
+
+    [Indic] Fix switch
+
+    D'oh.  Was working by pure chance :)).
+
+ src/hb-ot-shape-complex-indic.cc |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit ae4d4e1de6b4512576080e95896383887b30982f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Aug 26 14:27:44 2012 -0400
+
+    Bug 53815 - CoreText backend doesn't link
+
+ configure.ac |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit ec0e46376a2afec4ff7606f95582b0ec49c2a44a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 24 00:44:53 2012 -0400
+
+    Remove TODO items
+
+ TODO |    4 ----
+ 1 files changed, 0 insertions(+), 4 deletions(-)
+
+commit 56e878ab875ff06d74702145e380e198be967bd6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 24 00:41:51 2012 -0400
+
+    [graphite2] Cleanup scratch buffer allocation
+
+ src/hb-graphite2.cc |  77
+ +++++++++++++++++++++++++++++----------------------
+ 1 files changed, 44 insertions(+), 33 deletions(-)
+
+commit 2f7586c6229096143ca0a96712a27416ee0d3c85
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 23:59:55 2012 -0400
+
+    [icu-le] Implement icu layout engine shaper
+
+ configure.ac         |    2 +-
+ src/hb-icu-le.cc      |  113
+ ++++++++++++++++++++++++++++++++++++++++++++----
+ src/hb-icu-le/cmaps.h |    1 -
+ src/hb-shaper-list.hh |    4 ++
+ 4 files changed, 108 insertions(+), 12 deletions(-)
+
+commit ba7f6c3797e5b440557bacd9b666bf09713dca76
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 21:52:44 2012 -0400
+
+    [icu-le] Hook up to hb_face_t
+
+ src/hb-icu-le.cc                      |   17 +++-
+ src/hb-icu-le/FontTableCache.cpp      |   34 ++++----
+ src/hb-icu-le/FontTableCache.h                |    9 ++-
+ src/hb-icu-le/PortableFontInstance.cpp |  144
+ +++-----------------------------
+ src/hb-icu-le/PortableFontInstance.h  |   21 ++---
+ src/hb-icu-le/README                  |    1 +
+ 6 files changed, 57 insertions(+), 169 deletions(-)
+
+commit e96bb36995b2a5321b4d32bb11906e1701aaf115
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 21:37:51 2012 -0400
+
+    [icu-le] Actually use the FontTableCache
+
+ src/hb-icu-le/PortableFontInstance.cpp |   25 ++++++++-----------------
+ 1 files changed, 8 insertions(+), 17 deletions(-)
+
+commit 7d242364ea647f655a7092bda25f9a10774c57f5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 21:23:41 2012 -0400
+
+    [icu-le] Start adding a icu-layout-engine backend
+
+    Import PortableFontInstance and add shaper stub.
+
+ configure.ac                          |    9 +
+ src/Makefile.am                       |    8 +
+ src/hb-icu-le.cc                      |  111 ++++++++
+ src/hb-icu-le/FontTableCache.cpp      |   91 +++++++
+ src/hb-icu-le/FontTableCache.h                |   41 +++
+ src/hb-icu-le/Makefile.am             |   25 ++
+ src/hb-icu-le/PortableFontInstance.cpp |  436
+ +++++++++++++++++++++++++++++++
+ src/hb-icu-le/PortableFontInstance.h  |  117 +++++++++
+ src/hb-icu-le/README                  |    2 +
+ src/hb-icu-le/cmaps.cpp               |  200 ++++++++++++++
+ src/hb-icu-le/cmaps.h                 |   85 ++++++
+ src/hb-icu-le/letest.h                        |   49 ++++
+ src/hb-icu-le/license.html            |   51 ++++
+ src/hb-icu-le/sfnt.h                  |  449
+ ++++++++++++++++++++++++++++++++
+ 14 files changed, 1674 insertions(+), 0 deletions(-)
+
+commit b5584ee4be46b47e1678acf28426970a6d670b4f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 16:26:07 2012 -0400
+
+    [Indic] For old-spec, match non-zero context
+
+    Fixes consonant-position with old-spec Malayalam.  Uniscribe seem
+    to be
+    doing this.  Fixes below-base La (eg. Pa,H,La) with AnjaliNewLipi.ttf.
+    Doesn't regress new-spec or other scripts.
+
+ src/hb-ot-shape-complex-indic.cc |   10 ++++++----
+ 1 files changed, 6 insertions(+), 4 deletions(-)
+
+commit d9b204d3d24cde165167714728bf380267903d6a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 16:22:28 2012 -0400
+
+    [GSUB] Allow non-zero-context matching in would_apply()
+
+    To be used in the next patch.
+
+ src/hb-ot-layout-gsubgpos-private.hh |    6 ++++--
+ src/hb-ot-layout-private.hh         |    3 ++-
+ src/hb-ot-layout.cc                 |   14 ++++++++------
+ src/hb-ot-layout.h                  |    7 ++++---
+ src/hb-ot-map.cc                    |   12 ++----------
+ src/hb-ot-shape-complex-indic.cc     |    2 +-
+ src/test-would-substitute.cc        |    2 +-
+ 7 files changed, 22 insertions(+), 24 deletions(-)
+
+commit 1f2bb172fe9a173ecfd61054f1fdd850943ef059
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 16:10:37 2012 -0400
+
+    Revert "[Indic/GSUB] Ignore context when matching would_apply()"
+
+    This reverts commit 24dd4e56743c6ce5e01cb710ca9e01b3e527af58.
+
+    Oops.  My bad.  The change _regressed_ Malayalam test suite, not
+    improved it.  I'll redo it, differentiating between old-spec and
+    new-spec cases.
+
+ src/hb-ot-layout-gsubgpos-private.hh |    8 +++-----
+ 1 files changed, 3 insertions(+), 5 deletions(-)
+
+commit 24dd4e56743c6ce5e01cb710ca9e01b3e527af58
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 15:47:10 2012 -0400
+
+    [Indic/GSUB] Ignore context when matching would_apply()
+
+    The MS Indic specs say "...all classifications are determined
+    ... using
+    context-free substitutions."  However, testing shows that MS's
+    Malayalam
+    shapers (both old and new), "match" even if there is no zero-context
+    rule.
+    We follow.
+
+    Fixes below-base La (eg. Pa,H,La) with AnjaliNewLipi.ttf (old spec).
+    Moreover, test suite Malayalam failures are down to 312 from 875!  No
+    change in other scripts.
+
+    Current numbers:
+
+    BENGALI: 353996 out of 354285 tests passed. 289 failed (0.0815727%)
+    DEVANAGARI: 707339 out of 707394 tests passed. 55 failed (0.00777502%)
+    GUJARATI: 366489 out of 366506 tests passed. 17 failed (0.0046384%)
+    GURMUKHI: 60769 out of 60809 tests passed. 40 failed (0.0657797%)
+    KANNADA: 951086 out of 951913 tests passed. 827 failed (0.0868777%)
+    KHMER: 299106 out of 299124 tests passed. 18 failed (0.00601757%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1047541 out of 1048416 tests passed. 875 failed
+    (0.0834592%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271726 out of 271847 tests passed. 121 failed (0.0445103%)
+    TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
+    TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-layout-gsubgpos-private.hh |    8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 6732d62e78b13842ead9549c97bede25c73976cb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 15:19:45 2012 -0400
+
+    [Indic] Implement pre-base reordering Ra for old-spec Malayalam
+
+    Fixes Pa,H,Ra sequence with AnjaliNewLipi.ttf.
+
+ src/hb-ot-shape-complex-indic.cc |    5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+commit 80cd92326f8a3f48a7821e720e8ecb2072e73286
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 12:06:14 2012 -0400
+
+    [Indic] Only apply basic features per-syllable
+
+    Free up syllables and let features work across syllables for the
+    presentation forms features and GPOS.
+
+    Fixed:
+    - 1 GURMUKHI test (remains 40)
+    - 12 KHMER tests (remains 18)
+    - 11 SINHALA tests (remains 121)
+
+    Regresses:
+    - 5 MALAYALAM tests (up to 312)
+
+    Current numbers:
+
+    BENGALI: 353996 out of 354285 tests passed. 289 failed (0.0815727%)
+    DEVANAGARI: 707339 out of 707394 tests passed. 55 failed (0.00777502%)
+    GUJARATI: 366489 out of 366506 tests passed. 17 failed (0.0046384%)
+    GURMUKHI: 60769 out of 60809 tests passed. 40 failed (0.0657797%)
+    KANNADA: 951086 out of 951913 tests passed. 827 failed (0.0868777%)
+    KHMER: 299106 out of 299124 tests passed. 18 failed (0.00601757%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1048104 out of 1048416 tests passed. 312 failed
+    (0.0297592%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271726 out of 271847 tests passed. 121 failed (0.0445103%)
+    TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
+    TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-shape-complex-indic.cc |    4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+commit df5d5c68f3a5cab17bf4a429802a1a1a834c3456
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 23 09:33:30 2012 -0400
+
+    Whitespace
+
+ src/hb-ot-layout-gpos-table.hh |   20 ++++++++++----------
+ 1 files changed, 10 insertions(+), 10 deletions(-)
+
+commit 7fe00d15da20193ca94a8ead9aee60df24074a9e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Aug 18 13:59:46 2012 -0400
+
+    Release 0.9.3
+
+ NEWS        |   16 ++++++++++++++++
+ configure.ac |    2 +-
+ 2 files changed, 17 insertions(+), 1 deletions(-)
+
+commit 7068e534c4ef7ed2eb7ef8e1370fd4a449556ce8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Aug 18 13:56:10 2012 -0400
+
+    Fix ChangeLog generation rule
+
+ Makefile.am |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
 commit 2f1747ed7d28148807ad07eb8e22db3ab5c54966
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 16 11:46:46 2012 -0400
+Date:  Thu Aug 16 11:46:46 2012 -0400
 
     Add comment
 
- src/hb-ot-shape-complex-arabic.cc |    4 ++++
+ src/hb-ot-shape-complex-arabic.cc |   4 ++++
  1 files changed, 4 insertions(+), 0 deletions(-)
 
 commit bd08d5d126aa878d1dbf7bfd4b1a764c170cd9ad
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 16 11:35:50 2012 -0400
+Date:  Thu Aug 16 11:35:50 2012 -0400
 
     [OT] Fix Arabic shaper OOB access
 
     https://bugzilla.mozilla.org/show_bug.cgi?id=782908
 
- src/hb-ot-shape-complex-arabic.cc |    2 +-
+ src/hb-ot-shape-complex-arabic.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit b161bfc4f6f2db0edea780b95b798ff7b559cf33
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 16 08:09:44 2012 -0400
+Date:  Thu Aug 16 08:09:44 2012 -0400
 
     [configure] Cleanup check for ICU
 
@@ -31,7 +2860,7 @@ Date:   Thu Aug 16 08:09:44 2012 -0400
 
 commit daf0731865f91da960446928667d4095bde471ea
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 16 07:32:59 2012 -0400
+Date:  Thu Aug 16 07:32:59 2012 -0400
 
     [ICU] Fix includes
 
@@ -42,7 +2871,7 @@ Date:   Thu Aug 16 07:32:59 2012 -0400
 
 commit a67ba9c0fe6798a3500af9f4acee8d678f5144ee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 15 18:52:17 2012 -0400
+Date:  Wed Aug 15 18:52:17 2012 -0400
 
     Whitespace
 
@@ -51,7 +2880,7 @@ Date:   Wed Aug 15 18:52:17 2012 -0400
 
 commit 9fe76051f7003d6b6a10486c5595bf1a4dbf5fe6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 15 17:24:28 2012 -0400
+Date:  Wed Aug 15 17:24:28 2012 -0400
 
     [NEWS] Fix date
 
@@ -62,19 +2891,19 @@ Date:   Wed Aug 15 17:24:28 2012 -0400
 
 commit 45c1383cc7315f89c23c0ed388b99e87224884e7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 14 09:33:18 2012 -0400
+Date:  Tue Aug 14 09:33:18 2012 -0400
 
     Minor
 
- src/hb-coretext.cc       |    8 ++++----
+ src/hb-coretext.cc      |    8 ++++----
  src/hb-fallback-shape.cc |    8 ++++----
- src/hb-graphite2.cc      |    8 ++++----
- src/hb-uniscribe.cc      |    8 ++++----
+ src/hb-graphite2.cc     |    8 ++++----
+ src/hb-uniscribe.cc     |    8 ++++----
  4 files changed, 16 insertions(+), 16 deletions(-)
 
 commit 4ac4c6f2e12ddc8bf5e750671321458218b6e0c8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Aug 13 10:52:52 2012 -0400
+Date:  Mon Aug 13 10:52:52 2012 -0400
 
     Fix ICU build with older ICUs
 
@@ -83,7 +2912,7 @@ Date:   Mon Aug 13 10:52:52 2012 -0400
 
 commit 883cbf5ed79d2b60191f803a5ee3f3e4496f3441
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Aug 12 17:11:27 2012 -0400
+Date:  Sun Aug 12 17:11:27 2012 -0400
 
     Minor
 
@@ -92,7 +2921,7 @@ Date:   Sun Aug 12 17:11:27 2012 -0400
 
 commit b7a4d37d0b162f2222b65d09b9271b8c636086f8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 11 21:32:23 2012 -0400
+Date:  Sat Aug 11 21:32:23 2012 -0400
 
     minor
 
@@ -101,25 +2930,25 @@ Date:   Sat Aug 11 21:32:23 2012 -0400
 
 commit d5045a5f4017631a4660f985fe451c5a64c42ca0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 11 21:26:25 2012 -0400
+Date:  Sat Aug 11 21:26:25 2012 -0400
 
     [ICU] Use new normalizer2 compose/decompose API
 
     It's considerably faster than the fallback implementation we had
     previously!
 
- src/hb-buffer.cc          |    9 ++---
- src/hb-glib.cc            |   26 ++++++---------
- src/hb-icu.cc             |   75
+ src/hb-buffer.cc         |    9 ++---
+ src/hb-glib.cc                   |   26 ++++++---------
+ src/hb-icu.cc            |   75
  ++++++++++++++++++++++++++++++++++++---------
  src/hb-unicode-private.hh |   13 +------
- src/hb-unicode.cc         |   35 ++++++++++++++++++++-
- src/hb-warning.cc         |    8 -----
+ src/hb-unicode.cc        |   35 ++++++++++++++++++++-
+ src/hb-warning.cc        |    8 -----
  6 files changed, 110 insertions(+), 56 deletions(-)
 
 commit 2b73a1f112c489c2553743c08dc03cd89f60cb2d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 11 19:17:54 2012 -0400
+Date:  Sat Aug 11 19:17:54 2012 -0400
 
     Add TODO
 
@@ -128,7 +2957,7 @@ Date:   Sat Aug 11 19:17:54 2012 -0400
 
 commit 9f9f04c2229227bb0712166e824157bbbf5cef80
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 11 18:34:13 2012 -0400
+Date:  Sat Aug 11 18:34:13 2012 -0400
 
     [OT] Unbreak Thai shaping and fallback Arabic shaping
 
@@ -137,17 +2966,17 @@ Date:   Sat Aug 11 18:34:13 2012 -0400
     shaping stage that happens before normalizing/cmap and disallow
     setup_mask modification of actual text.
 
- src/hb-ot-shape-complex-arabic.cc  |   42
+ src/hb-ot-shape-complex-arabic.cc  |  42
  ++++++++++++++++++++++++++---------
- src/hb-ot-shape-complex-indic.cc   |    1 +
- src/hb-ot-shape-complex-misc.cc    |   12 ++++++----
- src/hb-ot-shape-complex-private.hh |   15 ++++++++++--
- src/hb-ot-shape.cc                 |    3 ++
+ src/hb-ot-shape-complex-indic.cc   |   1 +
+ src/hb-ot-shape-complex-misc.cc    |  12 ++++++----
+ src/hb-ot-shape-complex-private.hh |  15 ++++++++++--
+ src/hb-ot-shape.cc                |    3 ++
  5 files changed, 54 insertions(+), 19 deletions(-)
 
 commit e9f28a38f54b98fa59f9159ccaaa3be6027e1378
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 11 18:20:28 2012 -0400
+Date:  Sat Aug 11 18:20:28 2012 -0400
 
     [OT] Add shape_plan to Arabic shaper
 
@@ -157,7 +2986,7 @@ Date:   Sat Aug 11 18:20:28 2012 -0400
 
 commit 344cc56698a8c84c4c1a05a71d829e5171aa3a60
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 11 17:36:23 2012 -0400
+Date:  Sat Aug 11 17:36:23 2012 -0400
 
     Add TODO
 
@@ -166,27 +2995,27 @@ Date:   Sat Aug 11 17:36:23 2012 -0400
 
 commit daf13afb0801740dcc7900c4af190e24b80a05c0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 10 16:38:44 2012 -0400
+Date:  Fri Aug 10 16:38:44 2012 -0400
 
     [OT] Implement fallback mark positioning for "double" combining marks
 
- src/hb-ot-shape-fallback.cc |    9 ++++++++-
+ src/hb-ot-shape-fallback.cc |   9 ++++++++-
  1 files changed, 8 insertions(+), 1 deletions(-)
 
 commit d345313104d9e3c8a8533ccdebd74e0648d0bee3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 10 16:34:04 2012 -0400
+Date:  Fri Aug 10 16:34:04 2012 -0400
 
     [OT] Fix fallback mark positioning with left-to-right text
 
     Ouch!
 
- src/hb-ot-shape-fallback.cc |   13 +++++++++++--
+ src/hb-ot-shape-fallback.cc |  13 +++++++++++--
  1 files changed, 11 insertions(+), 2 deletions(-)
 
 commit e297ee4acd6f9d950f8542fc6ad71fd580b69284
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 10 14:49:37 2012 -0400
+Date:  Fri Aug 10 14:49:37 2012 -0400
 
     Bump version to 0.9.2
 
@@ -195,7 +3024,7 @@ Date:   Fri Aug 10 14:49:37 2012 -0400
  AUTHORS      |    8 +++
  COPYING      |    9 +++-
  Makefile.am  |   13 +++---
- NEWS         |  136
+ NEWS        |  136
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  THANKS       |    7 +++
  configure.ac |    4 +-
@@ -203,7 +3032,7 @@ Date:   Fri Aug 10 14:49:37 2012 -0400
 
 commit 6efe1200b97cefe019857b0b5951a4a87deeb02b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 10 13:49:32 2012 -0400
+Date:  Fri Aug 10 13:49:32 2012 -0400
 
     Bump version to 0.9.1
 
@@ -212,72 +3041,72 @@ Date:   Fri Aug 10 13:49:32 2012 -0400
 
 commit 206ab6057303273590a3d005660e075bdcee0f5f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 10 09:06:30 2012 -0400
+Date:  Fri Aug 10 09:06:30 2012 -0400
 
     [test] Move around
 
- .../in-tree/shaper-arabic/script-arabic/MANIFEST   |    2 +-
- .../shaper-arabic/script-arabic/crulp/MANIFEST     |    1 -
- .../script-arabic/crulp/ligatures/2grams.txt       |  601 --
- .../script-arabic/crulp/ligatures/3grams.txt       | 3415 -----------
- .../script-arabic/crulp/ligatures/4grams.txt       | 6316
+ .../in-tree/shaper-arabic/script-arabic/MANIFEST   |   2 +-
+ .../shaper-arabic/script-arabic/crulp/MANIFEST     |   1 -
+ .../script-arabic/crulp/ligatures/2grams.txt      |  601 --
+ .../script-arabic/crulp/ligatures/3grams.txt      | 3415 -----------
+ .../script-arabic/crulp/ligatures/4grams.txt      | 6316
  --------------------
- .../script-arabic/crulp/ligatures/5grams.txt       | 5029
+ .../script-arabic/crulp/ligatures/5grams.txt      | 5029
  ----------------
- .../script-arabic/crulp/ligatures/6grams.txt       | 1542 -----
- .../script-arabic/crulp/ligatures/7grams.txt       |  354 --
- .../script-arabic/crulp/ligatures/8grams.txt       |   26 -
- .../script-arabic/crulp/ligatures/LICENSE          |    3 -
- .../script-arabic/crulp/ligatures/MANIFEST         |    7 -
- .../script-arabic/crulp/ligatures/README           |   16 -
- .../script-arabic/crulp/ligatures/SOURCES          |    4 -
- .../script-arabic/language-urdu/MANIFEST           |    1 +
- .../script-arabic/language-urdu/crulp/MANIFEST     |    1 +
- .../language-urdu/crulp/ligatures/2grams.txt       |  601 ++
- .../language-urdu/crulp/ligatures/3grams.txt       | 3415 +++++++++++
- .../language-urdu/crulp/ligatures/4grams.txt       | 6316
+ .../script-arabic/crulp/ligatures/6grams.txt      | 1542 -----
+ .../script-arabic/crulp/ligatures/7grams.txt      |  354 --
+ .../script-arabic/crulp/ligatures/8grams.txt      |   26 -
+ .../script-arabic/crulp/ligatures/LICENSE         |    3 -
+ .../script-arabic/crulp/ligatures/MANIFEST        |    7 -
+ .../script-arabic/crulp/ligatures/README          |   16 -
+ .../script-arabic/crulp/ligatures/SOURCES         |    4 -
+ .../script-arabic/language-urdu/MANIFEST          |    1 +
+ .../script-arabic/language-urdu/crulp/MANIFEST     |   1 +
+ .../language-urdu/crulp/ligatures/2grams.txt      |  601 ++
+ .../language-urdu/crulp/ligatures/3grams.txt      | 3415 +++++++++++
+ .../language-urdu/crulp/ligatures/4grams.txt      | 6316
  ++++++++++++++++++++
- .../language-urdu/crulp/ligatures/5grams.txt       | 5029
+ .../language-urdu/crulp/ligatures/5grams.txt      | 5029
  ++++++++++++++++
- .../language-urdu/crulp/ligatures/6grams.txt       | 1542 +++++
- .../language-urdu/crulp/ligatures/7grams.txt       |  354 ++
- .../language-urdu/crulp/ligatures/8grams.txt       |   26 +
- .../language-urdu/crulp/ligatures/LICENSE          |    3 +
- .../language-urdu/crulp/ligatures/MANIFEST         |    7 +
- .../language-urdu/crulp/ligatures/README           |   16 +
- .../language-urdu/crulp/ligatures/SOURCES          |    4 +
+ .../language-urdu/crulp/ligatures/6grams.txt      | 1542 +++++
+ .../language-urdu/crulp/ligatures/7grams.txt      |  354 ++
+ .../language-urdu/crulp/ligatures/8grams.txt      |   26 +
+ .../language-urdu/crulp/ligatures/LICENSE         |    3 +
+ .../language-urdu/crulp/ligatures/MANIFEST        |    7 +
+ .../language-urdu/crulp/ligatures/README          |   16 +
+ .../language-urdu/crulp/ligatures/SOURCES         |    4 +
  26 files changed, 17316 insertions(+), 17315 deletions(-)
 
 commit 7a484c601e0958533eb85a6902296733c39537fe
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 10 09:05:29 2012 -0400
+Date:  Fri Aug 10 09:05:29 2012 -0400
 
     [test] Add Urdu ligature sequences from CRULP
 
- .../in-tree/shaper-arabic/script-arabic/MANIFEST   |    1 +
- .../shaper-arabic/script-arabic/crulp/MANIFEST     |    1 +
- .../script-arabic/crulp/ligatures/2grams.txt       |  601 ++
- .../script-arabic/crulp/ligatures/3grams.txt       | 3415 +++++++++++
- .../script-arabic/crulp/ligatures/4grams.txt       | 6316
+ .../in-tree/shaper-arabic/script-arabic/MANIFEST   |   1 +
+ .../shaper-arabic/script-arabic/crulp/MANIFEST     |   1 +
+ .../script-arabic/crulp/ligatures/2grams.txt      |  601 ++
+ .../script-arabic/crulp/ligatures/3grams.txt      | 3415 +++++++++++
+ .../script-arabic/crulp/ligatures/4grams.txt      | 6316
  ++++++++++++++++++++
- .../script-arabic/crulp/ligatures/5grams.txt       | 5029
+ .../script-arabic/crulp/ligatures/5grams.txt      | 5029
  ++++++++++++++++
- .../script-arabic/crulp/ligatures/6grams.txt       | 1542 +++++
- .../script-arabic/crulp/ligatures/7grams.txt       |  354 ++
- .../script-arabic/crulp/ligatures/8grams.txt       |   26 +
- .../script-arabic/crulp/ligatures/LICENSE          |    3 +
- .../script-arabic/crulp/ligatures/MANIFEST         |    7 +
- .../script-arabic/crulp/ligatures/README           |   16 +
- .../script-arabic/crulp/ligatures/SOURCES          |    4 +
+ .../script-arabic/crulp/ligatures/6grams.txt      | 1542 +++++
+ .../script-arabic/crulp/ligatures/7grams.txt      |  354 ++
+ .../script-arabic/crulp/ligatures/8grams.txt      |   26 +
+ .../script-arabic/crulp/ligatures/LICENSE         |    3 +
+ .../script-arabic/crulp/ligatures/MANIFEST        |    7 +
+ .../script-arabic/crulp/ligatures/README          |   16 +
+ .../script-arabic/crulp/ligatures/SOURCES         |    4 +
  13 files changed, 17315 insertions(+), 0 deletions(-)
 
 commit f4cb4762986a28634fa7de9b706f9d37859b881e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 10 03:51:44 2012 -0400
+Date:  Fri Aug 10 03:51:44 2012 -0400
 
     [OT] Slightly adjust normalizer
 
-    The change is very subtle.  If we have a single-char cluster that
+    The change is very subtle. If we have a single-char cluster that
     decomposes to three or more characters, then try recomposition, in
     case the farther mark may compose with the base.
 
@@ -287,17 +3116,17 @@ Date:   Fri Aug 10 03:51:44 2012 -0400
 
 commit 07d682806349aee81f53114778ce0beb23909ed7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 10 03:28:50 2012 -0400
+Date:  Fri Aug 10 03:28:50 2012 -0400
 
     Minor
 
  src/hb-ot-shape-normalize.cc |   25 ++++++++-----------------
- src/hb-ot-shape.cc           |    2 +-
+ src/hb-ot-shape.cc          |    2 +-
  2 files changed, 9 insertions(+), 18 deletions(-)
 
 commit b00321ea78793d9b3592b5173a9800e6322424fe
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 9 22:33:32 2012 -0400
+Date:  Thu Aug 9 22:33:32 2012 -0400
 
     [OT] Avoid calling get_glyph() twice
 
@@ -306,23 +3135,23 @@ Date:   Thu Aug 9 22:33:32 2012 -0400
     observable in simple text, like ASCII.
 
  src/hb-ot-shape-normalize-private.hh |    2 +
- src/hb-ot-shape-normalize.cc         |   76
+ src/hb-ot-shape-normalize.cc        |   76
  ++++++++++++++++++++++++----------
- src/hb-ot-shape.cc                   |   44 +++++++++----------
+ src/hb-ot-shape.cc                  |   44 +++++++++----------
  3 files changed, 77 insertions(+), 45 deletions(-)
 
 commit 12c0875eafa4bd92db650e5acca046d99594d1e6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 9 22:00:53 2012 -0400
+Date:  Thu Aug 9 22:00:53 2012 -0400
 
     [OT] Remove redundant check
 
- src/hb-ot-shape.cc |    5 +----
+ src/hb-ot-shape.cc |   5 +----
  1 files changed, 1 insertions(+), 4 deletions(-)
 
 commit 5c60b70c89b4e0a6512d9fd1ab5394dd76feb742
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 9 21:58:07 2012 -0400
+Date:  Thu Aug 9 21:58:07 2012 -0400
 
     [OT] More code shuffling around
 
@@ -334,22 +3163,22 @@ Date:   Thu Aug 9 21:58:07 2012 -0400
 
 commit cd0c6e148f6d078b364370cb2f808b793b921be2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 9 21:48:55 2012 -0400
+Date:  Thu Aug 9 21:48:55 2012 -0400
 
     Shuffle buffer variable allocations around
 
     To room for more allocations, coming.
 
- src/hb-ot-layout-private.hh              |    6 +++---
- src/hb-ot-shape-complex-arabic.cc        |    2 +-
+ src/hb-ot-layout-private.hh             |    6 +++---
+ src/hb-ot-shape-complex-arabic.cc       |    2 +-
  src/hb-ot-shape-complex-indic-private.hh |    4 ++--
- src/hb-ot-shape-complex-private.hh       |    5 ++---
- src/hb-ot-shape-private.hh               |    4 ++--
+ src/hb-ot-shape-complex-private.hh      |    5 ++---
+ src/hb-ot-shape-private.hh              |    4 ++--
  5 files changed, 10 insertions(+), 11 deletions(-)
 
 commit 8d1eef3f32fb539de2a72804fa3834acc18daab5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 9 21:31:52 2012 -0400
+Date:  Thu Aug 9 21:31:52 2012 -0400
 
     Minor
 
@@ -359,19 +3188,19 @@ Date:   Thu Aug 9 21:31:52 2012 -0400
 
 commit 56c9e7c004e802ddcb8c704346026f1d7a812f9f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 9 21:12:30 2012 -0400
+Date:  Thu Aug 9 21:12:30 2012 -0400
 
     Fill out combining class resetting for fallback shaping
     Thai/Lao/Tibetan
 
- src/hb-ot-shape-fallback.cc |   38 +++++++++++++++++++++++++++++++++++++-
- src/hb-unicode-private.hh   |    7 ++++---
- src/hb-unicode.cc           |    2 +-
+ src/hb-ot-shape-fallback.cc |  38 +++++++++++++++++++++++++++++++++++++-
+ src/hb-unicode-private.hh   |   7 ++++---
+ src/hb-unicode.cc          |    2 +-
  3 files changed, 42 insertions(+), 5 deletions(-)
 
 commit a321e1d51e0e7fa02738410e8d6e77c841bc6b13
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 9 18:30:34 2012 -0400
+Date:  Thu Aug 9 18:30:34 2012 -0400
 
     Revert "Reject lookups with no subTable"
 
@@ -379,12 +3208,12 @@ Date:   Thu Aug 9 18:30:34 2012 -0400
 
     See previous commit.
 
- src/hb-ot-layout-common-private.hh |    1 -
+ src/hb-ot-layout-common-private.hh |   1 -
  1 files changed, 0 insertions(+), 1 deletions(-)
 
 commit 2eaf482b371034ce6ebfaedee98049b036fd3493
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 9 18:30:05 2012 -0400
+Date:  Thu Aug 9 18:30:05 2012 -0400
 
     Revert "[GSUB/GPOS] Reject Context/ChainContext lookups with zero
     input"
@@ -400,44 +3229,44 @@ Date:   Thu Aug 9 18:30:05 2012 -0400
 
 commit a02d86484be870615297abfc7be9f94645434762
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 18:04:29 2012 -0400
+Date:  Wed Aug 8 18:04:29 2012 -0400
 
     Add check-exported-symbols.sh
 
     And misc linking fixes.
 
- src/Makefile.am                  |    1 +
- src/check-exported-symbols.sh    |   40
+ src/Makefile.am                 |    1 +
+ src/check-exported-symbols.sh   |   40
  ++++++++++++++++++++++++++++++++++++++
- src/check-internal-symbols.sh    |    2 +-
+ src/check-internal-symbols.sh   |    2 +-
  src/hb-ot-shape-complex-indic.cc |    2 +-
- src/hb-ot-shape.cc               |    6 ++--
+ src/hb-ot-shape.cc              |    6 ++--
  5 files changed, 46 insertions(+), 5 deletions(-)
 
 commit 4c8ac4f47e95d2b266b2f64e75c55af8233b6b91
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 17:44:19 2012 -0400
+Date:  Wed Aug 8 17:44:19 2012 -0400
 
     Misc minor fixes
 
  src/check-internal-symbols.sh |   10 +--
  src/hb-font-private.hh        |   29 +++++++-
- src/hb-font.cc                |   63 +++++++---------
- src/hb-font.h                 |    2 +-
- src/hb-graphite2.cc           |    4 +-
- src/hb-old.cc                 |    2 +-
- src/hb-ot-layout.cc           |    6 +-
+ src/hb-font.cc                       |   63 +++++++---------
+ src/hb-font.h                |    2 +-
+ src/hb-graphite2.cc          |    4 +-
+ src/hb-old.cc                |    2 +-
+ src/hb-ot-layout.cc          |    6 +-
  src/hb-ot-shape-fallback.cc   |   10 +--
- src/hb-ot-shape.cc            |    2 +-
- src/hb-shape-plan.cc          |    2 +-
- src/hb-shape-plan.h           |    2 +-
- src/hb-tt-font.cc             |  166
+ src/hb-ot-shape.cc           |    2 +-
+ src/hb-shape-plan.cc         |    2 +-
+ src/hb-shape-plan.h          |    2 +-
+ src/hb-tt-font.cc            |  166
  +----------------------------------------
  12 files changed, 72 insertions(+), 226 deletions(-)
 
 commit 560d68af8168d1baff607b9616a3590af70fe9ec
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 17:16:01 2012 -0400
+Date:  Wed Aug 8 17:16:01 2012 -0400
 
     Use a export-file for Windows builds
 
@@ -445,14 +3274,14 @@ Date:   Wed Aug 8 17:16:01 2012 -0400
     mingw32.  Going to disable that for DLLs again, but hopefully the
     export-file is doing *something*.
 
- configure.ac    |   14 +++++++++++++-
+ configure.ac   |   14 +++++++++++++-
  src/Makefile.am |   22 +++++++++++++++++++++-
  src/hb-buffer.h |    4 ++--
  3 files changed, 36 insertions(+), 4 deletions(-)
 
 commit f8751cf8e0a16125d63a88da65fdbfa76a19453f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 17:15:44 2012 -0400
+Date:  Wed Aug 8 17:15:44 2012 -0400
 
     [hb-old] speed-up build
 
@@ -461,16 +3290,16 @@ Date:   Wed Aug 8 17:15:44 2012 -0400
 
 commit 5f4c52867ce67faa15f5d26b59c18c8d068e9261
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 16:53:37 2012 -0400
+Date:  Wed Aug 8 16:53:37 2012 -0400
 
     Minor
 
- src/hb-ot-layout.h |    1 -
+ src/hb-ot-layout.h |   1 -
  1 files changed, 0 insertions(+), 1 deletions(-)
 
 commit fe2b8a7777ab1c84980424ede713cb0d6701f987
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 15:27:14 2012 -0400
+Date:  Wed Aug 8 15:27:14 2012 -0400
 
     Minor
 
@@ -479,7 +3308,7 @@ Date:   Wed Aug 8 15:27:14 2012 -0400
 
 commit 7e7d245b332306949a19c628bacd920717434769
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 15:23:48 2012 -0400
+Date:  Wed Aug 8 15:23:48 2012 -0400
 
     Make default_language threadsafe
 
@@ -488,7 +3317,7 @@ Date:   Wed Aug 8 15:23:48 2012 -0400
 
 commit 06b192c458010c847362d809673209c87ea29949
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 15:23:45 2012 -0400
+Date:  Wed Aug 8 15:23:45 2012 -0400
 
     Minor
 
@@ -497,17 +3326,17 @@ Date:   Wed Aug 8 15:23:45 2012 -0400
 
 commit 37191ede7583fdb864db32a8f4d90956657926c7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 14:59:09 2012 -0400
+Date:  Wed Aug 8 14:59:09 2012 -0400
 
     Minor
 
  src/hb-common.h |    4 ++--
- src/hb-icu.h    |    1 -
+ src/hb-icu.h   |    1 -
  2 files changed, 2 insertions(+), 3 deletions(-)
 
 commit 6d9a329a8a0f11f4b175e407de59c55924de1ef6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 14:48:41 2012 -0400
+Date:  Wed Aug 8 14:48:41 2012 -0400
 
     Adjust a couple source checks
 
@@ -517,53 +3346,53 @@ Date:   Wed Aug 8 14:48:41 2012 -0400
 
 commit 9c929abdcfef44c0193a2917b20981df37ade21c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 14:33:37 2012 -0400
+Date:  Wed Aug 8 14:33:37 2012 -0400
 
     Minor renaming
 
- src/Makefile.am                              |    4 +-
- src/hb-ot-shape-fallback-private.hh          |   39 ++++
- src/hb-ot-shape-fallback.cc                  |  276
+ src/Makefile.am                             |    4 +-
+ src/hb-ot-shape-fallback-private.hh         |   39 ++++
+ src/hb-ot-shape-fallback.cc                 |  276
  ++++++++++++++++++++++++++
  src/hb-ot-shape-position-fallback-private.hh |   39 ----
- src/hb-ot-shape-position-fallback.cc         |  276
+ src/hb-ot-shape-position-fallback.cc        |  276
  --------------------------
- src/hb-ot-shape.cc                           |    4 +-
+ src/hb-ot-shape.cc                          |    4 +-
  6 files changed, 319 insertions(+), 319 deletions(-)
 
 commit 801298b590effd768607bb532dc83c73ba65d16b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 14:26:36 2012 -0400
+Date:  Wed Aug 8 14:26:36 2012 -0400
 
     Fix cast
 
     https://bugs.freedesktop.org/show_bug.cgi?id=53233
 
  src/hb-buffer-private.hh |   10 ++++++----
- src/hb-shape-plan.cc     |    4 ++--
+ src/hb-shape-plan.cc    |    4 ++--
  2 files changed, 8 insertions(+), 6 deletions(-)
 
 commit 21756934a15e31dc243e2b6d80adec5752477652
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 8 01:20:45 2012 -0400
+Date:  Wed Aug 8 01:20:45 2012 -0400
 
     [OT] Implement fallback positioning
 
     Implemented for Arabic, Hebrew, and generic marks.
     Activated if no GPOS table present.
 
- src/hb-font.h                        |    3 +-
- src/hb-ft.cc                         |    3 +-
- src/hb-old.cc                        |    2 +-
+ src/hb-font.h                       |    3 +-
+ src/hb-ft.cc                        |    3 +-
+ src/hb-old.cc                       |    2 +-
  src/hb-ot-shape-position-fallback.cc |  237
  +++++++++++++++++++++++++++++++++-
- src/hb-unicode-private.hh            |   81 ++++++++++++
- src/hb-unicode.cc                    |  107 ++++++----------
+ src/hb-unicode-private.hh           |   81 ++++++++++++
+ src/hb-unicode.cc                   |  107 ++++++----------
  6 files changed, 356 insertions(+), 77 deletions(-)
 
 commit fb56e7628362a73e20f7f0b49fe31e802dc01f4f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 23:44:47 2012 -0400
+Date:  Tue Aug 7 23:44:47 2012 -0400
 
     [hb-old] Fix warnings
 
@@ -572,31 +3401,31 @@ Date:   Tue Aug 7 23:44:47 2012 -0400
 
 commit affaf8a0e5aa38e5820455f789eebf916e02eb7b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 22:41:38 2012 -0400
+Date:  Tue Aug 7 22:41:38 2012 -0400
 
     [OT] Start adding fallback positioning
 
     Used when there is no GPOS.
 
- src/Makefile.am                              |    2 +
+ src/Makefile.am                             |    2 +
  src/hb-ot-shape-position-fallback-private.hh |   39 +++++++++++++++++++++
- src/hb-ot-shape-position-fallback.cc         |   47
+ src/hb-ot-shape-position-fallback.cc        |   47
  ++++++++++++++++++++++++++
- src/hb-ot-shape.cc                           |   23 +++----------
+ src/hb-ot-shape.cc                          |   23 +++----------
  4 files changed, 93 insertions(+), 18 deletions(-)
 
 commit 7e4920fd1577987bf6804f67765e22a84983e057
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 22:32:23 2012 -0400
+Date:  Tue Aug 7 22:32:23 2012 -0400
 
     Minor
 
- src/hb-ot-shape.cc |    2 +-
+ src/hb-ot-shape.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 472f229a63f0d1bb21b02179ef430b7698df8f12
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 22:25:24 2012 -0400
+Date:  Tue Aug 7 22:25:24 2012 -0400
 
     [GSUB] Generalize would_apply()
 
@@ -607,38 +3436,38 @@ Date:   Tue Aug 7 22:25:24 2012 -0400
  src/hb-ot-layout-gsub-table.hh       |   26 +++++++++++++++++++----
  src/hb-ot-layout-gsubgpos-private.hh |   37
  ++++++++++++++++-----------------
- src/hb-ot-layout.cc                  |    3 +-
+ src/hb-ot-layout.cc                 |    3 +-
  3 files changed, 40 insertions(+), 26 deletions(-)
 
 commit 6f3a300138f659020c21c3e08b7981c78df5f332
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 22:13:25 2012 -0400
+Date:  Tue Aug 7 22:13:25 2012 -0400
 
     Add hb_font_glyph_from/to_string
 
  src/hb-font-private.hh       |   43
  ++++++++++++++++++++++++++++++++++++++++++
- src/hb-font.cc               |   24 +++++++++++++++++++---
- src/hb-font.h                |   11 ++++++++++
- src/hb-private.hh            |   16 +++++++++++++++
+ src/hb-font.cc                      |   24 +++++++++++++++++++---
+ src/hb-font.h               |   11 ++++++++++
+ src/hb-private.hh           |   16 +++++++++++++++
  src/test-would-substitute.cc |   11 +++++++++-
- util/options.cc              |    2 +-
+ util/options.cc             |    2 +-
  6 files changed, 101 insertions(+), 6 deletions(-)
 
 commit eb56f6ae96260c5b4bcd4e1dfb7ab733a230f3a8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 21:44:25 2012 -0400
+Date:  Tue Aug 7 21:44:25 2012 -0400
 
     Minor
 
  src/hb-mutex-private.hh |    1 +
- src/hb-uniscribe.cc     |    1 +
- src/hb-uniscribe.h      |    2 ++
+ src/hb-uniscribe.cc    |    1 +
+ src/hb-uniscribe.h     |    2 ++
  3 files changed, 4 insertions(+), 0 deletions(-)
 
 commit f4e48adcdd4315ce09e755f87a0f801d88194f42
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 21:12:49 2012 -0400
+Date:  Tue Aug 7 21:12:49 2012 -0400
 
     [OT] Apply 'rclt' feature in horizontal mode
 
@@ -646,12 +3475,12 @@ Date:   Tue Aug 7 21:12:49 2012 -0400
     It's like 'calt', but supposedly always on.  We apply 'calt' anyway,
     and now apply this too.
 
- src/hb-ot-shape.cc |    1 +
+ src/hb-ot-shape.cc |   1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit b1914b8bd08ecdea79930dda7e3bb2ae9e6134a1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 16:57:48 2012 -0400
+Date:  Tue Aug 7 16:57:48 2012 -0400
 
     Fix warnings
 
@@ -660,7 +3489,7 @@ Date:   Tue Aug 7 16:57:48 2012 -0400
 
 commit 0f8881d6bbf6cd59938315eeff9b71cfc736aa4e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 16:57:02 2012 -0400
+Date:  Tue Aug 7 16:57:02 2012 -0400
 
     More refactoring
 
@@ -672,7 +3501,7 @@ Date:   Tue Aug 7 16:57:02 2012 -0400
 
 commit 428dfcab6634ff264570a0a5d715efb8048c3db5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 16:51:48 2012 -0400
+Date:  Tue Aug 7 16:51:48 2012 -0400
 
     Minor refactoring
 
@@ -681,7 +3510,7 @@ Date:   Tue Aug 7 16:51:48 2012 -0400
 
 commit 61f41849af6ff9edf8b55cf9610066d1bfb4a8df
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 16:45:27 2012 -0400
+Date:  Tue Aug 7 16:45:27 2012 -0400
 
     Add Hebrew presentation forms shaping
 
@@ -693,17 +3522,17 @@ Date:   Tue Aug 7 16:45:27 2012 -0400
 
 commit 32d71dc13317b322e2c5de00d767b2cb15fddd8b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 14:11:16 2012 -0400
+Date:  Tue Aug 7 14:11:16 2012 -0400
 
     [Graphite] Minor
 
- src/hb-graphite2.cc |   60
+ src/hb-graphite2.cc |  60
  +++++++++++++++++++++++---------------------------
  1 files changed, 28 insertions(+), 32 deletions(-)
 
 commit 030ac5022e8a43b9329c26e72527bafc582ef44b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Aug 7 13:01:12 2012 -0400
+Date:  Tue Aug 7 13:01:12 2012 -0400
 
     Remove enum trailing comma
 
@@ -714,7 +3543,7 @@ Date:   Tue Aug 7 13:01:12 2012 -0400
 
 commit 368b4e7649f9bc8c6bebf7c7ff03c9b9ec425a25
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Aug 6 23:06:04 2012 -0400
+Date:  Mon Aug 6 23:06:04 2012 -0400
 
     Minor
 
@@ -723,29 +3552,29 @@ Date:   Mon Aug 6 23:06:04 2012 -0400
 
 commit ade7459ea7c75b4f33f7cfa43dd5bdfa0c18d6d5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Aug 6 19:42:47 2012 -0700
+Date:  Mon Aug 6 19:42:47 2012 -0700
 
     [util] Fix leaks
 
- src/hb-graphite2.cc |   18 ++++++++++++++----
- util/options.cc     |    2 +-
- util/options.hh     |    2 +-
+ src/hb-graphite2.cc |  18 ++++++++++++++----
+ util/options.cc     |   2 +-
+ util/options.hh     |   2 +-
  3 files changed, 16 insertions(+), 6 deletions(-)
 
 commit 2fef993460dcfd94c92ab35413bdde18ad2b0ceb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Aug 6 19:35:04 2012 -0700
+Date:  Mon Aug 6 19:35:04 2012 -0700
 
     [Graphite] Fix graphite2 backend with RTL text
 
     Patch from Martin Hosken.
 
- src/hb-graphite2.cc |   33 ++++++++++++++++++---------------
+ src/hb-graphite2.cc |  33 ++++++++++++++++++---------------
  1 files changed, 18 insertions(+), 15 deletions(-)
 
 commit e4992e13e19877a73ea05fc1d31005a262c685ad
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Aug 6 19:25:39 2012 -0700
+Date:  Mon Aug 6 19:25:39 2012 -0700
 
     [Graphite] Port graphite2 backend to new shaper infrastructure
 
@@ -757,7 +3586,7 @@ Date:   Mon Aug 6 19:25:39 2012 -0700
 
 commit 66591ececfba9791de06c814f5f30131e95e5fd2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Aug 6 17:07:19 2012 -0700
+Date:  Mon Aug 6 17:07:19 2012 -0700
 
     Remove unnecessary lifecycle bits
 
@@ -769,7 +3598,7 @@ Date:   Mon Aug 6 17:07:19 2012 -0700
 
 commit e3320ecc1b5a7eaccc7c9370b2d1b76850f054be
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Aug 6 11:44:10 2012 -0700
+Date:  Mon Aug 6 11:44:10 2012 -0700
 
     Fix compiler warnings
 
@@ -778,7 +3607,7 @@ Date:   Mon Aug 6 11:44:10 2012 -0700
 
 commit 167b625d988b74572d6b2f646c285b666b650d49
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Aug 5 21:16:26 2012 -0700
+Date:  Sun Aug 5 21:16:26 2012 -0700
 
     [Indic] Minor, move 'blwf' after 'half'
 
@@ -790,7 +3619,7 @@ Date:   Sun Aug 5 21:16:26 2012 -0700
 
 commit 048e3b596fb7fccd3fb5f48de98b6b67788f774a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 4 18:04:57 2012 -0700
+Date:  Sat Aug 4 18:04:57 2012 -0700
 
     Speed up hb_set_digest_lowest_bits_t calcs
 
@@ -799,7 +3628,7 @@ Date:   Sat Aug 4 18:04:57 2012 -0700
 
 commit 3d1b66a35e1ab3be19335705f310b278d76d66d2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 4 17:42:28 2012 -0700
+Date:  Sat Aug 4 17:42:28 2012 -0700
 
     Speed up hb_set_digest_common_bits_t calcs
 
@@ -808,7 +3637,7 @@ Date:   Sat Aug 4 17:42:28 2012 -0700
 
 commit bdc48a879a1900138d8caaa8d90fb9fe1e768d1d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 4 17:08:38 2012 -0700
+Date:  Sat Aug 4 17:08:38 2012 -0700
 
     Enlarge glyph_name buffer
 
@@ -820,19 +3649,19 @@ Date:   Sat Aug 4 17:08:38 2012 -0700
 
 commit 25326c2359b0a3e25222b94acd142bc36eff78a4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Aug 4 16:43:18 2012 -0700
+Date:  Sat Aug 4 16:43:18 2012 -0700
 
     Rewrite ARRAY_LENGTH as a template function
 
     Such it wouldn't apply to pointers accidentally.
 
  src/hb-ot-shape-complex-arabic-table.hh |    4 ++--
- src/hb-private.hh                       |    9 ++++++---
+ src/hb-private.hh                      |    9 ++++++---
  2 files changed, 8 insertions(+), 5 deletions(-)
 
 commit 8ba8042821e4581fe4e87419e58c823520441205
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 3 18:54:54 2012 -0700
+Date:  Fri Aug 3 18:54:54 2012 -0700
 
     [Indic] Fix consonant position font lookup logic
 
@@ -844,7 +3673,7 @@ Date:   Fri Aug 3 18:54:54 2012 -0700
 
 commit abd0c05f1f7f0546593bb2f1c4d59db12cb32e46
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 3 18:45:05 2012 -0700
+Date:  Fri Aug 3 18:45:05 2012 -0700
 
     Minor
 
@@ -853,7 +3682,7 @@ Date:   Fri Aug 3 18:45:05 2012 -0700
 
 commit 46ee108ef80f5d4675899862698a8c34d8fcfab5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 3 18:21:13 2012 -0700
+Date:  Fri Aug 3 18:21:13 2012 -0700
 
     Fix leak
 
@@ -862,7 +3691,7 @@ Date:   Fri Aug 3 18:21:13 2012 -0700
 
 commit 71baea0062da4d7f143d62da38492a0813814e49
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 3 17:40:07 2012 -0700
+Date:  Fri Aug 3 17:40:07 2012 -0700
 
     [OT] Use general-category, not GDEF class, to decide to zero mark
     advances
@@ -874,48 +3703,48 @@ Date:   Fri Aug 3 17:40:07 2012 -0700
     is being
     replaced by proper fallback mark positioning soon.
 
- src/hb-ot-shape.cc |    7 ++-----
+ src/hb-ot-shape.cc |   7 ++-----
  1 files changed, 2 insertions(+), 5 deletions(-)
 
 commit 3a7e137a68ec8f723dc3afa89c918ca2df7ff6bf
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 3 17:23:40 2012 -0700
+Date:  Fri Aug 3 17:23:40 2012 -0700
 
     Dn't use gint
 
  src/hb-glib.cc |    4 ++--
- src/hb-icu.cc  |    2 +-
+ src/hb-icu.cc |    2 +-
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 11b0e20ba42bf0b17133c3e1087732802bb4f230
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 14:21:40 2012 -0400
+Date:  Thu Aug 2 14:21:40 2012 -0400
 
     [Indic] Add per-script configuration tables
 
     This concludes the Indic shape_plan work.  May do for Arabic also...
 
  src/hb-ot-shape-complex-indic-private.hh |   16 +-
- src/hb-ot-shape-complex-indic.cc         |  309
+ src/hb-ot-shape-complex-indic.cc        |  309
  +++++++++++++++---------------
  2 files changed, 159 insertions(+), 166 deletions(-)
 
 commit 85fc6c483f6d734febbe39270e84701a651f01f1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 12:21:44 2012 -0400
+Date:  Thu Aug 2 12:21:44 2012 -0400
 
     [Indic] Move more stuff to the shape_plan
 
     Almost done.  Need to add per-script static tables.
 
  src/hb-ot-shape-complex-indic-machine.rl |    4 +-
- src/hb-ot-shape-complex-indic.cc         |  216
+ src/hb-ot-shape-complex-indic.cc        |  216
  ++++++++++++++++--------------
  2 files changed, 116 insertions(+), 104 deletions(-)
 
 commit 914ffaa40fcca020f65bacdd709421e9047afd83
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 11:03:39 2012 -0400
+Date:  Thu Aug 2 11:03:39 2012 -0400
 
     [Indic] Move more repeated work into shape_plan
 
@@ -925,79 +3754,79 @@ Date:   Thu Aug 2 11:03:39 2012 -0400
 
 commit a8c6da90f4c6e8d27a3a1b758a55476776d9f750
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 10:46:34 2012 -0400
+Date:  Thu Aug 2 10:46:34 2012 -0400
 
     [OT] Add per-complex-shaper shape_plan data
 
     Hookup some Indic data to it.  More to come.
 
- src/hb-ot-shape-complex-arabic.cc  |    2 +
+ src/hb-ot-shape-complex-arabic.cc  |   2 +
  src/hb-ot-shape-complex-indic.cc   |  128
  +++++++++++++++++++++---------------
- src/hb-ot-shape-complex-misc.cc    |    4 +
- src/hb-ot-shape-complex-private.hh |   16 ++++-
- src/hb-ot-shape-private.hh         |    1 +
- src/hb-ot-shape.cc                 |   23 +++++--
+ src/hb-ot-shape-complex-misc.cc    |   4 +
+ src/hb-ot-shape-complex-private.hh |  16 ++++-
+ src/hb-ot-shape-private.hh        |    1 +
+ src/hb-ot-shape.cc                |   23 +++++--
  6 files changed, 113 insertions(+), 61 deletions(-)
 
 commit 8bb5deba9630d35878eb6edb4643ecfabf99f15f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 10:07:58 2012 -0400
+Date:  Thu Aug 2 10:07:58 2012 -0400
 
     [OT] Pipe shape_plan down to pause_callbacks
 
- src/hb-ot-map-private.hh                 |    8 ++--
- src/hb-ot-map.cc                         |   11 +++---
+ src/hb-ot-map-private.hh                |    8 ++--
+ src/hb-ot-map.cc                        |   11 +++---
  src/hb-ot-shape-complex-indic-machine.rl |    4 +-
- src/hb-ot-shape-complex-indic.cc         |   50
+ src/hb-ot-shape-complex-indic.cc        |   50
  ++++++++++++++---------------
- src/hb-ot-shape-private.hh               |    6 +++
- src/hb-ot-shape.cc                       |   28 +++++++++-------
+ src/hb-ot-shape-private.hh              |    6 +++
+ src/hb-ot-shape.cc                      |   28 +++++++++-------
  6 files changed, 57 insertions(+), 50 deletions(-)
 
 commit 3e38c0f2886c38d2f0a9d80a97a36edf2479d2c7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 09:44:18 2012 -0400
+Date:  Thu Aug 2 09:44:18 2012 -0400
 
     More massaging
 
- src/hb-ot-map-private.hh          |   20 ++++++++------------
- src/hb-ot-map.cc                  |   17 ++++++++---------
- src/hb-ot-shape-complex-arabic.cc |    8 ++++----
+ src/hb-ot-map-private.hh         |   20 ++++++++------------
+ src/hb-ot-map.cc                 |   17 ++++++++---------
+ src/hb-ot-shape-complex-arabic.cc |   8 ++++----
  src/hb-ot-shape-complex-indic.cc  |   18 +++++++-----------
  4 files changed, 27 insertions(+), 36 deletions(-)
 
 commit 16c6a27b4bffc19026944c7bea9cf0a3a8ff1d8f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 09:38:28 2012 -0400
+Date:  Thu Aug 2 09:38:28 2012 -0400
 
     [OT] Port complex_shaper to planner/plan
 
- src/hb-ot-shape-complex-arabic.cc  |   17 ++++++++---------
- src/hb-ot-shape-complex-indic.cc   |   19 ++++++++-----------
- src/hb-ot-shape-complex-misc.cc    |   20 ++++++++------------
- src/hb-ot-shape-complex-private.hh |   32
+ src/hb-ot-shape-complex-arabic.cc  |  17 ++++++++---------
+ src/hb-ot-shape-complex-indic.cc   |  19 ++++++++-----------
+ src/hb-ot-shape-complex-misc.cc    |  20 ++++++++------------
+ src/hb-ot-shape-complex-private.hh |  32
  +++++++++++---------------------
- src/hb-ot-shape-private.hh         |   14 +++++++++++---
- src/hb-ot-shape.cc                 |    9 +++++----
+ src/hb-ot-shape-private.hh        |   14 +++++++++++---
+ src/hb-ot-shape.cc                |    9 +++++----
  6 files changed, 51 insertions(+), 60 deletions(-)
 
 commit 5393e3a62ba09fd7bcf3767b36225c8f49badb9d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 09:24:35 2012 -0400
+Date:  Thu Aug 2 09:24:35 2012 -0400
 
     [OT] Minor refactoring
 
- src/hb-ot-map.cc           |    4 ----
- src/hb-ot-shape-private.hh |   26 ++++++++++++++++++++++++++
- src/hb-ot-shape.cc         |   26 ++------------------------
- src/hb-shape-plan.cc       |    2 ++
- src/hb-shape.cc            |    2 --
+ src/hb-ot-map.cc          |    4 ----
+ src/hb-ot-shape-private.hh |  26 ++++++++++++++++++++++++++
+ src/hb-ot-shape.cc        |   26 ++------------------------
+ src/hb-shape-plan.cc      |    2 ++
+ src/hb-shape.cc           |    2 --
  5 files changed, 30 insertions(+), 30 deletions(-)
 
 commit 24eacf17c801c66a2d466e8ae02b73f501a26b25
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 08:42:11 2012 -0400
+Date:  Thu Aug 2 08:42:11 2012 -0400
 
     [Indic] Move consonant-position-setting into initial_reordering()
 
@@ -1007,7 +3836,7 @@ Date:   Thu Aug 2 08:42:11 2012 -0400
 
 commit afbcc24be01a64bdb5c05c63880269145fa1d3c8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 08:36:40 2012 -0400
+Date:  Thu Aug 2 08:36:40 2012 -0400
 
     [GSUB] Wire the font, not just the face, down to substitute()
 
@@ -1018,33 +3847,33 @@ Date:   Thu Aug 2 08:36:40 2012 -0400
 
  src/hb-ot-layout-gsub-table.hh       |   13 +++++--------
  src/hb-ot-layout-gsubgpos-private.hh |    7 ++-----
- src/hb-ot-layout-private.hh          |    6 +++---
- src/hb-ot-layout.cc                  |   18 +++++++++---------
- src/hb-ot-map-private.hh             |   15 ++++++---------
- src/hb-ot-map.cc                     |    8 ++++----
+ src/hb-ot-layout-private.hh         |    6 +++---
+ src/hb-ot-layout.cc                 |   18 +++++++++---------
+ src/hb-ot-map-private.hh            |   15 ++++++---------
+ src/hb-ot-map.cc                    |    8 ++++----
  src/hb-ot-shape-complex-indic.cc     |    8 ++++----
- src/hb-ot-shape.cc                   |    6 +++---
+ src/hb-ot-shape.cc                  |    6 +++---
  8 files changed, 36 insertions(+), 45 deletions(-)
 
 commit b0e6a26a10ccca70ebc88a9e158a89ccfab0add5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 08:11:14 2012 -0400
+Date:  Thu Aug 2 08:11:14 2012 -0400
 
     [OT] Hide some API
 
     It was impossible to meaningfully use them from the outside these
     days.
 
- src/hb-ot-layout-private.hh |   40
+ src/hb-ot-layout-private.hh |  40
  ++++++++++++++++++++++++++++++++--------
- src/hb-ot-layout.cc         |   20 --------------------
- src/hb-ot-layout.h          |   34 ----------------------------------
- src/hb-ot-map.cc            |    8 ++++----
+ src/hb-ot-layout.cc        |   20 --------------------
+ src/hb-ot-layout.h         |   34 ----------------------------------
+ src/hb-ot-map.cc           |    8 ++++----
  4 files changed, 36 insertions(+), 66 deletions(-)
 
 commit 305246744ed178f116e01498b7f9d1af6950ca30
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 08:08:04 2012 -0400
+Date:  Thu Aug 2 08:08:04 2012 -0400
 
     Minor
 
@@ -1053,7 +3882,7 @@ Date:   Thu Aug 2 08:08:04 2012 -0400
 
 commit 8ef3d53255ae9fbb0e46c22909e50009d1e7eeb0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 07:53:18 2012 -0400
+Date:  Thu Aug 2 07:53:18 2012 -0400
 
     [Indic] More refactoring of consonant position peeking in the font
 
@@ -1065,7 +3894,7 @@ Date:   Thu Aug 2 07:53:18 2012 -0400
 
 commit 3eb6f81fd3f1e56679eec10d08f5e2303121753f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 07:37:46 2012 -0400
+Date:  Thu Aug 2 07:37:46 2012 -0400
 
     [Indic] Refactor
 
@@ -1074,13 +3903,13 @@ Date:   Thu Aug 2 07:37:46 2012 -0400
 
  src/hb-ot-shape-complex-indic-private.hh |  210
  +++++++++++++++++++++++++++
- src/hb-ot-shape-complex-indic.cc         |  227
+ src/hb-ot-shape-complex-indic.cc        |  227
  +----------------------------
  2 files changed, 218 insertions(+), 219 deletions(-)
 
 commit 3614ba242fc7d338761acdda365a134706035b6d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 07:13:55 2012 -0400
+Date:  Thu Aug 2 07:13:55 2012 -0400
 
     [Indic] Rename
 
@@ -1090,54 +3919,54 @@ Date:   Thu Aug 2 07:13:55 2012 -0400
 
 commit 610e5e8f713bb2a68939b72cb2b801a7aaede4f9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 05:27:46 2012 -0400
+Date:  Thu Aug 2 05:27:46 2012 -0400
 
     [Indic] Streamline feature would_apply()
 
     Comes with some 10% speedup for Devanagari even!
 
- src/hb-ot-map-private.hh         |   85
+ src/hb-ot-map-private.hh        |   85
  +++++++++++++++++++++++--------------
- src/hb-ot-map.cc                 |   18 ++++----
+ src/hb-ot-map.cc                |   18 ++++----
  src/hb-ot-shape-complex-indic.cc |   85
  +++++++++++++++++++++----------------
  3 files changed, 110 insertions(+), 78 deletions(-)
 
 commit 1d002048d5afcd45abbb09fdf0419f13b2e2265c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 05:01:11 2012 -0400
+Date:  Thu Aug 2 05:01:11 2012 -0400
 
     [Indic] Minor
 
  src/hb-ot-shape-complex-indic-private.hh |   16 -------
- src/hb-ot-shape-complex-indic.cc         |   64
+ src/hb-ot-shape-complex-indic.cc        |   64
  ++++++++++++++++++++----------
  2 files changed, 43 insertions(+), 37 deletions(-)
 
 commit 6f7611375521c6d285a9aa763f2ea5cb44cd0d39
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 04:00:31 2012 -0400
+Date:  Thu Aug 2 04:00:31 2012 -0400
 
     [GSUB/GPOS] Check array size before accessing digests
 
- src/hb-ot-layout-private.hh |    3 +++
- src/hb-ot-layout.cc         |   32 ++++++++++++++++----------------
+ src/hb-ot-layout-private.hh |   3 +++
+ src/hb-ot-layout.cc        |   32 ++++++++++++++++----------------
  2 files changed, 19 insertions(+), 16 deletions(-)
 
 commit 22148b8c4af3ed296d96e969cdd47bac97b32307
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 03:51:51 2012 -0400
+Date:  Thu Aug 2 03:51:51 2012 -0400
 
     Use Coverage digests in would_apply
 
  src/hb-ot-layout-gsub-table.hh       |    1 +
  src/hb-ot-layout-gsubgpos-private.hh |    6 +++++-
- src/hb-ot-layout.cc                  |    4 ++--
+ src/hb-ot-layout.cc                 |    4 ++--
  3 files changed, 8 insertions(+), 3 deletions(-)
 
 commit 6c459c8fef85bc44f45d7b58c28a34abfb2c33fc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Aug 2 03:45:53 2012 -0400
+Date:  Thu Aug 2 03:45:53 2012 -0400
 
     Minor
 
@@ -1148,7 +3977,7 @@ Date:   Thu Aug 2 03:45:53 2012 -0400
 
 commit e2b8d75fa6e847ecf5c040f4e1e16a565c5d8aaf
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 22:17:48 2012 -0400
+Date:  Wed Aug 1 22:17:48 2012 -0400
 
     Use wider set digests on 64-bit archs
 
@@ -1157,7 +3986,7 @@ Date:   Wed Aug 1 22:17:48 2012 -0400
 
 commit 0120ce9679aab3ac936aeb18f6709529eef000a4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 21:56:35 2012 -0400
+Date:  Wed Aug 1 21:56:35 2012 -0400
 
     [GSUB/GPOS] Remove unused get_coverage() methods
 
@@ -1167,7 +3996,7 @@ Date:   Wed Aug 1 21:56:35 2012 -0400
 
 commit 1336ecdf8e4e9879b96b26ecfbf5c9ba6c49e2b9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 21:46:36 2012 -0400
+Date:  Wed Aug 1 21:46:36 2012 -0400
 
     [GSUB/GPOS] Use Coverage digests as gatekeeper
 
@@ -1182,13 +4011,13 @@ Date:   Wed Aug 1 21:46:36 2012 -0400
  src/hb-ot-layout-gsub-table.hh       |   35
  +++++++++++----------------------
  src/hb-ot-layout-gsubgpos-private.hh |    8 +++++-
- src/hb-ot-layout-private.hh          |    4 +++
- src/hb-ot-layout.cc                  |   29 ++++++++++++++++++++++++---
+ src/hb-ot-layout-private.hh         |    4 +++
+ src/hb-ot-layout.cc                 |   29 ++++++++++++++++++++++++---
  5 files changed, 56 insertions(+), 50 deletions(-)
 
 commit a878c58a8fc1500986d713b2bcedfeb90a0087b0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 21:18:54 2012 -0400
+Date:  Wed Aug 1 21:18:54 2012 -0400
 
     [GSUB/GPOS] Add add_coverage()
 
@@ -1198,7 +4027,7 @@ Date:   Wed Aug 1 21:18:54 2012 -0400
 
 commit 60a3035ac5ec8227e4cc0e6708732bb139c9e0b8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 21:06:27 2012 -0400
+Date:  Wed Aug 1 21:06:27 2012 -0400
 
     Add hb_set_digest_t
 
@@ -1210,92 +4039,92 @@ Date:   Wed Aug 1 21:06:27 2012 -0400
 
 commit c8accf1dd2d92cc4f714393eb0ea46f69bb182a6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 21:05:57 2012 -0400
+Date:  Wed Aug 1 21:05:57 2012 -0400
 
     [OT] Templatize Coverage::add_coverage()
 
- src/hb-ot-layout-common-private.hh |   12 ++++++++----
+ src/hb-ot-layout-common-private.hh |  12 ++++++++----
  1 files changed, 8 insertions(+), 4 deletions(-)
 
 commit 8fbfda920e0b3bb4ab7afb732826026964b79be9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 19:03:46 2012 -0400
+Date:  Wed Aug 1 19:03:46 2012 -0400
 
     Inline font getters
 
- src/hb-fallback-shape.cc          |   21 ++--
- src/hb-font-private.hh            |  204
+ src/hb-fallback-shape.cc         |   21 ++--
+ src/hb-font-private.hh                   |  204
  +++++++++++++++++++++++++++++++++++++
- src/hb-font.cc                    |  129 ++++--------------------
- src/hb-graphite2.cc               |    6 +-
- src/hb-old.cc                     |   10 +-
- src/hb-ot-layout-gdef-table.hh    |    2 +-
- src/hb-ot-layout-gpos-table.hh    |    2 +-
- src/hb-ot-shape-complex-arabic.cc |    4 +-
- src/hb-ot-shape-complex-indic.cc  |    6 +-
- src/hb-ot-shape-normalize.cc      |   12 +-
- src/hb-ot-shape.cc                |   47 ++++-----
+ src/hb-font.cc                           |  129 ++++--------------------
+ src/hb-graphite2.cc              |    6 +-
+ src/hb-old.cc                    |   10 +-
+ src/hb-ot-layout-gdef-table.hh    |   2 +-
+ src/hb-ot-layout-gpos-table.hh    |   2 +-
+ src/hb-ot-shape-complex-arabic.cc |   4 +-
+ src/hb-ot-shape-complex-indic.cc  |   6 +-
+ src/hb-ot-shape-normalize.cc     |   12 +-
+ src/hb-ot-shape.cc               |   47 ++++-----
  11 files changed, 277 insertions(+), 166 deletions(-)
 
 commit 6adf417bc15d4524e280b284e3accd1ae647662e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 18:07:42 2012 -0400
+Date:  Wed Aug 1 18:07:42 2012 -0400
 
     Use a lookup table for modified_combining_class
 
  src/hb-unicode-private.hh |   10 ++-
- src/hb-unicode.cc         |  213
+ src/hb-unicode.cc        |  213
  +++++++++++++++++++++++++++++++--------------
- src/hb-unicode.h          |    4 +
+ src/hb-unicode.h         |    4 +
  3 files changed, 157 insertions(+), 70 deletions(-)
 
 commit 208f70f0553d73d2908b21b9552298029482a8b9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 17:13:10 2012 -0400
+Date:  Wed Aug 1 17:13:10 2012 -0400
 
     Inline Unicode callbacks internally
 
- src/hb-buffer.cc                |    2 +-
- src/hb-fallback-shape.cc        |    2 +-
- src/hb-old.cc                   |    2 +-
+ src/hb-buffer.cc               |    2 +-
+ src/hb-fallback-shape.cc       |    2 +-
+ src/hb-old.cc                  |    2 +-
  src/hb-ot-shape-complex-misc.cc |    2 +-
- src/hb-ot-shape-normalize.cc    |   13 ++---
- src/hb-ot-shape-private.hh      |    6 +-
- src/hb-ot-shape.cc              |    4 +-
- src/hb-unicode-private.hh       |  112
+ src/hb-ot-shape-normalize.cc   |   13 ++---
+ src/hb-ot-shape-private.hh     |    6 +-
+ src/hb-ot-shape.cc             |    4 +-
+ src/hb-unicode-private.hh      |  112
  +++++++++++++++++++-------------------
- src/hb-unicode.cc               |    5 +-
+ src/hb-unicode.cc              |    5 +-
  9 files changed, 73 insertions(+), 75 deletions(-)
 
 commit 7470315a3e782aa6192bbe64f7a3944266fb1521
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 17:01:59 2012 -0400
+Date:  Wed Aug 1 17:01:59 2012 -0400
 
     Move unicode accessors around
 
  src/hb-unicode-private.hh |   73
  ++++++++++++++++++++++++++++++++++++++++++++-
- src/hb-unicode.cc         |   65 ++++------------------------------------
+ src/hb-unicode.cc        |   65 ++++------------------------------------
  2 files changed, 78 insertions(+), 60 deletions(-)
 
 commit 21fdcee00125b6e1c09f0bed3064d16ccd3a7a5d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 16:23:44 2012 -0400
+Date:  Wed Aug 1 16:23:44 2012 -0400
 
     Add hb_unicode_combining_class_t
 
- src/hb-common.h           |   38 +-------------
- src/hb-glib.cc            |    4 +-
- src/hb-icu.cc             |    4 +-
- src/hb-unicode-private.hh |    2 +-
- src/hb-unicode.cc         |   11 ++--
- src/hb-unicode.h          |  124
+ src/hb-common.h          |   38 +-------------
+ src/hb-glib.cc                   |    4 +-
+ src/hb-icu.cc            |    4 +-
+ src/hb-unicode-private.hh |   2 +-
+ src/hb-unicode.cc        |   11 ++--
+ src/hb-unicode.h         |  124
  ++++++++++++++++++++++++++++++++++++++++++++-
  6 files changed, 134 insertions(+), 49 deletions(-)
 
 commit 84186a64004e5dcd2ce98b564d0e0a09aa5d68b2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 13:32:39 2012 -0400
+Date:  Wed Aug 1 13:32:39 2012 -0400
 
     Add commentary on the compatibility decomposition in the normalizer
 
@@ -1304,20 +4133,20 @@ Date:   Wed Aug 1 13:32:39 2012 -0400
 
 commit 0834d952017a04c6f4599e574cb75ecf3ca27d3b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 00:21:09 2012 -0400
+Date:  Wed Aug 1 00:21:09 2012 -0400
 
     [hb-old] Adjust mark positioning parameters
 
     Fallback mark positioning works now...  With hb-ft and hb-view /
     hb-shape at least.
 
- src/hb-old.cc                  |   10 +++++-----
+ src/hb-old.cc                 |   10 +++++-----
  src/hb-old/harfbuzz-shaper.cpp |    1 +
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 4ca743dfb8e09f9fa525061c7f1144d55f72effb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Aug 1 00:03:41 2012 -0400
+Date:  Wed Aug 1 00:03:41 2012 -0400
 
     [old] Implement fontMetrics
 
@@ -1326,7 +4155,7 @@ Date:   Wed Aug 1 00:03:41 2012 -0400
 
 commit 1e7d860613032e40a3f90e2caa2ee5ac44ab8c8c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 23:41:06 2012 -0400
+Date:  Tue Jul 31 23:41:06 2012 -0400
 
     [GPOS] Adjust mark advance-width zeroing logic
 
@@ -1338,54 +4167,54 @@ Date:   Tue Jul 31 23:41:06 2012 -0400
     Fixes regression with Tibetan, where the font has GPOS, and marks a
     glyph as mark where it shouldn't get zero advance.
 
- src/hb-ot-layout-gpos-table.hh     |   14 ++++++++------
- src/hb-ot-layout.cc                |    4 ++--
- src/hb-ot-layout.h                 |    3 ++-
- src/hb-ot-shape-complex-arabic.cc  |    2 +-
- src/hb-ot-shape-complex-indic.cc   |    2 +-
- src/hb-ot-shape-complex-misc.cc    |    4 ++--
- src/hb-ot-shape-complex-private.hh |    2 +-
- src/hb-ot-shape.cc                 |    6 ++----
+ src/hb-ot-layout-gpos-table.hh     |  14 ++++++++------
+ src/hb-ot-layout.cc               |    4 ++--
+ src/hb-ot-layout.h                |    3 ++-
+ src/hb-ot-shape-complex-arabic.cc  |   2 +-
+ src/hb-ot-shape-complex-indic.cc   |   2 +-
+ src/hb-ot-shape-complex-misc.cc    |   4 ++--
+ src/hb-ot-shape-complex-private.hh |   2 +-
+ src/hb-ot-shape.cc                |    6 ++----
  8 files changed, 19 insertions(+), 18 deletions(-)
 
 commit a8842e4a448efb30f3f2f3c628d6dc4824829726
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 23:10:11 2012 -0400
+Date:  Tue Jul 31 23:10:11 2012 -0400
 
     Remove some TODO items
 
- TODO            |   27 ---------------------------
+ TODO           |   27 ---------------------------
  src/hb-shape.cc |    2 ++
  2 files changed, 2 insertions(+), 27 deletions(-)
 
 commit 2bc3b9a616cedbc56ff4a915f9e3439ff3a6bf13
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 23:08:25 2012 -0400
+Date:  Tue Jul 31 23:08:25 2012 -0400
 
     [OT] Zero mark advances if the shaper desires so
 
     Enabled for all shapers except for Indic.
 
- src/hb-ot-shape-complex-arabic.cc  |    1 +
- src/hb-ot-shape-complex-indic.cc   |    1 +
- src/hb-ot-shape-complex-misc.cc    |    2 ++
- src/hb-ot-shape-complex-private.hh |    2 ++
- src/hb-ot-shape.cc                 |   15 +++++++++++++++
+ src/hb-ot-shape-complex-arabic.cc  |   1 +
+ src/hb-ot-shape-complex-indic.cc   |   1 +
+ src/hb-ot-shape-complex-misc.cc    |   2 ++
+ src/hb-ot-shape-complex-private.hh |   2 ++
+ src/hb-ot-shape.cc                |   15 +++++++++++++++
  5 files changed, 21 insertions(+), 0 deletions(-)
 
 commit 5fecd8b0355894ceda14b3d3c654f20c3d5e77f4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 22:48:38 2012 -0400
+Date:  Tue Jul 31 22:48:38 2012 -0400
 
     [OT] Synthesize glyph classes
 
- TODO               |    2 --
- src/hb-ot-shape.cc |   20 ++++++++++++++++++--
+ TODO              |    2 --
+ src/hb-ot-shape.cc |  20 ++++++++++++++++++--
  2 files changed, 18 insertions(+), 4 deletions(-)
 
 commit 03b09214c073ce37eeb8af5218942c85b2d393df
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 22:43:58 2012 -0400
+Date:  Tue Jul 31 22:43:58 2012 -0400
 
     [GSUB] Minor
 
@@ -1394,7 +4223,7 @@ Date:   Tue Jul 31 22:43:58 2012 -0400
 
 commit f0fc1df8fc949739b68d55948741016081b69c3a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 22:43:32 2012 -0400
+Date:  Tue Jul 31 22:43:32 2012 -0400
 
     [hb-old] Implement getGlyphMetrics()
 
@@ -1405,28 +4234,28 @@ Date:   Tue Jul 31 22:43:32 2012 -0400
 
 commit 378d279bbf692195c4654e312dae854ab3be04cf
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 21:36:16 2012 -0400
+Date:  Tue Jul 31 21:36:16 2012 -0400
 
     Implement Unicode compatibility decompositions
 
     Based on patch from Philip Withnall.
     https://bugs.freedesktop.org/show_bug.cgi?id=41095
 
- src/hb-glib.cc               |   30 +++++++++++++++++++++++
- src/hb-icu.cc                |   36 +++++++++++++++++++++++++++-
+ src/hb-glib.cc                      |   30 +++++++++++++++++++++++
+ src/hb-icu.cc               |   36 +++++++++++++++++++++++++++-
  src/hb-ot-shape-normalize.cc |   53
  +++++++++++++++++++++++++++--------------
  src/hb-unicode-private.hh    |    1 +
- src/hb-unicode.cc            |   27 ++++++++++++++++++++-
- src/hb-unicode.h             |   37 ++++++++++++++++++++++++++++-
- test/api/hb-test.h           |    1 +
+ src/hb-unicode.cc           |   27 ++++++++++++++++++++-
+ src/hb-unicode.h            |   37 ++++++++++++++++++++++++++++-
+ test/api/hb-test.h          |    1 +
  test/api/test-unicode.c      |   50
  +++++++++++++++++++++++++++++++++++++++
  8 files changed, 214 insertions(+), 21 deletions(-)
 
 commit 321ec29cc270e7e66a529696b70b2caac553c95f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 21:10:16 2012 -0400
+Date:  Tue Jul 31 21:10:16 2012 -0400
 
     Remove unused function
 
@@ -1435,17 +4264,17 @@ Date:   Tue Jul 31 21:10:16 2012 -0400
 
 commit 69cc492dc120847ed00cae65ec958593ebf550c5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 31 14:51:36 2012 -0400
+Date:  Tue Jul 31 14:51:36 2012 -0400
 
     [buffer] Minor
 
  src/hb-buffer-private.hh |    3 ++-
- src/hb-buffer.cc         |   24 ++++++++++++------------
+ src/hb-buffer.cc        |   24 ++++++++++++------------
  2 files changed, 14 insertions(+), 13 deletions(-)
 
 commit 693918ef8541014a5ef7dfb91c6ea0ae36d9c368
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 21:08:51 2012 -0400
+Date:  Mon Jul 30 21:08:51 2012 -0400
 
     [OT] Streamline complex shaper enumeration
 
@@ -1457,25 +4286,25 @@ Date:   Mon Jul 30 21:08:51 2012 -0400
  src/hb-ot-shape-complex-private.hh   |  179
  ++++++++++------------------------
  src/hb-ot-shape-normalize-private.hh |    4 +-
- src/hb-ot-shape-private.hh           |    2 +-
- src/hb-ot-shape.cc                   |   16 ++-
+ src/hb-ot-shape-private.hh          |    2 +-
+ src/hb-ot-shape.cc                  |   16 ++-
  7 files changed, 143 insertions(+), 209 deletions(-)
 
 commit c2e42c3db691515f3a458eb4c71fe1e6439d5620
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 19:54:50 2012 -0400
+Date:  Mon Jul 30 19:54:50 2012 -0400
 
     Minor
 
  src/hb-ot-layout-gpos-table.hh       |    2 +-
  src/hb-ot-layout-gsub-table.hh       |    4 ++--
  src/hb-ot-layout-gsubgpos-private.hh |    8 ++++----
- src/hb-ot-layout-private.hh          |    4 ++--
+ src/hb-ot-layout-private.hh         |    4 ++--
  4 files changed, 9 insertions(+), 9 deletions(-)
 
 commit 03f67bc012f42131b36083a23efc78e1b04b828c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 19:47:53 2012 -0400
+Date:  Mon Jul 30 19:47:53 2012 -0400
 
     More refactoring glyph class access
 
@@ -1487,7 +4316,7 @@ Date:   Mon Jul 30 19:47:53 2012 -0400
 
 commit 300c7307eb7943ba7416b672345506be1e27c6ba
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 19:37:44 2012 -0400
+Date:  Mon Jul 30 19:37:44 2012 -0400
 
     [OT] Don't crash if no GDEF available
 
@@ -1496,16 +4325,16 @@ Date:   Mon Jul 30 19:37:44 2012 -0400
 
 commit 3dcbdc2125c04c173f29f04922fc031929893f4e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 19:31:17 2012 -0400
+Date:  Mon Jul 30 19:31:17 2012 -0400
 
     Minor
 
- src/hb-ot-layout.cc |   15 +++++----------
+ src/hb-ot-layout.cc |  15 +++++----------
  1 files changed, 5 insertions(+), 10 deletions(-)
 
 commit 05bd1b63426e07d1df7a1b40bf845dc94ab995a8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 19:30:01 2012 -0400
+Date:  Mon Jul 30 19:30:01 2012 -0400
 
     [GSUB/GPOS] Move glyph props matching around
 
@@ -1513,16 +4342,16 @@ Date:   Mon Jul 30 19:30:01 2012 -0400
  src/hb-ot-layout-gsub-table.hh       |   18 ++++--
  src/hb-ot-layout-gsubgpos-private.hh |   99
  ++++++++++++++++++++++++++++----
- src/hb-ot-layout-private.hh          |   12 ----
- src/hb-ot-layout.cc                  |  104
+ src/hb-ot-layout-private.hh         |   12 ----
+ src/hb-ot-layout.cc                 |  104
  +++-------------------------------
- src/hb-ot-layout.h                   |   12 +++-
- src/hb-ot-shape.cc                   |   10 ++--
+ src/hb-ot-layout.h                  |   12 +++-
+ src/hb-ot-shape.cc                  |   10 ++--
  7 files changed, 127 insertions(+), 139 deletions(-)
 
 commit 2fca1426ca06cabbe8f027f2dc9dee9c27560c76
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 18:46:41 2012 -0400
+Date:  Mon Jul 30 18:46:41 2012 -0400
 
     [GSUB] Don't erase glyph classes if GDEF does not have glyph classes
 
@@ -1531,16 +4360,16 @@ Date:   Mon Jul 30 18:46:41 2012 -0400
 
 commit fd42257f8c45ff8e036e1c3eb1a788a101be7ead
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 18:40:27 2012 -0400
+Date:  Mon Jul 30 18:40:27 2012 -0400
 
     Minor
 
- src/hb-ot-layout.cc |   29 +++++------------------------
+ src/hb-ot-layout.cc |  29 +++++------------------------
  1 files changed, 5 insertions(+), 24 deletions(-)
 
 commit 7fbbf86efe675e4c038dfc5985c24bbc544620cd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 18:36:42 2012 -0400
+Date:  Mon Jul 30 18:36:42 2012 -0400
 
     [GSUB] Minor
 
@@ -1550,16 +4379,16 @@ Date:   Mon Jul 30 18:36:42 2012 -0400
 
 commit 713914d3203109a8e9213f5a1d3b384730703ce9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 17:54:38 2012 -0400
+Date:  Mon Jul 30 17:54:38 2012 -0400
 
     [Uniscribe] Clean up a bit
 
- src/hb-uniscribe.cc |   17 +++++------------
+ src/hb-uniscribe.cc |  17 +++++------------
  1 files changed, 5 insertions(+), 12 deletions(-)
 
 commit 301168dae77a63ee25adfb26ce2b54a708f83791
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 17:48:04 2012 -0400
+Date:  Mon Jul 30 17:48:04 2012 -0400
 
     [CoreText] Port to shape_plan infrastructure
 
@@ -1569,7 +4398,7 @@ Date:   Mon Jul 30 17:48:04 2012 -0400
 
 commit 6cdfd14bb19d60ac3d6b20ff611408432254f273
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 17:22:17 2012 -0400
+Date:  Mon Jul 30 17:22:17 2012 -0400
 
     Fix build on Mac
 
@@ -1578,7 +4407,7 @@ Date:   Mon Jul 30 17:22:17 2012 -0400
 
 commit 7e34601dededd521bcef15111e39293df3d0d13d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 14:53:41 2012 -0400
+Date:  Mon Jul 30 14:53:41 2012 -0400
 
     Unbreak Hangul jamo composition
 
@@ -1587,37 +4416,37 @@ Date:   Mon Jul 30 14:53:41 2012 -0400
     copied from Hangul, so had the fully-composed normalization behavior,
     which was unnecessary.  So, fix that too.
 
- src/hb-ot-shape-complex-arabic.cc  |    2 +-
- src/hb-ot-shape-complex-indic.cc   |    4 +---
- src/hb-ot-shape-complex-misc.cc    |   12 +++++++++---
- src/hb-ot-shape-complex-private.hh |    9 ++++-----
- src/hb-ot-shape.cc                 |    4 +++-
+ src/hb-ot-shape-complex-arabic.cc  |   2 +-
+ src/hb-ot-shape-complex-indic.cc   |   4 +---
+ src/hb-ot-shape-complex-misc.cc    |  12 +++++++++---
+ src/hb-ot-shape-complex-private.hh |   9 ++++-----
+ src/hb-ot-shape.cc                |    4 +++-
  5 files changed, 18 insertions(+), 13 deletions(-)
 
 commit 7afb14407e59dfeaa79c33aca1ffa60e7982e349
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 13:54:46 2012 -0400
+Date:  Mon Jul 30 13:54:46 2012 -0400
 
     [Indic] Recategorize Telugu length marks
 
-    Fixes 8 more Telugu tests.  Failures at 15 (0.00154548%).
+    Fixes 8 more Telugu tests. Failures at 15 (0.00154548%).
 
- src/hb-unicode.cc |    8 ++++++++
- src/indic.cc      |   11 ++++++++---
+ src/hb-unicode.cc |   8 ++++++++
+ src/indic.cc     |   11 ++++++++---
  2 files changed, 16 insertions(+), 3 deletions(-)
 
 commit 70b3dc327232b20051b36397aa2b196ab8c62397
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 12:40:18 2012 -0400
+Date:  Mon Jul 30 12:40:18 2012 -0400
 
     Add Hebrew test
 
- .../script-hebrew/misc/diacritics.txt              |    1 +
+ .../script-hebrew/misc/diacritics.txt             |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit f2377155e35c15919af4d7db21b6edc6783146b6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 10:50:57 2012 -0400
+Date:  Mon Jul 30 10:50:57 2012 -0400
 
     [hb-old] Fix misc leaks
 
@@ -1627,12 +4456,12 @@ Date:   Mon Jul 30 10:50:57 2012 -0400
     Author: Behdad Esfahbod <behdad@behdad.org>
     Date:   Mon Jul 30 10:50:22 2012 -0400
 
-        Fix misc leaks
+       Fix misc leaks
 
-        https://bugs.freedesktop.org/show_bug.cgi?id=31992
-        https://bugs.freedesktop.org/show_bug.cgi?id=31993
-        https://bugs.freedesktop.org/show_bug.cgi?id=31994
-        https://bugs.freedesktop.org/show_bug.cgi?id=31995
+       https://bugs.freedesktop.org/show_bug.cgi?id=31992
+       https://bugs.freedesktop.org/show_bug.cgi?id=31993
+       https://bugs.freedesktop.org/show_bug.cgi?id=31994
+       https://bugs.freedesktop.org/show_bug.cgi?id=31995
 
  src/hb-old/harfbuzz-arabic.c  |   12 +++++++++---
  src/hb-old/harfbuzz-gpos.c    |    6 +++---
@@ -1642,62 +4471,62 @@ Date:   Mon Jul 30 10:50:57 2012 -0400
 
 commit 3f4764bb56bb7e42ba8859f1905810bd2f998838
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 10:06:42 2012 -0400
+Date:  Mon Jul 30 10:06:42 2012 -0400
 
     Don't lock user_data set during destruction if empty
 
- src/hb-private.hh |    5 +++++
+ src/hb-private.hh |   5 +++++
  1 files changed, 5 insertions(+), 0 deletions(-)
 
 commit 4ba647eecf0f70917ac4229af1f2dd3c62fcb7d5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 09:53:06 2012 -0400
+Date:  Mon Jul 30 09:53:06 2012 -0400
 
     Fix leak
 
- src/hb-ot-shape.cc |    2 ++
+ src/hb-ot-shape.cc |   2 ++
  1 files changed, 2 insertions(+), 0 deletions(-)
 
 commit f860366456d9e59b139a940da6d89c3c4fb9e96e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 02:38:39 2012 -0400
+Date:  Mon Jul 30 02:38:39 2012 -0400
 
     [OT] Gain back some lost speed
 
- src/hb-ot-layout-private.hh        |   27 +++++++++++++++-
- src/hb-ot-layout.cc                |   63
+ src/hb-ot-layout-private.hh       |   27 +++++++++++++++-
+ src/hb-ot-layout.cc               |   63
  ++++++++++++++++++++++++++++++++---
- src/hb-ot-map-private.hh           |   26 +++------------
- src/hb-ot-map.cc                   |   35 ++++++++++++++------
- src/hb-ot-shape-complex-indic.cc   |    2 +-
- src/hb-ot-shape-complex-private.hh |    5 ---
+ src/hb-ot-map-private.hh          |   26 +++------------
+ src/hb-ot-map.cc                  |   35 ++++++++++++++------
+ src/hb-ot-shape-complex-indic.cc   |   2 +-
+ src/hb-ot-shape-complex-private.hh |   5 ---
  6 files changed, 114 insertions(+), 44 deletions(-)
 
 commit 11f4c87d01924cac43bf40044f67838440e19e42
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 02:36:46 2012 -0400
+Date:  Mon Jul 30 02:36:46 2012 -0400
 
     [OT] Remove hb_ot_layout_ensure()
 
     I didn't like it from the beginning.
 
- src/hb-ot-layout.cc |    9 +++++----
- src/hb-ot-layout.h  |    5 -----
+ src/hb-ot-layout.cc |   9 +++++----
+ src/hb-ot-layout.h  |   5 -----
  2 files changed, 5 insertions(+), 9 deletions(-)
 
 commit 578e42182b9b9cf15b4c5426fae36e224160cbd7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 02:35:07 2012 -0400
+Date:  Mon Jul 30 02:35:07 2012 -0400
 
     Minor
 
- src/hb-ot-layout-private.hh |    2 --
- src/hb-ot-layout.cc         |    1 -
+ src/hb-ot-layout-private.hh |   2 --
+ src/hb-ot-layout.cc        |    1 -
  2 files changed, 0 insertions(+), 3 deletions(-)
 
 commit a973b5ce86051e8ef0d20df362db1a50488842ab
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 01:46:34 2012 -0400
+Date:  Mon Jul 30 01:46:34 2012 -0400
 
     [GSUB] Further adjustments to mark-attachment vs ligation interaction
 
@@ -1706,13 +4535,13 @@ Date:   Mon Jul 30 01:46:34 2012 -0400
     since it was ligating consonants, pushing matra out, and then ligating
     with the matra.  Adjust for that.  See comments.
 
- src/hb-ot-layout-gsub-table.hh                     |   11 ++++++++---
- .../indic/script-kannada/misc/misc.txt             |    1 +
+ src/hb-ot-layout-gsub-table.hh                            |   11 ++++++++---
+ .../indic/script-kannada/misc/misc.txt                    |    1 +
  2 files changed, 9 insertions(+), 3 deletions(-)
 
 commit 0aef425e25e2c58445157057f17ef18f695c5240
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 00:55:15 2012 -0400
+Date:  Mon Jul 30 00:55:15 2012 -0400
 
     [GSUB] Minor
 
@@ -1721,7 +4550,7 @@ Date:   Mon Jul 30 00:55:15 2012 -0400
 
 commit d1d69ec52e75a78575b620a1c456d528b6078170
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 00:51:47 2012 -0400
+Date:  Mon Jul 30 00:51:47 2012 -0400
 
     [GSUB] Don't ligate glyphs attached to different components of
     ligatures
@@ -1734,16 +4563,16 @@ Date:   Mon Jul 30 00:51:47 2012 -0400
 
 commit 4751dec8be05883483fd5f6b474ebd22583ae566
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 00:42:07 2012 -0400
+Date:  Mon Jul 30 00:42:07 2012 -0400
 
     Minor
 
- src/hb-ot-layout-private.hh |   20 ++++++++++----------
+ src/hb-ot-layout-private.hh |  20 ++++++++++----------
  1 files changed, 10 insertions(+), 10 deletions(-)
 
 commit f24bcfbed1f3b4f4f6311246bd870f73ad6ba750
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 00:39:00 2012 -0400
+Date:  Mon Jul 30 00:39:00 2012 -0400
 
     Minor
 
@@ -1752,7 +4581,7 @@ Date:   Mon Jul 30 00:39:00 2012 -0400
 
 commit fe20c0f84f5ff518dc471bf22ac5a83ef079eb69
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 30 00:00:59 2012 -0400
+Date:  Mon Jul 30 00:00:59 2012 -0400
 
     [GSUB] Fix mark component stuff when ligatures form ligatures!
 
@@ -1763,24 +4592,24 @@ Date:   Mon Jul 30 00:00:59 2012 -0400
  src/hb-ot-layout-gsub-table.hh       |  117
  ++++++++++++++++++++++------------
  src/hb-ot-layout-gsubgpos-private.hh |    8 --
- src/hb-ot-layout-private.hh          |    8 +--
+ src/hb-ot-layout-private.hh         |    8 +--
  3 files changed, 79 insertions(+), 54 deletions(-)
 
 commit 2ec3ba46a3c24469096e901750e38f6ee555479a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 29 22:02:24 2012 -0400
+Date:  Sun Jul 29 22:02:24 2012 -0400
 
     [GSUB/GPOS] Minor
 
     Start squeezing more out of lig_id/lig_comp.
 
  src/hb-ot-layout-gsub-table.hh |    6 +++---
- src/hb-ot-layout-private.hh    |   35 +++++++++++++++++++++++++++++++----
+ src/hb-ot-layout-private.hh   |   35 +++++++++++++++++++++++++++++++----
  2 files changed, 34 insertions(+), 7 deletions(-)
 
 commit ef6e9cec3399e4f63f4b662abd77cf6d4683e8a3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 29 21:35:22 2012 -0400
+Date:  Sun Jul 29 21:35:22 2012 -0400
 
     Fixup bb0e4ba3e9c5a407fc5d73c914e429d24d336380
 
@@ -1789,7 +4618,7 @@ Date:   Sun Jul 29 21:35:22 2012 -0400
 
 commit cb3d34063154bf164c61eeba41c6166b0bd304fb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 29 20:37:38 2012 -0400
+Date:  Sun Jul 29 20:37:38 2012 -0400
 
     [GSUB] Don't set new lig_id on mark ligatures
 
@@ -1811,18 +4640,18 @@ Date:   Sun Jul 29 20:37:38 2012 -0400
 
 commit 97a201becf936f62046914b568e5763e27ee936e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 29 20:31:36 2012 -0400
+Date:  Sun Jul 29 20:31:36 2012 -0400
 
     Add Arabic tests for mark ligature component attachments
 
- .../script-arabic/misc/diacritics/MANIFEST         |    1 +
- .../misc/diacritics/ligature-components.txt        |   18
+ .../script-arabic/misc/diacritics/MANIFEST        |    1 +
+ .../misc/diacritics/ligature-components.txt       |   18
  ++++++++++++++++++
  2 files changed, 19 insertions(+), 0 deletions(-)
 
 commit a15b70a81a609f024083cb04f9819483f4d5cab7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 29 20:09:22 2012 -0400
+Date:  Sun Jul 29 20:09:22 2012 -0400
 
     [hb-old] Fix cluster formation in RTL
 
@@ -1834,26 +4663,26 @@ Date:   Sun Jul 29 20:09:22 2012 -0400
 
 commit 8a7e70ef65952fc16b8c1d5f1126c94d9d81e755
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 29 19:56:54 2012 -0400
+Date:  Sun Jul 29 19:56:54 2012 -0400
 
     [Minor]
 
- src/test.cc |    2 +-
+ src/test.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit bb0e4ba3e9c5a407fc5d73c914e429d24d336380
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 29 17:34:14 2012 -0400
+Date:  Sun Jul 29 17:34:14 2012 -0400
 
     Minor
 
- src/hb-shape-plan.cc         |    2 +-
+ src/hb-shape-plan.cc        |    2 +-
  src/test-would-substitute.cc |    2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit a00ad60bc0fe74bf0e11d73da563239f3392f351
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 28 21:16:08 2012 -0400
+Date:  Sat Jul 28 21:16:08 2012 -0400
 
     [Uniscribe] Remove hb_uniscribe_font_ensure()
 
@@ -1861,13 +4690,13 @@ Date:   Sat Jul 28 21:16:08 2012 -0400
     it and
     do what we've got to do transparently.
 
- src/hb-uniscribe.cc |    6 +++++-
- src/hb-uniscribe.h  |    4 ----
+ src/hb-uniscribe.cc |   6 +++++-
+ src/hb-uniscribe.h  |   4 ----
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 5d874d566fe5d2cc4cfaf02c79b663d8a626ca1e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 28 21:05:25 2012 -0400
+Date:  Sat Jul 28 21:05:25 2012 -0400
 
     [GPOS] Fix mark-to-mark positioning when one of the marks is
     a ligature
@@ -1877,20 +4706,20 @@ Date:   Sat Jul 28 21:05:25 2012 -0400
     when one of the marks itself is a ligature.  That regressed 26 Tibetan
     tests (up from zero!).  Fix that.  Tibetan back to zero.
 
- src/hb-ot-layout-gpos-table.hh                     |   27
+ src/hb-ot-layout-gpos-table.hh                            |   27
  ++++++++++++++-----
- src/hb-ot-layout-private.hh                        |    5 ++-
- test/shaping/texts/in-tree/shaper-indic/MANIFEST   |    1 +
- .../indic/script-sinhala/misc/MANIFEST             |    1 +
- .../in-tree/shaper-indic/south-asian/MANIFEST      |    1 +
- .../south-asian/script-tibetan/MANIFEST            |    1 +
- .../south-asian/script-tibetan/misc/MANIFEST       |    1 +
- .../south-asian/script-tibetan/misc/misc.txt       |    1 +
+ src/hb-ot-layout-private.hh                       |    5 ++-
+ test/shaping/texts/in-tree/shaper-indic/MANIFEST   |   1 +
+ .../indic/script-sinhala/misc/MANIFEST                    |    1 +
+ .../in-tree/shaper-indic/south-asian/MANIFEST     |    1 +
+ .../south-asian/script-tibetan/MANIFEST           |    1 +
+ .../south-asian/script-tibetan/misc/MANIFEST      |    1 +
+ .../south-asian/script-tibetan/misc/misc.txt      |    1 +
  8 files changed, 29 insertions(+), 9 deletions(-)
 
 commit 338fe662b50f9309bf0050dd99becb644874195b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 28 18:53:01 2012 -0400
+Date:  Sat Jul 28 18:53:01 2012 -0400
 
     [GSUB] Minor
 
@@ -1899,7 +4728,7 @@ Date:   Sat Jul 28 18:53:01 2012 -0400
 
 commit e6f7479fe34fb4a7cada61d84c2ed70d1fd565c8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 28 18:34:58 2012 -0400
+Date:  Sat Jul 28 18:34:58 2012 -0400
 
     [GSUB] Simplify would-apply
 
@@ -1910,18 +4739,18 @@ Date:   Sat Jul 28 18:34:58 2012 -0400
 
 commit dadede012e4841f9fcb70d514fdc752f3ea4663d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 28 18:03:20 2012 -0400
+Date:  Sat Jul 28 18:03:20 2012 -0400
 
     Minor
 
- src/hb-ot-layout-common-private.hh |    7 +++----
- src/hb-ot-layout-gpos-table.hh     |    2 +-
- src/hb-ot-layout-gsub-table.hh     |    2 +-
+ src/hb-ot-layout-common-private.hh |   7 +++----
+ src/hb-ot-layout-gpos-table.hh     |   2 +-
+ src/hb-ot-layout-gsub-table.hh     |   2 +-
  3 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 0b99429ead05ae32b3c210cb499af401b02770a9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 28 17:31:01 2012 -0400
+Date:  Sat Jul 28 17:31:01 2012 -0400
 
     [GSUB/GPOS] Add get_coverage() and use it to speed up main loop
 
@@ -1942,16 +4771,16 @@ Date:   Sat Jul 28 17:31:01 2012 -0400
 
 commit 30ec9002d84e8b49290e782e6192069821ffa942
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 28 17:25:20 2012 -0400
+Date:  Sat Jul 28 17:25:20 2012 -0400
 
     Reject lookups with no subTable
 
- src/hb-ot-layout-common-private.hh |    1 +
+ src/hb-ot-layout-common-private.hh |   1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 0981068b75710397f08e0d2d776a0a2ea68d7117
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 28 17:01:59 2012 -0400
+Date:  Sat Jul 28 17:01:59 2012 -0400
 
     [GSUB/GPOS] Reject Context/ChainContext lookups with zero input
 
@@ -1960,35 +4789,35 @@ Date:   Sat Jul 28 17:01:59 2012 -0400
 
 commit 2f87cebe1062c7007021ebd05c1664e60da80825
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 04:02:38 2012 -0400
+Date:  Fri Jul 27 04:02:38 2012 -0400
 
     Implement shape_plan caching
 
     Should give us some performance boost.
 
- TODO                     |    4 ++
+ TODO                    |    4 ++
  src/hb-buffer-private.hh |   30 ++++++++++++++
  src/hb-font-private.hh   |    6 +++
- src/hb-font.cc           |   15 ++++++-
- src/hb-shape-plan.cc     |  100
+ src/hb-font.cc                  |   15 ++++++-
+ src/hb-shape-plan.cc    |  100
  ++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-shape-plan.h      |    7 +++
- src/hb-shape.cc          |    2 +-
+ src/hb-shape-plan.h     |    7 +++
+ src/hb-shape.cc         |    2 +-
  7 files changed, 162 insertions(+), 2 deletions(-)
 
 commit e9eb9503e97044222f843daacfa47e26e51312b7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 03:16:22 2012 -0400
+Date:  Fri Jul 27 03:16:22 2012 -0400
 
     Add default_shaper_list to shape_plan
 
  src/hb-shape-plan-private.hh |    1 +
- src/hb-shape-plan.cc         |    2 ++
+ src/hb-shape-plan.cc        |    2 ++
  2 files changed, 3 insertions(+), 0 deletions(-)
 
 commit 3b7c4e270694ed962e2a2839e44f2a59c26b326c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 03:12:23 2012 -0400
+Date:  Fri Jul 27 03:12:23 2012 -0400
 
     Don't fail choosing shaper on planning failure
 
@@ -2000,80 +4829,80 @@ Date:   Fri Jul 27 03:12:23 2012 -0400
 
 commit cfe9882610489e1b917e09a74dfbf6bbba2e4a57
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 03:06:30 2012 -0400
+Date:  Fri Jul 27 03:06:30 2012 -0400
 
     Add hb_ot_layout_ensure() and hb_uniscribe_font_ensure()
 
- src/hb-ot-layout.cc      |    7 +++++++
- src/hb-ot-layout.h       |    6 ++++++
- src/hb-shape-plan.cc     |   22 ++--------------------
+ src/hb-ot-layout.cc     |    7 +++++++
+ src/hb-ot-layout.h      |    6 ++++++
+ src/hb-shape-plan.cc    |   22 ++--------------------
  src/hb-shaper-private.hh |   18 ++++++++++++++++++
- src/hb-uniscribe.cc      |   11 +++++++++++
- src/hb-uniscribe.h       |    4 ++++
+ src/hb-uniscribe.cc     |   11 +++++++++++
+ src/hb-uniscribe.h      |    4 ++++
  6 files changed, 48 insertions(+), 20 deletions(-)
 
 commit c5b668fb9239c912d2448280a7176e331ebc9181
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 02:49:39 2012 -0400
+Date:  Fri Jul 27 02:49:39 2012 -0400
 
     Choose one shaper per plan
 
  src/hb-shape-plan-private.hh |    2 +-
- src/hb-shape-plan.cc         |   19 +++++++++----------
+ src/hb-shape-plan.cc        |   19 +++++++++----------
  2 files changed, 10 insertions(+), 11 deletions(-)
 
 commit e82061e8db922f0ddbefd5a184ee2f9f967b9a05
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 02:29:32 2012 -0400
+Date:  Fri Jul 27 02:29:32 2012 -0400
 
     Move ot shaper completely to shape_plan
 
- src/hb-ot-shape-private.hh |    6 --
- src/hb-ot-shape.cc         |  181
+ src/hb-ot-shape-private.hh |   6 --
+ src/hb-ot-shape.cc        |  181
  ++++++++++++++++++++------------------------
- src/hb-uniscribe.cc        |    2 +-
+ src/hb-uniscribe.cc       |    2 +-
  3 files changed, 84 insertions(+), 105 deletions(-)
 
 commit ea278d3895fe0c92801d692cd71d8d9f1de7c048
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 02:12:28 2012 -0400
+Date:  Fri Jul 27 02:12:28 2012 -0400
 
     Partially switch ot shaper to shape_plan
 
- src/hb-buffer-private.hh       |    1 +
- src/hb-buffer.cc               |    1 -
- src/hb-font-private.hh         |    2 --
- src/hb-font.cc                 |   22 ++++++++++++++--------
+ src/hb-buffer-private.hh      |    1 +
+ src/hb-buffer.cc              |    1 -
+ src/hb-font-private.hh                |    2 --
+ src/hb-font.cc                        |   22 ++++++++++++++--------
  src/hb-ot-layout-gpos-table.hh |    2 +-
  src/hb-ot-layout-gsub-table.hh |    4 ++--
- src/hb-ot-layout-private.hh    |    1 +
- src/hb-ot-layout.cc            |    9 ++++++---
- src/hb-ot-shape.cc             |    3 ++-
- src/hb-shape-plan.cc           |   11 +++++++++++
- src/hb-shaper-private.hh       |    3 ++-
+ src/hb-ot-layout-private.hh   |    1 +
+ src/hb-ot-layout.cc           |    9 ++++++---
+ src/hb-ot-shape.cc            |    3 ++-
+ src/hb-shape-plan.cc          |   11 +++++++++++
+ src/hb-shaper-private.hh      |    3 ++-
  11 files changed, 40 insertions(+), 19 deletions(-)
 
 commit b6b7ba1313bf686e6ed567183466104c90504a67
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 01:26:11 2012 -0400
+Date:  Fri Jul 27 01:26:11 2012 -0400
 
     Switch old and uniscribe backends to shape_plan
 
- src/hb-old.cc                 |   80 ++-----------------------
- src/hb-shape.cc               |    5 ++
+ src/hb-old.cc                |   80 ++-----------------------
+ src/hb-shape.cc              |    5 ++
  src/hb-shaper-impl-private.hh |    3 +-
  src/hb-shaper-private.hh      |    4 -
- src/hb-uniscribe.cc           |  130
+ src/hb-uniscribe.cc          |  130
  ++++++++++++-----------------------------
  5 files changed, 48 insertions(+), 174 deletions(-)
 
 commit c32c096a429da3e64896cf42ff5ab8c775d3c2ec
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 27 01:13:53 2012 -0400
+Date:  Fri Jul 27 01:13:53 2012 -0400
 
     Switch to shape_plan
 
-    Not optimized yet.  Eats babies.  And no shaper uses the shape_plan.
+    Not optimized yet. Eats babies.  And no shaper uses the shape_plan.
 
  src/hb-shape-plan.cc |   37 +++++++++++++++++++++++++++++++++++--
  src/hb-shape-plan.h  |    8 ++++++++
@@ -2082,77 +4911,77 @@ Date:   Fri Jul 27 01:13:53 2012 -0400
 
 commit 5b95c148cc485f79fd7018bc4520b4cb5f728a18
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 26 23:46:53 2012 -0400
+Date:  Thu Jul 26 23:46:53 2012 -0400
 
     Start implementing shape_plan
 
  src/hb-fallback-shape.cc     |    4 ++-
  src/hb-font-private.hh       |    4 ++
- src/hb-old.cc                |    4 ++-
- src/hb-ot-shape.cc           |    4 ++-
+ src/hb-old.cc               |    4 ++-
+ src/hb-ot-shape.cc          |    4 ++-
  src/hb-shape-plan-private.hh |    7 ++++
- src/hb-shape-plan.cc         |   76
+ src/hb-shape-plan.cc        |   76
  ++++++++++++++++++++++++++++++++++++++++-
- src/hb-shape.cc              |    4 ++
+ src/hb-shape.cc             |    4 ++
  src/hb-shaper-private.hh     |    4 +-
- src/hb-uniscribe.cc          |    4 ++-
+ src/hb-uniscribe.cc         |    4 ++-
  9 files changed, 103 insertions(+), 8 deletions(-)
 
 commit bd26b4d21f59312805d294f46f15182adbcc47da
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 26 22:05:39 2012 -0400
+Date:  Thu Jul 26 22:05:39 2012 -0400
 
     Minor
 
- src/Makefile.am              |    1 +
+ src/Makefile.am             |    1 +
  src/hb-fallback-shape.cc     |    3 +-
- src/hb-old.cc                |    3 +-
- src/hb-ot-shape.cc           |    3 +-
+ src/hb-old.cc               |    3 +-
+ src/hb-ot-shape.cc          |    3 +-
  src/hb-shape-plan-private.hh |    2 +-
- src/hb-shape-plan.cc         |    2 +
- src/hb-shape.cc              |   98
+ src/hb-shape-plan.cc        |    2 +
+ src/hb-shape.cc             |   98
  ++++----------------------------------
  src/hb-shaper-private.hh     |   16 +++++-
- src/hb-shaper.cc             |  109
+ src/hb-shaper.cc            |  109
  ++++++++++++++++++++++++++++++++++++++++++
- src/hb-uniscribe.cc          |    3 +-
+ src/hb-uniscribe.cc         |    3 +-
  10 files changed, 145 insertions(+), 95 deletions(-)
 
 commit 027857d0412477fb4427dcb8a8c45287c272e143
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 26 17:34:25 2012 -0400
+Date:  Thu Jul 26 17:34:25 2012 -0400
 
     Start adding a unified shaper access infrastructure
 
     Add global shape_plan.  Unused so far.
 
- src/Makefile.am                  |   15 ++-
- src/hb-coretext-private.hh       |   42 ---------
- src/hb-coretext.cc               |    6 +-
+ src/Makefile.am                 |   15 ++-
+ src/hb-coretext-private.hh      |   42 ---------
+ src/hb-coretext.cc              |    6 +-
  src/hb-fallback-shape-private.hh |   41 ---------
- src/hb-fallback-shape.cc         |   62 ++++++++++++-
- src/hb-font-private.hh           |   12 +++
- src/hb-font.cc                   |   15 +++-
- src/hb-graphite2-private.hh      |   42 ---------
- src/hb-old-private.hh            |   40 --------
- src/hb-old.cc                    |  109 +++++++++++++++++-----
- src/hb-ot-shape-private.hh       |    8 --
- src/hb-ot-shape.cc               |   60 ++++++++++++-
- src/hb-shape-plan-private.hh     |   52 +++++++++++
- src/hb-shape-plan.cc             |   85 +++++++++++++++++
- src/hb-shape-plan.h              |   60 ++++++++++++
- src/hb-shape.cc                  |   48 +---------
- src/hb-shaper-impl-private.hh    |   44 +++++++++
- src/hb-shaper-list.hh            |   50 ++++++++++
- src/hb-shaper-private.hh         |   81 +++++++++++++++++
- src/hb-uniscribe-private.hh      |   42 ---------
- src/hb-uniscribe.cc              |  186
+ src/hb-fallback-shape.cc        |   62 ++++++++++++-
+ src/hb-font-private.hh                  |   12 +++
+ src/hb-font.cc                          |   15 +++-
+ src/hb-graphite2-private.hh     |   42 ---------
+ src/hb-old-private.hh           |   40 --------
+ src/hb-old.cc                   |  109 +++++++++++++++++-----
+ src/hb-ot-shape-private.hh      |    8 --
+ src/hb-ot-shape.cc              |   60 ++++++++++++-
+ src/hb-shape-plan-private.hh    |   52 +++++++++++
+ src/hb-shape-plan.cc            |   85 +++++++++++++++++
+ src/hb-shape-plan.h             |   60 ++++++++++++
+ src/hb-shape.cc                 |   48 +---------
+ src/hb-shaper-impl-private.hh   |   44 +++++++++
+ src/hb-shaper-list.hh           |   50 ++++++++++
+ src/hb-shaper-private.hh        |   81 +++++++++++++++++
+ src/hb-uniscribe-private.hh     |   42 ---------
+ src/hb-uniscribe.cc             |  186
  ++++++++++++++++++++++++--------------
  21 files changed, 735 insertions(+), 365 deletions(-)
 
 commit fa2dfcd560444d8c54b6349ee106134d3536f79b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 26 16:06:16 2012 -0400
+Date:  Thu Jul 26 16:06:16 2012 -0400
 
     Fix visibility warnings with MinGW32
 
@@ -2162,7 +4991,7 @@ Date:   Thu Jul 26 16:06:16 2012 -0400
 
 commit ac2085d4b391b0a72473ecac3dd6c22efe66833f
 Author: Jonathan Kew <jfkthame@gmail.com>
-Date:   Thu Jul 26 15:58:45 2012 -0400
+Date:  Thu Jul 26 15:58:45 2012 -0400
 
     [CoreText] Ensure cluster indices in output buffer are non-decreasing.
 
@@ -2173,21 +5002,21 @@ Date:   Thu Jul 26 15:58:45 2012 -0400
     For RTL runs, ensure cluster values are non-increasing (instead of
     non-decreasing).
 
- src/hb-coretext.cc |   37 +++++++++++++++++++++++++++++++++++++
+ src/hb-coretext.cc |  37 +++++++++++++++++++++++++++++++++++++
  1 files changed, 37 insertions(+), 0 deletions(-)
 
 commit 441d3bb7de311d54b9f0a5210344f9a96e97e153
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 26 12:01:12 2012 -0400
+Date:  Thu Jul 26 12:01:12 2012 -0400
 
     Minor
 
- src/hb-coretext.cc |    4 ++--
+ src/hb-coretext.cc |   4 ++--
  1 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 2e7f223054d310695bdb3498b2b2b5d17b6cce78
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 25 19:30:15 2012 -0400
+Date:  Wed Jul 25 19:30:15 2012 -0400
 
     [hb-old] Fix Arabic cursive positioning
 
@@ -2197,19 +5026,19 @@ Date:   Wed Jul 25 19:30:15 2012 -0400
     Author: Behdad Esfahbod <behdad@behdad.org>
     Date:   Wed Jul 25 19:29:16 2012 -0400
 
-        [arabic] Fix Arabic cursive positioning
+       [arabic] Fix Arabic cursive positioning
 
-        This was clearly broken in testing.  Who knows...  Fixes for me.
-        Test with a Nastaleeq font, or with Arabic Typesetting.
+       This was clearly broken in testing.  Who knows...  Fixes for me.
+       Test with a Nastaleeq font, or with Arabic Typesetting.
 
-        Backporting from Chromium.
+       Backporting from Chromium.
 
  src/hb-old/harfbuzz-shaper.cpp |    2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 9550a8c4e8b4e28be60d38c27d59253846ff9569
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 25 19:22:57 2012 -0400
+Date:  Wed Jul 25 19:22:57 2012 -0400
 
     [hb-old] Fixup not-enough-space handling
 
@@ -2218,22 +5047,22 @@ Date:   Wed Jul 25 19:22:57 2012 -0400
 
 commit 91e721ea8693205f4f738bca97a5055ee75cf463
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 25 19:20:34 2012 -0400
+Date:  Wed Jul 25 19:20:34 2012 -0400
 
     [hb-old] Fix clusters
 
     Unlike its "documentation", hb-old's log_clusters are, well, indeed
     logical, not visual.  Fixup.  Adapted / copied from hb-uniscribe.
 
- src/hb-old.cc                |   51
+ src/hb-old.cc               |   51
  ++++++++++++++++++++++++++++++++---------
  src/hb-old/harfbuzz-shaper.h |    1 +
- src/hb-uniscribe.cc          |    5 ++-
+ src/hb-uniscribe.cc         |    5 ++-
  3 files changed, 44 insertions(+), 13 deletions(-)
 
 commit a3313e54008167e415b72c780ca7b9cda958d07e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 25 18:37:51 2012 -0400
+Date:  Wed Jul 25 18:37:51 2012 -0400
 
     [GPOS] Fix MarkMarkPos applied to results of MultipleSubst
 
@@ -2244,73 +5073,73 @@ Date:   Wed Jul 25 18:37:51 2012 -0400
     in Amiri.
 
  src/hb-ot-layout-gpos-table.hh |   10 +++++-----
- src/hb-ot-layout-private.hh    |   23 +++++++++++++++++++++--
+ src/hb-ot-layout-private.hh   |   23 +++++++++++++++++++++--
  2 files changed, 26 insertions(+), 7 deletions(-)
 
 commit 35bdab3cf1f0836807160e3ce93766c321b32e8c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 25 11:59:52 2012 -0400
+Date:  Wed Jul 25 11:59:52 2012 -0400
 
     Minor
 
- src/hb-unicode-private.hh |    2 +-
+ src/hb-unicode-private.hh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 8fe4c7405b922cf0f936a46a9baedf4885b05254
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 21:05:12 2012 -0400
+Date:  Tue Jul 24 21:05:12 2012 -0400
 
     [hb-old] Add HarfBuzz.old shaper
 
     Choose using shaper name "old".
 
- configure.ac           |    8 +
- src/Makefile.am        |   14 +-
- src/hb-old-private.hh  |   40 +++
- src/hb-old.cc          |  369 +++++++++++++++++++++++
- src/hb-old/.gitignore  |    7 -
+ configure.ac          |    8 +
+ src/Makefile.am       |   14 +-
+ src/hb-old-private.hh |   40 +++
+ src/hb-old.cc         |  369 +++++++++++++++++++++++
+ src/hb-old/.gitignore |    7 -
  src/hb-old/Makefile.am |    2 +
  src/hb-old/Makefile.in |  762
  ------------------------------------------------
- src/hb-shape.cc        |    8 +-
+ src/hb-shape.cc       |    8 +-
  8 files changed, 436 insertions(+), 774 deletions(-)
 
 commit 5e1987005eb1b9af7a4d3d9f90c5768d8cc80015
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 19:53:55 2012 -0400
+Date:  Tue Jul 24 19:53:55 2012 -0400
 
     [hb-old] Define Unicode funcs in terms of new HarfBuzz
 
- src/hb-old/Makefile.am         |    4 +
- src/hb-old/Makefile.in         |  182
+ src/hb-old/Makefile.am                |    4 +
+ src/hb-old/Makefile.in                |  182
  +++++++++++++++++++++++++++++++++++-----
  src/hb-old/harfbuzz-external.h |  100 +++++++++++++---------
  3 files changed, 224 insertions(+), 62 deletions(-)
 
 commit 4a31166b2853c1ec052844140e114158f47c2355
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 19:49:48 2012 -0400
+Date:  Tue Jul 24 19:49:48 2012 -0400
 
     [hb-old] Shovel out the line-breaking / word-segmentation stuff
 
- src/hb-old/Makefile.am               |   10 +-
- src/hb-old/Makefile.in               |   13 +-
+ src/hb-old/Makefile.am                      |   10 +-
+ src/hb-old/Makefile.in                      |   13 +-
  src/hb-old/harfbuzz-external.h       |   66 ------
- src/hb-old/harfbuzz-indic.cpp        |   26 ---
- src/hb-old/harfbuzz-khmer.c          |   25 --
- src/hb-old/harfbuzz-myanmar.c        |   28 ---
+ src/hb-old/harfbuzz-indic.cpp       |   26 ---
+ src/hb-old/harfbuzz-khmer.c         |   25 --
+ src/hb-old/harfbuzz-myanmar.c       |   28 ---
  src/hb-old/harfbuzz-shaper-private.h |   12 -
  src/hb-old/harfbuzz-shaper.cpp       |  403
  +++-------------------------------
- src/hb-old/harfbuzz-shaper.h         |   31 ---
- src/hb-old/harfbuzz-thai.c           |  111 ----------
- src/hb-old/harfbuzz-tibetan.c        |   26 ---
- src/hb-old/harfbuzz.c                |   32 ---
+ src/hb-old/harfbuzz-shaper.h        |   31 ---
+ src/hb-old/harfbuzz-thai.c          |  111 ----------
+ src/hb-old/harfbuzz-tibetan.c       |   26 ---
+ src/hb-old/harfbuzz.c               |   32 ---
  12 files changed, 33 insertions(+), 750 deletions(-)
 
 commit 0bcbe88cf313117f739b98a11dbe698b75784e9d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 19:38:24 2012 -0400
+Date:  Tue Jul 24 19:38:24 2012 -0400
 
     [hb-old] Add visibility attributes
 
@@ -2320,82 +5149,82 @@ Date:   Tue Jul 24 19:38:24 2012 -0400
 
 commit 6a9d43c3178c920672a84382ca3797e3c478b2b0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 19:21:22 2012 -0400
+Date:  Tue Jul 24 19:21:22 2012 -0400
 
     [hb-old] Remove unused header file
 
- src/hb-old/harfbuzz-shape.h |  199
+ src/hb-old/harfbuzz-shape.h | 199
  -------------------------------------------
  1 files changed, 0 insertions(+), 199 deletions(-)
 
 commit fb47209c5b3aa992faf18d1a3f78b9d7682cf62f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 19:20:19 2012 -0400
+Date:  Tue Jul 24 19:20:19 2012 -0400
 
     [hb-old] Rename hb_buffer_* to HB_Buffer_*
 
- src/hb-old/harfbuzz-buffer.c   |   22 +++++++++++-----------
- src/hb-old/harfbuzz-buffer.h   |    8 ++++----
+ src/hb-old/harfbuzz-buffer.c  |   22 +++++++++++-----------
+ src/hb-old/harfbuzz-buffer.h  |    8 ++++----
  src/hb-old/harfbuzz-shaper.cpp |    8 ++++----
  3 files changed, 19 insertions(+), 19 deletions(-)
 
 commit 1512a7357513b72e2a07dda706a176bb23d694e9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 19:16:56 2012 -0400
+Date:  Tue Jul 24 19:16:56 2012 -0400
 
     [hb-old] Start adding HarfBuzz-old as a new backend
 
- configure.ac                         |    1 +
- src/Makefile.am                      |    5 +
- src/hb-old/.gitignore                |    7 +
- src/hb-old/COPYING                   |   24 +
- src/hb-old/Makefile.am               |   56 +
- src/hb-old/Makefile.in               |  631 ++++
- src/hb-old/README                    |    7 +
- src/hb-old/harfbuzz-arabic.c         | 1144 +++++++
+ configure.ac                        |    1 +
+ src/Makefile.am                     |    5 +
+ src/hb-old/.gitignore               |    7 +
+ src/hb-old/COPYING                  |   24 +
+ src/hb-old/Makefile.am                      |   56 +
+ src/hb-old/Makefile.in                      |  631 ++++
+ src/hb-old/README                   |    7 +
+ src/hb-old/harfbuzz-arabic.c        | 1144 +++++++
  src/hb-old/harfbuzz-buffer-private.h |  107 +
- src/hb-old/harfbuzz-buffer.c         |  383 +++
- src/hb-old/harfbuzz-buffer.h         |  102 +
+ src/hb-old/harfbuzz-buffer.c        |  383 +++
+ src/hb-old/harfbuzz-buffer.h        |  102 +
  src/hb-old/harfbuzz-external.h       |  151 +
  src/hb-old/harfbuzz-gdef-private.h   |  135 +
- src/hb-old/harfbuzz-gdef.c           | 1163 +++++++
- src/hb-old/harfbuzz-gdef.h           |  140 +
- src/hb-old/harfbuzz-global.h         |  118 +
+ src/hb-old/harfbuzz-gdef.c          | 1163 +++++++
+ src/hb-old/harfbuzz-gdef.h          |  140 +
+ src/hb-old/harfbuzz-global.h        |  118 +
  src/hb-old/harfbuzz-gpos-private.h   |  729 ++++
- src/hb-old/harfbuzz-gpos.c           | 6094
+ src/hb-old/harfbuzz-gpos.c          | 6094
  ++++++++++++++++++++++++++++++++++
- src/hb-old/harfbuzz-gpos.h           |  155 +
- src/hb-old/harfbuzz-greek.c          |  447 +++
+ src/hb-old/harfbuzz-gpos.h          |  155 +
+ src/hb-old/harfbuzz-greek.c         |  447 +++
  src/hb-old/harfbuzz-gsub-private.h   |  483 +++
- src/hb-old/harfbuzz-gsub.c           | 4329 ++++++++++++++++++++++++
- src/hb-old/harfbuzz-gsub.h           |  148 +
- src/hb-old/harfbuzz-hangul.c         |  268 ++
- src/hb-old/harfbuzz-hebrew.c         |  187 ++
- src/hb-old/harfbuzz-impl.c           |   84 +
- src/hb-old/harfbuzz-impl.h           |  131 +
- src/hb-old/harfbuzz-indic.cpp        | 1894 +++++++++++
- src/hb-old/harfbuzz-khmer.c          |  667 ++++
- src/hb-old/harfbuzz-myanmar.c        |  539 +++
+ src/hb-old/harfbuzz-gsub.c          | 4329 ++++++++++++++++++++++++
+ src/hb-old/harfbuzz-gsub.h          |  148 +
+ src/hb-old/harfbuzz-hangul.c        |  268 ++
+ src/hb-old/harfbuzz-hebrew.c        |  187 ++
+ src/hb-old/harfbuzz-impl.c          |   84 +
+ src/hb-old/harfbuzz-impl.h          |  131 +
+ src/hb-old/harfbuzz-indic.cpp       | 1894 +++++++++++
+ src/hb-old/harfbuzz-khmer.c         |  667 ++++
+ src/hb-old/harfbuzz-myanmar.c       |  539 +++
  src/hb-old/harfbuzz-open-private.h   |  102 +
- src/hb-old/harfbuzz-open.c           | 1433 ++++++++
- src/hb-old/harfbuzz-open.h           |  288 ++
- src/hb-old/harfbuzz-shape.h          |  199 ++
+ src/hb-old/harfbuzz-open.c          | 1433 ++++++++
+ src/hb-old/harfbuzz-open.h          |  288 ++
+ src/hb-old/harfbuzz-shape.h         |  199 ++
  src/hb-old/harfbuzz-shaper-all.cpp   |   37 +
  src/hb-old/harfbuzz-shaper-private.h |  171 +
  src/hb-old/harfbuzz-shaper.cpp       | 1338 ++++++++
- src/hb-old/harfbuzz-shaper.h         |  294 ++
+ src/hb-old/harfbuzz-shaper.h        |  294 ++
  src/hb-old/harfbuzz-stream-private.h |   81 +
- src/hb-old/harfbuzz-stream.c         |  114 +
- src/hb-old/harfbuzz-stream.h         |   51 +
- src/hb-old/harfbuzz-thai.c           |  111 +
- src/hb-old/harfbuzz-tibetan.c        |  274 ++
- src/hb-old/harfbuzz.c                |   32 +
- src/hb-old/harfbuzz.h                |   38 +
+ src/hb-old/harfbuzz-stream.c        |  114 +
+ src/hb-old/harfbuzz-stream.h        |   51 +
+ src/hb-old/harfbuzz-thai.c          |  111 +
+ src/hb-old/harfbuzz-tibetan.c       |  274 ++
+ src/hb-old/harfbuzz.c               |   32 +
+ src/hb-old/harfbuzz.h               |   38 +
  45 files changed, 24892 insertions(+), 0 deletions(-)
 
 commit 478fd0529b868b22905a9dedf331ac7cc9721723
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 17:09:01 2012 -0400
+Date:  Tue Jul 24 17:09:01 2012 -0400
 
     Minor
 
@@ -2404,18 +5233,18 @@ Date:   Tue Jul 24 17:09:01 2012 -0400
 
 commit 8979a7f6f2b44ade4c0198a31ae08561b35ce009
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 17:03:55 2012 -0400
+Date:  Tue Jul 24 17:03:55 2012 -0400
 
     [Mongolian] Remove Mongolian Vowel Separator at the end of shaping
 
     Results match Uniscribe now.
 
- src/hb-unicode-private.hh |    3 +++
+ src/hb-unicode-private.hh |   3 +++
  1 files changed, 3 insertions(+), 0 deletions(-)
 
 commit aa6d849838d5231465ae1a25a4dd5ea1e9380ff9
 Author: Jonathan Kew <jfkthame@gmail.com>
-Date:   Tue Jul 24 15:52:32 2012 -0400
+Date:  Tue Jul 24 15:52:32 2012 -0400
 
     [CoreText] Add basic Core Text backend for comparison with our
     native shaping
@@ -2426,18 +5255,18 @@ Date:   Tue Jul 24 15:52:32 2012 -0400
     may even be
     out-of-order in the case of reordrant glyphs.
 
- configure.ac               |   12 ++
- src/Makefile.am            |    7 +
- src/hb-coretext-private.hh |   42 ++++++
- src/hb-coretext.cc         |  323
+ configure.ac              |   12 ++
+ src/Makefile.am           |    7 +
+ src/hb-coretext-private.hh |  42 ++++++
+ src/hb-coretext.cc        |  323
  ++++++++++++++++++++++++++++++++++++++++++++
- src/hb-coretext.h          |   43 ++++++
- src/hb-shape.cc            |    6 +
+ src/hb-coretext.h         |   43 ++++++
+ src/hb-shape.cc           |    6 +
  6 files changed, 433 insertions(+), 0 deletions(-)
 
 commit ec8d2494694275dfbbac2dd0d33ca2894b0463d6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 15:40:37 2012 -0400
+Date:  Tue Jul 24 15:40:37 2012 -0400
 
     Make data members of various OpenType structs protected instead
     of private
@@ -2446,23 +5275,23 @@ Date:   Tue Jul 24 15:40:37 2012 -0400
     -Wunused-private-field.
     Based on patch from Jonathan Kew.
 
- src/hb-open-file-private.hh          |    8 +++---
- src/hb-ot-head-table.hh              |    2 +-
- src/hb-ot-hhea-table.hh              |    2 +-
- src/hb-ot-hmtx-table.hh              |    2 +-
+ src/hb-open-file-private.hh         |    8 +++---
+ src/hb-ot-head-table.hh             |    2 +-
+ src/hb-ot-hhea-table.hh             |    2 +-
+ src/hb-ot-hmtx-table.hh             |    2 +-
  src/hb-ot-layout-common-private.hh   |   14 +++++----
  src/hb-ot-layout-gdef-table.hh       |   20 +++++++-------
  src/hb-ot-layout-gpos-table.hh       |   48
  +++++++++++++++++-----------------
  src/hb-ot-layout-gsub-table.hh       |   30 ++++++++++----------
  src/hb-ot-layout-gsubgpos-private.hh |   32 +++++++++++-----------
- src/hb-ot-maxp-table.hh              |    2 +-
- src/hb-ot-name-table.hh              |    2 +-
+ src/hb-ot-maxp-table.hh             |    2 +-
+ src/hb-ot-name-table.hh             |    2 +-
  11 files changed, 82 insertions(+), 80 deletions(-)
 
 commit 97aa0b738a33b73a3f9763dd2950f2dd39f596ed
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 15:02:34 2012 -0400
+Date:  Tue Jul 24 15:02:34 2012 -0400
 
     Minor const correctness shuffling
 
@@ -2471,7 +5300,7 @@ Date:   Tue Jul 24 15:02:34 2012 -0400
 
 commit 6411e74caf23af7b0545f1fe54d19a1c8da895e8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 13:48:49 2012 -0400
+Date:  Tue Jul 24 13:48:49 2012 -0400
 
     [Indic] Reposition Gurmukhi top matras to after post
 
@@ -2481,13 +5310,13 @@ Date:   Tue Jul 24 13:48:49 2012 -0400
 
     Gurmukhi failures down from 59 to 41 (0.0674242%).
 
- src/hb-ot-shape-complex-indic.cc                   |    2 +-
- .../indic/script-gurmukhi/misc/misc.txt            |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |    2 +-
+ .../indic/script-gurmukhi/misc/misc.txt           |    1 +
  2 files changed, 2 insertions(+), 1 deletions(-)
 
 commit c3f769ba09df319fa69d04f68c57444f95eceee6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 13:26:32 2012 -0400
+Date:  Tue Jul 24 13:26:32 2012 -0400
 
     [Indic] Ignore Uniscribe output containing two zero-width space glyphs
 
@@ -2513,13 +5342,13 @@ Date:   Tue Jul 24 13:26:32 2012 -0400
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970550 out of 970573 tests passed. 23 failed (0.00236973%)
 
- test/shaping/hb_test_tools.py                      |    1 +
- .../indic/script-malayalam/misc/misc.txt           |    2 ++
+ test/shaping/hb_test_tools.py                     |    1 +
+ .../indic/script-malayalam/misc/misc.txt          |    2 ++
  2 files changed, 3 insertions(+), 0 deletions(-)
 
 commit 65c43accdc4d2082282d5cedba8514b8df0c18a2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 03:36:47 2012 -0400
+Date:  Tue Jul 24 03:36:47 2012 -0400
 
     [Indic] Better position left-matra in Malayalam
 
@@ -2540,14 +5369,14 @@ Date:   Tue Jul 24 03:36:47 2012 -0400
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970524 out of 970573 tests passed. 49 failed (0.00504856%)
 
- src/hb-ot-shape-complex-indic.cc                   |   41
+ src/hb-ot-shape-complex-indic.cc                  |   41
  +++++++++++++------
- .../indic/script-malayalam/misc/misc.txt           |    1 +
+ .../indic/script-malayalam/misc/misc.txt          |    1 +
  2 files changed, 29 insertions(+), 13 deletions(-)
 
 commit 88f413b56f2858d149e2fc067685aeecaea779ca
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 03:04:36 2012 -0400
+Date:  Tue Jul 24 03:04:36 2012 -0400
 
     [Indic] Implement Reph+Ya-Phalaa interaction
 
@@ -2577,13 +5406,13 @@ Date:   Tue Jul 24 03:04:36 2012 -0400
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970524 out of 970573 tests passed. 49 failed (0.00504856%)
 
- src/hb-ot-shape-complex-indic.cc                   |   10 ++++++++--
- .../indic/script-bengali/misc/reph.txt             |    4 ++++
+ src/hb-ot-shape-complex-indic.cc                  |   10 ++++++++--
+ .../indic/script-bengali/misc/reph.txt                    |    4 ++++
  2 files changed, 12 insertions(+), 2 deletions(-)
 
 commit dff0ece11d61978c04e839501f179a5c3077f340
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 02:30:38 2012 -0400
+Date:  Tue Jul 24 02:30:38 2012 -0400
 
     [Indic] Limit matras to 4 per syllable
 
@@ -2593,26 +5422,26 @@ Date:   Tue Jul 24 02:30:38 2012 -0400
     closer to what Uniscribe does anyway.
 
     Two Devanagari tests regressed, but who cares about tests with 20
-    joiners in a row?!  Devanagari at 57 (0.00821766%) now.
+    joiners in a row?! Devanagari at 57 (0.00821766%) now.
 
  src/hb-ot-shape-complex-indic-machine.rl |    4 ++--
  1 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 330b329c8905a37ca88c556dea82c70d74c77458
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 02:25:26 2012 -0400
+Date:  Tue Jul 24 02:25:26 2012 -0400
 
     [Indic] Unmark U+17D1 KHMER SIGN VIRIAM to NOT be a Virama
 
     Fixes another 1 Khmer failure.  Down to 30 (0.0100293%) now.
 
- src/hb-ot-shape-complex-indic.cc                   |    2 ++
- .../south-east-asian/script-khmer/misc/misc.txt    |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |    2 ++
+ .../south-east-asian/script-khmer/misc/misc.txt    |   1 +
  2 files changed, 3 insertions(+), 0 deletions(-)
 
 commit 6824a7194e01b77eddb95bd95a9b32e219140912
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 02:22:18 2012 -0400
+Date:  Tue Jul 24 02:22:18 2012 -0400
 
     [Indic] Recategorize Khmer various signs as top matras
 
@@ -2623,7 +5452,7 @@ Date:   Tue Jul 24 02:22:18 2012 -0400
 
 commit d90b8e841e0068a601c96ab184d18b0f48eec9d1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 02:10:20 2012 -0400
+Date:  Tue Jul 24 02:10:20 2012 -0400
 
     [Indic] Reposition Khmer prebase-reordering Ra around split matras
 
@@ -2634,13 +5463,13 @@ Date:   Tue Jul 24 02:10:20 2012 -0400
 
     Khmer failures down from 136 to 39 (0.0130381%).
 
- src/hb-ot-shape-complex-indic.cc                   |   13 +++++++++++++
- .../south-east-asian/script-khmer/misc/misc.txt    |    4 ++++
+ src/hb-ot-shape-complex-indic.cc                  |   13 +++++++++++++
+ .../south-east-asian/script-khmer/misc/misc.txt    |   4 ++++
  2 files changed, 17 insertions(+), 0 deletions(-)
 
 commit 0afb84c12567ac35adac657bf8be29999b8c5a50
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 01:44:47 2012 -0400
+Date:  Tue Jul 24 01:44:47 2012 -0400
 
     [Indic] Fix minor bug in pre-base Ra positioning
 
@@ -2649,19 +5478,19 @@ Date:   Tue Jul 24 01:44:47 2012 -0400
 
 commit 7573799126e812a047daa5f64121ec959866b3c8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 01:32:07 2012 -0400
+Date:  Tue Jul 24 01:32:07 2012 -0400
 
     [Indic] Position Khmer U+17CE
 
     Fixes another 6 Khmer failures.  Now at 136 (0.0454661%).
 
- src/hb-ot-shape-complex-indic.cc                   |    6 ++++++
- .../south-east-asian/script-khmer/misc/misc.txt    |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |    6 ++++++
+ .../south-east-asian/script-khmer/misc/misc.txt    |   1 +
  2 files changed, 7 insertions(+), 0 deletions(-)
 
 commit 8d00e8d0e7d10f823e6975fecaffb9d557b1a99a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 01:04:18 2012 -0400
+Date:  Tue Jul 24 01:04:18 2012 -0400
 
     [Indic] Don't reposition Khmer Bindu
 
@@ -2675,19 +5504,19 @@ Date:   Tue Jul 24 01:04:18 2012 -0400
 
 commit 2278eefcdb3dd0d492b9d07176fbecc1f0516bb7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 00:26:43 2012 -0400
+Date:  Tue Jul 24 00:26:43 2012 -0400
 
     [Indic] In Sinhala, form forced Reph even if no other consonant found
 
-    Fixes another 10 Sinhala failures.  Down to 148 (0.0544424%).
+    Fixes another 10 Sinhala failures. Down to 148 (0.0544424%).
 
- src/hb-ot-shape-complex-indic.cc                   |   10 +++++-----
- .../indic/script-sinhala/misc/misc.txt             |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |   10 +++++-----
+ .../indic/script-sinhala/misc/misc.txt                    |    1 +
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 71fd5e80ad06c8e85a1112cc89e129d6cd03f82c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 00:21:16 2012 -0400
+Date:  Tue Jul 24 00:21:16 2012 -0400
 
     [Indic] Further adjust base algorithm for Sinhala
 
@@ -2702,13 +5531,13 @@ Date:   Tue Jul 24 00:21:16 2012 -0400
     Sinhala failures down from 208 to 158 (0.0581209%).  No changes to
     Khmer.
 
- src/hb-ot-shape-complex-indic.cc                   |   11 +++++++----
- .../indic/script-sinhala/misc/misc.txt             |    3 +++
+ src/hb-ot-shape-complex-indic.cc                  |   11 +++++++----
+ .../indic/script-sinhala/misc/misc.txt                    |    3 +++
  2 files changed, 10 insertions(+), 4 deletions(-)
 
 commit 73d71cc527d28fd5519c5d965c272ea1fb149a0e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 24 00:09:12 2012 -0400
+Date:  Tue Jul 24 00:09:12 2012 -0400
 
     [Indic] End Vowel-based syllable at ZWJ
 
@@ -2716,13 +5545,13 @@ Date:   Tue Jul 24 00:09:12 2012 -0400
 
     Fixed 120 Sinhala failures.  Now at 208 (0.0765136%).
 
- src/hb-ot-shape-complex-indic-machine.rl           |    2 +-
- .../indic/script-sinhala/misc/misc.txt             |    1 +
+ src/hb-ot-shape-complex-indic-machine.rl          |    2 +-
+ .../indic/script-sinhala/misc/misc.txt                    |    1 +
  2 files changed, 2 insertions(+), 1 deletions(-)
 
 commit 34c215036f5fcdc7599b1ab0591b56dbb3811902
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 23:51:29 2012 -0400
+Date:  Mon Jul 23 23:51:29 2012 -0400
 
     [Indic] Improve Sinhala base algorithm and reph positioning
 
@@ -2739,14 +5568,14 @@ Date:   Mon Jul 23 23:51:29 2012 -0400
 
     Brings down Sinhala failures from 455 to 328 (0.120656%).
 
- src/hb-ot-shape-complex-indic.cc                   |   18
+ src/hb-ot-shape-complex-indic.cc                  |   18
  +++++++++++++++++-
- .../indic/script-sinhala/misc/misc.txt             |    1 +
+ .../indic/script-sinhala/misc/misc.txt                    |    1 +
  2 files changed, 18 insertions(+), 1 deletions(-)
 
 commit 2ec934c6c25423e7af20d909a9c698a149808ea9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 23:49:04 2012 -0400
+Date:  Mon Jul 23 23:49:04 2012 -0400
 
     [Indic] Change "unknown" position to end of syllable
 
@@ -2755,31 +5584,31 @@ Date:   Mon Jul 23 23:49:04 2012 -0400
 
 commit b70021f7c81a0ed08475b14b07291f662cd9f905
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 20:18:17 2012 -0400
+Date:  Mon Jul 23 20:18:17 2012 -0400
 
     When removing zero-width marks, don't remove ligatures
 
     If a mark ligated, it probably should NOT be removed.
 
- src/hb-ot-shape.cc |    6 +++---
+ src/hb-ot-shape.cc |   6 +++---
  1 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 49c5ec51444f27f33e1eb6aa1959c61b08fa89c0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 20:14:13 2012 -0400
+Date:  Mon Jul 23 20:14:13 2012 -0400
 
     Minor refactoring
 
  src/hb-ot-layout-gsubgpos-private.hh |   32
  -------------------------------
- src/hb-ot-layout-private.hh          |   35
+ src/hb-ot-layout-private.hh         |   35
  ++++++++++++++++++++++++++++++++++
  src/hb-ot-shape-complex-indic.cc     |    2 +-
  3 files changed, 36 insertions(+), 33 deletions(-)
 
 commit c3e6fdc3791168cf2b4c9412e751f187d58faa42
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 20:11:42 2012 -0400
+Date:  Mon Jul 23 20:11:42 2012 -0400
 
     [Indic] Improve check on ligatures
 
@@ -2791,7 +5620,7 @@ Date:   Mon Jul 23 20:11:42 2012 -0400
 
 commit 771a8f50289e8fa458cfc3cd84f73a380ce98077
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 20:07:50 2012 -0400
+Date:  Mon Jul 23 20:07:50 2012 -0400
 
     [Indic] exclude ligatures when matching on Indic category
 
@@ -2802,14 +5631,14 @@ Date:   Mon Jul 23 20:07:50 2012 -0400
 
     Sinhala failures down from 514 to 455 (0.167374%).
 
- src/hb-ot-shape-complex-indic.cc                   |   41
+ src/hb-ot-shape-complex-indic.cc                  |   41
  ++++++++++---------
- .../indic/script-sinhala/misc/misc.txt             |    1 +
+ .../indic/script-sinhala/misc/misc.txt                    |    1 +
  2 files changed, 23 insertions(+), 19 deletions(-)
 
 commit d1af9e82e5309158ed334ab8e21f3a3b64b9540f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 19:55:35 2012 -0400
+Date:  Mon Jul 23 19:55:35 2012 -0400
 
     [GSUB/GPOS] Const correctness
 
@@ -2818,7 +5647,7 @@ Date:   Mon Jul 23 19:55:35 2012 -0400
 
 commit baacd090df97610e3f6d1b2a110dc67b6c6f9f5c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 19:51:48 2012 -0400
+Date:  Mon Jul 23 19:51:48 2012 -0400
 
     [Indic] Minor refactoring
 
@@ -2827,7 +5656,7 @@ Date:   Mon Jul 23 19:51:48 2012 -0400
 
 commit c7c4de2fb9bba216e37875d79815eef55c0acc01
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 18:25:02 2012 -0400
+Date:  Mon Jul 23 18:25:02 2012 -0400
 
     [Indic] Remove syllable length check before sorting
 
@@ -2838,7 +5667,7 @@ Date:   Mon Jul 23 18:25:02 2012 -0400
 
 commit 9fa052733eb93a3ce1205f63ff8f74cb295cbe99
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 18:19:17 2012 -0400
+Date:  Mon Jul 23 18:19:17 2012 -0400
 
     [Indic] Limit syllables to at most five consonants
 
@@ -2851,7 +5680,7 @@ Date:   Mon Jul 23 18:19:17 2012 -0400
       - Devanagari failures went down from 490 to 56.
       - Telugu went down from 113 to 49.
 
-    Other scripts went down slightly or didn't change.  New numbers:
+    Other scripts went down slightly or didn't change. New numbers:
 
     BENGALI: 353908 out of 354285 tests passed. 377 failed (0.106412%)
     DEVANAGARI: 693572 out of 693628 tests passed. 56 failed (0.00807349%)
@@ -2875,19 +5704,19 @@ Date:   Mon Jul 23 18:19:17 2012 -0400
 
 commit 093cd583263a5d427e3377b31585043fb55d2557
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 14:04:42 2012 -0400
+Date:  Mon Jul 23 14:04:42 2012 -0400
 
     [Thai] Fix SARA AM handling
 
     Oops, thinko.
 
  src/hb-ot-shape-complex-misc.cc |    6 +++---
- src/hb-private.hh               |    4 ++--
+ src/hb-private.hh              |    4 ++--
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 42848453bf260b456b46a07f066e31b8c3aac2f1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 13:52:07 2012 -0400
+Date:  Mon Jul 23 13:52:07 2012 -0400
 
     [Thai] Reorder U+0E3A THAI VOWEL SIGN PHINTHU
 
@@ -2897,51 +5726,51 @@ Date:   Mon Jul 23 13:52:07 2012 -0400
 
     Fixes the two remaining Thai failures (see previous commit).
 
- src/hb-ot-shape-complex-misc.cc                    |    7 +++++++
- src/hb-unicode.cc                                  |    6 ++++++
- .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |    1 +
- .../shaper-thai/script-thai/misc/phinthu.txt       |   16
+ src/hb-ot-shape-complex-misc.cc                   |    7 +++++++
+ src/hb-unicode.cc                                 |    6 ++++++
+ .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |   1 +
+ .../shaper-thai/script-thai/misc/phinthu.txt      |   16
  ++++++++++++++++
  4 files changed, 30 insertions(+), 0 deletions(-)
 
 commit 4a7f4f3e56f8f7640ae7337aa1b3324f31e0d4ab
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 13:15:33 2012 -0400
+Date:  Mon Jul 23 13:15:33 2012 -0400
 
     [Thai] Adjust SARA AM reordering to match Uniscribe
 
     Adjust the list of marks before SARA AM that get the reordering
-    treatment.  Also adjust cluster formation to match Uniscribe.
+    treatment. Also adjust cluster formation to match Uniscribe.
 
     With Wikipedia test data, now I see:
 
       - For Thai, with the Angsana New font from Win7, I see 54
       failures out
-        of over 4M tests  (0.00129107%).  Of the 54, two are legitimate
-        reordering issues (fix coming soon), and the other 52 are simply
-        Uniscribe using a zero-width space char instead of an unknown
-        character for missing glyphs.  No idea why.  The missing-glyph
-        sequences include one that is a Thai character followed by
-        an Arabic
-        Sokun.  Someone confused it with Nikhahit I assume!
+       of over 4M tests  (0.00129107%).  Of the 54, two are legitimate
+       reordering issues (fix coming soon), and the other 52 are simply
+       Uniscribe using a zero-width space char instead of an unknown
+       character for missing glyphs.  No idea why.  The missing-glyph
+       sequences include one that is a Thai character followed by
+       an Arabic
+       Sokun.  Someone confused it with Nikhahit I assume!
 
       - For Lao, with the Dokchampa font from Win7, 33 tests fail out of
-        54k (0.0615167%).  All seem to be insignificant mark positioning
-        with two marks on a base.  Have to investigate.
+       54k (0.0615167%).  All seem to be insignificant mark positioning
+       with two marks on a base.  Have to investigate.
 
- src/hb-ot-shape-complex-misc.cc                    |   42
+ src/hb-ot-shape-complex-misc.cc                   |   42
  ++++++++++++-------
- src/hb-private.hh                                  |    6 +++
- test/shaping/texts/in-tree/shaper-thai/MANIFEST    |    1 +
- .../texts/in-tree/shaper-thai/script-lao/MANIFEST  |    1 +
- .../in-tree/shaper-thai/script-lao/misc/MANIFEST   |    1 +
- .../shaper-thai/script-lao/misc/sara-am.txt        |   20 +++++++++
- .../shaper-thai/script-thai/misc/sara-am.txt       |   18 ++++++++-
+ src/hb-private.hh                                 |    6 +++
+ test/shaping/texts/in-tree/shaper-thai/MANIFEST    |   1 +
+ .../texts/in-tree/shaper-thai/script-lao/MANIFEST  |   1 +
+ .../in-tree/shaper-thai/script-lao/misc/MANIFEST   |   1 +
+ .../shaper-thai/script-lao/misc/sara-am.txt       |   20 +++++++++
+ .../shaper-thai/script-thai/misc/sara-am.txt      |   18 ++++++++-
  7 files changed, 72 insertions(+), 17 deletions(-)
 
 commit 2cc933aff97916e5d0fe42883f40f0879f848e25
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 08:22:55 2012 -0400
+Date:  Mon Jul 23 08:22:55 2012 -0400
 
     [Indic] Fix cluster formation with left-matras and conjunct forms
 
@@ -2952,7 +5781,7 @@ Date:   Mon Jul 23 08:22:55 2012 -0400
 
 commit e6b01a878cd2e63cb675e7e0c6ac4d83a8c10f37
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 23 00:11:26 2012 -0400
+Date:  Mon Jul 23 00:11:26 2012 -0400
 
     [Indic] Further streamline cluster formation
 
@@ -2964,12 +5793,12 @@ Date:   Mon Jul 23 00:11:26 2012 -0400
 
 commit 7b2a7dadd6c616bbfe1d8358700cab9cee88e584
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 22 23:58:55 2012 -0400
+Date:  Sun Jul 22 23:58:55 2012 -0400
 
     [Indic] Merge clusters before sorting
 
     This should fix any instabilities in cluster formation that we were
-    speculating may happen with surrounding syllables.  Or most of it
+    speculating may happen with surrounding syllables. Or most of it
     perhaps.
 
  src/hb-ot-shape-complex-indic.cc |    4 ++++
@@ -2977,7 +5806,7 @@ Date:   Sun Jul 22 23:58:55 2012 -0400
 
 commit abb3239ef92cc5dccb4638806d7ae9868b9ac9b3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 22 23:55:19 2012 -0400
+Date:  Sun Jul 22 23:55:19 2012 -0400
 
     [Indic] Update clusters for left-matra even if matra didn't move
 
@@ -2989,60 +5818,60 @@ Date:   Sun Jul 22 23:55:19 2012 -0400
 
 commit 60554f14d8dca208721f0da8b69d84b92819c54f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 22 23:23:56 2012 -0400
+Date:  Sun Jul 22 23:23:56 2012 -0400
 
     [Indic] Merge in Malayalam tests
 
     From:
     http://silpa.org.in/pub/tests/hb/ml/ml-harfbuzz-testdata.txt
 
- .../indic/script-malayalam/misc/misc.txt           |   94
+ .../indic/script-malayalam/misc/misc.txt          |   94
  ++++++++++----------
  1 files changed, 46 insertions(+), 48 deletions(-)
 
 commit 5c7081770c7a611bbe79b451b7b86dec4fa6395d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 22 23:20:27 2012 -0400
+Date:  Sun Jul 22 23:20:27 2012 -0400
 
     [Indic] Add extensive Sinhala tests
 
     Generated by:
     http://git.savannah.gnu.org/cgit/sinhala.git/plain/utils/gen-unicode-sinhala.py
 
- .../indic/script-sinhala/misc/extensive.txt        | 4390
+ .../indic/script-sinhala/misc/extensive.txt       | 4390
  ++++++++++++++++++++
  1 files changed, 4390 insertions(+), 0 deletions(-)
 
 commit 2efe4707b1b449962f6e161716477d9775456c46
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jul 22 23:17:59 2012 -0400
+Date:  Sun Jul 22 23:17:59 2012 -0400
 
     [Indic] Add Sinhala tests
 
     Merge tests from:
     http://git.savannah.gnu.org/cgit/sinhala.git/plain/patches/icu-sinhala-rendering.txt
 
- .../indic/script-sinhala/misc/misc.txt             |   26
+ .../indic/script-sinhala/misc/misc.txt                    |   26
  ++++++++++++++++++-
  1 files changed, 24 insertions(+), 2 deletions(-)
 
 commit 3d4c111b7a13700b2f7a0b087eb3992283295f21
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 19:34:39 2012 -0400
+Date:  Fri Jul 20 19:34:39 2012 -0400
 
     Add a test case
 
- .../indic/script-bengali/misc/misc.txt             |    1 +
+ .../indic/script-bengali/misc/misc.txt                    |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 92a1ad7bef9efb456ab87bd63818cfbed7da3f6f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 18:38:27 2012 -0400
+Date:  Fri Jul 20 18:38:27 2012 -0400
 
     [Indic] Stop searching for base if a post form is found before
     below form
 
-    Improves Bengali and Gurmukhi.  Malayalam regressed a bit.  We will
+    Improves Bengali and Gurmukhi.  Malayalam regressed a bit. We will
     deal
     with that later.
 
@@ -3051,7 +5880,7 @@ Date:   Fri Jul 20 18:38:27 2012 -0400
 
 commit 4c450c703f8e4618c587bcd7ef46dcc1f2c7947b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 18:13:04 2012 -0400
+Date:  Fri Jul 20 18:13:04 2012 -0400
 
     [Indic] Recompose Bengali Ya,Nukta
 
@@ -3060,23 +5889,23 @@ Date:   Fri Jul 20 18:13:04 2012 -0400
     Improves Bengali a bit.
 
  src/hb-ot-shape-complex-indic.cc |    4 ++--
- src/hb-unicode.cc                |    8 ++++++++
+ src/hb-unicode.cc               |    8 ++++++++
  2 files changed, 10 insertions(+), 2 deletions(-)
 
 commit e9c0f152a38cb2e76650a3e43f7fdcda266af696
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 17:05:46 2012 -0400
+Date:  Fri Jul 20 17:05:46 2012 -0400
 
     [Uniscribe] Fix script fallback
 
     Gurmukhi failures half now.  Others changed slightly.
 
- src/hb-uniscribe.cc |   34 ++++++++++++++--------------------
+ src/hb-uniscribe.cc |  34 ++++++++++++++--------------------
  1 files changed, 14 insertions(+), 20 deletions(-)
 
 commit 5791f329159c9863317e2b507514c29321be31a7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 16:26:55 2012 -0400
+Date:  Fri Jul 20 16:26:55 2012 -0400
 
     [Indic] Allow a ZWNJ after SM's
 
@@ -3089,7 +5918,7 @@ Date:   Fri Jul 20 16:26:55 2012 -0400
 
 commit 34ae336f3fae93ef9372881d545c817bce383041
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 16:17:28 2012 -0400
+Date:  Fri Jul 20 16:17:28 2012 -0400
 
     [Indic] Improve Reph AfterMain positioning
 
@@ -3101,20 +5930,20 @@ Date:   Fri Jul 20 16:17:28 2012 -0400
 
 commit bdd080431a40bc941ece3230f338b94a46bd12a2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 16:03:09 2012 -0400
+Date:  Fri Jul 20 16:03:09 2012 -0400
 
     [Indic] Reposition Oriya Candrabindu
 
     Oriya failures down from 0.65% to 0.20%.
 
- src/hb-ot-shape-complex-indic.cc                   |    1 +
- .../shaper-indic/indic/script-oriya/misc/MANIFEST  |    1 +
- .../shaper-indic/indic/script-oriya/misc/bindu.txt |    2 ++
+ src/hb-ot-shape-complex-indic.cc                  |    1 +
+ .../shaper-indic/indic/script-oriya/misc/MANIFEST  |   1 +
+ .../shaper-indic/indic/script-oriya/misc/bindu.txt |   2 ++
  3 files changed, 4 insertions(+), 0 deletions(-)
 
 commit 5f0eaaad129ff04d56b8756bebf19fbc242718c9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 15:47:24 2012 -0400
+Date:  Fri Jul 20 15:47:24 2012 -0400
 
     [Indic] Fix base search in final_reordering
 
@@ -3126,41 +5955,41 @@ Date:   Fri Jul 20 15:47:24 2012 -0400
 
 commit 81202bd860e4034c18d9f80c5a4f33d9f48463a3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 15:10:02 2012 -0400
+Date:  Fri Jul 20 15:10:02 2012 -0400
 
     [Indic] Don't attach SM/VD to other characters
 
  src/hb-ot-shape-complex-indic-private.hh |    3 ++
- src/hb-ot-shape-complex-indic.cc         |   38
+ src/hb-ot-shape-complex-indic.cc        |   38
  ++++++++++++++++-------------
  2 files changed, 24 insertions(+), 17 deletions(-)
 
 commit efb4ad735691837a52447bedc1a66a87d0d9af51
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 14:27:38 2012 -0400
+Date:  Fri Jul 20 14:27:38 2012 -0400
 
     Fix compiler warnings
 
     If x is not constant, we cannot ASSERT_STATIC on it.
 
- src/hb-private.hh |    2 +-
+ src/hb-private.hh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit f31d97e44eeb6fb141f3de928e27e033fc7b1f47
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 14:13:35 2012 -0400
+Date:  Fri Jul 20 14:13:35 2012 -0400
 
     [Indic] Form Telugu Reph out of Ra,Virama,ZWJ
 
     Apparently this was approved in Feb 2012.  No font yet.
 
  src/hb-ot-shape-complex-indic-private.hh |    2 +-
- src/hb-ot-shape-complex-indic.cc         |    4 ++--
+ src/hb-ot-shape-complex-indic.cc        |    4 ++--
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 2e193b240ec85cab0d4e2f8a375c5a7f0ef99985
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 14:02:35 2012 -0400
+Date:  Fri Jul 20 14:02:35 2012 -0400
 
     [Indic] Don't split U+0AC9
 
@@ -3170,12 +5999,12 @@ Date:   Fri Jul 20 14:02:35 2012 -0400
 
     Gujarati failures down from 0.672% to 0.0130966%.
 
- src/hb-unicode.cc |    2 +-
+ src/hb-unicode.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 30c3d5e9fc61b49c2c6ad4e744300edd6f3e0261
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 13:56:32 2012 -0400
+Date:  Fri Jul 20 13:56:32 2012 -0400
 
     [Indic] Simplify Uniscribe cluster emulation
 
@@ -3187,7 +6016,7 @@ Date:   Fri Jul 20 13:56:32 2012 -0400
 
 commit decf6ffca475fe01ff3151b7641f629f031137d2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 13:51:31 2012 -0400
+Date:  Fri Jul 20 13:51:31 2012 -0400
 
     [Indic] Minor!
 
@@ -3196,7 +6025,7 @@ Date:   Fri Jul 20 13:51:31 2012 -0400
 
 commit 9e4f94a72cea6d65a6a7ba5a47db92e00dbfbb91
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 13:48:03 2012 -0400
+Date:  Fri Jul 20 13:48:03 2012 -0400
 
     [Indic] Break syllables at Halant,ZWNJ
 
@@ -3208,12 +6037,12 @@ Date:   Fri Jul 20 13:48:03 2012 -0400
     slightly.  Fixed half of Bengali, and did NOT break anything!
 
  src/hb-ot-shape-complex-indic-machine.rl |    5 +++--
- src/hb-ot-shape-complex-indic.cc         |    5 ++---
+ src/hb-ot-shape-complex-indic.cc        |    5 ++---
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 2c372b80f6befad69e216e3f218b38640b8cc044
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 13:37:48 2012 -0400
+Date:  Fri Jul 20 13:37:48 2012 -0400
 
     [Indic] Better check for applying 'init'
 
@@ -3222,12 +6051,12 @@ Date:   Fri Jul 20 13:37:48 2012 -0400
     Fixes some more of Bengali.
 
  src/hb-ot-shape-complex-indic.cc |    9 +--------
- src/hb-private.hh                |    3 ++-
+ src/hb-private.hh               |    3 ++-
  2 files changed, 3 insertions(+), 9 deletions(-)
 
 commit 34a7440b7c6c6e53394ddbdbedaad57b23f85105
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 12:32:59 2012 -0400
+Date:  Fri Jul 20 12:32:59 2012 -0400
 
     [GPOS] Don't zero mark advances
 
@@ -3242,7 +6071,7 @@ Date:   Fri Jul 20 12:32:59 2012 -0400
 
 commit 8ed248de77e5d2ed978e55c0ce1a11727bc9e34c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 11:42:24 2012 -0400
+Date:  Fri Jul 20 11:42:24 2012 -0400
 
     [Indic] Minor
 
@@ -3251,7 +6080,7 @@ Date:   Fri Jul 20 11:42:24 2012 -0400
 
 commit d0e68dbd0b9fc9a42c4280d01c8ffd9c5015d550
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 11:25:41 2012 -0400
+Date:  Fri Jul 20 11:25:41 2012 -0400
 
     [Indic] Implement reph positioning step 5
 
@@ -3263,7 +6092,7 @@ Date:   Fri Jul 20 11:25:41 2012 -0400
 
 commit a9e45c32e4a0d6da33c52f8427aa694e57f52eb9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 11:04:15 2012 -0400
+Date:  Fri Jul 20 11:04:15 2012 -0400
 
     [Indic] Don't let ZWNJ at the end of syllable affect base search
 
@@ -3276,7 +6105,7 @@ Date:   Fri Jul 20 11:04:15 2012 -0400
 
 commit 20b68e699f73e6ce046c0ec143d40b3d6d48e06b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 10:47:46 2012 -0400
+Date:  Fri Jul 20 10:47:46 2012 -0400
 
     [Indic] Apply 'cjct' globally
 
@@ -3287,7 +6116,7 @@ Date:   Fri Jul 20 10:47:46 2012 -0400
 
 commit 51e764de441072e7c9f67de23e8ed717b9b8957d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 10:30:24 2012 -0400
+Date:  Fri Jul 20 10:30:24 2012 -0400
 
     [Indic] Unbreak old scriptures
 
@@ -3298,7 +6127,7 @@ Date:   Fri Jul 20 10:30:24 2012 -0400
 
 commit 900cf3d449bf36d4f8b1474590cae925fef48fc8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 20 10:18:23 2012 -0400
+Date:  Fri Jul 20 10:18:23 2012 -0400
 
     Minor
 
@@ -3307,20 +6136,20 @@ Date:   Fri Jul 20 10:18:23 2012 -0400
 
 commit 87cd63266e73af316b250573ef57388a0bcc9133
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 21:17:48 2012 -0400
+Date:  Thu Jul 19 21:17:48 2012 -0400
 
     [Indic] Recategorize some Kannada right matras
 
     Kannada failures down from 3.5% to 2.93%.
 
- src/hb-ot-shape-complex-indic.cc                   |    2 +-
- .../indic/script-kannada/misc/MANIFEST             |    1 +
- .../indic/script-kannada/misc/right-matras.txt     |    7 +++++++
+ src/hb-ot-shape-complex-indic.cc                  |    2 +-
+ .../indic/script-kannada/misc/MANIFEST                    |    1 +
+ .../indic/script-kannada/misc/right-matras.txt     |   7 +++++++
  3 files changed, 9 insertions(+), 1 deletions(-)
 
 commit 3604d64ced909ade91998d294a7b4b2ee14d47aa
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 21:13:04 2012 -0400
+Date:  Thu Jul 19 21:13:04 2012 -0400
 
     [Indic] Recategorize GURMUKHI ADDAK
 
@@ -3333,7 +6162,7 @@ Date:   Thu Jul 19 21:13:04 2012 -0400
 
 commit 89328581236a53ec16508b95db54c7e5315b178f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 21:02:38 2012 -0400
+Date:  Thu Jul 19 21:02:38 2012 -0400
 
     Minor
 
@@ -3342,7 +6171,7 @@ Date:   Thu Jul 19 21:02:38 2012 -0400
 
 commit 47ef931f13778b894090139a64238a5ab9ac1154
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 20:52:44 2012 -0400
+Date:  Thu Jul 19 20:52:44 2012 -0400
 
     [buffer] Make sure out_info = info during GPOS
 
@@ -3351,16 +6180,16 @@ Date:   Thu Jul 19 20:52:44 2012 -0400
 
 commit ae63cf206291befe3920adfe015e6cd0961580e5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 20:45:41 2012 -0400
+Date:  Thu Jul 19 20:45:41 2012 -0400
 
     Print line number during return when tracing
 
- src/hb-private.hh |    8 ++++----
+ src/hb-private.hh |   8 ++++----
  1 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 5249f3aee108b0f41770d137e63a625f594418e7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 20:30:22 2012 -0400
+Date:  Thu Jul 19 20:30:22 2012 -0400
 
     [Indic] Unbreak Khmer
 
@@ -3373,7 +6202,7 @@ Date:   Thu Jul 19 20:30:22 2012 -0400
 
 commit e0475345d5d7db8dbc8b554beedfa2435c5d7fd1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 20:24:14 2012 -0400
+Date:  Thu Jul 19 20:24:14 2012 -0400
 
     [Indic] Apply 'akhn' globally
 
@@ -3385,16 +6214,16 @@ Date:   Thu Jul 19 20:24:14 2012 -0400
 
 commit c87bcddb10752b407c0471ee5ac4de6f1b00b711
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 20:03:25 2012 -0400
+Date:  Thu Jul 19 20:03:25 2012 -0400
 
     [Indic] Add failing test for Kannada
 
- .../indic/script-kannada/misc/misc.txt             |    1 +
+ .../indic/script-kannada/misc/misc.txt                    |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit fa247ebe524f92fa95d344ba912f704262879c13
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 19:52:19 2012 -0400
+Date:  Thu Jul 19 19:52:19 2012 -0400
 
     [Indic] Better position U+0CD5
 
@@ -3405,21 +6234,21 @@ Date:   Thu Jul 19 19:52:19 2012 -0400
 
 commit f055442716ec7543ed156d4789955b19c11a5255
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 16:20:21 2012 -0400
+Date:  Thu Jul 19 16:20:21 2012 -0400
 
     [Indic] Lookup consonant position in the font
 
     Fixes most failures of Oriya, and improves others a bit.
 
- src/hb-ot-map-private.hh                 |   13 +++-
+ src/hb-ot-map-private.hh                |   13 +++-
  src/hb-ot-shape-complex-indic-private.hh |  105
  ------------------------------
- src/hb-ot-shape-complex-indic.cc         |   63 +++++++++++++-----
+ src/hb-ot-shape-complex-indic.cc        |   63 +++++++++++++-----
  3 files changed, 54 insertions(+), 127 deletions(-)
 
 commit 74d1d88781e91866a52e27f391e34df03b313442
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 16:14:23 2012 -0400
+Date:  Thu Jul 19 16:14:23 2012 -0400
 
     [GSUB] Fix would_apply() for LigatureSubst
 
@@ -3428,7 +6257,7 @@ Date:   Thu Jul 19 16:14:23 2012 -0400
 
 commit 787f7d1e9ba9ad038f24e5a1063d12c7d169ad37
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 15:29:13 2012 -0400
+Date:  Thu Jul 19 15:29:13 2012 -0400
 
     [TODO] Minor
 
@@ -3437,19 +6266,19 @@ Date:   Thu Jul 19 15:29:13 2012 -0400
 
 commit be73a5f9368136ecbdb211b96516ad0c554c8201
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 14:59:15 2012 -0400
+Date:  Thu Jul 19 14:59:15 2012 -0400
 
     Add src/test-would-substitute tool
 
- src/Makefile.am              |    6 ++-
+ src/Makefile.am             |    6 ++-
  src/test-would-substitute.cc |   94 ++++++++++++++++++++++++++++++
- src/test.cc                  |  132
+ src/test.cc                 |  132
  ++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 231 insertions(+), 1 deletions(-)
 
 commit e72b360ac6381b549249b8836fa3e70b909d3437
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 14:35:23 2012 -0400
+Date:  Thu Jul 19 14:35:23 2012 -0400
 
     Refactor / finish would_apply() operation
 
@@ -3459,13 +6288,13 @@ Date:   Thu Jul 19 14:35:23 2012 -0400
  src/hb-ot-layout-gsub-table.hh       |  126 ++++++++----------
  src/hb-ot-layout-gsubgpos-private.hh |  233
  +++++++++++++++++++++++++++++++++-
- src/hb-ot-layout.cc                  |   11 ++
- src/hb-ot-layout.h                   |    7 +
+ src/hb-ot-layout.cc                 |   11 ++
+ src/hb-ot-layout.h                  |    7 +
  5 files changed, 308 insertions(+), 75 deletions(-)
 
 commit 8c973ebf0f59abb5ee920edd5d64e23d8e47ad75
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 13:25:08 2012 -0400
+Date:  Thu Jul 19 13:25:08 2012 -0400
 
     [Indic] Implement per-script matra positioning
 
@@ -3476,25 +6305,25 @@ Date:   Thu Jul 19 13:25:08 2012 -0400
     44% to 10%.  Does NOT affect other scripts' test results.
 
  src/hb-ot-shape-complex-indic-private.hh |    2 +-
- src/hb-ot-shape-complex-indic.cc         |   40
+ src/hb-ot-shape-complex-indic.cc        |   40
  +++++++++++++++++++++++++++--
- src/hb-unicode.cc                        |    2 +-
+ src/hb-unicode.cc                       |    2 +-
  3 files changed, 39 insertions(+), 5 deletions(-)
 
 commit 8bb32458f95f13f66688e0811cc91f1bfffb867d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 12:59:06 2012 -0400
+Date:  Thu Jul 19 12:59:06 2012 -0400
 
     [Indic] More refactoring
 
  src/hb-ot-shape-complex-indic-private.hh |    9 ++--
- src/hb-ot-shape-complex-indic.cc         |   65
+ src/hb-ot-shape-complex-indic.cc        |   65
  +++++++++++++++++++++++-------
  2 files changed, 54 insertions(+), 20 deletions(-)
 
 commit 9ccc6382ba43760167c134c18c1c4ada4b8c3f22
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 12:32:16 2012 -0400
+Date:  Thu Jul 19 12:32:16 2012 -0400
 
     [Indic] Minor refactoring
 
@@ -3504,7 +6333,7 @@ Date:   Thu Jul 19 12:32:16 2012 -0400
 
 commit f83aaa3133de5d807be267a100d6a200e8db9017
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 12:23:23 2012 -0400
+Date:  Thu Jul 19 12:23:23 2012 -0400
 
     [Indic] Minor
 
@@ -3514,18 +6343,18 @@ Date:   Thu Jul 19 12:23:23 2012 -0400
 
 commit be8b9f5f715f6fb36b98bd33c3303f79cc068f8a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 12:11:12 2012 -0400
+Date:  Thu Jul 19 12:11:12 2012 -0400
 
     [Indic] Start refactoring different matra positions per script
 
  src/hb-ot-shape-complex-indic-private.hh |   36
  ++++++++++++++++++-----------
- src/hb-ot-shape-complex-indic.cc         |    4 +-
+ src/hb-ot-shape-complex-indic.cc        |    4 +-
  2 files changed, 24 insertions(+), 16 deletions(-)
 
 commit deeb540a74f8d394db273145b17bf385d14d01bb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 11:30:48 2012 -0400
+Date:  Thu Jul 19 11:30:48 2012 -0400
 
     [test] Ignore tests with DOTTED CIRCLE in the output
 
@@ -3534,7 +6363,7 @@ Date:   Thu Jul 19 11:30:48 2012 -0400
 
 commit b01d9b3d90e892341ee4463f2eda4600850b97d8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jul 19 11:25:49 2012 -0400
+Date:  Thu Jul 19 11:25:49 2012 -0400
 
     [Indic] Disallow decomposition of a couple characters
 
@@ -3545,43 +6374,43 @@ Date:   Thu Jul 19 11:25:49 2012 -0400
     The results with or without decomposition are the same, but Uniscribe
     does not normalize, so this matches better.
 
- src/hb-unicode.cc |    3 +++
+ src/hb-unicode.cc |   3 +++
  1 files changed, 3 insertions(+), 0 deletions(-)
 
 commit 422ecd2d3c198a36d07d409341cb82ea57c7ad6b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 23:25:58 2012 -0400
+Date:  Wed Jul 18 23:25:58 2012 -0400
 
     [Indic] Accept a forced Rakar sequence at the end of syllable
 
     In Sinhala, Rakar is formed by Al-Lakuna,ZWJ,Ra.  If you put that
     at the
     end of a Consonant,Matra syllable, you get a dotted-circle from
-    Uniscribe.  Apparently adding a ZWJ before the Al-Lakuna "fixes" that.
+    Uniscribe. Apparently adding a ZWJ before the Al-Lakuna "fixes" that.
     And people have been encoding that sequence...  So, allow a forced
     "ZWJ,Virama,ZWJ,Ra" sequence at the of syllables.
 
     Fixes some 100 or more of Sinhala failures.  Now at 622 only (0.23%).
 
- src/hb-ot-shape-complex-indic-machine.rl           |    3 ++-
- .../indic/script-sinhala/misc/misc.txt             |    2 ++
+ src/hb-ot-shape-complex-indic-machine.rl          |    3 ++-
+ .../indic/script-sinhala/misc/misc.txt                    |    2 ++
  2 files changed, 4 insertions(+), 1 deletions(-)
 
 commit 6fc1732003d71cf90d37247482772c3da884687f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 17:49:19 2012 -0400
+Date:  Wed Jul 18 17:49:19 2012 -0400
 
     [Indic] Allow joiners on both sides of Halant at the same time
 
     The sequence <ZWJ,Al-Lakuna,ZWJ> is used in Sinhala to explicitly ask
-    for Rakar.  Fixes two-thousand Sinhala tests.  Not many left.
+    for Rakar. Fixes two-thousand Sinhala tests.  Not many left.
 
  src/hb-ot-shape-complex-indic-machine.rl |    2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 10cdc94eee2225f14c198c015256a5a0063eecad
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 17:42:34 2012 -0400
+Date:  Wed Jul 18 17:42:34 2012 -0400
 
     [Indic] In final reordering, find base, even if it disappeared
 
@@ -3590,13 +6419,13 @@ Date:   Wed Jul 18 17:42:34 2012 -0400
 
     Fixes a few hundred of Sinhala failures with Iskoola Pota.
 
- src/hb-ot-shape-complex-indic.cc                   |    7 ++-----
- .../indic/script-sinhala/misc/misc.txt             |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |    7 ++-----
+ .../indic/script-sinhala/misc/misc.txt                    |    1 +
  2 files changed, 3 insertions(+), 5 deletions(-)
 
 commit 9c4d24a3a677a58ec59c7fb0f8b70b8aad30a032
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 17:29:10 2012 -0400
+Date:  Wed Jul 18 17:29:10 2012 -0400
 
     [Indic] Minor
 
@@ -3605,21 +6434,21 @@ Date:   Wed Jul 18 17:29:10 2012 -0400
 
 commit 3285e107c9a83aeb552e67f9460680ff6d167d88
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 17:22:14 2012 -0400
+Date:  Wed Jul 18 17:22:14 2012 -0400
 
     [Indic] Implement Sinhala "Al Lakuna" Reph behavior
 
     In Sinhala, Reph is formed only explicitly, by the presence of a ZWJ.
 
- src/hb-ot-shape-complex-indic-private.hh           |    2 ++
- src/hb-ot-shape-complex-indic.cc                   |    7 ++++++-
- .../indic/script-sinhala/misc/MANIFEST             |    1 +
- .../indic/script-sinhala/misc/reph.txt             |    3 +++
+ src/hb-ot-shape-complex-indic-private.hh          |    2 ++
+ src/hb-ot-shape-complex-indic.cc                  |    7 ++++++-
+ .../indic/script-sinhala/misc/MANIFEST                    |    1 +
+ .../indic/script-sinhala/misc/reph.txt                    |    3 +++
  4 files changed, 12 insertions(+), 1 deletions(-)
 
 commit 91cade755534c42bb826a6aefcbca8a543d94387
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 16:50:41 2012 -0400
+Date:  Wed Jul 18 16:50:41 2012 -0400
 
     [Indic/Unicode] Decompose Sinhala split matras the way Uniscribe likes
 
@@ -3627,12 +6456,12 @@ Date:   Wed Jul 18 16:50:41 2012 -0400
 
     Fixes most of the failures.  Down from 15% to 1.3%!
 
- src/hb-unicode.cc |    8 ++++++++
+ src/hb-unicode.cc |   8 ++++++++
  1 files changed, 8 insertions(+), 0 deletions(-)
 
 commit d8942dcbb4e3249a2d78a6455c119294ed4390bc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 16:34:10 2012 -0400
+Date:  Wed Jul 18 16:34:10 2012 -0400
 
     Apply Tibetan (global) features.
 
@@ -3640,14 +6469,14 @@ Date:   Wed Jul 18 16:34:10 2012 -0400
 
     Merges back Hangul into the default shaper.
 
- src/hb-ot-shape-complex-misc.cc    |   82
+ src/hb-ot-shape-complex-misc.cc    |  82
  ++++++++++++++++--------------------
- src/hb-ot-shape-complex-private.hh |    7 ---
+ src/hb-ot-shape-complex-private.hh |   7 ---
  2 files changed, 37 insertions(+), 52 deletions(-)
 
 commit 552d19b7a11f7dff888587fce4d56d9f8e47e819
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 16:00:49 2012 -0400
+Date:  Wed Jul 18 16:00:49 2012 -0400
 
     [Indic] Treat Register Shifters like Nukta
 
@@ -3655,14 +6484,14 @@ Date:   Wed Jul 18 16:00:49 2012 -0400
 
     Fixes another 18 Khmer tests.
 
- src/hb-ot-shape-complex-indic-machine.rl           |    2 +-
- src/hb-ot-shape-complex-indic.cc                   |    2 --
- .../south-east-asian/script-khmer/misc/misc.txt    |    1 +
+ src/hb-ot-shape-complex-indic-machine.rl          |    2 +-
+ src/hb-ot-shape-complex-indic.cc                  |    2 --
+ .../south-east-asian/script-khmer/misc/misc.txt    |   1 +
  3 files changed, 2 insertions(+), 3 deletions(-)
 
 commit e8cd81f76d159f3ecf808952dab24bc07782497a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 16:00:20 2012 -0400
+Date:  Wed Jul 18 16:00:20 2012 -0400
 
     [Indic] Minor
 
@@ -3671,7 +6500,7 @@ Date:   Wed Jul 18 16:00:20 2012 -0400
 
 commit 69f26bf39c824d6bf5b1c0d410380cc5462ad5ca
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 15:45:43 2012 -0400
+Date:  Wed Jul 18 15:45:43 2012 -0400
 
     [Indic] Fix Matra reordering when base is at end of syllable
 
@@ -3679,13 +6508,13 @@ Date:   Wed Jul 18 15:45:43 2012 -0400
 
     Fixes last Tamil failure!
 
- src/hb-ot-shape-complex-indic.cc                   |    2 +-
- .../indic/script-devanagari/misc/misc.txt          |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |    2 +-
+ .../indic/script-devanagari/misc/misc.txt         |    1 +
  2 files changed, 2 insertions(+), 1 deletions(-)
 
 commit d16ccc4ae7aa8be460881042413fa2637929fede
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 15:43:55 2012 -0400
+Date:  Wed Jul 18 15:43:55 2012 -0400
 
     Leave one extra item at the end of buffer allocation
 
@@ -3698,7 +6527,7 @@ Date:   Wed Jul 18 15:43:55 2012 -0400
 
 commit 075d671f1093d2e3c58f7f45568696030f1b3efd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 15:41:53 2012 -0400
+Date:  Wed Jul 18 15:41:53 2012 -0400
 
     [Indic] Fix out-of-bounds array access
 
@@ -3707,7 +6536,7 @@ Date:   Wed Jul 18 15:41:53 2012 -0400
 
 commit dcb527242b1eca4db1e190a7802f9cd132aaf46e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 15:28:25 2012 -0400
+Date:  Wed Jul 18 15:28:25 2012 -0400
 
     [Indic] Allow joiners before matras
 
@@ -3718,20 +6547,20 @@ Date:   Wed Jul 18 15:28:25 2012 -0400
 
 commit 391cc0331749e263bdfe83a8f5f6d76f2360ee7a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 15:10:05 2012 -0400
+Date:  Wed Jul 18 15:10:05 2012 -0400
 
     [Indic] Allow halant group in Vowel and placeholder syllables
 
     Fixes 2 out of 560 Devanagari failures.  AND:
     Fixes 1 out of 2 Tamil failures.
 
- src/hb-ot-shape-complex-indic-machine.rl           |    7 ++++---
- .../indic/script-devanagari/misc/misc.txt          |    1 +
+ src/hb-ot-shape-complex-indic-machine.rl          |    7 ++++---
+ .../indic/script-devanagari/misc/misc.txt         |    1 +
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit ca4e3d3eab7b738c2b8e2a81696a28bca1b81495
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 15:05:40 2012 -0400
+Date:  Wed Jul 18 15:05:40 2012 -0400
 
     [Indic] Streamline halant/joiner in grammar
 
@@ -3740,17 +6569,17 @@ Date:   Wed Jul 18 15:05:40 2012 -0400
 
 commit 418d00dffddd95a1f27e9be15752d494c627d45e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 14:57:28 2012 -0400
+Date:  Wed Jul 18 14:57:28 2012 -0400
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic-machine.rl           |    3 ++-
- .../indic/script-devanagari/misc/misc.txt          |    3 +++
+ src/hb-ot-shape-complex-indic-machine.rl          |    3 ++-
+ .../indic/script-devanagari/misc/misc.txt         |    3 +++
  2 files changed, 5 insertions(+), 1 deletions(-)
 
 commit 4c3691d2a32ca7e54a54f7c08098fd96fa7af39e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 14:23:55 2012 -0400
+Date:  Wed Jul 18 14:23:55 2012 -0400
 
     [Indic] Hopefully minor!
 
@@ -3761,7 +6590,7 @@ Date:   Wed Jul 18 14:23:55 2012 -0400
 
 commit e092c556fb1cf38be3cea1f4b75a0d879372dfa2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 14:09:25 2012 -0400
+Date:  Wed Jul 18 14:09:25 2012 -0400
 
     [Indic] Minor
 
@@ -3770,7 +6599,7 @@ Date:   Wed Jul 18 14:09:25 2012 -0400
 
 commit 14dbdd9e39d3a869fd1521000c889c347433d22b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 18 13:13:03 2012 -0400
+Date:  Wed Jul 18 13:13:03 2012 -0400
 
     [Indic] Unbreak Tamil
 
@@ -3781,7 +6610,7 @@ Date:   Wed Jul 18 13:13:03 2012 -0400
 
 commit db8981f1e0e8625714568c6d0f11f0b317b11d0a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 18:17:30 2012 -0400
+Date:  Tue Jul 17 18:17:30 2012 -0400
 
     [Indic] Position Khmer Robat
 
@@ -3795,28 +6624,28 @@ Date:   Tue Jul 17 18:17:30 2012 -0400
  src/hb-ot-shape-complex-indic-machine.rl |   36
  +++++++++++++++--------------
  src/hb-ot-shape-complex-indic-private.hh |    7 +++--
- src/hb-ot-shape-complex-indic.cc         |   13 ++++++++++
+ src/hb-ot-shape-complex-indic.cc        |   13 ++++++++++
  3 files changed, 36 insertions(+), 20 deletions(-)
 
 commit 25bc489498ef7d0beb8fe9ab663e3f0b2f52c9c2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 17:53:03 2012 -0400
+Date:  Tue Jul 17 17:53:03 2012 -0400
 
     [Indic] Better categorize Register Shifters and Khmer Various signs
 
     Down another 500 or so Khmer failures!
 
- src/hb-ot-shape-complex-indic-machine.rl           |   14 +++++++-------
- src/hb-ot-shape-complex-indic-private.hh           |    2 +-
- src/hb-ot-shape-complex-indic.cc                   |    8 ++++----
- .../south-east-asian/script-khmer/misc/MANIFEST    |    2 ++
- .../script-khmer/misc/other-marks-invalid.txt      |    4 ++++
- .../script-khmer/misc/other-marks.txt              |    6 ++++++
+ src/hb-ot-shape-complex-indic-machine.rl          |   14 +++++++-------
+ src/hb-ot-shape-complex-indic-private.hh          |    2 +-
+ src/hb-ot-shape-complex-indic.cc                  |    8 ++++----
+ .../south-east-asian/script-khmer/misc/MANIFEST    |   2 ++
+ .../script-khmer/misc/other-marks-invalid.txt     |    4 ++++
+ .../script-khmer/misc/other-marks.txt             |    6 ++++++
  6 files changed, 24 insertions(+), 12 deletions(-)
 
 commit 39b17837b4064d59c18cebb49c1c0b5b8cc0c117
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 17:09:29 2012 -0400
+Date:  Tue Jul 17 17:09:29 2012 -0400
 
     Add hb_buffer_normalize_glyphs() and hb-shape --normalize-glyphs
 
@@ -3830,13 +6659,13 @@ Date:   Tue Jul 17 17:09:29 2012 -0400
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
  src/hb-buffer.h   |   13 +++++++++
  src/hb-private.hh |   29 +++++++++++++++-----
- util/options.cc   |    1 +
- util/options.hh   |    7 ++++-
+ util/options.cc   |   1 +
+ util/options.hh   |   7 ++++-
  5 files changed, 118 insertions(+), 8 deletions(-)
 
 commit 25e302da9a712e6f1d63b0d243a8df0d326ddba3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 14:25:14 2012 -0400
+Date:  Tue Jul 17 14:25:14 2012 -0400
 
     [Indic] Minor
 
@@ -3845,7 +6674,7 @@ Date:   Tue Jul 17 14:25:14 2012 -0400
 
 commit 5d32690a3428fa86eb26fe5fcec943a10aa95881
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 14:23:28 2012 -0400
+Date:  Tue Jul 17 14:23:28 2012 -0400
 
     [Indic] For scripts without Half forms, always choose first consonant
     as base
@@ -3862,19 +6691,19 @@ Date:   Tue Jul 17 14:23:28 2012 -0400
 
 commit 34b57149065d96f7528aaccaa7654e956ce27e93
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 14:09:32 2012 -0400
+Date:  Tue Jul 17 14:09:32 2012 -0400
 
     [Indic] Treat Khmer Register Shifters more like Nuktas
 
     Except that there may be a ZWNJ before a Register Shifter.
 
- src/hb-ot-shape-complex-indic-machine.rl           |    2 +-
- .../south-east-asian/script-khmer/misc/misc.txt    |    2 ++
+ src/hb-ot-shape-complex-indic-machine.rl          |    2 +-
+ .../south-east-asian/script-khmer/misc/misc.txt    |   2 ++
  2 files changed, 3 insertions(+), 1 deletions(-)
 
 commit 11e2a601b19861b05dbb2051d2d078c3cfd75b29
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 14:02:28 2012 -0400
+Date:  Tue Jul 17 14:02:28 2012 -0400
 
     [Indic] Minor
 
@@ -3883,7 +6712,7 @@ Date:   Tue Jul 17 14:02:28 2012 -0400
 
 commit 0201e0a4649ad5b607e50bcb9605e7a5b7143812
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 13:55:10 2012 -0400
+Date:  Tue Jul 17 13:55:10 2012 -0400
 
     [Indic] Apply 'cfar' for Khmer
 
@@ -3893,14 +6722,14 @@ Date:   Tue Jul 17 13:55:10 2012 -0400
       U+1784,U+17D2,U+179A,U+17D2,U+1782
       U+1784,U+17D2,U+1782,U+17D2,U+179A
 
- src/hb-ot-shape-complex-indic.cc                   |   16
+ src/hb-ot-shape-complex-indic.cc                  |   16
  ++++++++++++++--
- .../south-east-asian/script-khmer/misc/misc.txt    |    2 ++
+ .../south-east-asian/script-khmer/misc/misc.txt    |   2 ++
  2 files changed, 16 insertions(+), 2 deletions(-)
 
 commit 55f70ebfb95083f515d9b0044a2a65ab11484bb5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 12:50:13 2012 -0400
+Date:  Tue Jul 17 12:50:13 2012 -0400
 
     [Indic] Position final subjoined consonants (and vowels) after matras
 
@@ -3910,14 +6739,14 @@ Date:   Tue Jul 17 12:50:13 2012 -0400
 
     Fixes another 1k of the Khmer failures.  Not much left really.
 
- src/hb-ot-shape-complex-indic-private.hh           |    1 +
- src/hb-ot-shape-complex-indic.cc                   |   13 +++++++++++++
- .../south-east-asian/script-khmer/misc/misc.txt    |    2 ++
+ src/hb-ot-shape-complex-indic-private.hh          |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |   13 +++++++++++++
+ .../south-east-asian/script-khmer/misc/misc.txt    |   2 ++
  3 files changed, 16 insertions(+), 0 deletions(-)
 
 commit c50ed71e9a3df1844f564de66d54b46a696c1356
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 11:54:28 2012 -0400
+Date:  Tue Jul 17 11:54:28 2012 -0400
 
     [Indic] Recategorize Khmer coeng sign as a separate category OT_Coeng
 
@@ -3925,14 +6754,14 @@ Date:   Tue Jul 17 11:54:28 2012 -0400
     (Coeng+C) and a final subscripted independent vowel (Coeng+V).
     Fixes another 2k of Khmer failures.
 
- src/hb-ot-shape-complex-indic-machine.rl           |    7 ++++---
- src/hb-ot-shape-complex-indic.cc                   |    6 +++++-
- .../south-east-asian/script-khmer/misc/misc.txt    |    1 +
+ src/hb-ot-shape-complex-indic-machine.rl          |    7 ++++---
+ src/hb-ot-shape-complex-indic.cc                  |    6 +++++-
+ .../south-east-asian/script-khmer/misc/misc.txt    |   1 +
  3 files changed, 10 insertions(+), 4 deletions(-)
 
 commit deb521dee4fdca8c2124cfb39a205e6269d4a70d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 11:37:32 2012 -0400
+Date:  Tue Jul 17 11:37:32 2012 -0400
 
     [Indic] Add a separate Coeng class
 
@@ -3940,13 +6769,13 @@ Date:   Tue Jul 17 11:37:32 2012 -0400
 
  src/hb-ot-shape-complex-indic-machine.rl |    1 +
  src/hb-ot-shape-complex-indic-private.hh |    3 ++-
- src/hb-ot-shape-complex-indic.cc         |   26
+ src/hb-ot-shape-complex-indic.cc        |   26
  ++++++++++++++++----------
  3 files changed, 19 insertions(+), 11 deletions(-)
 
 commit 74ccc6a1322f8c48c5f2a05f04821783c4b87a14
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 11:16:19 2012 -0400
+Date:  Tue Jul 17 11:16:19 2012 -0400
 
     [Indic] Move Halant with after-base consonants
 
@@ -3959,13 +6788,13 @@ Date:   Tue Jul 17 11:16:19 2012 -0400
     should ligate with the Halant to form Ya Phala, but previously a
     reordered matras was blocking the ligation.
 
- src/hb-ot-shape-complex-indic.cc                   |   11 +++++++++++
- .../indic/script-bengali/misc/misc.txt             |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |   11 +++++++++++
+ .../indic/script-bengali/misc/misc.txt                    |    1 +
  2 files changed, 12 insertions(+), 0 deletions(-)
 
 commit d5c4edcdd6df32f2f23aca44f14838b4baab4d7a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 17 10:40:59 2012 -0400
+Date:  Tue Jul 17 10:40:59 2012 -0400
 
     [Indic] Apply presentation-forms features all at once
 
@@ -3976,46 +6805,46 @@ Date:   Tue Jul 17 10:40:59 2012 -0400
     some Ra Phala sequences for Bengali with Vrinda.  Fixes another 2% of
     Bengali failures (a couple more to go).
 
- src/hb-ot-shape-complex-indic.cc                   |    6 +++---
- .../indic/script-bengali/misc/misc.txt             |    1 +
+ src/hb-ot-shape-complex-indic.cc                  |    6 +++---
+ .../indic/script-bengali/misc/misc.txt                    |    1 +
  2 files changed, 4 insertions(+), 3 deletions(-)
 
 commit 559f70667891a3ceeffb36f40de38a4f85868945
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 22:43:17 2012 -0400
+Date:  Mon Jul 16 22:43:17 2012 -0400
 
     Fix MarkAttachmentType matching
 
     Fixes issue reported by Khaled Hosny with his Hussaini Nastaleeq font
     and sequences like those added in the previous commit.
 
- src/hb-ot-layout.cc |    2 +-
+ src/hb-ot-layout.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 6de103547e4a7fb34c833861713ea373cd912261
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 22:46:06 2012 -0400
+Date:  Mon Jul 16 22:46:06 2012 -0400
 
     [test/arabic] Add Arabic tests for mark skipping
 
     Expose a bug with Khaled's Hussaini Nastaleeq font.
 
- .../script-arabic/misc/diacritics/MANIFEST         |    1 +
- .../misc/diacritics/mark-skipping.txt              |   10 ++++++++++
+ .../script-arabic/misc/diacritics/MANIFEST        |    1 +
+ .../misc/diacritics/mark-skipping.txt             |   10 ++++++++++
  2 files changed, 11 insertions(+), 0 deletions(-)
 
 commit ad4494759fa8bfd2497800c24fa414075ed1aa61
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 22:40:21 2012 -0400
+Date:  Mon Jul 16 22:40:21 2012 -0400
 
     Minor
 
- src/hb-ot-layout.cc |    2 +-
+ src/hb-ot-layout.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit af92b4cc90e4184d5bdd8037c551ed482700114f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 20:31:24 2012 -0400
+Date:  Mon Jul 16 20:31:24 2012 -0400
 
     [Indic] Disable 'kern' in Uniscribe bug compatibility mode
 
@@ -4032,22 +6861,22 @@ Date:   Mon Jul 16 20:31:24 2012 -0400
 
 commit d96838ef951ce6170eb2dc576ebcba2262cf7008
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 20:26:57 2012 -0400
+Date:  Mon Jul 16 20:26:57 2012 -0400
 
     Allow complex shapers overriding common features
 
     In a new callback...  Currently unused by all complex shapers.
 
- src/hb-ot-shape-complex-arabic.cc  |    6 ++++++
- src/hb-ot-shape-complex-indic.cc   |    6 ++++++
- src/hb-ot-shape-complex-misc.cc    |   18 ++++++++++++++++++
- src/hb-ot-shape-complex-private.hh |   30 ++++++++++++++++++++++++++++++
- src/hb-ot-shape.cc                 |    2 ++
+ src/hb-ot-shape-complex-arabic.cc  |   6 ++++++
+ src/hb-ot-shape-complex-indic.cc   |   6 ++++++
+ src/hb-ot-shape-complex-misc.cc    |  18 ++++++++++++++++++
+ src/hb-ot-shape-complex-private.hh |  30 ++++++++++++++++++++++++++++++
+ src/hb-ot-shape.cc                |    2 ++
  5 files changed, 62 insertions(+), 0 deletions(-)
 
 commit df50b8474094f0563ccfdae12c4425a51b72add6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 19:56:29 2012 -0400
+Date:  Mon Jul 16 19:56:29 2012 -0400
 
     [Indic] Categorize other Khmer marks
 
@@ -4061,7 +6890,7 @@ Date:   Mon Jul 16 19:56:29 2012 -0400
 
 commit 8e7b5882fb4c1921c9d030d354a9b998115cdb8c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 17:04:46 2012 -0400
+Date:  Mon Jul 16 17:04:46 2012 -0400
 
     [Indic] Recognize pre-base reordering Ra anywhere in the syllable
 
@@ -4076,7 +6905,7 @@ Date:   Mon Jul 16 17:04:46 2012 -0400
 
 commit 7d09c98a1fff97127e48eae48d380dc9fcff288e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 16:45:22 2012 -0400
+Date:  Mon Jul 16 16:45:22 2012 -0400
 
     [Indic] Recognizer Register Shifter marks
 
@@ -4084,12 +6913,12 @@ Date:   Mon Jul 16 16:45:22 2012 -0400
 
  src/hb-ot-shape-complex-indic-machine.rl |    3 ++-
  src/hb-ot-shape-complex-indic-private.hh |    5 +++--
- src/hb-ot-shape-complex-indic.cc         |    2 ++
+ src/hb-ot-shape-complex-indic.cc        |    2 ++
  3 files changed, 7 insertions(+), 3 deletions(-)
 
 commit 60da763dfac96a7931d6e6bdef8b9973bd5209ab
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 16:13:32 2012 -0400
+Date:  Mon Jul 16 16:13:32 2012 -0400
 
     [GSUB/GDEF] Guess glyph classes after substitution only if no GDEF
 
@@ -4100,7 +6929,7 @@ Date:   Mon Jul 16 16:13:32 2012 -0400
 
 commit fcdc5f1c8849a7f38d9f34f64d60c6d95d7501f7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 15:52:54 2012 -0400
+Date:  Mon Jul 16 15:52:54 2012 -0400
 
     [Indic] Categorize Khmer Ro
 
@@ -4111,7 +6940,7 @@ Date:   Mon Jul 16 15:52:54 2012 -0400
 
 commit 78818124b17691ec2c647142fdb9ae743aa03dee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 15:49:08 2012 -0400
+Date:  Mon Jul 16 15:49:08 2012 -0400
 
     [Indic] Reoder pre-base reordering Ra
 
@@ -4123,7 +6952,7 @@ Date:   Mon Jul 16 15:49:08 2012 -0400
 
 commit 1a1dbe9a2787f226f3e43063da8eb6633438b0a0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 15:40:33 2012 -0400
+Date:  Mon Jul 16 15:40:33 2012 -0400
 
     [Indic] Rename
 
@@ -4132,7 +6961,7 @@ Date:   Mon Jul 16 15:40:33 2012 -0400
 
 commit 46e645ec4b59f0a278347be11f40c7df700d5bb6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 15:30:05 2012 -0400
+Date:  Mon Jul 16 15:30:05 2012 -0400
 
     [Indic] Start implementing pre-base reordering
 
@@ -4141,7 +6970,7 @@ Date:   Mon Jul 16 15:30:05 2012 -0400
 
 commit 921ce5b17daf06af8e17989a3e335b9f5df20483
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 15:26:56 2012 -0400
+Date:  Mon Jul 16 15:26:56 2012 -0400
 
     [Indic] Rename
 
@@ -4152,7 +6981,7 @@ Date:   Mon Jul 16 15:26:56 2012 -0400
 
 commit b504e060f008e95b1ba36c06600c9fea4f5d4808
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 15:21:12 2012 -0400
+Date:  Mon Jul 16 15:21:12 2012 -0400
 
     [Indic] Implement After-Main Reph positioning
 
@@ -4163,7 +6992,7 @@ Date:   Mon Jul 16 15:21:12 2012 -0400
 
 commit 17d7de91d76406d3e92db37d9eef2fc615f06e68
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 15:20:15 2012 -0400
+Date:  Mon Jul 16 15:20:15 2012 -0400
 
     [Indic] Apply 'pref' to pre-base reodering Ra
 
@@ -4174,11 +7003,11 @@ Date:   Mon Jul 16 15:20:15 2012 -0400
 
 commit 362d3db8d3527d0fef260a17d2466e92a4a25425
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 15:15:28 2012 -0400
+Date:  Mon Jul 16 15:15:28 2012 -0400
 
     [Indic] Minor
 
-    Should not be any semantic change.  In preparation for implementing
+    Should not be any semantic change. In preparation for implementing
     pre-base reordering Ra.
 
  src/hb-ot-shape-complex-indic.cc |    8 +-------
@@ -4186,7 +7015,7 @@ Date:   Mon Jul 16 15:15:28 2012 -0400
 
 commit 70fe77bb9a25922bd34f206826d8731d901fb451
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 14:52:18 2012 -0400
+Date:  Mon Jul 16 14:52:18 2012 -0400
 
     Minor
 
@@ -4196,7 +7025,7 @@ Date:   Mon Jul 16 14:52:18 2012 -0400
 
 commit 2f903215c5da2330a37abe489a3f45f7c3fd5a09
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 13:54:43 2012 -0400
+Date:  Mon Jul 16 13:54:43 2012 -0400
 
     Minor
 
@@ -4205,7 +7034,7 @@ Date:   Mon Jul 16 13:54:43 2012 -0400
 
 commit a3e04bee2c2fa648759a87e460db6b4f1b685586
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 13:47:19 2012 -0400
+Date:  Mon Jul 16 13:47:19 2012 -0400
 
     [Indic] Reorder virama only for old Indic spec
 
@@ -4214,7 +7043,7 @@ Date:   Mon Jul 16 13:47:19 2012 -0400
 
 commit 0de771b72da6b342b015e3556190821547a4011d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 13:39:36 2012 -0400
+Date:  Mon Jul 16 13:39:36 2012 -0400
 
     [Indic] Categorize Khmer consonants
 
@@ -4223,7 +7052,7 @@ Date:   Mon Jul 16 13:39:36 2012 -0400
 
 commit d487fff266258eb1af056e9704cfb09d04251ddc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 13:25:17 2012 -0400
+Date:  Mon Jul 16 13:25:17 2012 -0400
 
     Split matras without a Unicode decomposition
 
@@ -4236,7 +7065,7 @@ Date:   Mon Jul 16 13:25:17 2012 -0400
 
 commit 8aa801a6fd1a737fa20b851edf7528bdd6635b8b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 13:24:26 2012 -0400
+Date:  Mon Jul 16 13:24:26 2012 -0400
 
     [Indic] Adjust position for split matras
 
@@ -4249,7 +7078,7 @@ Date:   Mon Jul 16 13:24:26 2012 -0400
 
 commit 1feb8345a5fd92297eb6796e6dce633bafa0c76e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 13:23:40 2012 -0400
+Date:  Mon Jul 16 13:23:40 2012 -0400
 
     [GSUB] Allow 1-to-1 ligature substitutions!
 
@@ -4262,7 +7091,7 @@ Date:   Mon Jul 16 13:23:40 2012 -0400
 
 commit 29f106d7fba25e1464debd3a4831a7380d75c4c9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jul 16 12:05:35 2012 -0400
+Date:  Mon Jul 16 12:05:35 2012 -0400
 
     [Indic] Apply Above Forms
 
@@ -4271,7 +7100,7 @@ Date:   Mon Jul 16 12:05:35 2012 -0400
 
 commit fa2bd9fb63d83b657373764d4b657084d8327fc9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jul 14 12:15:54 2012 -0400
+Date:  Sat Jul 14 12:15:54 2012 -0400
 
     Further simplify atomic ops on Visual Studio
 
@@ -4280,7 +7109,7 @@ Date:   Sat Jul 14 12:15:54 2012 -0400
 
 commit 0a492357016bc9a614d2a726f2006c10af68ca58
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 13:20:49 2012 -0400
+Date:  Fri Jul 13 13:20:49 2012 -0400
 
     Minor
 
@@ -4289,17 +7118,17 @@ Date:   Fri Jul 13 13:20:49 2012 -0400
 
 commit 11c4ad439ef2b39a840f397a693b1ba643f52c21
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 11:29:31 2012 -0400
+Date:  Fri Jul 13 11:29:31 2012 -0400
 
     Add -Wcast-align
 
- configure.ac    |    3 +++
+ configure.ac   |    3 +++
  src/Makefile.am |    2 +-
  2 files changed, 4 insertions(+), 1 deletions(-)
 
 commit a98d0ab18624501ee60551304f2715361ac643da
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 10:19:10 2012 -0400
+Date:  Fri Jul 13 10:19:10 2012 -0400
 
     Make sure HB_BEGIN_DECLS / HB_END_DECLS is only used in public headers
 
@@ -4307,14 +7136,14 @@ Date:   Fri Jul 13 10:19:10 2012 -0400
     desired,
     and use these to make only declared symbols public.
 
- src/check-c-linkage-decls.sh             |   10 +++++++++-
- src/hb-fallback-shape-private.hh         |    6 ------
+ src/check-c-linkage-decls.sh            |   10 +++++++++-
+ src/hb-fallback-shape-private.hh        |    6 ------
  src/hb-ot-shape-complex-indic-machine.rl |    4 ----
  3 files changed, 9 insertions(+), 11 deletions(-)
 
 commit 5c5bc96216c9ad58243eb3ed27b253e237f08ebe
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 10:15:37 2012 -0400
+Date:  Fri Jul 13 10:15:37 2012 -0400
 
     Allow overriding HB_BEGIN_DECLS / HB_END_DECLS
 
@@ -4323,7 +7152,7 @@ Date:   Fri Jul 13 10:15:37 2012 -0400
 
 commit ec5f5f0f8a1d5b3ff98452175bb4450a59897620
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 10:00:42 2012 -0400
+Date:  Fri Jul 13 10:00:42 2012 -0400
 
     Don't export inline methods
 
@@ -4332,7 +7161,7 @@ Date:   Fri Jul 13 10:00:42 2012 -0400
 
 commit 50a4e78b530563917eb606ff3b96dcc9eed5b3ee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 09:48:39 2012 -0400
+Date:  Fri Jul 13 09:48:39 2012 -0400
 
     Check for exported weak symbols
 
@@ -4345,16 +7174,16 @@ Date:   Fri Jul 13 09:48:39 2012 -0400
 
 commit b5aeb95afeb13a66177caada9f5d5ad4cddbd35f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 09:45:54 2012 -0400
+Date:  Fri Jul 13 09:45:54 2012 -0400
 
     Make hb_in_range() static
 
- src/hb-private.hh |    2 +-
+ src/hb-private.hh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 271c8f89075607c689938b4f5e60323d9a1acd70
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 09:32:30 2012 -0400
+Date:  Fri Jul 13 09:32:30 2012 -0400
 
     Minor
 
@@ -4363,7 +7192,7 @@ Date:   Fri Jul 13 09:32:30 2012 -0400
 
 commit 391f1ff5d894b60bfe0f606be436ffe7e43f7455
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jul 13 09:04:07 2012 -0400
+Date:  Fri Jul 13 09:04:07 2012 -0400
 
     Fix _InterlockedCompareExchangePointer on x86
 
@@ -4372,7 +7201,7 @@ Date:   Fri Jul 13 09:04:07 2012 -0400
 
 commit 2023e2b54d91924dddfd228ffdbb46021135b068
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 11 19:00:30 2012 -0400
+Date:  Wed Jul 11 19:00:30 2012 -0400
 
     [ft] Disable ppem setting
 
@@ -4386,7 +7215,7 @@ Date:   Wed Jul 11 19:00:30 2012 -0400
 
 commit cdf7444505a7ae49d20f9ba6776dea92c1fde2a6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 11 18:52:39 2012 -0400
+Date:  Wed Jul 11 18:52:39 2012 -0400
 
     [ft] Use unfitted kerning if x_ppem is zero
 
@@ -4395,7 +7224,7 @@ Date:   Wed Jul 11 18:52:39 2012 -0400
 
 commit 6d08c7f1b3601095f9a12630045331dd0fe75380
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 11 18:01:27 2012 -0400
+Date:  Wed Jul 11 18:01:27 2012 -0400
 
     Revert "Towards templatizing common Lookup types"
 
@@ -4411,7 +7240,7 @@ Date:   Wed Jul 11 18:01:27 2012 -0400
 
 commit 552bf3a9f9651311084b7979805dbdc18c0335ca
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 11 16:44:51 2012 -0400
+Date:  Wed Jul 11 16:44:51 2012 -0400
 
     Bump WINNT version requested from 500 to 600
 
@@ -4420,22 +7249,22 @@ Date:   Wed Jul 11 16:44:51 2012 -0400
     will hide
     those symbols.
 
- src/hb-uniscribe.cc |    2 +-
- src/hb-uniscribe.h  |    2 +-
+ src/hb-uniscribe.cc |   2 +-
+ src/hb-uniscribe.h  |   2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 9a5b421a64db1bb23d5c6ebbc3bf3f3a5513dc36
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 11 16:35:04 2012 -0400
+Date:  Wed Jul 11 16:35:04 2012 -0400
 
     Fix build with no Unicode funcs implementations provided
 
- src/hb-unicode-private.hh |    1 +
+ src/hb-unicode-private.hh |   1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 6efe1eca660135096f05987ac0ef9b635de6cdfd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jul 11 15:30:08 2012 -0400
+Date:  Wed Jul 11 15:30:08 2012 -0400
 
     Update git.mk to upstream
 
@@ -4444,7 +7273,7 @@ Date:   Wed Jul 11 15:30:08 2012 -0400
 
 commit 727135f3a9938c1ebd5b9f5015a46c7ccc8573c5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 3 22:15:35 2012 -0400
+Date:  Tue Jul 3 22:15:35 2012 -0400
 
     Towards templatizing common Lookup types
 
@@ -4456,30 +7285,30 @@ Date:   Tue Jul 3 22:15:35 2012 -0400
 
 commit 1167c7bfc9e61f145e11da4881968293a4d3c0a9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jul 3 11:38:46 2012 -0400
+Date:  Tue Jul 3 11:38:46 2012 -0400
 
     Minor
 
- test/shaping/texts/in-tree/shaper-thai/MANIFEST    |    2 +-
- .../texts/in-tree/shaper-thai/misc/MANIFEST        |    1 -
- .../texts/in-tree/shaper-thai/misc/misc.txt        |    6 ------
- .../texts/in-tree/shaper-thai/script-thai/MANIFEST |    1 +
- .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |    1 +
- .../shaper-thai/script-thai/misc/sara-am.txt       |    4 ++++
+ test/shaping/texts/in-tree/shaper-thai/MANIFEST    |   2 +-
+ .../texts/in-tree/shaper-thai/misc/MANIFEST       |    1 -
+ .../texts/in-tree/shaper-thai/misc/misc.txt       |    6 ------
+ .../texts/in-tree/shaper-thai/script-thai/MANIFEST |   1 +
+ .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |   1 +
+ .../shaper-thai/script-thai/misc/sara-am.txt      |    4 ++++
  6 files changed, 7 insertions(+), 8 deletions(-)
 
 commit aa116582e69d18777448e7993078e5d6335ddfed
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 29 10:50:12 2012 -0400
+Date:  Fri Jun 29 10:50:12 2012 -0400
 
     Minor
 
- .../indic/script-malayalam/misc/misc.txt           |    1 +
+ .../indic/script-malayalam/misc/misc.txt          |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 1f13c7185f02ea18d4fadd2ea8ad444bea863c39
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jun 27 10:07:27 2012 -0400
+Date:  Wed Jun 27 10:07:27 2012 -0400
 
     Add TODO item
 
@@ -4488,17 +7317,17 @@ Date:   Wed Jun 27 10:07:27 2012 -0400
 
 commit 12f5c0a222a2f0aebe63c0d367937a0ff985474a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 26 11:16:13 2012 -0400
+Date:  Tue Jun 26 11:16:13 2012 -0400
 
     Fix check for Intel atomic ops
 
- configure.ac             |    9 +++++----
+ configure.ac            |    9 +++++----
  src/hb-atomic-private.hh |    2 +-
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 6932a41fb61ffc2901c260587b1e98ed9c2a7ea1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 26 10:46:31 2012 -0400
+Date:  Tue Jun 26 10:46:31 2012 -0400
 
     Use octal-escaped UTF-8 characters instead of plain text
 
@@ -4509,19 +7338,19 @@ Date:   Tue Jun 26 10:46:31 2012 -0400
 
 commit 8c0ea7bcb4409aaf8c96ad641f2db30003228ad0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jun 24 13:20:56 2012 -0400
+Date:  Sun Jun 24 13:20:56 2012 -0400
 
     Disable introspection again
 
     Until I figure out the build issues.  Sigh...
 
- configure.ac    |    2 +-
+ configure.ac   |    2 +-
  src/Makefile.am |   42 +++++++++++++++++++++---------------------
  2 files changed, 22 insertions(+), 22 deletions(-)
 
 commit 8c5f5e6f5ec2b6a219fbdfc955f6299325a0adde
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jun 17 14:58:59 2012 -0400
+Date:  Sun Jun 17 14:58:59 2012 -0400
 
     Minor
 
@@ -4530,7 +7359,7 @@ Date:   Sun Jun 17 14:58:59 2012 -0400
 
 commit 49f8e0cd9a5493ae26857c43bac0711cdf47c80d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 16 15:40:03 2012 -0400
+Date:  Sat Jun 16 15:40:03 2012 -0400
 
     GStaticMutex is deprecated
 
@@ -4539,48 +7368,48 @@ Date:   Sat Jun 16 15:40:03 2012 -0400
 
 commit 5e113a4b7921ced6af2d53460a7a2f1d0185c02a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 16 15:26:13 2012 -0400
+Date:  Sat Jun 16 15:26:13 2012 -0400
 
     g_thread_init() is deprecated
 
- test/api/hb-test.h |    2 ++
+ test/api/hb-test.h |   2 ++
  1 files changed, 2 insertions(+), 0 deletions(-)
 
 commit 1bc1cb3603167f5da309336f7018c8b0608ac104
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 16 15:21:55 2012 -0400
+Date:  Sat Jun 16 15:21:55 2012 -0400
 
     Make source more digestable for gobject-introspection
 
- src/hb-blob.cc            |    2 +-
- src/hb-blob.h             |    2 +-
- src/hb-buffer-private.hh  |    4 ++--
- src/hb-buffer.h           |    6 +++---
- src/hb-common.cc          |    2 +-
- src/hb-common.h           |    4 ++--
- src/hb-font-private.hh    |    6 +++---
- src/hb-font.cc            |    2 +-
- src/hb-font.h             |    8 ++++----
- src/hb-set-private.hh     |    2 +-
- src/hb-set.h              |    2 +-
- src/hb-shape.h            |    2 +-
- src/hb-unicode-private.hh |    2 +-
- src/hb-unicode.h          |    2 +-
+ src/hb-blob.cc                   |    2 +-
+ src/hb-blob.h            |    2 +-
+ src/hb-buffer-private.hh  |   4 ++--
+ src/hb-buffer.h          |    6 +++---
+ src/hb-common.cc         |    2 +-
+ src/hb-common.h          |    4 ++--
+ src/hb-font-private.hh    |   6 +++---
+ src/hb-font.cc                   |    2 +-
+ src/hb-font.h            |    8 ++++----
+ src/hb-set-private.hh    |    2 +-
+ src/hb-set.h             |    2 +-
+ src/hb-shape.h                   |    2 +-
+ src/hb-unicode-private.hh |   2 +-
+ src/hb-unicode.h         |    2 +-
  14 files changed, 23 insertions(+), 23 deletions(-)
 
 commit 84d781e54cc75c81a06ba43fd7b1a74b8c7d9591
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 16 15:21:41 2012 -0400
+Date:  Sat Jun 16 15:21:41 2012 -0400
 
     Flesh out gobject-introspection stuff a bit
 
- configure.ac    |    1 +
+ configure.ac   |    1 +
  src/Makefile.am |   23 +++++++++++++++++++++--
  2 files changed, 22 insertions(+), 2 deletions(-)
 
 commit 49ee12ccd00870d4976339dc546c74eaf08a8fc0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 16 14:53:51 2012 -0400
+Date:  Sat Jun 16 14:53:51 2012 -0400
 
     Add TODO item
 
@@ -4589,7 +7418,7 @@ Date:   Sat Jun 16 14:53:51 2012 -0400
 
 commit d3c8115d1ad09404b8970b98e6b5ab74510a35f6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 12 09:52:57 2012 -0400
+Date:  Tue Jun 12 09:52:57 2012 -0400
 
     Minor
 
@@ -4598,7 +7427,7 @@ Date:   Tue Jun 12 09:52:57 2012 -0400
 
 commit 2cf301968cb8c1150cead0ab909457cdd3ee2d01
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 14:58:01 2012 -0400
+Date:  Sat Jun 9 14:58:01 2012 -0400
 
     Add hb_object_lock/unlock()
 
@@ -4607,7 +7436,7 @@ Date:   Sat Jun 9 14:58:01 2012 -0400
 
 commit 6a5661f1e69c937083e8d976cb12429b99180d54
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 03:26:16 2012 -0400
+Date:  Sat Jun 9 03:26:16 2012 -0400
 
     Ugh
 
@@ -4616,18 +7445,18 @@ Date:   Sat Jun 9 03:26:16 2012 -0400
 
 commit f211d5c291b4c947cfd732e873627567173057e4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 03:11:22 2012 -0400
+Date:  Sat Jun 9 03:11:22 2012 -0400
 
-    More Oops!  Fix fast-path with sub-type==0
+    More Oops! Fix fast-path with sub-type==0
 
  src/hb-ot-layout-gpos-table.hh |    2 +-
  src/hb-ot-layout-gsub-table.hh |    2 +-
- util/shape-consumer.hh         |    2 ++
+ util/shape-consumer.hh                |    2 ++
  3 files changed, 4 insertions(+), 2 deletions(-)
 
 commit b1de6aa1f33b228afe231c8209aef90a5fa1ee5d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 03:07:59 2012 -0400
+Date:  Sat Jun 9 03:07:59 2012 -0400
 
     Oops!
 
@@ -4637,7 +7466,7 @@ Date:   Sat Jun 9 03:07:59 2012 -0400
 
 commit b12e2549cbcd4f1ef46e66c75533686ee560f59b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 03:05:20 2012 -0400
+Date:  Sat Jun 9 03:05:20 2012 -0400
 
     Minor
 
@@ -4646,7 +7475,7 @@ Date:   Sat Jun 9 03:05:20 2012 -0400
 
 commit faf0f20253d954cc4cfa4c967ece7573a5ddae3b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 03:02:36 2012 -0400
+Date:  Sat Jun 9 03:02:36 2012 -0400
 
     Add sanitize() logic for fast-paths
 
@@ -4656,7 +7485,7 @@ Date:   Sat Jun 9 03:02:36 2012 -0400
 
 commit 4e766ff28d1fb831ded20666799787478129c07c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 02:53:57 2012 -0400
+Date:  Sat Jun 9 02:53:57 2012 -0400
 
     Add fast-path for GPOS too
 
@@ -4667,7 +7496,7 @@ Date:   Sat Jun 9 02:53:57 2012 -0400
 
 commit 993c51915f503f74ee00eee646b67bf2e3f73596
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 02:48:16 2012 -0400
+Date:  Sat Jun 9 02:48:16 2012 -0400
 
     Add fast-path to GSUB to check coverage
 
@@ -4680,7 +7509,7 @@ Date:   Sat Jun 9 02:48:16 2012 -0400
 
 commit f19e0b0099ec73b8fedccacff4902403f5eabc42
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 02:26:57 2012 -0400
+Date:  Sat Jun 9 02:26:57 2012 -0400
 
     Match input before backtrack
 
@@ -4691,17 +7520,17 @@ Date:   Sat Jun 9 02:26:57 2012 -0400
 
 commit 67bb9e8cea49a44be6996515e1c7d8cdc95a77e6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 02:02:46 2012 -0400
+Date:  Sat Jun 9 02:02:46 2012 -0400
 
     Add set add_coverage() to Coverage()
 
- src/hb-ot-layout-common-private.hh |   24 ++++++++++++++++++++++++
- src/hb-set-private.hh              |    5 +++++
+ src/hb-ot-layout-common-private.hh |  24 ++++++++++++++++++++++++
+ src/hb-set-private.hh             |    5 +++++
  2 files changed, 29 insertions(+), 0 deletions(-)
 
 commit 4952f0aa5b2f4368d9e3418252e0a1b9294cd5ee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 01:39:11 2012 -0400
+Date:  Sat Jun 9 01:39:11 2012 -0400
 
     Minor
 
@@ -4710,16 +7539,16 @@ Date:   Sat Jun 9 01:39:11 2012 -0400
 
 commit ad6a6f22401d6256e34521d0f52e91348c5ed4c9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 01:21:02 2012 -0400
+Date:  Sat Jun 9 01:21:02 2012 -0400
 
     Minor
 
- src/hb-ot-layout.cc |    2 +-
+ src/hb-ot-layout.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 46617a42133fbab151de4111a74dcbdc4e769c74
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 01:18:58 2012 -0400
+Date:  Sat Jun 9 01:18:58 2012 -0400
 
     Fix cache implementation
 
@@ -4728,69 +7557,69 @@ Date:   Sat Jun 9 01:18:58 2012 -0400
 
 commit ce47613889aa3ff9b0067d3e51ba63cfdb139adb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 01:10:26 2012 -0400
+Date:  Sat Jun 9 01:10:26 2012 -0400
 
     Micro-optimize
 
     I know...
 
  src/hb-ot-layout-gsubgpos-private.hh |    3 +-
- src/hb-ot-layout.cc                  |   46
+ src/hb-ot-layout.cc                 |   46
  ++++++++++++++++++++-------------
  2 files changed, 30 insertions(+), 19 deletions(-)
 
 commit 70416de298b811ab6be53a1c67f0d2531d99cd46
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 00:56:41 2012 -0400
+Date:  Sat Jun 9 00:56:41 2012 -0400
 
     Minor
 
- src/hb-open-type-private.hh |    2 --
+ src/hb-open-type-private.hh |   2 --
  1 files changed, 0 insertions(+), 2 deletions(-)
 
 commit 99159e52a3c9d5ae6c0fbdec64e7ed684fa70b61
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 00:50:40 2012 -0400
+Date:  Sat Jun 9 00:50:40 2012 -0400
 
     Use linear search for small counts
 
     I see about 8% speedup with long strings with DejaVu Sans.
 
- src/hb-open-type-private.hh |   19 ++++++++++++++-----
+ src/hb-open-type-private.hh |  19 ++++++++++++++-----
  1 files changed, 14 insertions(+), 5 deletions(-)
 
 commit caf0412690542e58e23246dccc4b2fb83bd652ec
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 00:26:32 2012 -0400
+Date:  Sat Jun 9 00:26:32 2012 -0400
 
     Minor
 
- src/hb-ot-layout-common-private.hh |    2 +-
+ src/hb-ot-layout-common-private.hh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 0f8fea71a66b1e01ee4398967db464393f478d42
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 00:24:38 2012 -0400
+Date:  Sat Jun 9 00:24:38 2012 -0400
 
     Minor.  Hide _hb_ot_layout_get_glyph_property()
 
- src/hb-ot-layout-private.hh |    4 ----
- src/hb-ot-layout.cc         |    2 +-
+ src/hb-ot-layout-private.hh |   4 ----
+ src/hb-ot-layout.cc        |    2 +-
  2 files changed, 1 insertions(+), 5 deletions(-)
 
 commit 44b8ee0c90d7b1dd91e5848114141e3186534a0f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 9 00:23:24 2012 -0400
+Date:  Sat Jun 9 00:23:24 2012 -0400
 
     Minor
 
  src/hb-ot-layout-gpos-table.hh |    3 ++-
- src/hb-ot-layout.cc            |    2 +-
+ src/hb-ot-layout.cc           |    2 +-
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 commit 7b84c536c10ab90ed96a033d88e9ad232d46c5b8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 22:04:23 2012 -0400
+Date:  Fri Jun 8 22:04:23 2012 -0400
 
     In MarkBase attachment, only attach to first of a MultipleSubst
     sequence
@@ -4807,7 +7636,7 @@ Date:   Fri Jun 8 22:04:23 2012 -0400
 
 commit ec57e0c5655ced5109c4638bf802772d336448fd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 21:47:23 2012 -0400
+Date:  Fri Jun 8 21:47:23 2012 -0400
 
     Set lig_comp for MultipleSubst components
 
@@ -4819,18 +7648,18 @@ Date:   Fri Jun 8 21:47:23 2012 -0400
 
 commit e085fcf7ca302eb7802a032197c022819e7e7074
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 21:45:00 2012 -0400
+Date:  Fri Jun 8 21:45:00 2012 -0400
 
     Remove unused buffer->replace_glyphs_be16
 
- src/hb-buffer-private.hh             |    3 ---
- src/hb-buffer.cc                     |   23 -----------------------
+ src/hb-buffer-private.hh            |    3 ---
+ src/hb-buffer.cc                    |   23 -----------------------
  src/hb-ot-layout-gsubgpos-private.hh |    8 --------
  3 files changed, 0 insertions(+), 34 deletions(-)
 
 commit 3ec77d6ae0510dc2c0ec64382c4948bc6e109844
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 21:44:06 2012 -0400
+Date:  Fri Jun 8 21:44:06 2012 -0400
 
     Don't use replace_glyphs_be for MultipleSubst
 
@@ -4840,7 +7669,7 @@ Date:   Fri Jun 8 21:44:06 2012 -0400
 
 commit 4b7192125ffd295091d6b3a0bdfca7011947c2ca
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 21:41:46 2012 -0400
+Date:  Fri Jun 8 21:41:46 2012 -0400
 
     Minor
 
@@ -4850,17 +7679,17 @@ Date:   Fri Jun 8 21:41:46 2012 -0400
 
 commit 4508789f4b5e0ece5620d35598aeeb7ecbe3e3aa
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 21:32:43 2012 -0400
+Date:  Fri Jun 8 21:32:43 2012 -0400
 
     Add test for static initializers and other C++ stuff
 
- src/Makefile.am           |    3 ++-
+ src/Makefile.am          |    3 ++-
  src/check-static-inits.sh |   33 +++++++++++++++++++++++++++++++++
  2 files changed, 35 insertions(+), 1 deletions(-)
 
 commit 56bd259b9ac22dd98913c8ca2e2cf7b30b632373
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 21:29:18 2012 -0400
+Date:  Fri Jun 8 21:29:18 2012 -0400
 
     Minor
 
@@ -4869,7 +7698,7 @@ Date:   Fri Jun 8 21:29:18 2012 -0400
 
 commit 4538b47bf08e73e7f5cce6337df5fe154233c168
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 21:01:45 2012 -0400
+Date:  Fri Jun 8 21:01:45 2012 -0400
 
     Remove done TODO items
 
@@ -4878,7 +7707,7 @@ Date:   Fri Jun 8 21:01:45 2012 -0400
 
 commit bc8357ea7b4c0d7c715aae353176434fb9460205
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 21:01:20 2012 -0400
+Date:  Fri Jun 8 21:01:20 2012 -0400
 
     Merge clusters during normalization
 
@@ -4887,7 +7716,7 @@ Date:   Fri Jun 8 21:01:20 2012 -0400
 
 commit fe3dabc08df7501010564f8844bd4d11771cc6a4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:56:05 2012 -0400
+Date:  Fri Jun 8 20:56:05 2012 -0400
 
     Minor
 
@@ -4896,7 +7725,7 @@ Date:   Fri Jun 8 20:56:05 2012 -0400
 
 commit e88e14421a33ca5bdfd76bc0b2f801fcb6e78911
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:55:21 2012 -0400
+Date:  Fri Jun 8 20:55:21 2012 -0400
 
     Use merge_clusters instead of open-coding
 
@@ -4905,16 +7734,16 @@ Date:   Fri Jun 8 20:55:21 2012 -0400
 
 commit 330a2af3ff0e12c01b3b451357b8bdc83b2e9b47
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:40:02 2012 -0400
+Date:  Fri Jun 8 20:40:02 2012 -0400
 
     Use merge_clusters when forming Unicode clusters
 
- src/hb-ot-shape.cc |    4 +++-
+ src/hb-ot-shape.cc |   4 +++-
  1 files changed, 3 insertions(+), 1 deletions(-)
 
 commit bd300df9adf955c1e69b3783c1c061876940fb8b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:35:18 2012 -0400
+Date:  Fri Jun 8 20:35:18 2012 -0400
 
     Minor
 
@@ -4923,18 +7752,18 @@ Date:   Fri Jun 8 20:35:18 2012 -0400
 
 commit e51d2b6ed1c794ac28c5610bfd01dbc9fb383633
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:33:27 2012 -0400
+Date:  Fri Jun 8 20:33:27 2012 -0400
 
     Extend into main buffer if extension hit end of out-buffer merging
     clusters
 
- src/hb-buffer.cc                |    5 +++++
+ src/hb-buffer.cc               |    5 +++++
  src/hb-ot-shape-complex-misc.cc |    9 ---------
  2 files changed, 5 insertions(+), 9 deletions(-)
 
 commit 5ced012d9f58c51d557a835593c3277e35fe3b35
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:31:32 2012 -0400
+Date:  Fri Jun 8 20:31:32 2012 -0400
 
     Extend end when merging clusters in out-buffer
 
@@ -4943,17 +7772,17 @@ Date:   Fri Jun 8 20:31:32 2012 -0400
 
 commit 72c0a1878313e7232d554bc226f4c6dc01418a95
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:30:03 2012 -0400
+Date:  Fri Jun 8 20:30:03 2012 -0400
 
     Extend clusters backward in out-buffer
 
- src/hb-buffer.cc                |    8 ++++++++
+ src/hb-buffer.cc               |    8 ++++++++
  src/hb-ot-shape-complex-misc.cc |    2 --
  2 files changed, 8 insertions(+), 2 deletions(-)
 
 commit cd5891493df06fdb92e1ae526d29dee8df250235
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:27:53 2012 -0400
+Date:  Fri Jun 8 20:27:53 2012 -0400
 
     Extend clusters backwards, into the out-buffer too
 
@@ -4962,7 +7791,7 @@ Date:   Fri Jun 8 20:27:53 2012 -0400
 
 commit 77471e037122548bfc08cacea6fbb472831c34f3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:21:02 2012 -0400
+Date:  Fri Jun 8 20:21:02 2012 -0400
 
     Clear output buffer before calling GSUB pause functions
 
@@ -4971,7 +7800,7 @@ Date:   Fri Jun 8 20:21:02 2012 -0400
 
 commit cafa6f372721fd6b0a7c0da68b9421d3e94931bc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:17:10 2012 -0400
+Date:  Fri Jun 8 20:17:10 2012 -0400
 
     When merging clusters, extend the end
 
@@ -4980,7 +7809,7 @@ Date:   Fri Jun 8 20:17:10 2012 -0400
 
 commit 28ce5fa454b54f728044ee12a9dbe7d016783d4a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 20:13:56 2012 -0400
+Date:  Fri Jun 8 20:13:56 2012 -0400
 
     Merge clusters when ligating
 
@@ -4989,7 +7818,7 @@ Date:   Fri Jun 8 20:13:56 2012 -0400
 
 commit 2bb1761ccb7d300744ced6427165f4ea75ddf96c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 19:29:44 2012 -0400
+Date:  Fri Jun 8 19:29:44 2012 -0400
 
     Minor, use next_glyph()
 
@@ -4998,25 +7827,25 @@ Date:   Fri Jun 8 19:29:44 2012 -0400
 
 commit 5f68f8675e5ccaee91f5a90d86bc3b022b9a54e4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 19:23:43 2012 -0400
+Date:  Fri Jun 8 19:23:43 2012 -0400
 
     Minor
 
- src/hb-ot-shape.cc |    1 +
+ src/hb-ot-shape.cc |   1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 872969126756456a69bf958f3df6e56a26e57b0a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 14:18:30 2012 -0400
+Date:  Fri Jun 8 14:18:30 2012 -0400
 
     Increase Uniscribe MAX_ITEMS
 
- src/hb-uniscribe.cc |    2 +-
+ src/hb-uniscribe.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit dbffa4c83d29c689ee4cd8a1c53e84521028c711
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 14:08:32 2012 -0400
+Date:  Fri Jun 8 14:08:32 2012 -0400
 
     Fix Uniscribe charset matching
 
@@ -5025,25 +7854,25 @@ Date:   Fri Jun 8 14:08:32 2012 -0400
 
     There still remains a problem with the Uniscribe backend, in that if a
     font with the same family name is installed, and is newer, the native
-    one is preferred over the font we provide.  Fixing it requires
+    one is preferred over the font we provide. Fixing it requires
     rewriting
     the name table with a unique family name...
 
- src/hb-uniscribe.cc |    1 +
+ src/hb-uniscribe.cc |   1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 82e8bd8628aeb37835fb019a71b6bdac87824b97
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 11:48:29 2012 -0400
+Date:  Fri Jun 8 11:48:29 2012 -0400
 
     Remove unused code
 
- src/hb-uniscribe.cc |    4 +---
+ src/hb-uniscribe.cc |   4 +---
  1 files changed, 1 insertions(+), 3 deletions(-)
 
 commit 6da9dbff21b47fb10794b8d6cb747393c9eab7dd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 10:53:35 2012 -0400
+Date:  Fri Jun 8 10:53:35 2012 -0400
 
     Remove zero-width chars in the fallback shaper too
 
@@ -5052,9 +7881,9 @@ Date:   Fri Jun 8 10:53:35 2012 -0400
 
 commit 68b76121f83fc9b87dc84f03e8bef38d4332734d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 10:43:49 2012 -0400
+Date:  Fri Jun 8 10:43:49 2012 -0400
 
-    Fix regressions introduced by sed.  Ouch!
+    Fix regressions introduced by sed. Ouch!
 
     Introduced in 99c2695759a6af855d565f4994bbdf220570bb48.
     Broken mark-mark and mark-ligature stuff.
@@ -5065,91 +7894,91 @@ Date:   Fri Jun 8 10:43:49 2012 -0400
 
 commit 0dd86f9f6849d82d60a99e66b6928795cfb2a3c7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 10:23:03 2012 -0400
+Date:  Fri Jun 8 10:23:03 2012 -0400
 
     Whitespace
 
- src/hb-uniscribe.cc |  144
+ src/hb-uniscribe.cc | 144
  +++++++++++++++++++++++++-------------------------
  1 files changed, 72 insertions(+), 72 deletions(-)
 
 commit 8e7beba7c3b3dea3cb3b7e280c5aab4f13b92d31
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 10:22:06 2012 -0400
+Date:  Fri Jun 8 10:22:06 2012 -0400
 
     Fix Uniscribe clusters with direction-overriden Arabic
 
- src/hb-uniscribe.cc |    4 ++--
+ src/hb-uniscribe.cc |   4 ++--
  1 files changed, 2 insertions(+), 2 deletions(-)
 
 commit b069c3c31bfbbf160eb897c7474be9ea90ed4fc1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 10:10:29 2012 -0400
+Date:  Fri Jun 8 10:10:29 2012 -0400
 
     Really fix override-direction in Uniscribe
 
- src/hb-uniscribe.cc |   10 +++++++---
+ src/hb-uniscribe.cc |  10 +++++++---
  1 files changed, 7 insertions(+), 3 deletions(-)
 
 commit fcd6f5326166e993b8f5222efbaffe916da98f0a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 09:59:43 2012 -0400
+Date:  Fri Jun 8 09:59:43 2012 -0400
 
     Unbreak Uniscribe
 
     Oops.  hb_tag_t and OPENTYPE_TAG have different endianness.  Perhaps
     something to add API for in hb-uniscribe.h
 
- src/hb-private.hh   |   12 +++++++++++-
- src/hb-uniscribe.cc |    8 ++++----
+ src/hb-private.hh   |  12 +++++++++++-
+ src/hb-uniscribe.cc |   8 ++++----
  2 files changed, 15 insertions(+), 5 deletions(-)
 
 commit 29eac8f591fdb86f1c4fdc0a6ab63910ff286b84
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 09:26:17 2012 -0400
+Date:  Fri Jun 8 09:26:17 2012 -0400
 
     Override direction in Uniscribe backend
 
     Matches OT backend now.
 
- src/hb-uniscribe.cc |    2 +-
+ src/hb-uniscribe.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 1c1233e57686d77d89fe3ac1dc53de9ee60798c1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 8 09:20:53 2012 -0400
+Date:  Fri Jun 8 09:20:53 2012 -0400
 
     Make Uniscribe backend respect selected script
 
- src/hb-uniscribe.cc |   15 +++++++++++++--
+ src/hb-uniscribe.cc |  15 +++++++++++++--
  1 files changed, 13 insertions(+), 2 deletions(-)
 
 commit 0bb0f5d41976ae27c5c7a51cbb82144b48315a4b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jun 7 17:42:48 2012 -0400
+Date:  Thu Jun 7 17:42:48 2012 -0400
 
     Add note re _NullPool
 
- src/hb-open-type-private.hh |    1 +
+ src/hb-open-type-private.hh |   1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 2a3d911fe0ff5d6442659d3381d5b08c30ee2896
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jun 7 17:31:46 2012 -0400
+Date:  Thu Jun 7 17:31:46 2012 -0400
 
     Fix alignment-requirement missmatch
 
     Detected by clang and lots of cmdline options.
 
- src/hb-buffer-private.hh             |    2 +-
- src/hb-buffer.cc                     |    5 +++--
+ src/hb-buffer-private.hh            |    2 +-
+ src/hb-buffer.cc                    |    5 +++--
  src/hb-ot-layout-gsub-table.hh       |    4 ++--
  src/hb-ot-layout-gsubgpos-private.hh |    2 +-
  4 files changed, 7 insertions(+), 6 deletions(-)
 
 commit 6095de1635441af16340c7b2c5a6b4c531ec242f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jun 7 15:48:18 2012 -0400
+Date:  Thu Jun 7 15:48:18 2012 -0400
 
     Fix clang warning with NO_MT path
 
@@ -5158,28 +7987,28 @@ Date:   Thu Jun 7 15:48:18 2012 -0400
 
 commit a18280a8ce9128fc9d75f8a367ae8ce0886a9599
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jun 7 15:44:12 2012 -0400
+Date:  Thu Jun 7 15:44:12 2012 -0400
 
     Fix warnings produced by clang analyzer
 
- src/hb-icu.cc          |    6 ++++--
- test/api/test-blob.c   |    2 +-
+ src/hb-icu.cc         |    6 ++++--
+ test/api/test-blob.c  |    2 +-
  test/api/test-buffer.c |    4 ++--
- util/helper-cairo.cc   |    2 +-
+ util/helper-cairo.cc  |    2 +-
  4 files changed, 8 insertions(+), 6 deletions(-)
 
 commit 7ec83051c05777c0e6e2eea6ef6c71effede9527
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jun 7 13:32:57 2012 -0400
+Date:  Thu Jun 7 13:32:57 2012 -0400
 
     Fix warnings
 
- util/ansi-print.cc |   30 +++++++++++++-----------------
+ util/ansi-print.cc |  30 +++++++++++++-----------------
  1 files changed, 13 insertions(+), 17 deletions(-)
 
 commit 73cb02de2dd28b09d4aa76230132248215cfe83d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jun 6 11:29:25 2012 -0400
+Date:  Wed Jun 6 11:29:25 2012 -0400
 
     Minor
 
@@ -5188,18 +8017,18 @@ Date:   Wed Jun 6 11:29:25 2012 -0400
 
 commit 79e2b4791fe95ede9a1e6b1c71ccc6e36c4fc0e5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jun 6 11:27:17 2012 -0400
+Date:  Wed Jun 6 11:27:17 2012 -0400
 
     Fix ASSERT_POD on clang
 
     As reported by bashi.  Not tested.
 
- src/hb-private.hh |    8 ++++++--
+ src/hb-private.hh |   8 ++++++--
  1 files changed, 6 insertions(+), 2 deletions(-)
 
 commit 4282d2f3771d6510c27b62e54cc1254d6f2389b3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jun 6 03:42:36 2012 -0400
+Date:  Wed Jun 6 03:42:36 2012 -0400
 
     Enabled ICU again
 
@@ -5208,33 +8037,33 @@ Date:   Wed Jun 6 03:42:36 2012 -0400
 
 commit 6220e5fc0dad728e67a92e838d3ac275d032f2c7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jun 6 03:30:09 2012 -0400
+Date:  Wed Jun 6 03:30:09 2012 -0400
 
     Add ASSERT_POD for most objects
 
- src/hb-blob.cc            |    1 +
- src/hb-buffer-private.hh  |    2 ++
- src/hb-font-private.hh    |    3 +++
- src/hb-object-private.hh  |    2 ++
- src/hb-private.hh         |    2 +-
- src/hb-set-private.hh     |    4 +++-
- src/hb-unicode-private.hh |    1 +
+ src/hb-blob.cc                   |    1 +
+ src/hb-buffer-private.hh  |   2 ++
+ src/hb-font-private.hh    |   3 +++
+ src/hb-object-private.hh  |   2 ++
+ src/hb-private.hh        |    2 +-
+ src/hb-set-private.hh    |    4 +++-
+ src/hb-unicode-private.hh |   1 +
  7 files changed, 13 insertions(+), 2 deletions(-)
 
 commit a00a63b5ef503fafa87e26b517732b2214e01719
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jun 6 03:07:01 2012 -0400
+Date:  Wed Jun 6 03:07:01 2012 -0400
 
     Add macros to check that types are POD
 
- configure.ac                |    1 +
- src/hb-open-type-private.hh |   32 ++++++++++++++++++++------------
- src/hb-private.hh           |   24 ++++++++++++++++++++++++
+ configure.ac               |    1 +
+ src/hb-open-type-private.hh |  32 ++++++++++++++++++++------------
+ src/hb-private.hh          |   24 ++++++++++++++++++++++++
  3 files changed, 45 insertions(+), 12 deletions(-)
 
 commit 61eb60c129e865e92f6a5767a88c44a391f4d413
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 21:14:04 2012 -0400
+Date:  Tue Jun 5 21:14:04 2012 -0400
 
     Don't link to libstdc++
 
@@ -5245,7 +8074,7 @@ Date:   Tue Jun 5 21:14:04 2012 -0400
 
 commit 81a4b9fd4eb8995c5930db1df3669db93661eb52
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 20:49:51 2012 -0400
+Date:  Tue Jun 5 20:49:51 2012 -0400
 
     Remove unused hb_static_mutex_t
 
@@ -5254,7 +8083,7 @@ Date:   Tue Jun 5 20:49:51 2012 -0400
 
 commit 4a3a9897b3698dd09c3e880b3ddd4db24c6fb460
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 20:39:07 2012 -0400
+Date:  Tue Jun 5 20:39:07 2012 -0400
 
     Disable Intel atomic ops on mingw32
 
@@ -5265,45 +8094,45 @@ Date:   Tue Jun 5 20:39:07 2012 -0400
 
 commit 0594a2448440208efa0acac9a5d8d52d43108289
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 20:35:40 2012 -0400
+Date:  Tue Jun 5 20:35:40 2012 -0400
 
     Cleanup TRUE/FALSE vs true/false
 
- src/hb-atomic-private.hh           |    4 +-
- src/hb-blob.cc                     |   28 ++++++++--------
- src/hb-buffer-private.hh           |    2 +-
- src/hb-buffer.cc                   |   38 ++++++++++++------------
- src/hb-buffer.h                    |    4 +-
- src/hb-fallback-shape.cc           |    2 +-
- src/hb-font.cc                     |   22 +++++++-------
- src/hb-ft.cc                       |   22 +++++++-------
- src/hb-glib.cc                     |   16 +++++-----
- src/hb-graphite2.cc                |    8 ++--
- src/hb-icu.cc                      |   30 +++++++++---------
- src/hb-ot-layout.cc                |   28 ++++++++--------
- src/hb-ot-shape-complex-private.hh |    2 +-
- src/hb-ot-shape-normalize.cc       |   16 +++++-----
- src/hb-ot-shape.cc                 |    4 +-
- src/hb-private.hh                  |   18 ++++-------
- src/hb-set.cc                      |    2 +-
- src/hb-set.h                       |    2 +-
- src/hb-shape.cc                    |    6 ++--
- src/hb-tt-font.cc                  |   12 ++++----
- src/hb-unicode.cc                  |    8 ++--
- src/hb-uniscribe.cc                |   18 +++++-----
- src/main.cc                        |    2 +-
- util/hb-shape.cc                   |    2 +-
- util/helper-cairo.cc               |   16 +++++-----
- util/main-font-text.hh             |    2 +-
- util/options.cc                    |   58
+ src/hb-atomic-private.hh          |    4 +-
+ src/hb-blob.cc                            |   28 ++++++++--------
+ src/hb-buffer-private.hh          |    2 +-
+ src/hb-buffer.cc                  |   38 ++++++++++++------------
+ src/hb-buffer.h                   |    4 +-
+ src/hb-fallback-shape.cc          |    2 +-
+ src/hb-font.cc                            |   22 +++++++-------
+ src/hb-ft.cc                      |   22 +++++++-------
+ src/hb-glib.cc                            |   16 +++++-----
+ src/hb-graphite2.cc               |    8 ++--
+ src/hb-icu.cc                     |   30 +++++++++---------
+ src/hb-ot-layout.cc               |   28 ++++++++--------
+ src/hb-ot-shape-complex-private.hh |   2 +-
+ src/hb-ot-shape-normalize.cc      |   16 +++++-----
+ src/hb-ot-shape.cc                |    4 +-
+ src/hb-private.hh                 |   18 ++++-------
+ src/hb-set.cc                     |    2 +-
+ src/hb-set.h                      |    2 +-
+ src/hb-shape.cc                   |    6 ++--
+ src/hb-tt-font.cc                 |   12 ++++----
+ src/hb-unicode.cc                 |    8 ++--
+ src/hb-uniscribe.cc               |   18 +++++-----
+ src/main.cc                       |    2 +-
+ util/hb-shape.cc                  |    2 +-
+ util/helper-cairo.cc              |   16 +++++-----
+ util/main-font-text.hh                    |    2 +-
+ util/options.cc                   |   58
  ++++++++++++++++++------------------
- util/options.hh                    |    2 +-
- util/view-cairo.hh                 |    2 +-
+ util/options.hh                   |    2 +-
+ util/view-cairo.hh                |    2 +-
  29 files changed, 185 insertions(+), 191 deletions(-)
 
 commit e1ac38f8dd04c29d2d4140f5a492cdaf25d72901
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 20:31:49 2012 -0400
+Date:  Tue Jun 5 20:31:49 2012 -0400
 
     Fix inert buffer set_length() with zero
 
@@ -5314,18 +8143,18 @@ Date:   Tue Jun 5 20:31:49 2012 -0400
 
 commit 04bc1eebe7a304c0e6f86ab6814c65889f152602
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 20:16:56 2012 -0400
+Date:  Tue Jun 5 20:16:56 2012 -0400
 
     Add configure tests for Intel atomic intrinsics
 
- configure.ac             |   17 +++++++++++++++++
+ configure.ac            |   17 +++++++++++++++++
  src/hb-atomic-private.hh |   12 ++++++------
  src/hb-mutex-private.hh  |    2 +-
  3 files changed, 24 insertions(+), 7 deletions(-)
 
 commit 68c75b46977beb57e35082db26be712b3cd65678
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 19:55:46 2012 -0400
+Date:  Tue Jun 5 19:55:46 2012 -0400
 
     Shuffle
 
@@ -5334,52 +8163,52 @@ Date:   Tue Jun 5 19:55:46 2012 -0400
 
 commit f64b2ebf82c5f355cd95806478cd30c00b1a2731
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 19:23:29 2012 -0400
+Date:  Tue Jun 5 19:23:29 2012 -0400
 
     Remove last static initializer
 
     We're free!  Lazy or immediate...
 
- src/hb-ft.cc    |    2 +
+ src/hb-ft.cc   |    2 +
  src/hb-shape.cc |  150
  +++++++++++++++++++++++++++++++++++++++---------------
  2 files changed, 110 insertions(+), 42 deletions(-)
 
 commit 4a8a529068fc380298bb05b9d878bede3e9f4da1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 19:17:02 2012 -0400
+Date:  Tue Jun 5 19:17:02 2012 -0400
 
     Make hb-view err if all shapers failed
 
- util/view-cairo.hh |    2 +-
+ util/view-cairo.hh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 04aed572f112b96a6033cd6c3df7bdba5e29e93c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 18:30:19 2012 -0400
+Date:  Tue Jun 5 18:30:19 2012 -0400
 
     Make hb-ft static-initializer free
 
  src/hb-common.cc |    5 ++---
- src/hb-ft.cc     |   38 +++++++++++++++++++++++++++-----------
+ src/hb-ft.cc    |   38 +++++++++++++++++++++++++++-----------
  2 files changed, 29 insertions(+), 14 deletions(-)
 
 commit be4560a3b5e8599cbe2b29a01a60c21c9e2b194f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 18:14:03 2012 -0400
+Date:  Tue Jun 5 18:14:03 2012 -0400
 
     Undo default unicode-funcs to avoid static initializer again
 
- src/hb-buffer.cc          |    2 +-
- src/hb-glib.cc            |   23 ++++++++++++-----------
- src/hb-icu.cc             |   24 +++++++++++++-----------
+ src/hb-buffer.cc         |    2 +-
+ src/hb-glib.cc                   |   23 ++++++++++++-----------
+ src/hb-icu.cc            |   24 +++++++++++++-----------
  src/hb-unicode-private.hh |   10 +++++-----
- src/hb-unicode.cc         |   26 ++++++++++++++------------
+ src/hb-unicode.cc        |   26 ++++++++++++++------------
  5 files changed, 45 insertions(+), 40 deletions(-)
 
 commit 093171cceca63e48e735bbf05a2c11b1b7e95ef1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 18:00:45 2012 -0400
+Date:  Tue Jun 5 18:00:45 2012 -0400
 
     Implement lock-free hb_language_t
 
@@ -5391,7 +8220,7 @@ Date:   Tue Jun 5 18:00:45 2012 -0400
 
 commit 6843ce01be0df501ef3149a2c1c54cdfb693195d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 17:27:20 2012 -0400
+Date:  Tue Jun 5 17:27:20 2012 -0400
 
     Add atomic-pointer functions
 
@@ -5403,21 +8232,21 @@ Date:   Tue Jun 5 17:27:20 2012 -0400
 
 commit cdafe3a7d8483ac586e2c16487e2a09164e0f65c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 16:34:49 2012 -0400
+Date:  Tue Jun 5 16:34:49 2012 -0400
 
     Add gcc intrinsics implementations for atomic and mutex
 
- configure.ac             |    4 +-
+ configure.ac            |    4 +-
  src/hb-atomic-private.hh |   11 ++++++++-
  src/hb-mutex-private.hh  |   51
  +++++++++++++++++++++++++++++++++++++++------
  src/hb-object-private.hh |    4 ++-
- src/hb-warning.cc        |   14 ++++++------
+ src/hb-warning.cc       |   14 ++++++------
  5 files changed, 65 insertions(+), 19 deletions(-)
 
 commit d970d2899b36a2fbd002b224b8bd37b0906fdd5f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 16:06:28 2012 -0400
+Date:  Tue Jun 5 16:06:28 2012 -0400
 
     Add gcc implementation for atomic ops
 
@@ -5426,21 +8255,21 @@ Date:   Tue Jun 5 16:06:28 2012 -0400
 
 commit 0e253e97af71e2a7ead153589f61fd579a247502
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 15:37:19 2012 -0400
+Date:  Tue Jun 5 15:37:19 2012 -0400
 
     Add a mutex to object header
 
     Removes one more static-initialization.  A few more to go.
 
- src/hb-common.cc         |   24 +++++++++---------------
+ src/hb-common.cc        |   24 +++++++++---------------
  src/hb-mutex-private.hh  |   19 +++++++------------
  src/hb-object-private.hh |   36 ++++++++++++++++++++++--------------
- src/hb-private.hh        |   11 +++++------
+ src/hb-private.hh       |   11 +++++------
  4 files changed, 43 insertions(+), 47 deletions(-)
 
 commit a2b471df821b32625d127f83b2f90e6d6a967e7e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 15:17:44 2012 -0400
+Date:  Tue Jun 5 15:17:44 2012 -0400
 
     Remove static initializers from indic
 
@@ -5450,25 +8279,25 @@ Date:   Tue Jun 5 15:17:44 2012 -0400
 
 commit f06ab8a4262c759b4723614fd28f55ee77aa8466
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 12:31:51 2012 -0400
+Date:  Tue Jun 5 12:31:51 2012 -0400
 
     Better hide nil objects and make them const
 
- src/hb-blob.cc            |   34 +++++++++++-----------
- src/hb-buffer.cc          |   39 ++++++++++++-------------
- src/hb-font.cc            |   70
+ src/hb-blob.cc                   |   34 +++++++++++-----------
+ src/hb-buffer.cc         |   39 ++++++++++++-------------
+ src/hb-font.cc                   |   70
  ++++++++++++++++++++++-----------------------
- src/hb-ft.cc              |   49 ++++++++++++++-----------------
- src/hb-glib.cc            |   25 ++++++++--------
- src/hb-icu.cc             |   25 ++++++++--------
- src/hb-set.cc             |   16 +++++-----
+ src/hb-ft.cc             |   49 ++++++++++++++-----------------
+ src/hb-glib.cc                   |   25 ++++++++--------
+ src/hb-icu.cc            |   25 ++++++++--------
+ src/hb-set.cc            |   16 +++++-----
  src/hb-unicode-private.hh |   11 +++----
- src/hb-unicode.cc         |   34 +++++++++++-----------
+ src/hb-unicode.cc        |   34 +++++++++++-----------
  9 files changed, 146 insertions(+), 157 deletions(-)
 
 commit bf93b636c4963cbc32d5fba7ace1053db6719192
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 14:17:32 2012 -0400
+Date:  Tue Jun 5 14:17:32 2012 -0400
 
     Remove constructor from hb_prealloced_array_t
 
@@ -5479,13 +8308,13 @@ Date:   Tue Jun 5 14:17:32 2012 -0400
     coming soon.
 
  src/hb-object-private.hh |    3 +++
- src/hb-private.hh        |    4 +++-
- src/hb-set-private.hh    |    1 +
+ src/hb-private.hh       |    4 +++-
+ src/hb-set-private.hh   |    1 +
  3 files changed, 7 insertions(+), 1 deletions(-)
 
 commit 7037291aacb858f8090fd7d9028c196cc1a21703
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 13:30:11 2012 -0400
+Date:  Tue Jun 5 13:30:11 2012 -0400
 
     Check for atexit()
 
@@ -5494,7 +8323,7 @@ Date:   Tue Jun 5 13:30:11 2012 -0400
 
 commit f1971a217424bd6db5c7072ba5cf197f318d4e47
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jun 5 13:04:20 2012 -0400
+Date:  Tue Jun 5 13:04:20 2012 -0400
 
     Fix warnings
 
@@ -5503,58 +8332,58 @@ Date:   Tue Jun 5 13:04:20 2012 -0400
 
 commit b0a6e58bb3dda72dcce37d54d987591630a3db6c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jun 4 10:21:22 2012 -0400
+Date:  Mon Jun 4 10:21:22 2012 -0400
 
     s/script-punjabi/script-gurmukhi/
 
- .../texts/in-tree/shaper-indic/indic/MANIFEST      |    2 +-
- .../shaper-indic/indic/script-gurmukhi/MANIFEST    |    2 +
- .../indic/script-gurmukhi/misc/MANIFEST            |    1 +
- .../indic/script-gurmukhi/misc/misc.txt            |    1 +
- .../indic/script-gurmukhi/utrrs/LICENSE            |   19 +++
- .../indic/script-gurmukhi/utrrs/MANIFEST           |    3 +
- .../indic/script-gurmukhi/utrrs/README             |   13 ++
- .../indic/script-gurmukhi/utrrs/SOURCES            |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   38 +++++
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |    9 ++
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 ++
- .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |    6 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   10 ++
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-gurmukhi/utrrs/codepoint/MANIFEST |    7 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   22 +++
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |    2 +
- .../indic/script-gurmukhi/utrrs/gpos/MANIFEST      |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  152
+ .../texts/in-tree/shaper-indic/indic/MANIFEST     |    2 +-
+ .../shaper-indic/indic/script-gurmukhi/MANIFEST    |   2 +
+ .../indic/script-gurmukhi/misc/MANIFEST           |    1 +
+ .../indic/script-gurmukhi/misc/misc.txt           |    1 +
+ .../indic/script-gurmukhi/utrrs/LICENSE           |   19 +++
+ .../indic/script-gurmukhi/utrrs/MANIFEST          |    3 +
+ .../indic/script-gurmukhi/utrrs/README                    |   13 ++
+ .../indic/script-gurmukhi/utrrs/SOURCES           |    2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 +++++
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |   9 ++
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 ++
+ .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |   6 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 ++
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-gurmukhi/utrrs/codepoint/MANIFEST |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 +++
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   2 +
+ .../indic/script-gurmukhi/utrrs/gpos/MANIFEST     |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  152
  ++++++++++++++++++++
- .../indic/script-gurmukhi/utrrs/gsub/MANIFEST      |    1 +
- .../shaper-indic/indic/script-punjabi/MANIFEST     |    2 -
- .../indic/script-punjabi/misc/MANIFEST             |    1 -
- .../indic/script-punjabi/misc/misc.txt             |    1 -
- .../indic/script-punjabi/utrrs/LICENSE             |   19 ---
- .../indic/script-punjabi/utrrs/MANIFEST            |    3 -
- .../shaper-indic/indic/script-punjabi/utrrs/README |   13 --
- .../indic/script-punjabi/utrrs/SOURCES             |    2 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   38 -----
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |    9 --
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 --
- .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |    6 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   10 --
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 -
- .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |    7 -
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   22 ---
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |    2 -
- .../indic/script-punjabi/utrrs/gpos/MANIFEST       |    2 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  152
+ .../indic/script-gurmukhi/utrrs/gsub/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |   2 -
+ .../indic/script-punjabi/misc/MANIFEST                    |    1 -
+ .../indic/script-punjabi/misc/misc.txt                    |    1 -
+ .../indic/script-punjabi/utrrs/LICENSE                    |   19 ---
+ .../indic/script-punjabi/utrrs/MANIFEST           |    3 -
+ .../shaper-indic/indic/script-punjabi/utrrs/README |  13 --
+ .../indic/script-punjabi/utrrs/SOURCES                    |    2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 -----
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |   9 --
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 --
+ .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |   6 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 --
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
+ .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |   7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 ---
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   2 -
+ .../indic/script-punjabi/utrrs/gpos/MANIFEST      |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  152
  --------------------
- .../indic/script-punjabi/utrrs/gsub/MANIFEST       |    1 -
+ .../indic/script-punjabi/utrrs/gsub/MANIFEST      |    1 -
  41 files changed, 309 insertions(+), 309 deletions(-)
 
 commit c1885483120d4b686b2fe95b217dce7248e040b1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jun 4 08:56:00 2012 -0400
+Date:  Mon Jun 4 08:56:00 2012 -0400
 
     Add --verbose to hb-shape
 
@@ -5566,7 +8395,7 @@ Date:   Mon Jun 4 08:56:00 2012 -0400
 
 commit 9fc7a11469113d31d8095757c4fc038c3427d44a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jun 4 08:28:19 2012 -0400
+Date:  Mon Jun 4 08:28:19 2012 -0400
 
     Remove comma at the end of enum
 
@@ -5577,16 +8406,16 @@ Date:   Mon Jun 4 08:28:19 2012 -0400
 
 commit 3b8fd9c48f4bde368bf2d465c148b9743a9216ee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jun 3 15:54:19 2012 -0400
+Date:  Sun Jun 3 15:54:19 2012 -0400
 
     Remove const from ref_count.ref_count
 
     According to Tom Hacohen this was breaking build with some compilers.
 
     In file included from hb-buffer-private.hh:35:0,
-                     from hb-ot-map-private.hh:32,
-                     from hb-ot-shape-private.hh:32,
-                     from hb-ot-shape.cc:29:
+                    from hb-ot-map-private.hh:32,
+                    from hb-ot-shape-private.hh:32,
+                    from hb-ot-shape.cc:29:
     hb-object-private.hh: In constructor
     '_hb_object_header_t::_hb_object_header_t()':
     hb-object-private.hh:97:8: error: uninitialized const member in
@@ -5608,7 +8437,7 @@ Date:   Sun Jun 3 15:54:19 2012 -0400
 
 commit 70600dbf626808a30fb0fd8b7ae860e64d9ffe87
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jun 3 15:52:51 2012 -0400
+Date:  Sun Jun 3 15:52:51 2012 -0400
 
     Minor
 
@@ -5617,56 +8446,56 @@ Date:   Sun Jun 3 15:52:51 2012 -0400
 
 commit ae62166519291057316a9d15cea3f1570fcb5eaf
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 2 12:21:19 2012 -0400
+Date:  Sat Jun 2 12:21:19 2012 -0400
 
     [util] Minor
 
- util/options.cc        |    4 +---
- util/options.hh        |   26 ++++++++++++++------------
+ util/options.cc       |    4 +---
+ util/options.hh       |   26 ++++++++++++++------------
  util/shape-consumer.hh |    4 +++-
  3 files changed, 18 insertions(+), 16 deletions(-)
 
 commit 5db0683a822f70c914468430cda6487cee740ae3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jun 2 12:13:08 2012 -0400
+Date:  Sat Jun 2 12:13:08 2012 -0400
 
     [util] Make hb-shape continue shaping other lines if shapers failed
 
- util/hb-ot-shape-closure.cc |    3 ++
- util/hb-shape.cc            |   36 ++++++++++++++++++++++++-----
- util/main-font-text.hh      |    2 +-
- util/options.cc             |   34 +++++++++++++++++++++------
- util/options.hh             |   33 ++++++++++++++-------------
- util/shape-consumer.hh      |   17 +++++++++++--
- util/view-cairo.cc          |   47 ++++++--------------------------------
- util/view-cairo.hh          |   52
+ util/hb-ot-shape-closure.cc |   3 ++
+ util/hb-shape.cc           |   36 ++++++++++++++++++++++++-----
+ util/main-font-text.hh      |   2 +-
+ util/options.cc            |   34 +++++++++++++++++++++------
+ util/options.hh            |   33 ++++++++++++++-------------
+ util/shape-consumer.hh      |  17 +++++++++++--
+ util/view-cairo.cc         |   47 ++++++--------------------------------
+ util/view-cairo.hh         |   52
  +++++++++++++++++++++++++++++++++++++-----
  8 files changed, 143 insertions(+), 81 deletions(-)
 
 commit 96a9ef0c9fca8d58d8dc6baf6b262d96587abee0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 1 13:46:26 2012 -0400
+Date:  Fri Jun 1 13:46:26 2012 -0400
 
     Remove tab character like other "zero-width" characters
 
     Uniscribe does that, this make comparing results to Uniscribe
     easier.
 
- src/hb-unicode-private.hh |    3 ++-
+ src/hb-unicode-private.hh |   3 ++-
  1 files changed, 2 insertions(+), 1 deletions(-)
 
 commit cd6a5493411fea30a04466128e1a37b4d89c6a72
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jun 1 13:45:25 2012 -0400
+Date:  Fri Jun 1 13:45:25 2012 -0400
 
     Remove unused variable
 
- util/hb-ot-shape-closure.cc |    2 --
+ util/hb-ot-shape-closure.cc |   2 --
  1 files changed, 0 insertions(+), 2 deletions(-)
 
 commit 0558d55bac7fb9279aac859b465e7c0e3ad97492
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon May 28 10:46:47 2012 -0400
+Date:  Mon May 28 10:46:47 2012 -0400
 
     Remove hb_atomic_int_set/get()
 
@@ -5681,56 +8510,56 @@ Date:   Mon May 28 10:46:47 2012 -0400
 
 commit 4efdffec095e19ceeb4b319d60201e84ece30fd9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 27 22:39:48 2012 -0400
+Date:  Sun May 27 22:39:48 2012 -0400
 
     Minor Malayalam test case
 
     From https://bugs.freedesktop.org/show_bug.cgi?id=45166
 
- .../indic/script-malayalam/misc/misc.txt           |    1 +
+ .../indic/script-malayalam/misc/misc.txt          |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit dfff5b3021016d3a472c100272fd8e2f52307860
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 27 22:07:04 2012 -0400
+Date:  Sun May 27 22:07:04 2012 -0400
 
     Add Myanmar test case
 
- .../in-tree/shaper-indic/south-east-asian/MANIFEST |    1 +
- .../south-east-asian/script-myanmar/MANIFEST       |    1 +
- .../south-east-asian/script-myanmar/misc/MANIFEST  |    1 +
- .../south-east-asian/script-myanmar/misc/misc.txt  |    1 +
+ .../in-tree/shaper-indic/south-east-asian/MANIFEST |   1 +
+ .../south-east-asian/script-myanmar/MANIFEST      |    1 +
+ .../south-east-asian/script-myanmar/misc/MANIFEST  |   1 +
+ .../south-east-asian/script-myanmar/misc/misc.txt  |   1 +
  4 files changed, 4 insertions(+), 0 deletions(-)
 
 commit bce095524b3e69a47f8e88a2fb02d6ab537f9b0a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 27 11:29:21 2012 -0400
+Date:  Sun May 27 11:29:21 2012 -0400
 
     Add hb_font_get_glyph_name() and hb_font_get_glyph_from_name()
 
- TODO                        |    1 +
- src/hb-font-private.hh      |    2 +
- src/hb-font.cc              |   80
+ TODO                       |    1 +
+ src/hb-font-private.hh      |   2 +
+ src/hb-font.cc                     |   80
  +++++++++++++++++++++++++++++++++----------
- src/hb-font.h               |   28 +++++++++++++++
- src/hb-ft.cc                |   52 +++++++++++++++++++++++-----
- util/hb-ot-shape-closure.cc |    9 ++---
- util/options.cc             |   10 ++----
+ src/hb-font.h              |   28 +++++++++++++++
+ src/hb-ft.cc               |   52 +++++++++++++++++++++++-----
+ util/hb-ot-shape-closure.cc |   9 ++---
+ util/options.cc            |   10 ++----
  7 files changed, 142 insertions(+), 40 deletions(-)
 
 commit bc145658bdaeaeea0cdbd719e2756f09a2dbfb48
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 27 10:45:57 2012 -0400
+Date:  Sun May 27 10:45:57 2012 -0400
 
     Warn if no Unicode functions implementation is found
 
- src/hb-unicode-private.hh |    1 +
- src/hb-warning.cc         |   13 +++++++++++++
+ src/hb-unicode-private.hh |   1 +
+ src/hb-warning.cc        |   13 +++++++++++++
  2 files changed, 14 insertions(+), 0 deletions(-)
 
 commit a3547330fa88e30a138f6f17e60d9c7d1e316622
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 27 10:20:47 2012 -0400
+Date:  Sun May 27 10:20:47 2012 -0400
 
     Cleanup atomic ops on OS X
 
@@ -5739,12 +8568,12 @@ Date:   Sun May 27 10:20:47 2012 -0400
 
 commit e4b6d503c5575ddbf49249e3fef693d75ae75170
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 27 10:11:13 2012 -0400
+Date:  Sun May 27 10:11:13 2012 -0400
 
     Don't use atomic ops in hb_cache_t
 
     We don't care about linearizability, so unprotected int read/write
-    are enough, no need for expensive memory barriers.  It's a cache,
+    are enough, no need for expensive memory barriers. It's a cache,
     that's all.
 
  src/hb-cache-private.hh |    8 ++++----
@@ -5752,7 +8581,7 @@ Date:   Sun May 27 10:11:13 2012 -0400
 
 commit 819faa05307aa192015f4b43d8103a35e87d6cc7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 27 10:09:18 2012 -0400
+Date:  Sun May 27 10:09:18 2012 -0400
 
     Minor
 
@@ -5761,7 +8590,7 @@ Date:   Sun May 27 10:09:18 2012 -0400
 
 commit 303d5850ec0516e198db241456b0cfc4899ef9c0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 27 10:01:13 2012 -0400
+Date:  Sun May 27 10:01:13 2012 -0400
 
     Fix Windows atomic get/set
 
@@ -5777,7 +8606,7 @@ Date:   Sun May 27 10:01:13 2012 -0400
 
 commit 8f8956a55fff95e5ad529d2f124c9528d1f4f81d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 25 14:30:24 2012 -0400
+Date:  Fri May 25 14:30:24 2012 -0400
 
     [util] Add hidden --shaper that is equivalent of --shapers
 
@@ -5787,40 +8616,40 @@ Date:   Fri May 25 14:30:24 2012 -0400
 
 commit 29ce446d3161b7ea5874352e5f8eb33cd59338c3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 25 14:17:54 2012 -0400
+Date:  Fri May 25 14:17:54 2012 -0400
 
     Add set iterator
 
- src/hb-set-private.hh       |   26 +++++++++++++++++++++++---
- src/hb-set.cc               |    7 +++++++
- src/hb-set.h                |   11 +++++++++--
- util/hb-ot-shape-closure.cc |    8 +++++---
+ src/hb-set-private.hh      |   26 +++++++++++++++++++++++---
+ src/hb-set.cc              |    7 +++++++
+ src/hb-set.h               |   11 +++++++++--
+ util/hb-ot-shape-closure.cc |   8 +++++---
  4 files changed, 44 insertions(+), 8 deletions(-)
 
 commit 62c3e111fce0ad34960871134c2eb6da572df303
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 25 13:48:00 2012 -0400
+Date:  Fri May 25 13:48:00 2012 -0400
 
     Add set symmetric difference
 
  src/hb-set-private.hh |    5 +++++
- src/hb-set.cc         |    7 +++++++
- src/hb-set.h          |    6 ++++++
+ src/hb-set.cc        |    7 +++++++
+ src/hb-set.h         |    6 ++++++
  3 files changed, 18 insertions(+), 0 deletions(-)
 
 commit 27aba594c90b4444c35273a38f5fedc8e09d9a88
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 24 15:00:01 2012 -0400
+Date:  Thu May 24 15:00:01 2012 -0400
 
     Minor
 
  src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- src/hb-ot-shape-complex-indic.cc         |    2 +-
+ src/hb-ot-shape-complex-indic.cc        |    2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit cde1c0114ba66a45d907e81a49bf625e0dc946b0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 24 10:46:39 2012 -0400
+Date:  Thu May 24 10:46:39 2012 -0400
 
     Fix hb_atomic_int_set() implementation for HB_NO_MT
 
@@ -5831,7 +8660,7 @@ Date:   Thu May 24 10:46:39 2012 -0400
 
 commit 3b9b7133bea787f787170beea073f185e36d2327
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 23 22:00:25 2012 -0400
+Date:  Wed May 23 22:00:25 2012 -0400
 
     Update TODO
 
@@ -5840,24 +8669,24 @@ Date:   Wed May 23 22:00:25 2012 -0400
 
 commit ff3524c21aabf5d0d6014d1ce1b3e12ca5f0990f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 23 21:50:43 2012 -0400
+Date:  Wed May 23 21:50:43 2012 -0400
 
     Add Arabic diacritics tests
 
- .../shaper-arabic/script-arabic/misc/MANIFEST      |    2 +-
- .../script-arabic/misc/diacritics/MANIFEST         |    5 +
- .../script-arabic/misc/diacritics/lam-alef.txt     |   28 +
- .../misc/diacritics/language-arabic.txt            |  695
+ .../shaper-arabic/script-arabic/misc/MANIFEST     |    2 +-
+ .../script-arabic/misc/diacritics/MANIFEST        |    5 +
+ .../script-arabic/misc/diacritics/lam-alef.txt     |  28 +
+ .../misc/diacritics/language-arabic.txt           |  695
  ++++++++++++++++++++
- .../misc/diacritics/language-persian.txt           |   48 ++
- .../misc/diacritics/language-urdu.txt              |  188 ++++++
- .../misc/diacritics/ligature-diacritics.txt        |    1 +
- .../script-arabic/misc/ligature-diacritics.txt     |    1 -
+ .../misc/diacritics/language-persian.txt          |   48 ++
+ .../misc/diacritics/language-urdu.txt             |  188 ++++++
+ .../misc/diacritics/ligature-diacritics.txt       |    1 +
+ .../script-arabic/misc/ligature-diacritics.txt     |   1 -
  8 files changed, 966 insertions(+), 2 deletions(-)
 
 commit ed2f1363a391add41f10cff18792003583a10257
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue May 22 22:12:22 2012 -0400
+Date:  Tue May 22 22:12:22 2012 -0400
 
     Fix substitution glyph class propagation
 
@@ -5872,47 +8701,47 @@ Date:   Tue May 22 22:12:22 2012 -0400
 
 commit a6de53664df9549a5dc93752647ea1d3bb336f7b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 18 15:04:35 2012 -0400
+Date:  Fri May 18 15:04:35 2012 -0400
 
     Add CJK Compatibility Ideographs tests
 
     From:
     http://people.mozilla.org/~jdaggett/tests/cjkcompat.html
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |    3 +-
- .../in-tree/shaper-default/script-han/MANIFEST     |    1 +
- .../shaper-default/script-han/misc/MANIFEST        |    1 +
- .../shaper-default/script-han/misc/cjk-compat.txt  |    3 +
- .../shaper-default/script-hiragana/MANIFEST        |    1 +
- .../shaper-default/script-hiragana/misc/MANIFEST   |    2 +
- .../script-hiragana/misc/kazuraki-liga-lines.txt   |    8 +++
- .../script-hiragana/misc/kazuraki-liga.txt         |   53
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |   3 +-
+ .../in-tree/shaper-default/script-han/MANIFEST     |   1 +
+ .../shaper-default/script-han/misc/MANIFEST       |    1 +
+ .../shaper-default/script-han/misc/cjk-compat.txt  |   3 +
+ .../shaper-default/script-hiragana/MANIFEST       |    1 +
+ .../shaper-default/script-hiragana/misc/MANIFEST   |   2 +
+ .../script-hiragana/misc/kazuraki-liga-lines.txt   |   8 +++
+ .../script-hiragana/misc/kazuraki-liga.txt        |   53
  ++++++++++++++++++++
- .../shaper-default/script-japanese/MANIFEST        |    1 -
- .../shaper-default/script-japanese/misc/MANIFEST   |    2 -
- .../script-japanese/misc/kazuraki-liga-lines.txt   |    8 ---
- .../script-japanese/misc/kazuraki-liga.txt         |   53
+ .../shaper-default/script-japanese/MANIFEST       |    1 -
+ .../shaper-default/script-japanese/misc/MANIFEST   |   2 -
+ .../script-japanese/misc/kazuraki-liga-lines.txt   |   8 ---
+ .../script-japanese/misc/kazuraki-liga.txt        |   53
  --------------------
  12 files changed, 71 insertions(+), 65 deletions(-)
 
 commit 20fdb0f41d81b226e076a4830d4b0d03da31fc19
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 22:04:45 2012 -0400
+Date:  Thu May 17 22:04:45 2012 -0400
 
     Add a lock-free cache type for int->int functions
 
     To be used for cmap and advance caching if desired.
 
- TODO                    |    2 +
- src/Makefile.am         |    1 +
+ TODO                   |    2 +
+ src/Makefile.am        |    1 +
  src/hb-cache-private.hh |   72
  +++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-font.cc          |    2 +
+ src/hb-font.cc                 |    2 +
  4 files changed, 77 insertions(+), 0 deletions(-)
 
 commit bd908b4f102b5ae18a3ad4a8b137994cf74b86ce
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 22:02:08 2012 -0400
+Date:  Thu May 17 22:02:08 2012 -0400
 
     Implement hb_atomic_int_set() for OS X
 
@@ -5921,7 +8750,7 @@ Date:   Thu May 17 22:02:08 2012 -0400
 
 commit 022a05ae90f30bcddff413022e0cd801809b5390
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 21:53:24 2012 -0400
+Date:  Thu May 17 21:53:24 2012 -0400
 
     Minor
 
@@ -5931,7 +8760,7 @@ Date:   Thu May 17 21:53:24 2012 -0400
 
 commit 22afd66a30d01b6771405e76777306f600807bea
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 21:23:49 2012 -0400
+Date:  Thu May 17 21:23:49 2012 -0400
 
     Add hb_atomic_int_set() again
 
@@ -5940,28 +8769,28 @@ Date:   Thu May 17 21:23:49 2012 -0400
 
 commit 4aa7258cb16176a89e1547fee8f86571fdd98307
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 21:01:04 2012 -0400
+Date:  Thu May 17 21:01:04 2012 -0400
 
     Fix type conflicts on Windows without glib
 
- src/hb-tt-font.cc |    3 ++-
+ src/hb-tt-font.cc |   3 ++-
  1 files changed, 2 insertions(+), 1 deletions(-)
 
 commit f039e79d5438a8fc4a3ec11a387bbfc0f6b83024
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 20:55:12 2012 -0400
+Date:  Thu May 17 20:55:12 2012 -0400
 
     Don't use min/max as function names
 
     They can be macros on some systems.  Eg. mingw32.
 
  src/hb-set-private.hh |    4 ++--
- src/hb-set.cc         |    4 ++--
+ src/hb-set.cc        |    4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 34961e3198e27fa37fd4cfdad12ef86a2e9e51c2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 20:50:38 2012 -0400
+Date:  Thu May 17 20:50:38 2012 -0400
 
     Prefer native atomic/mutex ops to glib's
 
@@ -5971,21 +8800,21 @@ Date:   Thu May 17 20:50:38 2012 -0400
 
 commit ec3ba4b96fc4f262db1ff9f906628c32f26c9b7d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 20:30:46 2012 -0400
+Date:  Thu May 17 20:30:46 2012 -0400
 
     Move atomic ops into their own header
 
- src/Makefile.am          |    1 +
+ src/Makefile.am         |    1 +
  src/hb-atomic-private.hh |   78
  ++++++++++++++++++++++++++++++++++++++++++++++
  src/hb-mutex-private.hh  |    1 -
  src/hb-object-private.hh |   52 +-----------------------------
- src/hb-warning.cc        |    2 +-
+ src/hb-warning.cc       |    2 +-
  5 files changed, 82 insertions(+), 52 deletions(-)
 
 commit de0878395be5c72d7058faac8f64715bdd42eb3b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 17 20:15:49 2012 -0400
+Date:  Thu May 17 20:15:49 2012 -0400
 
     Update TODO
 
@@ -5994,7 +8823,7 @@ Date:   Thu May 17 20:15:49 2012 -0400
 
 commit c87b317f0eb118e67134e8e419a6d65e0fa40d30
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue May 15 23:53:18 2012 -0400
+Date:  Tue May 15 23:53:18 2012 -0400
 
     [util] Add hb-ot-shape-closure tool
 
@@ -6027,23 +8856,23 @@ Date:   Tue May 15 23:53:18 2012 -0400
     --no-glyph-names
     5 6 133 134 135 136
 
- configure.ac                |    2 +-
- util/Makefile.am            |   22 ++++++---
- util/hb-ot-shape-closure.cc |  112
+ configure.ac               |    2 +-
+ util/Makefile.am           |   22 ++++++---
+ util/hb-ot-shape-closure.cc | 112
  +++++++++++++++++++++++++++++++++++++++++++
- util/options.hh             |   12 +++++
+ util/options.hh            |   12 +++++
  4 files changed, 140 insertions(+), 8 deletions(-)
 
 commit 45675e589e6ef9f81b2a4199cf33e3e7778433a8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue May 15 23:10:39 2012 -0400
+Date:  Tue May 15 23:10:39 2012 -0400
 
     [util] Refactor to accommodate for upcoming new tool
 
- util/Makefile.am       |   10 +++--
- util/hb-shape.cc       |   70 ++++++++++++++++++-----------------------
- util/hb-view.cc        |    8 +++--
- util/hb-view.hh        |   80
+ util/Makefile.am      |   10 +++--
+ util/hb-shape.cc      |   70 ++++++++++++++++++-----------------------
+ util/hb-view.cc       |    8 +++--
+ util/hb-view.hh       |   80
  ------------------------------------------------
  util/main-font-text.hh |   80
  ++++++++++++++++++++++++++++++++++++++++++++++++
@@ -6052,7 +8881,7 @@ Date:   Tue May 15 23:10:39 2012 -0400
 
 commit 1d6846db9ebf84561bb30a4e48c6c43184914099
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 18:09:29 2012 +0200
+Date:  Sun May 13 18:09:29 2012 +0200
 
     [Indic] Apply vatu feature after cjct
 
@@ -6064,17 +8893,17 @@ Date:   Sun May 13 18:09:29 2012 +0200
 
 commit 8caf5dcd66550351c6038b9ae7ecc5254eed64ff
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 17:10:18 2012 +0200
+Date:  Sun May 13 17:10:18 2012 +0200
 
     Minor
 
- util/ansi-print.cc |   67
+ util/ansi-print.cc |  67
  +++++++++++++++++++++++++--------------------------
  1 files changed, 33 insertions(+), 34 deletions(-)
 
 commit 617f4ac46f1084859d2034c08760e31e52d3bec3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 16:48:03 2012 +0200
+Date:  Sun May 13 16:48:03 2012 +0200
 
     Refactor
 
@@ -6084,7 +8913,7 @@ Date:   Sun May 13 16:48:03 2012 +0200
 
 commit 5e4e21fce4b548b0b8a5951bc8f35a9f27428192
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 16:46:08 2012 +0200
+Date:  Sun May 13 16:46:08 2012 +0200
 
     Revert "[Indic] Refactoring"
 
@@ -6095,31 +8924,31 @@ Date:   Sun May 13 16:46:08 2012 +0200
 
 commit 3f18236a03880c0960f5990dc90685f6146951a6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 16:20:10 2012 +0200
+Date:  Sun May 13 16:20:10 2012 +0200
 
     Fix more warnings
 
- src/hb-ot-layout-common-private.hh |    2 +-
- src/hb-ot-layout-gsub-table.hh     |    2 +-
- src/hb-ot-shape-complex-indic.cc   |    8 ++++----
+ src/hb-ot-layout-common-private.hh |   2 +-
+ src/hb-ot-layout-gsub-table.hh     |   2 +-
+ src/hb-ot-shape-complex-indic.cc   |   8 ++++----
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 9f377ed3210fe7d9f15e0c4f82020556f9a8f6f0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 16:13:44 2012 +0200
+Date:  Sun May 13 16:13:44 2012 +0200
 
     Fix more unused-var warnings
 
- src/hb-ot-shape-complex-arabic.cc |    7 +++++--
+ src/hb-ot-shape-complex-arabic.cc |   7 +++++--
  src/hb-ot-shape-complex-indic.cc  |   25 ++++++++++++++++++-------
  src/hb-ot-shape-complex-misc.cc   |   21 +++++++++++++++------
- src/hb-ot-shape-normalize.cc      |   13 ++++++-------
- src/hb-set.cc                     |    2 +-
+ src/hb-ot-shape-normalize.cc     |   13 ++++++-------
+ src/hb-set.cc                    |    2 +-
  5 files changed, 45 insertions(+), 23 deletions(-)
 
 commit d993e72331c6c4c783b803e01e4d4a02c8e3eb77
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 16:04:36 2012 +0200
+Date:  Sun May 13 16:04:36 2012 +0200
 
     Fix hb_face_set_index()
 
@@ -6128,18 +8957,18 @@ Date:   Sun May 13 16:04:36 2012 +0200
 
 commit 93345edcbea49bdf0e22f26b5b74a23e601dfab4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 16:01:08 2012 +0200
+Date:  Sun May 13 16:01:08 2012 +0200
 
     Fix warnings
 
  src/hb-fallback-shape.cc |    4 +-
- src/hb-private.hh        |   54
+ src/hb-private.hh       |   54
  +++++++++++++++++++++++-----------------------
  2 files changed, 29 insertions(+), 29 deletions(-)
 
 commit eace47b173807d94b29a6490d0bc3c9f8f6168d1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 15:54:43 2012 +0200
+Date:  Sun May 13 15:54:43 2012 +0200
 
     Minor
 
@@ -6148,24 +8977,24 @@ Date:   Sun May 13 15:54:43 2012 +0200
 
 commit 99c2695759a6af855d565f4994bbdf220570bb48
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 15:45:18 2012 +0200
+Date:  Sun May 13 15:45:18 2012 +0200
 
     Add accessort to buffer for current info, current pos, and prev info
 
- src/hb-buffer-private.hh             |    9 +++++++
+ src/hb-buffer-private.hh            |    9 +++++++
  src/hb-ot-layout-gpos-table.hh       |   44
  +++++++++++++++++-----------------
  src/hb-ot-layout-gsub-table.hh       |   28 ++++++++++----------
  src/hb-ot-layout-gsubgpos-private.hh |   28 ++++++++++----------
  src/hb-ot-shape-complex-arabic.cc    |    4 +-
  src/hb-ot-shape-complex-misc.cc      |    5 ++-
- src/hb-ot-shape-normalize.cc         |   16 ++++++------
- src/hb-ot-shape.cc                   |    8 +++---
+ src/hb-ot-shape-normalize.cc        |   16 ++++++------
+ src/hb-ot-shape.cc                  |    8 +++---
  8 files changed, 76 insertions(+), 66 deletions(-)
 
 commit 6736f3c5b09af6a71935afc04248b033e171a9b2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 15:21:06 2012 +0200
+Date:  Sun May 13 15:21:06 2012 +0200
 
     Minor
 
@@ -6174,7 +9003,7 @@ Date:   Sun May 13 15:21:06 2012 +0200
 
 commit 5df809b655bb1318115651fd87d4555cdd9b41cb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 15:17:51 2012 +0200
+Date:  Sun May 13 15:17:51 2012 +0200
 
     [GSUB/GPOS] Remove context_length
 
@@ -6191,7 +9020,7 @@ Date:   Sun May 13 15:17:51 2012 +0200
 
 commit 28b9d502bb69a8045818d5f6113ded9c59a56bd7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 15:04:00 2012 +0200
+Date:  Sun May 13 15:04:00 2012 +0200
 
     Minor
 
@@ -6200,28 +9029,28 @@ Date:   Sun May 13 15:04:00 2012 +0200
 
 commit 50f630c17ced1bd59b4da4f27728dcfbb876400a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 13:03:44 2012 +0200
+Date:  Sun May 13 13:03:44 2012 +0200
 
     Remove ioctl checks
 
     Ended up not using terminal size after all.
 
- configure.ac       |    2 +-
- util/ansi-print.cc |   11 -----------
+ configure.ac      |    2 +-
+ util/ansi-print.cc |  11 -----------
  2 files changed, 1 insertions(+), 12 deletions(-)
 
 commit db0de7cd616e1e9d6fde6659e52a541477fb0148
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 13:02:38 2012 +0200
+Date:  Sun May 13 13:02:38 2012 +0200
 
     [util] Set ansi color only on color change
 
- util/ansi-print.cc |   28 +++++++++++++++++++++++-----
+ util/ansi-print.cc |  28 +++++++++++++++++++++++-----
  1 files changed, 23 insertions(+), 5 deletions(-)
 
 commit 912c5ff80a255edb8145b9db69e2ed828f8eab5c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 12:51:02 2012 +0200
+Date:  Sun May 13 12:51:02 2012 +0200
 
     Reduce default margin
 
@@ -6230,24 +9059,24 @@ Date:   Sun May 13 12:51:02 2012 +0200
 
 commit 52e7b1424a3613122e9ca30879298df42733acda
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 02:02:58 2012 +0200
+Date:  Sun May 13 02:02:58 2012 +0200
 
     [util] Make hb-view print out Unicode art if stdout is a terminal
 
- configure.ac              |    4 +-
- util/Makefile.am          |    4 +
- util/ansi-print.cc        |  411
+ configure.ac             |    4 +-
+ util/Makefile.am         |    4 +
+ util/ansi-print.cc       |  411
  +++++++++++++++++++++++++++++++++++++++++++++
- util/ansi-print.hh        |   39 +++++
+ util/ansi-print.hh       |   39 +++++
  util/helper-cairo-ansi.cc |  102 +++++++++++
  util/helper-cairo-ansi.hh |   39 +++++
- util/helper-cairo.cc      |   70 ++++++++-
- util/options.hh           |    3 +
+ util/helper-cairo.cc     |   70 ++++++++-
+ util/options.hh          |    3 +
  8 files changed, 668 insertions(+), 4 deletions(-)
 
 commit 8b2753ce2bea8a21ea757186d86dc4a55d8c8b0c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun May 13 00:54:07 2012 +0200
+Date:  Sun May 13 00:54:07 2012 +0200
 
     Minor
 
@@ -6256,7 +9085,7 @@ Date:   Sun May 13 00:54:07 2012 +0200
 
 commit 30874b4819a99cc84fa39e794266685e1b8735d2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat May 12 15:54:27 2012 +0200
+Date:  Sat May 12 15:54:27 2012 +0200
 
     [util] Make tools default to stdin if no text is provided
 
@@ -6269,7 +9098,7 @@ Date:   Sat May 12 15:54:27 2012 +0200
 
 commit 2097951110e33fe091ed9515ae77e2683c46c889
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat May 12 15:41:48 2012 +0200
+Date:  Sat May 12 15:41:48 2012 +0200
 
     [util] Change default font size of hb-view to 256
 
@@ -6282,7 +9111,7 @@ Date:   Sat May 12 15:41:48 2012 +0200
 
 commit 737dded2e08fcc19935db51c05201a987184d337
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat May 12 15:40:11 2012 +0200
+Date:  Sat May 12 15:40:11 2012 +0200
 
     Fix compiler warnings
 
@@ -6291,7 +9120,7 @@ Date:   Sat May 12 15:40:11 2012 +0200
 
 commit f538fcb538f1decb4100ba89457eb83f2350d64b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat May 12 15:34:40 2012 +0200
+Date:  Sat May 12 15:34:40 2012 +0200
 
     [test] Make tool usage easier by not requiring "--stdin"
 
@@ -6302,27 +9131,27 @@ Date:   Sat May 12 15:34:40 2012 +0200
 
 commit a3273e30bb7ffd727ffc18af5716dfef705d3d94
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat May 12 13:34:18 2012 +0200
+Date:  Sat May 12 13:34:18 2012 +0200
 
     [Indic] Add more Malayalam tests
 
- .../indic/script-malayalam/misc/misc.txt           |   38
+ .../indic/script-malayalam/misc/misc.txt          |   38
  ++++++++++++++++++++
  1 files changed, 38 insertions(+), 0 deletions(-)
 
 commit 7f852b644b8143492a02edfc853114aaa23446bd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 23:10:31 2012 +0200
+Date:  Fri May 11 23:10:31 2012 +0200
 
     Fix compiler warnings
 
- src/hb-ot-shape-complex-indic.cc   |    2 +-
- src/hb-ot-shape-complex-private.hh |    2 +-
+ src/hb-ot-shape-complex-indic.cc   |   2 +-
+ src/hb-ot-shape-complex-private.hh |   2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit f7e8dcfd4fc377e3d786b097beb656284240456d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 22:00:06 2012 +0200
+Date:  Fri May 11 22:00:06 2012 +0200
 
     [Indic] Unbreak Devanagari
 
@@ -6332,13 +9161,13 @@ Date:   Fri May 11 22:00:06 2012 +0200
     and
     letting me get commit points.
 
- configure.ac                             |    2 +-
+ configure.ac                            |    2 +-
  src/hb-ot-shape-complex-indic-private.hh |    2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 6a091df9b403b147ef78f3974610dedf4ce1e08a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 21:42:27 2012 +0200
+Date:  Fri May 11 21:42:27 2012 +0200
 
     [Indic] Disambiguate sub vs post vs above matras
 
@@ -6346,12 +9175,12 @@ Date:   Fri May 11 21:42:27 2012 +0200
 
  src/hb-ot-shape-complex-indic-private.hh |   31
  ++++++++++++++---------------
- src/hb-ot-shape-complex-indic.cc         |   12 +++++-----
+ src/hb-ot-shape-complex-indic.cc        |   12 +++++-----
  2 files changed, 21 insertions(+), 22 deletions(-)
 
 commit 9d0d319a4a7e85d922e58fade0f40caae1c9f109
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 21:36:32 2012 +0200
+Date:  Fri May 11 21:36:32 2012 +0200
 
     [Indic] Position Bengali Reph before matras
 
@@ -6361,7 +9190,7 @@ Date:   Fri May 11 21:36:32 2012 +0200
 
 commit f89367251109af235f4f0446c13c261a5a4a6f72
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 21:10:03 2012 +0200
+Date:  Fri May 11 21:10:03 2012 +0200
 
     [Indic] Start categorizing Reph per script
 
@@ -6371,7 +9200,7 @@ Date:   Fri May 11 21:10:03 2012 +0200
 
 commit a913b024d84973556094fd64ce5f0b7106fcc3b5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 20:59:26 2012 +0200
+Date:  Fri May 11 20:59:26 2012 +0200
 
     [Indic] Apply 'init' feature for Bengali
 
@@ -6382,7 +9211,7 @@ Date:   Fri May 11 20:59:26 2012 +0200
 
 commit eed903b1644e087178438959664a6a57bebc398b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 20:50:53 2012 +0200
+Date:  Fri May 11 20:50:53 2012 +0200
 
     [Indic] Refactor for the arrival of 'init' feature
 
@@ -6394,7 +9223,7 @@ Date:   Fri May 11 20:50:53 2012 +0200
 
 commit 18c06e189bd078affbb84c3bb5bb80687a227c5e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 20:02:14 2012 +0200
+Date:  Fri May 11 20:02:14 2012 +0200
 
     [Indic] Add Uniscribe bug feature for dotted circle
 
@@ -6405,22 +9234,22 @@ Date:   Fri May 11 20:02:14 2012 +0200
 
  src/hb-ot-shape-complex-indic-machine.rl |    4 +++-
  src/hb-ot-shape-complex-indic-private.hh |    3 ++-
- src/hb-ot-shape-complex-indic.cc         |   20 ++++++++++++++++----
+ src/hb-ot-shape-complex-indic.cc        |   20 ++++++++++++++++----
  3 files changed, 21 insertions(+), 6 deletions(-)
 
 commit 5b16de97bcc4b24da4c77ca6c1a42e814d8cdbd1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 19:55:42 2012 +0200
+Date:  Fri May 11 19:55:42 2012 +0200
 
     [Indic] Add tests for dottedcircle
 
- .../indic/script-devanagari/misc/MANIFEST          |    1 +
- .../indic/script-devanagari/misc/dottedcircle.txt  |    7 +++++++
+ .../indic/script-devanagari/misc/MANIFEST         |    1 +
+ .../indic/script-devanagari/misc/dottedcircle.txt  |   7 +++++++
  2 files changed, 8 insertions(+), 0 deletions(-)
 
 commit 0831061efb78983b9c6e1e72574c977e56383c08
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 19:07:58 2012 +0200
+Date:  Fri May 11 19:07:58 2012 +0200
 
     [Indic] Refactoring
 
@@ -6429,7 +9258,7 @@ Date:   Fri May 11 19:07:58 2012 +0200
 
 commit 7ea58db311bfb0d8f804d1e9f4a1f004bd45075a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 18:58:57 2012 +0200
+Date:  Fri May 11 18:58:57 2012 +0200
 
     Minor
 
@@ -6438,7 +9267,7 @@ Date:   Fri May 11 18:58:57 2012 +0200
 
 commit 9c09928989316e2befe00d52ed66e055637ccd36
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 18:46:35 2012 +0200
+Date:  Fri May 11 18:46:35 2012 +0200
 
     [Indic] Allow multiple Consonants in Vowel/NBSP syllables
 
@@ -6451,7 +9280,7 @@ Date:   Fri May 11 18:46:35 2012 +0200
 
 commit 8c0aa486f31e9b6cbb31ce295573b53b0a214124
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 18:13:42 2012 +0200
+Date:  Fri May 11 18:13:42 2012 +0200
 
     [Indic] Allow two Nuktas per consonant
 
@@ -6459,32 +9288,32 @@ Date:   Fri May 11 18:13:42 2012 +0200
     does so
     indepent of whether the consonant already has a nukta in it.  Tests:
 
-            * U+0916,U+093C,U+0941
-            * U+0959,U+093C,U+0941
-            * U+0916,U+093C,U+093C,U+0941
-            * U+0959,U+093C,U+093C,U+0941
-            * U+0916,U+093C,U+093C,U+093C,U+0941
-            * U+0959,U+093C,U+093C,U+093C,U+0941
-            * 915,93c,93c,,94d,U+0916,U+093C,U+093C,U+093e,93c,93c
+           * U+0916,U+093C,U+0941
+           * U+0959,U+093C,U+0941
+           * U+0916,U+093C,U+093C,U+0941
+           * U+0959,U+093C,U+093C,U+0941
+           * U+0916,U+093C,U+093C,U+093C,U+0941
+           * U+0959,U+093C,U+093C,U+093C,U+0941
+           * 915,93c,93c,,94d,U+0916,U+093C,U+093C,U+093e,93c,93c
 
  src/hb-ot-shape-complex-indic-machine.rl |    7 ++++---
  1 files changed, 4 insertions(+), 3 deletions(-)
 
 commit 3399a06e7033651ee926448737bdb18e553c1796
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 17:54:26 2012 +0200
+Date:  Fri May 11 17:54:26 2012 +0200
 
     [Indic] Fix U+0952 and similar classification to match Uniscribe
 
     See comments.
 
  src/hb-ot-shape-complex-indic-machine.rl |    1 +
- src/hb-ot-shape-complex-indic.cc         |   16 +++++++++++-----
+ src/hb-ot-shape-complex-indic.cc        |   16 +++++++++++-----
  2 files changed, 12 insertions(+), 5 deletions(-)
 
 commit 11aa3ef18dbc6ac9561bd119f5ca2c1aa1209c3a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 17:30:48 2012 +0200
+Date:  Fri May 11 17:30:48 2012 +0200
 
     [Indic] Treat U+0951..U+0954 all similar to U+0952
 
@@ -6493,7 +9322,7 @@ Date:   Fri May 11 17:30:48 2012 +0200
 
 commit 5f131d3226131df440d7f36655e57f6effcae204
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 17:29:40 2012 +0200
+Date:  Fri May 11 17:29:40 2012 +0200
 
     [GSUB/GPOS/Indic] Apply GSUB/GPOS within syllables only
 
@@ -6507,7 +9336,7 @@ Date:   Fri May 11 17:29:40 2012 +0200
 
 commit 8fd83aaf6e50c2c25002c51fee26d82847a61769
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 17:18:37 2012 +0200
+Date:  Fri May 11 17:18:37 2012 +0200
 
     [GSUB/GPOS] Fix wrong buffer access in backward skippy mask matching
 
@@ -6516,7 +9345,7 @@ Date:   Fri May 11 17:18:37 2012 +0200
 
 commit ff24d1081af08a887895975285d7e38f5d07bc37
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 17:07:08 2012 +0200
+Date:  Fri May 11 17:07:08 2012 +0200
 
     [Indic] Don't use syllable serial value 0
 
@@ -6525,7 +9354,7 @@ Date:   Fri May 11 17:07:08 2012 +0200
 
 commit 892eb7878238d810a2a70f9dadbf958207bfeaa1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 16:54:40 2012 +0200
+Date:  Fri May 11 16:54:40 2012 +0200
 
     [Indic] Implement Uniscribe Reph+Matra+Halant bug feature
 
@@ -6534,7 +9363,7 @@ Date:   Fri May 11 16:54:40 2012 +0200
 
 commit 67ea29af49bb08ee679914076808327992cf6676
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 16:51:23 2012 +0200
+Date:  Fri May 11 16:51:23 2012 +0200
 
     [Indic] Add example of different Uniscribe behavior
 
@@ -6543,7 +9372,7 @@ Date:   Fri May 11 16:51:23 2012 +0200
 
 commit ebe29733d44fe0fa9fb30f946ab0dd7a40336a24
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 16:43:12 2012 +0200
+Date:  Fri May 11 16:43:12 2012 +0200
 
     [Indic] Add runtime Uniscribe bug compatibility mode!
 
@@ -6559,7 +9388,7 @@ Date:   Fri May 11 16:43:12 2012 +0200
 
 commit 616e692e2950d326b6c46aba5b5bead3cc29d315
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 16:25:02 2012 +0200
+Date:  Fri May 11 16:25:02 2012 +0200
 
     [Indic] Add #define UNISCRIBE_BUG_COMPATIBLE 1
 
@@ -6568,7 +9397,7 @@ Date:   Fri May 11 16:25:02 2012 +0200
 
 commit 6782bdae3be0357da1dadc7b806a43ceefa67a90
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 16:23:43 2012 +0200
+Date:  Fri May 11 16:23:43 2012 +0200
 
     [Indic] Fix Left Matra + Halant reordering
 
@@ -6579,7 +9408,7 @@ Date:   Fri May 11 16:23:43 2012 +0200
 
 commit 3c2ea9481b1028e927e615a5434ebf8edcb5f891
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 16:23:38 2012 +0200
+Date:  Fri May 11 16:23:38 2012 +0200
 
     Minor
 
@@ -6589,19 +9418,19 @@ Date:   Fri May 11 16:23:38 2012 +0200
 
 commit c071b99f150a9344a2056dfeba8c613f8a5602db
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 16:22:46 2012 +0200
+Date:  Fri May 11 16:22:46 2012 +0200
 
     [Indic] Add test for Left Matra with Halant
 
     Uniscribe doesn't move the Halant, we do.  And do a broken job of
     it now.
 
- .../script-devanagari/misc/tricky-reordering.txt   |    1 +
+ .../script-devanagari/misc/tricky-reordering.txt   |   1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 203d71069c45048b6dd8fa22b61fd8f2c844b4f6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 16:01:44 2012 +0200
+Date:  Fri May 11 16:01:44 2012 +0200
 
     [GSUB/GPOS] Check all glyph masks when matching input
 
@@ -6610,7 +9439,7 @@ Date:   Fri May 11 16:01:44 2012 +0200
 
 commit 668c6046c1b3af3bd316bda0cc8636f2a5e8df42
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 15:34:13 2012 +0200
+Date:  Fri May 11 15:34:13 2012 +0200
 
     [Indic] Apply Reph mask to all POS_REPH glyphs
 
@@ -6621,36 +9450,36 @@ Date:   Fri May 11 15:34:13 2012 +0200
 
 commit 4be46bade26faf13f7b4d447e9cc608e183955dc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 14:39:01 2012 +0200
+Date:  Fri May 11 14:39:01 2012 +0200
 
     [Indic] Fix state machine to backtrack
 
  src/hb-ot-shape-complex-indic-machine.rl |   42
  +++++++++++++----------------
- src/hb-private.hh                        |    2 +
+ src/hb-private.hh                       |    2 +
  2 files changed, 21 insertions(+), 23 deletions(-)
 
 commit cee7187447b76b22e1bb6136d137b35ac49c3a5d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 11:41:39 2012 +0200
+Date:  Fri May 11 11:41:39 2012 +0200
 
     [Indic] Move syllable tracking from Indic to generic layer
 
     This is to incorporate it into GSUB/GPOS processing.
 
- src/hb-ot-layout-gpos-table.hh           |    1 +
- src/hb-ot-layout-gsub-table.hh           |    3 ++-
- src/hb-ot-layout-gsubgpos-private.hh     |    3 ---
- src/hb-ot-layout-private.hh              |    4 +---
+ src/hb-ot-layout-gpos-table.hh                  |    1 +
+ src/hb-ot-layout-gsub-table.hh                  |    3 ++-
+ src/hb-ot-layout-gsubgpos-private.hh    |    3 ---
+ src/hb-ot-layout-private.hh             |    4 +---
  src/hb-ot-shape-complex-indic-machine.rl |    2 +-
  src/hb-ot-shape-complex-indic-private.hh |    1 -
- src/hb-ot-shape-complex-indic.cc         |    8 +++-----
- src/hb-ot-shape-complex-private.hh       |   13 ++++++++-----
+ src/hb-ot-shape-complex-indic.cc        |    8 +++-----
+ src/hb-ot-shape-complex-private.hh      |   13 ++++++++-----
  8 files changed, 16 insertions(+), 19 deletions(-)
 
 commit 3bf27a9f0e92aa31b464bd3b9fdea5933c9ae8b1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 11:17:23 2012 +0200
+Date:  Fri May 11 11:17:23 2012 +0200
 
     [Indic] Disable conjuncts when a ZWJ happens
 
@@ -6663,7 +9492,7 @@ Date:   Fri May 11 11:17:23 2012 +0200
 
 commit c6d904d67db589dd6209928e56504f04f6a07756
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 11:07:40 2012 +0200
+Date:  Fri May 11 11:07:40 2012 +0200
 
     [Indic] Fix bitops typo!
 
@@ -6674,7 +9503,7 @@ Date:   Fri May 11 11:07:40 2012 +0200
 
 commit 55fe2cf79b11d9a63ea33b3ee76bd0ebca345157
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 03:45:28 2012 +0200
+Date:  Fri May 11 03:45:28 2012 +0200
 
     Make APPLY debug output print current index and codepoint
 
@@ -6685,7 +9514,7 @@ Date:   Fri May 11 03:45:28 2012 +0200
 
 commit 7bd2b04fea5649d77d796d58b7f4918fe0378ee5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 03:40:58 2012 +0200
+Date:  Fri May 11 03:40:58 2012 +0200
 
     Minor
 
@@ -6694,7 +9523,7 @@ Date:   Fri May 11 03:40:58 2012 +0200
 
 commit cf26510dbbd8d38486e6ba423800db6427ade332
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 03:35:08 2012 +0200
+Date:  Fri May 11 03:35:08 2012 +0200
 
     Some more...
 
@@ -6705,7 +9534,7 @@ Date:   Fri May 11 03:35:08 2012 +0200
 
 commit 9659523ca32b0e254d0e5fe387d817208d9cb6bf
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 03:33:36 2012 +0200
+Date:  Fri May 11 03:33:36 2012 +0200
 
     More beauty in debug output!
 
@@ -6714,17 +9543,17 @@ Date:   Fri May 11 03:33:36 2012 +0200
 
 commit cf26e88a5ab477295479f5b9450c2019b6430eaa
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 03:16:57 2012 +0200
+Date:  Fri May 11 03:16:57 2012 +0200
 
     Finish off debug output beautification
 
- src/hb-open-type-private.hh |   58
+ src/hb-open-type-private.hh |  58
  +++++++++++++++++++-----------------------
  1 files changed, 26 insertions(+), 32 deletions(-)
 
 commit d7bba01a353efc7432c474dd8755a02db4abd2ae
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 02:46:26 2012 +0200
+Date:  Fri May 11 02:46:26 2012 +0200
 
     Only print class name in debug output if there's one available
 
@@ -6733,18 +9562,18 @@ Date:   Fri May 11 02:46:26 2012 +0200
 
 commit 85f73fa8da1fbb864aef0f3a592b1d65e24d593d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 02:40:42 2012 +0200
+Date:  Fri May 11 02:40:42 2012 +0200
 
     Only printout class name in tracing, if one is available
 
     Makes debug output much more pleasant.
 
- src/hb-private.hh |    8 ++++++--
+ src/hb-private.hh |   8 ++++++--
  1 files changed, 6 insertions(+), 2 deletions(-)
 
 commit 98619ce4fa650c593b030d06d2f89fec83a10015
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 02:34:06 2012 +0200
+Date:  Fri May 11 02:34:06 2012 +0200
 
     Minor
 
@@ -6753,7 +9582,7 @@ Date:   Fri May 11 02:34:06 2012 +0200
 
 commit acea183e986dd378c6f95120fe0feb0586a8ef36
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 02:33:11 2012 +0200
+Date:  Fri May 11 02:33:11 2012 +0200
 
     Add return annotation for APPLY
 
@@ -6765,40 +9594,40 @@ Date:   Fri May 11 02:33:11 2012 +0200
 
 commit 5ccfe8e2154ad0b58dabcc236bbe9478c17b02ab
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 02:19:41 2012 +0200
+Date:  Fri May 11 02:19:41 2012 +0200
 
     /Minor/
 
- src/hb-private.hh |    2 +-
+ src/hb-private.hh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 0ab8c8621712d33e1e91dfdb4ad0b335e3d2a3fb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 01:25:34 2012 +0200
+Date:  Fri May 11 01:25:34 2012 +0200
 
     Annotate SANITIZE return values
 
     More to come, for APPLY, CLOSURE, etc.
 
- src/hb-open-file-private.hh          |   23 +++--
- src/hb-open-type-private.hh          |   49 +++++-----
- src/hb-ot-head-table.hh              |    4 +-
- src/hb-ot-hhea-table.hh              |    4 +-
- src/hb-ot-hmtx-table.hh              |    4 +-
+ src/hb-open-file-private.hh         |   23 +++--
+ src/hb-open-type-private.hh         |   49 +++++-----
+ src/hb-ot-head-table.hh             |    4 +-
+ src/hb-ot-hhea-table.hh             |    4 +-
+ src/hb-ot-hmtx-table.hh             |    4 +-
  src/hb-ot-layout-common-private.hh   |   51 ++++------
  src/hb-ot-layout-gdef-table.hh       |   48 +++++-----
  src/hb-ot-layout-gpos-table.hh       |  180
  +++++++++++++++-------------------
  src/hb-ot-layout-gsub-table.hh       |  101 +++++++++----------
  src/hb-ot-layout-gsubgpos-private.hh |   88 ++++++++---------
- src/hb-ot-maxp-table.hh              |    7 +-
- src/hb-ot-name-table.hh              |   17 ++--
- src/hb-private.hh                    |   39 ++++++--
+ src/hb-ot-maxp-table.hh             |    7 +-
+ src/hb-ot-name-table.hh             |   17 ++--
+ src/hb-private.hh                   |   39 ++++++--
  13 files changed, 299 insertions(+), 316 deletions(-)
 
 commit 829e814ff358c5e700ba4df54932696801aa9f65
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 00:52:16 2012 +0200
+Date:  Fri May 11 00:52:16 2012 +0200
 
     Minor
 
@@ -6807,7 +9636,7 @@ Date:   Fri May 11 00:52:16 2012 +0200
 
 commit 6eec6f406d2cc13dbca422e88492d3d498af02bf
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 00:50:38 2012 +0200
+Date:  Fri May 11 00:50:38 2012 +0200
 
     Code reshuffling
 
@@ -6816,29 +9645,29 @@ Date:   Fri May 11 00:50:38 2012 +0200
 
 commit 1e08830b4fac3a60ae52349cab6e101d389d30cd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri May 11 00:16:40 2012 +0200
+Date:  Fri May 11 00:16:40 2012 +0200
 
     Beautify debug output
 
- src/hb-open-type-private.hh |   20 ++++++------
- src/hb-private.hh           |   74
+ src/hb-open-type-private.hh |  20 ++++++------
+ src/hb-private.hh          |   74
  ++++++++++++++++++++++++++-----------------
  2 files changed, 55 insertions(+), 39 deletions(-)
 
 commit 6f4553801729a06e506ffdde7b27c72780d4bb80
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 23:24:43 2012 +0200
+Date:  Thu May 10 23:24:43 2012 +0200
 
     More massaging trace messaging
 
- src/hb-open-type-private.hh          |    2 +-
+ src/hb-open-type-private.hh         |    2 +-
  src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- src/hb-private.hh                    |    4 ++--
+ src/hb-private.hh                   |    4 ++--
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit b5fa37cb694b01a7df3a656710391c40dd3fcc04
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 23:09:48 2012 +0200
+Date:  Thu May 10 23:09:48 2012 +0200
 
     Minor
 
@@ -6847,21 +9676,21 @@ Date:   Thu May 10 23:09:48 2012 +0200
 
 commit 208109703c929428c684ddcf9310b8ba780c4c31
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 23:06:58 2012 +0200
+Date:  Thu May 10 23:06:58 2012 +0200
 
     Better trace message support infrastructure
 
     We have varargs in the trace interface now.  To be used soon...
 
- src/hb-open-type-private.hh          |   17 ++++-----
+ src/hb-open-type-private.hh         |   17 ++++-----
  src/hb-ot-layout-gsubgpos-private.hh |    4 +-
- src/hb-private.hh                    |   64
+ src/hb-private.hh                   |   64
  +++++++++++++++++++++++++---------
  3 files changed, 56 insertions(+), 29 deletions(-)
 
 commit 02b2922fbf098c8282eb23dc2c54d5829cf67024
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 21:44:50 2012 +0200
+Date:  Thu May 10 21:44:50 2012 +0200
 
     [Indic] Towards better Reph positioning
 
@@ -6875,7 +9704,7 @@ Date:   Thu May 10 21:44:50 2012 +0200
 
 commit 74e54cf446bb979e488685e8c09eeed6b9d03c24
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 21:20:37 2012 +0200
+Date:  Thu May 10 21:20:37 2012 +0200
 
     [Indic] Add Ra back for scripts without Reph
 
@@ -6887,7 +9716,7 @@ Date:   Thu May 10 21:20:37 2012 +0200
 
 commit 2b70df5cc008617453b12bafeaac50e6d61b3224
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 18:38:22 2012 +0200
+Date:  Thu May 10 18:38:22 2012 +0200
 
     [Indic] Add note re Uniscribe clusters
 
@@ -6896,7 +9725,7 @@ Date:   Thu May 10 18:38:22 2012 +0200
 
 commit 21d2803133c2c424ed37a9f3d17c7fc4963e5a60
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 18:34:34 2012 +0200
+Date:  Thu May 10 18:34:34 2012 +0200
 
     [Indic] Do clustering like Uniscribe does
 
@@ -6907,7 +9736,7 @@ Date:   Thu May 10 18:34:34 2012 +0200
 
 commit b20c9ebaf5176101fdfcffbe4714a2e619dd94b6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 18:31:17 2012 +0200
+Date:  Thu May 10 18:31:17 2012 +0200
 
     [Indic] Add test for matra group
 
@@ -6915,13 +9744,13 @@ Date:   Thu May 10 18:31:17 2012 +0200
     We instead do: "{M+[N]+[H]}", which means we allow Nukta and Halant
     after all Matras, not just the last one.  It makes more sense.
 
- .../indic/script-devanagari/misc/MANIFEST          |    1 +
- .../script-devanagari/misc/spec-deviations.txt     |    1 +
+ .../indic/script-devanagari/misc/MANIFEST         |    1 +
+ .../script-devanagari/misc/spec-deviations.txt     |   1 +
  2 files changed, 2 insertions(+), 0 deletions(-)
 
 commit 8df5636968389ac7bf8620ccd091fd4872b0bbee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 15:41:04 2012 +0200
+Date:  Thu May 10 15:41:04 2012 +0200
 
     [Indic] Reorder Reph to before the Halant after Matras
 
@@ -6936,7 +9765,7 @@ Date:   Thu May 10 15:41:04 2012 +0200
 
 commit daf3234bdc82c669302599a76d2b14f5e69989db
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 15:28:27 2012 +0200
+Date:  Thu May 10 15:28:27 2012 +0200
 
     [Indic] Don't clear the mask for Reph
 
@@ -6948,7 +9777,7 @@ Date:   Thu May 10 15:28:27 2012 +0200
 
 commit 7708ee23cbcc8c8edce13e73b6e549b77bd8c2d0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 14:48:25 2012 +0200
+Date:  Thu May 10 14:48:25 2012 +0200
 
     [Indic] Improve Left Matra repositioning
 
@@ -6959,7 +9788,7 @@ Date:   Thu May 10 14:48:25 2012 +0200
 
 commit 61a58e26a5bda16851669404fc8206896e124740
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 14:43:53 2012 +0200
+Date:  Thu May 10 14:43:53 2012 +0200
 
     [Indic] Add tricky reordering test cases
 
@@ -6967,13 +9796,13 @@ Date:   Thu May 10 14:43:53 2012 +0200
     where it is, but we want to move it with the Matra as that makes more
     logical sense.
 
- .../indic/script-devanagari/misc/MANIFEST          |    1 +
- .../script-devanagari/misc/tricky-reordering.txt   |    4 ++++
+ .../indic/script-devanagari/misc/MANIFEST         |    1 +
+ .../script-devanagari/misc/tricky-reordering.txt   |   4 ++++
  2 files changed, 5 insertions(+), 0 deletions(-)
 
 commit dbb105883c6e9b83e78dc8b10766cd56b98cd7e1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 13:45:52 2012 +0200
+Date:  Thu May 10 13:45:52 2012 +0200
 
     [Indic] Do Reph repositioning in final reordering like the spec says
 
@@ -6989,13 +9818,13 @@ Date:   Thu May 10 13:45:52 2012 +0200
     boundaries.  That's coming after lunch!
 
  src/hb-ot-shape-complex-indic-private.hh |    2 -
- src/hb-ot-shape-complex-indic.cc         |  103
+ src/hb-ot-shape-complex-indic.cc        |  103
  ++++++++++++++++++-----------
  2 files changed, 64 insertions(+), 41 deletions(-)
 
 commit 4705a7026900e51f6430f03a73c87f2df035df92
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 13:09:08 2012 +0200
+Date:  Thu May 10 13:09:08 2012 +0200
 
     Minor
 
@@ -7004,18 +9833,18 @@ Date:   Thu May 10 13:09:08 2012 +0200
 
 commit 4ac9e98d9d2ea973dd612dc4063cf78496c643a0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 12:53:53 2012 +0200
+Date:  Thu May 10 12:53:53 2012 +0200
 
     [Indic] Reorder left matras to be closer to base
 
  src/hb-ot-shape-complex-indic-private.hh |    4 --
- src/hb-ot-shape-complex-indic.cc         |   50
+ src/hb-ot-shape-complex-indic.cc        |   50
  +++++++++++++++++++++++++++--
  2 files changed, 46 insertions(+), 8 deletions(-)
 
 commit 1a1fa8c655a082fc1439608457ba717306cc83ca
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 12:20:21 2012 +0200
+Date:  Thu May 10 12:20:21 2012 +0200
 
     [Indic] Treat the standalone cluster case reusing the consonant logic
 
@@ -7024,7 +9853,7 @@ Date:   Thu May 10 12:20:21 2012 +0200
 
 commit 190eb31a16178269aecaf5d2ecc9012f956749f4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 12:17:16 2012 +0200
+Date:  Thu May 10 12:17:16 2012 +0200
 
     [Indic] Minor
 
@@ -7033,19 +9862,19 @@ Date:   Thu May 10 12:17:16 2012 +0200
 
 commit c5306b6861cfaa50af40e8ceb058791fa06d7981
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 12:07:33 2012 +0200
+Date:  Thu May 10 12:07:33 2012 +0200
 
     [Indic] Handle Vowel syllables
 
     Reusing the consonant logic!
 
  src/hb-ot-shape-complex-indic-private.hh |    3 +--
- src/hb-ot-shape-complex-indic.cc         |   11 ++++++-----
+ src/hb-ot-shape-complex-indic.cc        |   11 ++++++-----
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 6d8e0cb74c02f6bc09cd4abe9e4bc82062e1b517
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 11:41:51 2012 +0200
+Date:  Thu May 10 11:41:51 2012 +0200
 
     [Indic] Simplify Reph logic
 
@@ -7054,17 +9883,17 @@ Date:   Thu May 10 11:41:51 2012 +0200
 
 commit 3d25079f8d6be81b9b4b91d3a97016b8a572f571
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 11:37:42 2012 +0200
+Date:  Thu May 10 11:37:42 2012 +0200
 
     [Indic] Don't form Reph is Ra is the only consonant in the syllable
 
  src/hb-ot-shape-complex-indic-private.hh |    2 +-
- src/hb-ot-shape-complex-indic.cc         |   10 ++++++++++
+ src/hb-ot-shape-complex-indic.cc        |   10 ++++++++++
  2 files changed, 11 insertions(+), 1 deletions(-)
 
 commit b99d63ae114fb58f129562b293a8a66543d499ad
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 11:32:52 2012 +0200
+Date:  Thu May 10 11:32:52 2012 +0200
 
     [Indic] Increase max syllable length
 
@@ -7076,7 +9905,7 @@ Date:   Thu May 10 11:32:52 2012 +0200
 
 commit a391ff50b9a7b6ac3e58d199ea726b20ee6839bb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 11:31:20 2012 +0200
+Date:  Thu May 10 11:31:20 2012 +0200
 
     [Indic] Adjust base after sorting
 
@@ -7085,7 +9914,7 @@ Date:   Thu May 10 11:31:20 2012 +0200
 
 commit d3637edb248162970e202e9d0671540274192844
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu May 10 10:51:38 2012 +0200
+Date:  Thu May 10 10:51:38 2012 +0200
 
     [Indic] Don't return for long syllables.  Just not sort.
 
@@ -7094,16 +9923,16 @@ Date:   Thu May 10 10:51:38 2012 +0200
 
 commit dfa0cade7fce3791e47eaa7edcd23da76c7a0ed0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 19:10:07 2012 +0200
+Date:  Wed May 9 19:10:07 2012 +0200
 
     Fix Uniscribe clusters with multiple items
 
- src/hb-uniscribe.cc |    3 +++
+ src/hb-uniscribe.cc |   3 +++
  1 files changed, 3 insertions(+), 0 deletions(-)
 
 commit 86e5dd386a7989701da476db89be268e4ac1e219
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 18:57:37 2012 +0200
+Date:  Wed May 9 18:57:37 2012 +0200
 
     [Indic] Don't give up syllable parsing upon junk
 
@@ -7112,21 +9941,21 @@ Date:   Wed May 9 18:57:37 2012 +0200
 
 commit ef24cc8c8e2478a6352c340f4611a617646de4cc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 17:56:03 2012 +0200
+Date:  Wed May 9 17:56:03 2012 +0200
 
     [Indic] Towards multi-cluster syllables and final reordering
 
- src/hb-ot-shape-complex-arabic.cc        |    2 +-
+ src/hb-ot-shape-complex-arabic.cc       |    2 +-
  src/hb-ot-shape-complex-indic-machine.rl |   21 +++++++++----
  src/hb-ot-shape-complex-indic-private.hh |    1 +
- src/hb-ot-shape-complex-indic.cc         |   45
+ src/hb-ot-shape-complex-indic.cc        |   45
  ++++++++++++++++++++++--------
- src/hb-ot-shape-complex-private.hh       |    5 +--
+ src/hb-ot-shape-complex-private.hh      |    5 +--
  5 files changed, 51 insertions(+), 23 deletions(-)
 
 commit a9844d41c6cb30d8a2d733130a0e72f51b6c81c1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 17:53:13 2012 +0200
+Date:  Wed May 9 17:53:13 2012 +0200
 
     Combine lig_id and lig_comp into one byte, to free up one for Indic
 
@@ -7137,7 +9966,7 @@ Date:   Wed May 9 17:53:13 2012 +0200
 
 commit 92332e5116271a5d96e532005fe750e7552a6cbb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 17:40:00 2012 +0200
+Date:  Wed May 9 17:40:00 2012 +0200
 
     Minor
 
@@ -7147,18 +9976,18 @@ Date:   Wed May 9 17:40:00 2012 +0200
 
 commit dbccf87eef0d26838fa4bb3ae26410f6c4818836
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 17:24:39 2012 +0200
+Date:  Wed May 9 17:24:39 2012 +0200
 
     [Indic] Make room for more reordering positions
 
  src/hb-ot-shape-complex-indic-private.hh |  213
  +++++++++++++++---------------
- src/hb-ot-shape-complex-indic.cc         |   12 +-
+ src/hb-ot-shape-complex-indic.cc        |   12 +-
  2 files changed, 115 insertions(+), 110 deletions(-)
 
 commit d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 15:56:35 2012 +0200
+Date:  Wed May 9 15:56:35 2012 +0200
 
     [Indic] Improve matra vs consonant ordering
 
@@ -7166,13 +9995,13 @@ Date:   Wed May 9 15:56:35 2012 +0200
 
  src/hb-ot-shape-complex-indic-private.hh |   32
  ++++++++++++++++++-----------
- src/hb-ot-shape-complex-indic.cc         |    6 ++--
- src/indic.cc                             |    2 +-
+ src/hb-ot-shape-complex-indic.cc        |    6 ++--
+ src/indic.cc                            |    2 +-
  3 files changed, 24 insertions(+), 16 deletions(-)
 
 commit 33c92e769563ec2a6c1249b57d8cac742eea6f88
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 15:41:51 2012 +0200
+Date:  Wed May 9 15:41:51 2012 +0200
 
     [Indic] Categorize Anudatta
 
@@ -7181,18 +10010,18 @@ Date:   Wed May 9 15:41:51 2012 +0200
 
 commit 3943293a9942201d8fc8d59212fcc8cca5132e3d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 15:27:56 2012 +0200
+Date:  Wed May 9 15:27:56 2012 +0200
 
     [Indic] Add joiner test cases for Devanagari
 
- .../indic/script-devanagari/misc/MANIFEST          |    1 +
- .../indic/script-devanagari/misc/joiners.txt       |   19
+ .../indic/script-devanagari/misc/MANIFEST         |    1 +
+ .../indic/script-devanagari/misc/joiners.txt      |   19
  +++++++++++++++++++
  2 files changed, 20 insertions(+), 0 deletions(-)
 
 commit 19d984edaa4f86c842345a9d4150597e045e1887
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 15:21:13 2012 +0200
+Date:  Wed May 9 15:21:13 2012 +0200
 
     [Indic] Make sure Reph jumps over all matras to the right
 
@@ -7203,7 +10032,7 @@ Date:   Wed May 9 15:21:13 2012 +0200
 
 commit 9034641333d7bfb41a0784cce72e43591faea083
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 15:04:58 2012 +0200
+Date:  Wed May 9 15:04:58 2012 +0200
 
     [Indic] Keep Vedic signs at the right too
 
@@ -7212,26 +10041,26 @@ Date:   Wed May 9 15:04:58 2012 +0200
 
 commit d1deaa2f5bd028e8076265cba92cffa4fa2834ac
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 15:04:13 2012 +0200
+Date:  Wed May 9 15:04:13 2012 +0200
 
     Replace zerowidth invisible chars with a zero-advance space glyph
 
     Like Uniscribe does.
 
- src/hb-ot-shape-complex-arabic.cc  |    3 +-
- src/hb-ot-shape-complex-indic.cc   |   20 -----------------
- src/hb-ot-shape-complex-private.hh |    4 +-
- src/hb-ot-shape-normalize.cc       |   25 ++++++++--------------
- src/hb-ot-shape-private.hh         |   27 +++++++++++++++++++++++
- src/hb-ot-shape.cc                 |   41
+ src/hb-ot-shape-complex-arabic.cc  |   3 +-
+ src/hb-ot-shape-complex-indic.cc   |  20 -----------------
+ src/hb-ot-shape-complex-private.hh |   4 +-
+ src/hb-ot-shape-normalize.cc      |   25 ++++++++--------------
+ src/hb-ot-shape-private.hh        |   27 +++++++++++++++++++++++
+ src/hb-ot-shape.cc                |   41
  +++++++++++++++++++++++------------
- src/hb-unicode-private.hh          |   38
+ src/hb-unicode-private.hh         |   38
  +++++++++++++++++++++++++++++++++
  7 files changed, 105 insertions(+), 53 deletions(-)
 
 commit 49e5da1591b8d28f01e7ff9caac9d9ac53668bba
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 13:23:27 2012 +0200
+Date:  Wed May 9 13:23:27 2012 +0200
 
     [indic] Keep the syllable modifier marks to the right
 
@@ -7242,16 +10071,16 @@ Date:   Wed May 9 13:23:27 2012 +0200
 
 commit 5b1260909350bffa3e3d06da346f9f86ce651dbb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 12:37:27 2012 +0200
+Date:  Wed May 9 12:37:27 2012 +0200
 
     Minor
 
- src/hb-ot-shape-complex-private.hh |    2 +-
+ src/hb-ot-shape-complex-private.hh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 9ce939232bbce8f51e235195e3854d1e8bb961f8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 12:03:09 2012 +0200
+Date:  Wed May 9 12:03:09 2012 +0200
 
     Minor
 
@@ -7260,7 +10089,7 @@ Date:   Wed May 9 12:03:09 2012 +0200
 
 commit 76b3409de6887c1cdd5c679939497b1b56f4554b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 11:43:43 2012 +0200
+Date:  Wed May 9 11:43:43 2012 +0200
 
     [indic] Better Reph matching
 
@@ -7269,7 +10098,7 @@ Date:   Wed May 9 11:43:43 2012 +0200
 
 commit df6d45c693c417bf311e6fa49f18a8558542e525
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 11:38:31 2012 +0200
+Date:  Wed May 9 11:38:31 2012 +0200
 
     Minor
 
@@ -7278,7 +10107,7 @@ Date:   Wed May 9 11:38:31 2012 +0200
 
 commit 412b91889d9a1ae477e8b6907d0b9a76e78a6c91
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 11:07:18 2012 +0200
+Date:  Wed May 9 11:07:18 2012 +0200
 
     [indic] Apply Indic features in order
 
@@ -7287,7 +10116,7 @@ Date:   Wed May 9 11:07:18 2012 +0200
 
 commit 1ac075b227090a9ad930dcc1670236c176b27067
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 11:06:47 2012 +0200
+Date:  Wed May 9 11:06:47 2012 +0200
 
     [indic] Apply rakaar forms
 
@@ -7298,7 +10127,7 @@ Date:   Wed May 9 11:06:47 2012 +0200
 
 commit 2214a03900d32710573a1b05c7665195b3129761
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 09:54:54 2012 +0200
+Date:  Wed May 9 09:54:54 2012 +0200
 
     Add hb-diff-ngrams
 
@@ -7310,7 +10139,7 @@ Date:   Wed May 9 09:54:54 2012 +0200
 
 commit 178e6dce01ad28c8708bad62ce0fb79c46e836dc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 08:57:29 2012 +0200
+Date:  Wed May 9 08:57:29 2012 +0200
 
     Add N-gram generator
 
@@ -7320,7 +10149,7 @@ Date:   Wed May 9 08:57:29 2012 +0200
 
 commit 98669ceb77657d60435f2cb2e3fc18272c0a2c6a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 08:16:15 2012 +0200
+Date:  Wed May 9 08:16:15 2012 +0200
 
     Use groupby()
 
@@ -7329,7 +10158,7 @@ Date:   Wed May 9 08:16:15 2012 +0200
 
 commit c438a14b62433db488b5c90854a4a3934adf3305
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 07:45:17 2012 +0200
+Date:  Wed May 9 07:45:17 2012 +0200
 
     Add hb-diff-stat
 
@@ -7340,7 +10169,7 @@ Date:   Wed May 9 07:45:17 2012 +0200
 
 commit 1058d031e2046eb80331b0950eaff75c2bf608dc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed May 9 07:30:07 2012 +0200
+Date:  Wed May 9 07:30:07 2012 +0200
 
     Make hb-diff-filter-failtures retain all test info for failed tests
 
@@ -7349,14 +10178,14 @@ Date:   Wed May 9 07:30:07 2012 +0200
 
 commit f1eb008cc727370e1bd0dc32fdf301f62d9ff981
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue May 8 23:41:41 2012 +0200
+Date:  Tue May 8 23:41:41 2012 +0200
 
     Add hb-diff-colorize
 
     Accepts --format=html now.
 
  test/shaping/Makefile.am      |    1 +
- test/shaping/hb-diff          |    4 +-
+ test/shaping/hb-diff         |    4 +-
  test/shaping/hb-diff-colorize |    7 ++
  test/shaping/hb_test_tools.py |  158
  +++++++++++++++++++++++++----------------
@@ -7364,20 +10193,20 @@ Date:   Tue May 8 23:41:41 2012 +0200
 
 commit 9155e4ffe00c96a2c14e14a300004b1038ca3a9c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue May 8 22:44:21 2012 +0200
+Date:  Tue May 8 22:44:21 2012 +0200
 
     Cleanup diff
 
     Doesn't do --color anymore.  That will go into a new hb-diff-colorize
     tool.
 
- test/shaping/hb-diff          |   10 +++-------
+ test/shaping/hb-diff         |   10 +++-------
  test/shaping/hb_test_tools.py |   32 ++++++++++++++++++--------------
  2 files changed, 21 insertions(+), 21 deletions(-)
 
 commit 7d22135b4c3f8fb70552302bf8239df9976dddda
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue May 8 19:38:49 2012 +0200
+Date:  Tue May 8 19:38:49 2012 +0200
 
     Make hb-diff faster
 
@@ -7386,64 +10215,64 @@ Date:   Tue May 8 19:38:49 2012 +0200
 
 commit a93e238e05a2f70a6e664e5d04ba25bbd54493dc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue May 8 18:55:29 2012 +0200
+Date:  Tue May 8 18:55:29 2012 +0200
 
     More tests
 
- .../shaper-arabic/script-mongolian/misc/MANIFEST   |    1 +
- .../shaper-arabic/script-mongolian/misc/poem.txt   |    4 ++++
- .../indic/script-bengali/misc/MANIFEST             |    1 +
- .../indic/script-bengali/misc/reph.txt             |   10 ++++++++++
+ .../shaper-arabic/script-mongolian/misc/MANIFEST   |   1 +
+ .../shaper-arabic/script-mongolian/misc/poem.txt   |   4 ++++
+ .../indic/script-bengali/misc/MANIFEST                    |    1 +
+ .../indic/script-bengali/misc/reph.txt                    |   10 ++++++++++
  4 files changed, 16 insertions(+), 0 deletions(-)
 
 commit 1a2a4a0078dda834443edd421037a4bcbad18c5e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat May 5 22:38:20 2012 +0200
+Date:  Sat May 5 22:38:20 2012 +0200
 
     Fix warning and build issues
 
     As reported by Jonathan Kew on the list.
 
  src/hb-set-private.hh |    2 +-
- src/main.cc           |    9 +++++----
+ src/main.cc          |    9 +++++----
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit a5e39fed85e069ba1afbf90408349ad99ceb0e1d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 25 00:14:46 2012 -0400
+Date:  Wed Apr 25 00:14:46 2012 -0400
 
     Minor
 
  src/hb-set-private.hh |    2 ++
- src/hb-set.cc         |    2 ++
+ src/hb-set.cc        |    2 ++
  2 files changed, 4 insertions(+), 0 deletions(-)
 
 commit 1827dc208c867e433a95237d1ed3fc7a73d1d9a7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 24 16:56:37 2012 -0400
+Date:  Tue Apr 24 16:56:37 2012 -0400
 
     Add hb_ot_shape_glyphs_closure()
 
     Experimental API for now.
 
  src/hb-ot-map-private.hh |    7 ++++---
- src/hb-ot-shape.cc       |   35 +++++++++++++++++++++++++++++++++++
- src/hb-ot.h              |    8 ++++++++
- src/hb-set-private.hh    |    3 +++
+ src/hb-ot-shape.cc      |   35 +++++++++++++++++++++++++++++++++++
+ src/hb-ot.h             |    8 ++++++++
+ src/hb-set-private.hh   |    3 +++
  4 files changed, 50 insertions(+), 3 deletions(-)
 
 commit bb09f0ec10216b11189b5e8584856adf0f14d1fc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 24 16:02:12 2012 -0400
+Date:  Tue Apr 24 16:02:12 2012 -0400
 
     Minor
 
- src/hb-unicode.cc |    2 --
+ src/hb-unicode.cc |   2 --
  1 files changed, 0 insertions(+), 2 deletions(-)
 
 commit 29a7e306e30e894f7a38daf73eca9fc772c58158
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 24 16:01:30 2012 -0400
+Date:  Tue Apr 24 16:01:30 2012 -0400
 
     Minor
 
@@ -7452,7 +10281,7 @@ Date:   Tue Apr 24 16:01:30 2012 -0400
 
 commit 585b107cdee7305920dacc83c9ee1f8eeff7afd1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 24 16:00:50 2012 -0400
+Date:  Tue Apr 24 16:00:50 2012 -0400
 
     Add test caes for a minority language using Bengali
 
@@ -7465,12 +10294,12 @@ Date:   Tue Apr 24 16:00:50 2012 -0400
     We reached the consensus on the list to NOT implement dotted-circle
     in HarfBuzz.
 
- .../indic/script-bengali/misc/misc.txt             |    1 +
+ .../indic/script-bengali/misc/misc.txt                    |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 6c6ccaf575392f6e6bb9a15534026e4ea462705b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 24 14:21:15 2012 -0400
+Date:  Tue Apr 24 14:21:15 2012 -0400
 
     Add a few more set operations
 
@@ -7478,46 +10307,46 @@ Date:   Tue Apr 24 14:21:15 2012 -0400
 
  src/hb-set-private.hh |   54
  +++++++++++++++++++++++++++++++++++++++++++++++-
- src/hb-set.cc         |   55
+ src/hb-set.cc        |   55
  +++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-set.h          |   34 +++++++++++++++++++++++++++--
+ src/hb-set.h         |   34 +++++++++++++++++++++++++++--
  3 files changed, 139 insertions(+), 4 deletions(-)
 
 commit 5caece67ab9eee322bdcdf6f4b607eadde297e56
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 23:03:12 2012 -0400
+Date:  Mon Apr 23 23:03:12 2012 -0400
 
     Make closure() return void
 
  src/hb-ot-layout-gsub-table.hh       |  142 ++++++++++++-----------------
  src/hb-ot-layout-gsubgpos-private.hh |  165
  +++++++++++++++++-----------------
- src/hb-ot-layout.cc                  |   10 +-
- src/hb-ot-layout.h                   |    8 +-
- src/hb-set-private.hh                |   20 ++---
+ src/hb-ot-layout.cc                 |   10 +-
+ src/hb-ot-layout.h                  |    8 +-
+ src/hb-set-private.hh               |   20 ++---
  5 files changed, 157 insertions(+), 188 deletions(-)
 
 commit 0b08adb3539f2ec29682456b89c69e89ff5e9c03
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 22:41:09 2012 -0400
+Date:  Mon Apr 23 22:41:09 2012 -0400
 
     Add hb_set_t
 
- TODO                               |    2 +
- src/Makefile.am                    |    3 +
- src/hb-ot-layout-common-private.hh |    1 +
- src/hb-ot-layout-private.hh        |   47 --------------
- src/hb-ot-layout.h                 |    2 -
- src/hb-set-private.hh              |   95 ++++++++++++++++++++++++++++
- src/hb-set.cc                      |  120
+ TODO                              |    2 +
+ src/Makefile.am                   |    3 +
+ src/hb-ot-layout-common-private.hh |   1 +
+ src/hb-ot-layout-private.hh       |   47 --------------
+ src/hb-ot-layout.h                |    2 -
+ src/hb-set-private.hh             |   95 ++++++++++++++++++++++++++++
+ src/hb-set.cc                     |  120
  ++++++++++++++++++++++++++++++++++++
- src/hb-set.h                       |   91 +++++++++++++++++++++++++++
- src/hb.h                           |    1 +
+ src/hb-set.h                      |   91 +++++++++++++++++++++++++++
+ src/hb.h                          |    1 +
  9 files changed, 313 insertions(+), 49 deletions(-)
 
 commit 5b93e8d94fb4c2474816304ae3f52e1c704882de
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 22:26:13 2012 -0400
+Date:  Mon Apr 23 22:26:13 2012 -0400
 
     Update copyright headers
 
@@ -7529,102 +10358,102 @@ Date:   Mon Apr 23 22:26:13 2012 -0400
 
 commit 6a9be5bd3524dc3eb1e88d1063bde2e4d8b57011
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 22:23:17 2012 -0400
+Date:  Mon Apr 23 22:23:17 2012 -0400
 
     Rename hb_glyph_map_t to hb_set_t
 
  src/hb-ot-layout-common-private.hh   |   16 ++++++++--------
  src/hb-ot-layout-gsubgpos-private.hh |   12 ++++++------
- src/hb-ot-layout-private.hh          |    2 +-
- src/hb-ot-layout.cc                  |    2 +-
- src/hb-ot-layout.h                   |    4 ++--
- src/hb-ot-map-private.hh             |    2 +-
- src/hb-ot-map.cc                     |    2 +-
+ src/hb-ot-layout-private.hh         |    2 +-
+ src/hb-ot-layout.cc                 |    2 +-
+ src/hb-ot-layout.h                  |    4 ++--
+ src/hb-ot-map-private.hh            |    2 +-
+ src/hb-ot-map.cc                    |    2 +-
  7 files changed, 20 insertions(+), 20 deletions(-)
 
 commit a4385f0b0a6949e2ce49e6a147ad4beaa724f6c3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 22:20:14 2012 -0400
+Date:  Mon Apr 23 22:20:14 2012 -0400
 
     Improve clustering
 
- src/hb-ot-shape.cc |    5 ++---
+ src/hb-ot-shape.cc |   5 ++---
  1 files changed, 2 insertions(+), 3 deletions(-)
 
 commit 8e3715f8a16b315c1c7dd4b256e7f68a36c53e7c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 22:18:54 2012 -0400
+Date:  Mon Apr 23 22:18:54 2012 -0400
 
     Minor
 
- src/hb-buffer-private.hh          |    2 +-
- src/hb-buffer.cc                  |    2 +-
- src/hb-graphite2.cc               |    5 ++---
- src/hb-ot-shape-complex-arabic.cc |    4 ++--
- src/hb-ot-shape-complex-misc.cc   |    4 ++--
+ src/hb-buffer-private.hh         |    2 +-
+ src/hb-buffer.cc                 |    2 +-
+ src/hb-graphite2.cc              |    5 ++---
+ src/hb-ot-shape-complex-arabic.cc |   4 ++--
+ src/hb-ot-shape-complex-misc.cc   |   4 ++--
  5 files changed, 8 insertions(+), 9 deletions(-)
 
 commit d2984a241e4819474d827b1dd5d4b6d76596b3a5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 17:21:14 2012 -0400
+Date:  Mon Apr 23 17:21:14 2012 -0400
 
     Add map->substitute_closure()
 
  src/hb-ot-map-private.hh |    3 +++
- src/hb-ot-map.cc         |   15 +++++++++++++++
+ src/hb-ot-map.cc        |   15 +++++++++++++++
  2 files changed, 18 insertions(+), 0 deletions(-)
 
 commit 31081f7390e5130df72f89acc609ccab5dc77a48
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 16:54:58 2012 -0400
+Date:  Mon Apr 23 16:54:58 2012 -0400
 
     Implement closure() for Context and ChainContext lookups
 
  src/hb-ot-layout-common-private.hh   |   54 ++++++
  src/hb-ot-layout-gsubgpos-private.hh |  347
  +++++++++++++++++++++++++++-------
- src/hb-ot-layout-private.hh          |   23 ++-
+ src/hb-ot-layout-private.hh         |   23 ++-
  3 files changed, 351 insertions(+), 73 deletions(-)
 
 commit c64ddab3c34897cd520d4d73a054866e649e8793
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 15:28:35 2012 -0400
+Date:  Mon Apr 23 15:28:35 2012 -0400
 
     Flesh out closure() for GSUB
 
     The GSUBGPOS part still missing.
 
- src/hb-ot-layout-common-private.hh |   61 ++++++++++++++------
+ src/hb-ot-layout-common-private.hh |  61 ++++++++++++++------
  src/hb-ot-layout-gsub-table.hh     |  112
  ++++++++++++++++++++++++++++--------
- src/hb-ot-layout-private.hh        |   34 +++++++++++
- src/hb-ot-layout.h                 |    2 +-
+ src/hb-ot-layout-private.hh       |   34 +++++++++++
+ src/hb-ot-layout.h                |    2 +-
  4 files changed, 165 insertions(+), 44 deletions(-)
 
 commit 0da132bde4d576a03095d6738507954f7f85103d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 14:21:33 2012 -0400
+Date:  Mon Apr 23 14:21:33 2012 -0400
 
     Fix Coverage iters
 
- src/hb-ot-layout-common-private.hh |   30 +++++++++++++++++++++---------
+ src/hb-ot-layout-common-private.hh |  30 +++++++++++++++++++++---------
  1 files changed, 21 insertions(+), 9 deletions(-)
 
 commit 3e32cd9570fd8b09901fb790b80365ae425f681a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 13:20:52 2012 -0400
+Date:  Mon Apr 23 13:20:52 2012 -0400
 
     Minor
 
  src/hb-ot-layout-gsubgpos-private.hh |    1 -
- src/hb-ot-layout.cc                  |    6 +++---
- src/hb-ot-layout.h                   |    8 ++++++++
- src/hb-private.hh                    |    4 +++-
+ src/hb-ot-layout.cc                 |    6 +++---
+ src/hb-ot-layout.h                  |    8 ++++++++
+ src/hb-private.hh                   |    4 +++-
  4 files changed, 14 insertions(+), 5 deletions(-)
 
 commit 650ac00da3d2f988197393f34d40f0ba1a0fa093
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 13:17:09 2012 -0400
+Date:  Mon Apr 23 13:17:09 2012 -0400
 
     Minor refactoring
 
@@ -7632,12 +10461,12 @@ Date:   Mon Apr 23 13:17:09 2012 -0400
  src/hb-ot-layout-gsub-table.hh       |   39
  +++++++++++++++------------------
  src/hb-ot-layout-gsubgpos-private.hh |    8 +-----
- src/hb-ot-layout.cc                  |    6 +++-
+ src/hb-ot-layout.cc                 |    6 +++-
  4 files changed, 36 insertions(+), 44 deletions(-)
 
 commit f94b0aa64609654497ced9c00312c9643eb69053
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 13:04:38 2012 -0400
+Date:  Mon Apr 23 13:04:38 2012 -0400
 
     Add "closure" operation stubs to GSUB
 
@@ -7646,36 +10475,36 @@ Date:   Mon Apr 23 13:04:38 2012 -0400
  src/hb-ot-layout-gsub-table.hh       |  179
  ++++++++++++++++++++++++++++++++++
  src/hb-ot-layout-gsubgpos-private.hh |  110 ++++++++++++++++++++-
- src/hb-ot-layout.cc                  |    8 ++
+ src/hb-ot-layout.cc                 |    8 ++
  3 files changed, 293 insertions(+), 4 deletions(-)
 
 commit 7d50d502635d7c95e6bd091e7d4cc993f0853f76
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 23 13:02:14 2012 -0400
+Date:  Mon Apr 23 13:02:14 2012 -0400
 
     Add Coverage iterators
 
- src/hb-ot-layout-common-private.hh |   59
+ src/hb-ot-layout-common-private.hh |  59
  ++++++++++++++++++++++++++++++++++++
  1 files changed, 59 insertions(+), 0 deletions(-)
 
 commit 3ed4634ec349fa9e943ad23718c04be4dd4bba62
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 19 22:34:06 2012 -0400
+Date:  Thu Apr 19 22:34:06 2012 -0400
 
     Add Indic inspection tool
 
- src/Makefile.am                          |    7 +-
+ src/Makefile.am                         |    7 +-
  src/hb-ot-shape-complex-indic-private.hh |  264
  ++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-indic.cc         |  229
+ src/hb-ot-shape-complex-indic.cc        |  229
  +--------------------------
- src/indic.cc                             |   46 +++++
+ src/indic.cc                            |   46 +++++
  4 files changed, 317 insertions(+), 229 deletions(-)
 
 commit a06411ecf93c7e5256e363eef3ef69554896dd55
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 19 22:28:25 2012 -0400
+Date:  Thu Apr 19 22:28:25 2012 -0400
 
     Minor matra renumbering
 
@@ -7686,7 +10515,7 @@ Date:   Thu Apr 19 22:28:25 2012 -0400
 
 commit 36608941f3cc530fea57282fa175e4cc3b4c66c6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 19 22:21:38 2012 -0400
+Date:  Thu Apr 19 22:21:38 2012 -0400
 
     Add GSUB "would_apply" API
 
@@ -7698,7 +10527,7 @@ Date:   Thu Apr 19 22:21:38 2012 -0400
 
 commit a0d4caeb91fa5e5f2090db4efc35c64ff9a64789
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 17 13:42:30 2012 -0400
+Date:  Tue Apr 17 13:42:30 2012 -0400
 
     Minor
 
@@ -7707,7 +10536,7 @@ Date:   Tue Apr 17 13:42:30 2012 -0400
 
 commit a5e40542ab9508f0ba6f822f1262d93fccb71f45
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 17 12:37:19 2012 -0400
+Date:  Tue Apr 17 12:37:19 2012 -0400
 
     Make font immutable in hb_shape()
 
@@ -7716,34 +10545,34 @@ Date:   Tue Apr 17 12:37:19 2012 -0400
 
 commit 3cde23664fbbe9cd2ac1b8fd5eb2ea288309cc9c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 17 11:44:49 2012 -0400
+Date:  Tue Apr 17 11:44:49 2012 -0400
 
     Minor note re Graphite
 
- src/hb-graphite2.cc |    3 +++
+ src/hb-graphite2.cc |   3 +++
  1 files changed, 3 insertions(+), 0 deletions(-)
 
 commit 4dc2449d92308f8dd366142831c0b85bd30ea5a9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 17 11:39:48 2012 -0400
+Date:  Tue Apr 17 11:39:48 2012 -0400
 
     Fix leak in graphite
 
- src/hb-graphite2.cc |    1 +
+ src/hb-graphite2.cc |   1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 0290bbf8611aa881daed907f22256a431250c90a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 17 10:28:21 2012 -0400
+Date:  Tue Apr 17 10:28:21 2012 -0400
 
     Add another Thai test
 
- .../texts/in-tree/shaper-thai/misc/misc.txt        |    1 +
+ .../texts/in-tree/shaper-thai/misc/misc.txt       |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 9ceca3aeb14cc096f5f87660cf7351bc35073084
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 16 21:05:51 2012 -0400
+Date:  Mon Apr 16 21:05:51 2012 -0400
 
     Fix ragel regexp in vowel-based syllable
 
@@ -7754,7 +10583,7 @@ Date:   Mon Apr 16 21:05:51 2012 -0400
 
 commit b870afcd1b436614af95db6dc297e54c8f03f0cd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 16 21:05:11 2012 -0400
+Date:  Mon Apr 16 21:05:11 2012 -0400
 
     Rewrite ragel expression to better match the one on MS spec
 
@@ -7765,7 +10594,7 @@ Date:   Mon Apr 16 21:05:11 2012 -0400
 
 commit 95cefdf96efe43a44133aa8a186155cf4e63e2b7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 16 18:08:20 2012 -0400
+Date:  Mon Apr 16 18:08:20 2012 -0400
 
     Add --utf8-clusters
 
@@ -7783,84 +10612,84 @@ Date:   Mon Apr 16 18:08:20 2012 -0400
 
 commit effb42e5c520128bdc2e29398ed801730c5c0f52
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 16 16:04:07 2012 -0400
+Date:  Mon Apr 16 16:04:07 2012 -0400
 
     Always use cairo_show_text_glyphs()
 
     Better catches cluster errors.
 
- util/view-cairo.cc |    2 +-
+ util/view-cairo.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 799cfdd15ab369580b2283200c3aca6866214b59
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 16 16:00:36 2012 -0400
+Date:  Mon Apr 16 16:00:36 2012 -0400
 
     Make page progression be right to left for vertical text
 
- util/view-cairo.cc |    8 ++++----
+ util/view-cairo.cc |   8 ++++----
  1 files changed, 4 insertions(+), 4 deletions(-)
 
 commit a5f1834f57ea3fb254f5c7d372747de316fcc8f1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 16 15:55:13 2012 -0400
+Date:  Mon Apr 16 15:55:13 2012 -0400
 
     Apply 'liga' for vertical writing mode too
 
     Apparently that's what Kazuraki uses to form vertical ligatures,
     which suggests that it's what Adobe does.
 
- src/hb-ot-shape.cc |    2 +-
+ src/hb-ot-shape.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 4d85252bda25cddd1fbdd744687e449888f0b5fa
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 16 15:54:26 2012 -0400
+Date:  Mon Apr 16 15:54:26 2012 -0400
 
     Add Japanese test data from Adobe's Kazuraki font ligatures
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |    1 +
- .../shaper-default/script-japanese/MANIFEST        |    1 +
- .../shaper-default/script-japanese/misc/MANIFEST   |    2 +
- .../script-japanese/misc/kazuraki-liga-lines.txt   |    8 +++
- .../script-japanese/misc/kazuraki-liga.txt         |   53
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 +
+ .../shaper-default/script-japanese/MANIFEST       |    1 +
+ .../shaper-default/script-japanese/misc/MANIFEST   |   2 +
+ .../script-japanese/misc/kazuraki-liga-lines.txt   |   8 +++
+ .../script-japanese/misc/kazuraki-liga.txt        |   53
  ++++++++++++++++++++
  5 files changed, 65 insertions(+), 0 deletions(-)
 
 commit e74616b8898b5f18d9bf82b9e81aefad056c1e36
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Apr 15 14:12:13 2012 -0400
+Date:  Sun Apr 15 14:12:13 2012 -0400
 
     Add comment
 
- src/hb-private.hh |    8 ++++++++
+ src/hb-private.hh |   8 ++++++++
  1 files changed, 8 insertions(+), 0 deletions(-)
 
 commit 683b503f30bba29d57a93d7e8ac7138c2e7f49f1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 14 20:47:14 2012 -0400
+Date:  Sat Apr 14 20:47:14 2012 -0400
 
     Minor
 
  src/hb-ot-shape-normalize.cc |   11 +++++++++--
  src/hb-ot-shape-private.hh   |    9 ---------
- src/hb-ot-shape.cc           |    9 ++++++++-
+ src/hb-ot-shape.cc          |    9 ++++++++-
  3 files changed, 17 insertions(+), 12 deletions(-)
 
 commit b9f199c8e38cc5ed0d73845568630f3bcbdd4374
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 14 20:23:58 2012 -0400
+Date:  Sat Apr 14 20:23:58 2012 -0400
 
     Move code around
 
- src/hb-ot-shape-private.hh |   40 ---------------------------------------
- src/hb-ot-shape.cc         |   45
+ src/hb-ot-shape-private.hh |  40 ---------------------------------------
+ src/hb-ot-shape.cc        |   45
  ++++++++++++++++++++++++++++++++++++++++---
  2 files changed, 41 insertions(+), 44 deletions(-)
 
 commit 38a83019e6a7f4aa47662fd557344f62ae001abe
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 14 19:40:18 2012 -0400
+Date:  Sat Apr 14 19:40:18 2012 -0400
 
     Minor
 
@@ -7869,40 +10698,40 @@ Date:   Sat Apr 14 19:40:18 2012 -0400
 
 commit d4adade217a61007dd2da5cd9eccf889f79a019a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 14 19:23:17 2012 -0400
+Date:  Sat Apr 14 19:23:17 2012 -0400
 
     Add assert
 
- src/hb-ot-shape.cc |    2 ++
+ src/hb-ot-shape.cc |   2 ++
  1 files changed, 2 insertions(+), 0 deletions(-)
 
 commit fe28b997fbbeb2cfeab62ac453993ccffe3e6719
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 14 19:19:26 2012 -0400
+Date:  Sat Apr 14 19:19:26 2012 -0400
 
     Add HB_DIRECTION_IS_VALID
 
- src/hb-common.h        |    1 +
+ src/hb-common.h       |    1 +
  test/api/test-common.c |    7 +++++++
  2 files changed, 8 insertions(+), 0 deletions(-)
 
 commit 5e88aa66822ba64324b4428c9ffbe06a43b4f310
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 14 18:51:50 2012 -0400
+Date:  Sat Apr 14 18:51:50 2012 -0400
 
     Remove public enum names again
 
     As was reported to me, glib-mkenum does not understand named enums,
     so remove for now.
 
- src/hb-blob.h               |    2 +-
- src/hb-common.h             |    6 +++---
- src/hb-ot-layout-private.hh |    2 +-
+ src/hb-blob.h              |    2 +-
+ src/hb-common.h            |    6 +++---
+ src/hb-ot-layout-private.hh |   2 +-
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 08569c0eaab026c7122c0dc29922cf44011c4d10
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 14 18:47:07 2012 -0400
+Date:  Sat Apr 14 18:47:07 2012 -0400
 
     Minor
 
@@ -7911,21 +10740,21 @@ Date:   Sat Apr 14 18:47:07 2012 -0400
 
 commit 4bf90f648313e35d21b427a956aa1fe762bae757
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 17:38:23 2012 -0400
+Date:  Thu Apr 12 17:38:23 2012 -0400
 
     Make HB_DIRECTION_INVALID be zero
 
     This changes all the HB_DIRECTION_* enum member values, but is
     nicer, in preparation for making hb_segment_properties_t public.
 
- src/hb-common.cc       |    7 ++++---
- src/hb-common.h        |   20 ++++++++++----------
+ src/hb-common.cc      |    7 ++++---
+ src/hb-common.h       |   20 ++++++++++----------
  test/api/test-common.c |    9 +++++++--
  3 files changed, 21 insertions(+), 15 deletions(-)
 
 commit d01402da9c756f90a84bfb1f964fd56caf2b35c3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 17:38:02 2012 -0400
+Date:  Thu Apr 12 17:38:02 2012 -0400
 
     Minor
 
@@ -7934,7 +10763,7 @@ Date:   Thu Apr 12 17:38:02 2012 -0400
 
 commit 69b84a8f6c789726815261c2e86692de7a65d6e8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 15:50:40 2012 -0400
+Date:  Thu Apr 12 15:50:40 2012 -0400
 
     Fix hb-view surface size calc for vertical text
 
@@ -7949,7 +10778,7 @@ Date:   Thu Apr 12 15:50:40 2012 -0400
 
 commit 6bd9b479b8b2befbb0847282e93beade197c8038
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 14:53:53 2012 -0400
+Date:  Thu Apr 12 14:53:53 2012 -0400
 
     Hide backend-specific shape functions
 
@@ -7958,47 +10787,47 @@ Date:   Thu Apr 12 14:53:53 2012 -0400
 
     More shaper API coming in preparation for plan/planned API.
 
- configure.ac                     |    6 ++--
- src/Makefile.am                  |   11 ++++----
+ configure.ac                    |    6 ++--
+ src/Makefile.am                 |   11 ++++----
  src/hb-fallback-shape-private.hh |    9 +++----
- src/hb-fallback-shape.cc         |    9 +++----
- src/hb-graphite2-private.hh      |   42 +++++++++++++++++++++++++++++++++
- src/hb-graphite2.cc              |    5 +--
- src/hb-graphite2.h               |    7 -----
- src/hb-ot-shape-private.hh       |    8 ++++-
- src/hb-ot-shape.cc               |   11 +++-----
- src/hb-ot-shape.h                |   48
+ src/hb-fallback-shape.cc        |    9 +++----
+ src/hb-graphite2-private.hh     |   42 +++++++++++++++++++++++++++++++++
+ src/hb-graphite2.cc             |    5 +--
+ src/hb-graphite2.h              |    7 -----
+ src/hb-ot-shape-private.hh      |    8 ++++-
+ src/hb-ot-shape.cc              |   11 +++-----
+ src/hb-ot-shape.h               |   48
  --------------------------------------
- src/hb-ot.h                      |    1 -
- src/hb-shape.cc                  |   24 +++++++------------
- src/hb-shape.h                   |    1 -
- src/hb-uniscribe-private.hh      |   42 +++++++++++++++++++++++++++++++++
- src/hb-uniscribe.cc              |    9 +++----
- src/hb-uniscribe.h               |    7 -----
- util/options.hh                  |    2 +-
+ src/hb-ot.h                     |    1 -
+ src/hb-shape.cc                 |   24 +++++++------------
+ src/hb-shape.h                          |    1 -
+ src/hb-uniscribe-private.hh     |   42 +++++++++++++++++++++++++++++++++
+ src/hb-uniscribe.cc             |    9 +++----
+ src/hb-uniscribe.h              |    7 -----
+ util/options.hh                 |    2 +-
  17 files changed, 126 insertions(+), 116 deletions(-)
 
 commit c6035cf802c60f0526f421f39a55886061df94ee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 13:23:59 2012 -0400
+Date:  Thu Apr 12 13:23:59 2012 -0400
 
     Add names to enums
 
     gdb was showing <anonymous enum> instead of useful stuff, so name
     all our enums.
 
- src/hb-blob.h                      |    2 +-
- src/hb-common.h                    |    6 +++---
- src/hb-ot-layout-common-private.hh |    2 +-
- src/hb-ot-layout-gdef-table.hh     |    2 +-
- src/hb-ot-layout-gpos-table.hh     |    5 ++---
- src/hb-ot-layout-gsub-table.hh     |    2 +-
- src/hb-ot-layout-private.hh        |    2 +-
+ src/hb-blob.h                     |    2 +-
+ src/hb-common.h                   |    6 +++---
+ src/hb-ot-layout-common-private.hh |   2 +-
+ src/hb-ot-layout-gdef-table.hh     |   2 +-
+ src/hb-ot-layout-gpos-table.hh     |   5 ++---
+ src/hb-ot-layout-gsub-table.hh     |   2 +-
+ src/hb-ot-layout-private.hh       |    2 +-
  7 files changed, 10 insertions(+), 11 deletions(-)
 
 commit d1c9eb458c843215da8df84b596bfae51fee135b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 13:17:44 2012 -0400
+Date:  Thu Apr 12 13:17:44 2012 -0400
 
     Make it an error to include non-top-level headers
 
@@ -8006,30 +10835,30 @@ Date:   Thu Apr 12 13:17:44 2012 -0400
     never things like hb-shape.h directly.  This makes it easier to
     refactor headers later on without breaking compatibility.
 
- src/hb-blob.h       |    4 ++++
- src/hb-buffer.h     |    4 ++++
- src/hb-common.h     |    4 ++++
- src/hb-font.h       |    4 ++++
- src/hb-ft.h         |    2 --
- src/hb-glib.h       |    1 +
- src/hb-gobject.h    |    1 +
- src/hb-graphite2.h  |    5 +++--
- src/hb-icu.h        |    1 +
- src/hb-ot-layout.h  |    8 +++++---
- src/hb-ot-shape.h   |    9 +++++----
- src/hb-ot-tag.h     |    6 +++++-
- src/hb-ot.h         |    2 ++
- src/hb-private.hh   |    5 ++++-
- src/hb-shape.h      |    4 ++++
- src/hb-unicode.h    |    4 ++++
- src/hb-uniscribe.h  |    3 +--
- src/hb-version.h.in |    4 ++++
- src/hb.h            |    2 ++
+ src/hb-blob.h      |    4 ++++
+ src/hb-buffer.h     |   4 ++++
+ src/hb-common.h     |   4 ++++
+ src/hb-font.h      |    4 ++++
+ src/hb-ft.h        |    2 --
+ src/hb-glib.h      |    1 +
+ src/hb-gobject.h    |   1 +
+ src/hb-graphite2.h  |   5 +++--
+ src/hb-icu.h       |    1 +
+ src/hb-ot-layout.h  |   8 +++++---
+ src/hb-ot-shape.h   |   9 +++++----
+ src/hb-ot-tag.h     |   6 +++++-
+ src/hb-ot.h        |    2 ++
+ src/hb-private.hh   |   5 ++++-
+ src/hb-shape.h      |   4 ++++
+ src/hb-unicode.h    |   4 ++++
+ src/hb-uniscribe.h  |   3 +--
+ src/hb-version.h.in |   4 ++++
+ src/hb.h           |    2 ++
  19 files changed, 58 insertions(+), 15 deletions(-)
 
 commit 323190c27b80cddc9b3c42d19f1f243e2acb2411
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 12:29:10 2012 -0400
+Date:  Thu Apr 12 12:29:10 2012 -0400
 
     Minor
 
@@ -8038,41 +10867,41 @@ Date:   Thu Apr 12 12:29:10 2012 -0400
 
 commit 0e3361464b00b76aa7375515163e0710a691db0c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 10:06:52 2012 -0400
+Date:  Thu Apr 12 10:06:52 2012 -0400
 
     Fix bug with not setting Unicode props of the first character
 
     Fixes Mongolian shaping issue:
     https://bugs.freedesktop.org/show_bug.cgi?id=45695
 
- src/hb-ot-shape.cc |    2 +-
+ src/hb-ot-shape.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit f9746b600a6e14dbe48aabfc17df8f12a5b46b11
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 09:59:26 2012 -0400
+Date:  Thu Apr 12 09:59:26 2012 -0400
 
     Minor
 
- .../shaper-arabic/script-mongolian/misc/misc.txt   |    1 -
+ .../shaper-arabic/script-mongolian/misc/misc.txt   |   1 -
  1 files changed, 0 insertions(+), 1 deletions(-)
 
 commit 7470b0ff805e4ff59d23d7a1808888fafdf550eb
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 09:44:27 2012 -0400
+Date:  Thu Apr 12 09:44:27 2012 -0400
 
     Add Mongolian test case
 
- test/shaping/texts/in-tree/MANIFEST                |    1 +
- .../shaper-arabic/script-mongolian/misc/MANIFEST   |    1 +
- .../shaper-arabic/script-mongolian/misc/misc.txt   |    4 ++++
- test/shaping/texts/in-tree/shaper-thai/MANIFEST    |    1 +
- .../texts/in-tree/shaper-thai/misc/MANIFEST        |    1 +
+ test/shaping/texts/in-tree/MANIFEST               |    1 +
+ .../shaper-arabic/script-mongolian/misc/MANIFEST   |   1 +
+ .../shaper-arabic/script-mongolian/misc/misc.txt   |   4 ++++
+ test/shaping/texts/in-tree/shaper-thai/MANIFEST    |   1 +
+ .../texts/in-tree/shaper-thai/misc/MANIFEST       |    1 +
  5 files changed, 8 insertions(+), 0 deletions(-)
 
 commit c65662b71e6160f5adfb6226d97589ca457d98b9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 12 09:31:55 2012 -0400
+Date:  Thu Apr 12 09:31:55 2012 -0400
 
     Fix left-matra positioning in Indic
 
@@ -8084,7 +10913,7 @@ Date:   Thu Apr 12 09:31:55 2012 -0400
 
 commit 6d16403bfaa4d710d80c93298eca7211ecaa419f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 11 22:04:42 2012 -0400
+Date:  Wed Apr 11 22:04:42 2012 -0400
 
     Adjust TODO
 
@@ -8093,7 +10922,7 @@ Date:   Wed Apr 11 22:04:42 2012 -0400
 
 commit 029a82d81d8ffa1b6771d19018d592fec1dbc934
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 11 22:00:46 2012 -0400
+Date:  Wed Apr 11 22:00:46 2012 -0400
 
     [hangul] Apply *jmo features to all Hangul chars
 
@@ -8108,7 +10937,7 @@ Date:   Wed Apr 11 22:00:46 2012 -0400
 
 commit 3baae2440de69577d330209edb708e7d2bb2231d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 11 21:54:37 2012 -0400
+Date:  Wed Apr 11 21:54:37 2012 -0400
 
     Update TODO
 
@@ -8117,16 +10946,16 @@ Date:   Wed Apr 11 21:54:37 2012 -0400
 
 commit a4976447cd1a1feffdecd0d501a2690716b1cf4b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 11 17:48:40 2012 -0400
+Date:  Wed Apr 11 17:48:40 2012 -0400
 
     Add Hangul test
 
- .../shaper-hangul/script-hangul/misc/misc.txt      |    1 +
+ .../shaper-hangul/script-hangul/misc/misc.txt     |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit e95d912b3b0af027c4384553f95236db822e5acc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 11 17:33:02 2012 -0400
+Date:  Wed Apr 11 17:33:02 2012 -0400
 
     Fix diff tool
 
@@ -8135,7 +10964,7 @@ Date:   Wed Apr 11 17:33:02 2012 -0400
 
 commit 41ae674f6871f43d0a6e4ca67a747074d63ae576
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 11 17:11:05 2012 -0400
+Date:  Wed Apr 11 17:11:05 2012 -0400
 
     Don't create hb_apply_context_t per glyph!
 
@@ -8151,18 +10980,18 @@ Date:   Wed Apr 11 17:11:05 2012 -0400
 
 commit 4a1e02ef7979d58fe0c726ee7c665b2420c42ddd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 11 14:37:53 2012 -0400
+Date:  Wed Apr 11 14:37:53 2012 -0400
 
     Fix shape to presentation forms font check
 
     As reported by Jonathan Kew on the list.
 
- src/hb-ot-shape-complex-arabic.cc |    9 ++++++---
+ src/hb-ot-shape-complex-arabic.cc |   9 ++++++---
  1 files changed, 6 insertions(+), 3 deletions(-)
 
 commit 6062f5f01436b4044be729890ed00b9b62737824
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 11 14:19:55 2012 -0400
+Date:  Wed Apr 11 14:19:55 2012 -0400
 
     Fix build with some compilers
 
@@ -8173,44 +11002,44 @@ Date:   Wed Apr 11 14:19:55 2012 -0400
 
 commit acd88e659fdb2fa1cbf7171f0a1c7fbc81b9f298
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 10 18:02:20 2012 -0400
+Date:  Tue Apr 10 18:02:20 2012 -0400
 
     In Arabic fallback shaping, check that the font has glyph for new char
 
- src/hb-ot-shape-complex-arabic.cc  |   12 +++++++-----
- src/hb-ot-shape-complex-indic.cc   |    2 +-
- src/hb-ot-shape-complex-misc.cc    |    6 +++---
- src/hb-ot-shape-complex-private.hh |    7 ++++---
- src/hb-ot-shape.cc                 |    2 +-
+ src/hb-ot-shape-complex-arabic.cc  |  12 +++++++-----
+ src/hb-ot-shape-complex-indic.cc   |   2 +-
+ src/hb-ot-shape-complex-misc.cc    |   6 +++---
+ src/hb-ot-shape-complex-private.hh |   7 ++++---
+ src/hb-ot-shape.cc                |    2 +-
  5 files changed, 16 insertions(+), 13 deletions(-)
 
 commit 7752aa73e72301a46c64c533c1e423ff5987cc05
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 10 17:22:14 2012 -0400
+Date:  Tue Apr 10 17:22:14 2012 -0400
 
     Minor
 
- src/hb-ot-shape-private.hh |    1 -
- src/hb-ot-shape.cc         |   10 ----------
+ src/hb-ot-shape-private.hh |   1 -
+ src/hb-ot-shape.cc        |   10 ----------
  2 files changed, 0 insertions(+), 11 deletions(-)
 
 commit 939c010211b063f78874a3b72b032c1ed9a13b87
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 10 17:20:05 2012 -0400
+Date:  Tue Apr 10 17:20:05 2012 -0400
 
     Implement Arabic fallback shaping mandatory ligatures
 
- src/gen-arabic-table.py                 |   32
+ src/gen-arabic-table.py                |   32
  +++++++++++++++++++++---------
  src/hb-ot-shape-complex-arabic-table.hh |   28 ++++++++++++++++++--------
- src/hb-ot-shape-complex-arabic.cc       |   31
+ src/hb-ot-shape-complex-arabic.cc      |   31
  ++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-misc.cc         |    4 +-
+ src/hb-ot-shape-complex-misc.cc        |    4 +-
  4 files changed, 74 insertions(+), 21 deletions(-)
 
 commit b7d04eb606800100faa11100d2adf559e297a4ee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 10 16:44:38 2012 -0400
+Date:  Tue Apr 10 16:44:38 2012 -0400
 
     Do Arabic fallback shaping
 
@@ -8220,37 +11049,37 @@ Date:   Tue Apr 10 16:44:38 2012 -0400
 
 commit ae4a2b9365051c23c9a299cf76f3ab7e661999b1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 10 16:25:08 2012 -0400
+Date:  Tue Apr 10 16:25:08 2012 -0400
 
     Generate fallback Arabic shaping table
 
     Not hooked up yet.
 
- src/Makefile.am                         |    6 +-
- src/gen-arabic-table.py                 |  220
+ src/Makefile.am                        |    6 +-
+ src/gen-arabic-table.py                |  220
  ++++++++++++++++++++++---------
- src/gen-indic-table.py                  |    4 +-
+ src/gen-indic-table.py                         |    4 +-
  src/hb-ot-shape-complex-arabic-table.hh |  205
  ++++++++++++++++++++++++++++-
  4 files changed, 367 insertions(+), 68 deletions(-)
 
 commit 3b26f96ebe859570d14c6902afc23462bca40712
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 10 10:52:07 2012 -0400
+Date:  Tue Apr 10 10:52:07 2012 -0400
 
     Add Thai shaper that does SARA AM decomposition / reordering
 
     That's not in the OpenType spec, but it's what MS and Adobe do.
 
- src/hb-buffer.cc                   |    1 +
+ src/hb-buffer.cc                  |    1 +
  src/hb-ot-shape-complex-misc.cc    |  104
  +++++++++++++++++++++++++++++++++++-
- src/hb-ot-shape-complex-private.hh |    8 +++
+ src/hb-ot-shape-complex-private.hh |   8 +++
  3 files changed, 112 insertions(+), 1 deletions(-)
 
 commit 0b6d2ac6a1d04877ae4542fc2a3b920185547053
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 10 10:52:03 2012 -0400
+Date:  Tue Apr 10 10:52:03 2012 -0400
 
     Minor
 
@@ -8259,44 +11088,44 @@ Date:   Tue Apr 10 10:52:03 2012 -0400
 
 commit e099dd6592b4ea887696330f4718efb572494d93
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 10 10:47:33 2012 -0400
+Date:  Tue Apr 10 10:47:33 2012 -0400
 
     Add Thai test case for SARA AM decomposition
 
- test/shaping/texts/in-tree/shaper-hangul/MANIFEST  |    1 +
- .../texts/in-tree/shaper-thai/misc/misc.txt        |    5 +++++
+ test/shaping/texts/in-tree/shaper-hangul/MANIFEST  |   1 +
+ .../texts/in-tree/shaper-thai/misc/misc.txt       |    5 +++++
  2 files changed, 6 insertions(+), 0 deletions(-)
 
 commit 4450dc9354b18cd68980b0891b24ea8efa4f38b6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 7 22:07:23 2012 -0400
+Date:  Sat Apr 7 22:07:23 2012 -0400
 
     Move around
 
- test/shaping/texts/in-tree/MANIFEST                |    1 +
- test/shaping/texts/in-tree/shaper-default/MANIFEST |    1 -
- .../in-tree/shaper-default/script-hangul/MANIFEST  |    1 -
- .../shaper-default/script-hangul/misc/MANIFEST     |    1 -
- .../shaper-default/script-hangul/misc/misc.txt     |    2 --
- .../in-tree/shaper-hangul/script-hangul/MANIFEST   |    1 +
- .../shaper-hangul/script-hangul/misc/MANIFEST      |    1 +
- .../shaper-hangul/script-hangul/misc/misc.txt      |    2 ++
+ test/shaping/texts/in-tree/MANIFEST               |    1 +
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 -
+ .../in-tree/shaper-default/script-hangul/MANIFEST  |   1 -
+ .../shaper-default/script-hangul/misc/MANIFEST     |   1 -
+ .../shaper-default/script-hangul/misc/misc.txt     |   2 --
+ .../in-tree/shaper-hangul/script-hangul/MANIFEST   |   1 +
+ .../shaper-hangul/script-hangul/misc/MANIFEST     |    1 +
+ .../shaper-hangul/script-hangul/misc/misc.txt     |    2 ++
  8 files changed, 5 insertions(+), 5 deletions(-)
 
 commit d4cc44716c1e098f8abbc0e495404598026ef242
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 7 21:52:28 2012 -0400
+Date:  Sat Apr 7 21:52:28 2012 -0400
 
     Move code around, in prep for Thai/Lao shaper
 
- src/hb-buffer-private.hh                 |    5 +++++
- src/hb-buffer.cc                         |   23 +++++++++++++++++++++++
+ src/hb-buffer-private.hh                |    5 +++++
+ src/hb-buffer.cc                        |   23 +++++++++++++++++++++++
  src/hb-ot-shape-complex-indic-machine.rl |   14 +-------------
  3 files changed, 29 insertions(+), 13 deletions(-)
 
 commit c9a841f4452921c5361b8f5697bbff7736ce60cd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 7 15:06:55 2012 -0400
+Date:  Sat Apr 7 15:06:55 2012 -0400
 
     Add simple Hangul shaper that recomposes Jamo when feasible
 
@@ -8313,18 +11142,18 @@ Date:   Sat Apr 7 15:06:55 2012 -0400
     I have no idea how the 'ljmo', 'vjmo', 'tjmo' features are supposed to
     work.  Maybe someone can explain them to me?
 
- src/hb-ot-shape-complex-misc.cc    |   16 ++++++++++++++++
- src/hb-ot-shape-complex-private.hh |   15 +++++++++++++--
+ src/hb-ot-shape-complex-misc.cc    |  16 ++++++++++++++++
+ src/hb-ot-shape-complex-private.hh |  15 +++++++++++++--
  2 files changed, 29 insertions(+), 2 deletions(-)
 
 commit 968318455304804dc53045e8ba0cd4d76800c02d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 7 14:57:21 2012 -0400
+Date:  Sat Apr 7 14:57:21 2012 -0400
 
     Implement normalization mode
     HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL
 
-    In this mode we try composing CCC=0 with CCC=0 characters.  Useful for
+    In this mode we try composing CCC=0 with CCC=0 characters. Useful for
     Hangul.
 
  src/hb-ot-shape-normalize.cc |   21 +++++++++++++--------
@@ -8332,7 +11161,7 @@ Date:   Sat Apr 7 14:57:21 2012 -0400
 
 commit bec2ac4fde1ba0dd6dba02adbb836ce569a5cf6f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 7 14:51:17 2012 -0400
+Date:  Sat Apr 7 14:51:17 2012 -0400
 
     Bring normalization algorithm closer to the spec
 
@@ -8343,7 +11172,7 @@ Date:   Sat Apr 7 14:51:17 2012 -0400
 
 commit e02d9257863b49e33ab5942971266349d3c548f6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 7 14:49:13 2012 -0400
+Date:  Sat Apr 7 14:49:13 2012 -0400
 
     Flip logic around
 
@@ -8353,90 +11182,90 @@ Date:   Sat Apr 7 14:49:13 2012 -0400
 
 commit aaa25d5f458127f53f4b5ecdeb986ae91fabbad3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 5 17:27:23 2012 -0400
+Date:  Thu Apr 5 17:27:23 2012 -0400
 
     Add Hangul test case
 
     Composed, and decomposed, of the same text.
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |    1 +
- .../in-tree/shaper-default/script-hangul/MANIFEST  |    1 +
- .../shaper-default/script-hangul/misc/MANIFEST     |    1 +
- .../shaper-default/script-hangul/misc/misc.txt     |    2 ++
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 +
+ .../in-tree/shaper-default/script-hangul/MANIFEST  |   1 +
+ .../shaper-default/script-hangul/misc/MANIFEST     |   1 +
+ .../shaper-default/script-hangul/misc/misc.txt     |   2 ++
  4 files changed, 5 insertions(+), 0 deletions(-)
 
 commit 11138ccff71f442da1fcf64faa0e1d22e083e775
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 5 17:25:19 2012 -0400
+Date:  Thu Apr 5 17:25:19 2012 -0400
 
     Add normalize mode
 
     In preparation for Hangul shaper.
 
- src/Makefile.am                      |    1 +
+ src/Makefile.am                     |    1 +
  src/hb-ot-layout-common-private.hh   |    1 -
  src/hb-ot-shape-complex-arabic.cc    |    6 +-
  src/hb-ot-shape-complex-indic.cc     |    6 +-
  src/hb-ot-shape-complex-misc.cc      |    8 ++--
  src/hb-ot-shape-complex-private.hh   |   13 +++---
  src/hb-ot-shape-normalize-private.hh |   46 +++++++++++++++++++++
- src/hb-ot-shape-normalize.cc         |   73
+ src/hb-ot-shape-normalize.cc        |   73
  ++++++++++++++++-----------------
- src/hb-ot-shape-private.hh           |    7 +--
- src/hb-ot-shape.cc                   |    2 +-
+ src/hb-ot-shape-private.hh          |    7 +--
+ src/hb-ot-shape.cc                  |    2 +-
  10 files changed, 102 insertions(+), 61 deletions(-)
 
 commit 6769f21d579a354e32577ec57348e97d2cb1b438
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 5 16:46:46 2012 -0400
+Date:  Thu Apr 5 16:46:46 2012 -0400
 
     More moving code around
 
  src/hb-ot-shape-normalize.cc |    2 +-
  src/hb-ot-shape-private.hh   |    8 --------
- src/hb-ot-shape.cc           |    2 +-
+ src/hb-ot-shape.cc          |    2 +-
  src/hb-unicode-private.hh    |    8 ++++++++
  4 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 2db2a566826ed4763ce69629194ec656bd48b0bd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Apr 5 16:40:37 2012 -0400
+Date:  Thu Apr 5 16:40:37 2012 -0400
 
     Move code around
 
- src/hb-ot-shape-private.hh |   53
+ src/hb-ot-shape-private.hh |  53
  ------------------------------------------
- src/hb-unicode-private.hh  |    3 ++
- src/hb-unicode.cc          |   55
+ src/hb-unicode-private.hh  |   3 ++
+ src/hb-unicode.cc         |   55
  ++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 58 insertions(+), 53 deletions(-)
 
 commit cad3821f3d5b68d490b0728bd37bd57428ec809c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 17:13:25 2012 -0500
+Date:  Wed Mar 7 17:13:25 2012 -0500
 
     More sorting by Unicode version
 
     This is the most convenient way to browse scripts.
 
- src/hb-common.cc                   |    2 +-
- src/hb-common.h                    |    2 +-
- src/hb-ot-shape-complex-private.hh |   94
+ src/hb-common.cc                  |    2 +-
+ src/hb-common.h                   |    2 +-
+ src/hb-ot-shape-complex-private.hh |  94
  ++++++++++++++++++++++++++---------
  3 files changed, 72 insertions(+), 26 deletions(-)
 
 commit 317b9504d7a4faa70dcf21e5c2aff4792dbd201a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 16:51:29 2012 -0500
+Date:  Wed Mar 7 16:51:29 2012 -0500
 
     Minor
 
- src/hb-ot-shape-complex-private.hh |   10 ++++++++--
+ src/hb-ot-shape-complex-private.hh |  10 ++++++++--
  1 files changed, 8 insertions(+), 2 deletions(-)
 
 commit fa2673c1ee954ddbbfbfca7cced7b839d7776fc0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 15:52:02 2012 -0500
+Date:  Wed Mar 7 15:52:02 2012 -0500
 
     More Unicode script age annotation, and a couple more RTL scripts
 
@@ -8449,19 +11278,19 @@ Date:   Wed Mar 7 15:52:02 2012 -0500
 
 commit 6d4016f1ba48d409800dc3281b93e5cd58c99d9f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 15:33:14 2012 -0500
+Date:  Wed Mar 7 15:33:14 2012 -0500
 
     Make src tests pass again
 
- src/gen-arabic-table.py                 |   11 ++++++-----
- src/gen-indic-table.py                  |    9 +++++----
+ src/gen-arabic-table.py                |   11 ++++++-----
+ src/gen-indic-table.py                         |    9 +++++----
  src/hb-ot-shape-complex-arabic-table.hh |    6 ++++++
  src/hb-ot-shape-complex-indic-table.hh  |    4 ++++
  4 files changed, 21 insertions(+), 9 deletions(-)
 
 commit 7da435f08cc406080a5ee9b1ab5351db6a93acae
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 15:20:20 2012 -0500
+Date:  Wed Mar 7 15:20:20 2012 -0500
 
     Separate Unicode 3.1 and Unicode 3.2 additions
 
@@ -8470,16 +11299,16 @@ Date:   Wed Mar 7 15:20:20 2012 -0500
 
 commit f91136cb528e298651c4a8a8a1d6dc54136e09ce
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 12:56:22 2012 -0500
+Date:  Wed Mar 7 12:56:22 2012 -0500
 
     Route three Unicode 6.1 scripts through Indic shaper
 
- src/hb-ot-shape-complex-private.hh |    7 ++++++-
+ src/hb-ot-shape-complex-private.hh |   7 ++++++-
  1 files changed, 6 insertions(+), 1 deletions(-)
 
 commit f32c0012ad794cd2df669dfc7b0438fafbe38b2d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 12:53:34 2012 -0500
+Date:  Wed Mar 7 12:53:34 2012 -0500
 
     Add Unicode 6.1.0 scripts
 
@@ -8489,7 +11318,7 @@ Date:   Wed Mar 7 12:53:34 2012 -0500
 
 commit 50e810cd0e55c25fddb0a2fd0861c51fbf65700e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 12:49:08 2012 -0500
+Date:  Wed Mar 7 12:49:08 2012 -0500
 
     Lydian and Kharoshthi are right-to-left
 
@@ -8498,7 +11327,7 @@ Date:   Wed Mar 7 12:49:08 2012 -0500
 
 commit a52835635e4a2a12715aff2febb561515a10cd5a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 12:38:39 2012 -0500
+Date:  Wed Mar 7 12:38:39 2012 -0500
 
     Whitespace
 
@@ -8508,7 +11337,7 @@ Date:   Wed Mar 7 12:38:39 2012 -0500
 
 commit 183224684a45d7dcd7d28510d4383a7a7cb3dff3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 12:21:28 2012 -0500
+Date:  Wed Mar 7 12:21:28 2012 -0500
 
     Use generic shaper for Buhid
 
@@ -8519,17 +11348,17 @@ Date:   Wed Mar 7 12:21:28 2012 -0500
     data for some scripts in the Indic shaper that are not even going
     through that shaper.  Need to find a better way...
 
- src/hb-ot-shape-complex-private.hh |    2 +-
+ src/hb-ot-shape-complex-private.hh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit cdc8b491a8e7cec5082ca2ad0346c1f41fdd5c92
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 12:08:33 2012 -0500
+Date:  Wed Mar 7 12:08:33 2012 -0500
 
     Update Indic table to Unicode 6.1 data
 
- src/Makefile.am                         |   15 +++
- src/gen-indic-table.py                  |   20 ++--
+ src/Makefile.am                        |   15 +++
+ src/gen-indic-table.py                         |   20 ++--
  src/hb-ot-shape-complex-arabic-table.hh |   35 ------
  src/hb-ot-shape-complex-indic-table.hh  |  178
  +++++++++++++++++++------------
@@ -8537,7 +11366,7 @@ Date:   Wed Mar 7 12:08:33 2012 -0500
 
 commit e3b2e077f549b04779c08a9fedb1f35b9f11075c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Mar 7 10:21:24 2012 -0500
+Date:  Wed Mar 7 10:21:24 2012 -0500
 
     Typo
 
@@ -8546,7 +11375,7 @@ Date:   Wed Mar 7 10:21:24 2012 -0500
 
 commit c346671b6b9b05fa51b95c16212eb29ac69510fa
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Mar 6 20:47:50 2012 -0500
+Date:  Tue Mar 6 20:47:50 2012 -0500
 
     Minor doc fixes
 
@@ -8555,27 +11384,27 @@ Date:   Tue Mar 6 20:47:50 2012 -0500
 
 commit 406044986a68676f3050f9350ccc448c615fc685
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Mar 6 20:24:31 2012 -0500
+Date:  Tue Mar 6 20:24:31 2012 -0500
 
     Add Hebrew diacritics test cases
 
     From:
     https://bugzilla.mozilla.org/show_bug.cgi?id=662055
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |    1 +
- .../in-tree/shaper-default/script-hebrew/MANIFEST  |    1 +
- .../shaper-default/script-hebrew/misc/MANIFEST     |    1 +
- .../script-hebrew/misc/diacritics.txt              |   15 +++++++++++++++
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 +
+ .../in-tree/shaper-default/script-hebrew/MANIFEST  |   1 +
+ .../shaper-default/script-hebrew/misc/MANIFEST     |   1 +
+ .../script-hebrew/misc/diacritics.txt             |   15 +++++++++++++++
  4 files changed, 18 insertions(+), 0 deletions(-)
 
 commit 461b9b6347e4f58589f5be82c40a2df61da2c715
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Mar 1 18:11:19 2012 -0800
+Date:  Thu Mar 1 18:11:19 2012 -0800
 
     Fix cluster formation in Indic
 
     Makes number of failures against Uniscribe with hi_IN dictionary from
-    OO.o to go down from 6334 to 4290.  Not bad for a one-line change!
+    OO.o to go down from 6334 to 4290. Not bad for a one-line change!
 
     Mozilla Bug 729626 - ASAN: heap-buffer-overflow HTML
 
@@ -8584,20 +11413,20 @@ Date:   Thu Mar 1 18:11:19 2012 -0800
 
 commit bc71ad4973842f25216b48842a46d6c9cbce6aa3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Mar 1 17:30:29 2012 -0800
+Date:  Thu Mar 1 17:30:29 2012 -0800
 
     Fix atomic-int op on Apple
 
     The OSAtomicAdd32Barrier operator returns the new value, we want the
     old value.
 
- src/hb-blob.cc           |    2 +-
+ src/hb-blob.cc                  |    2 +-
  src/hb-object-private.hh |    2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit a1970d9afc15b2c6b7513b923019bb223bd95154
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Feb 24 13:51:09 2012 -0500
+Date:  Fri Feb 24 13:51:09 2012 -0500
 
     Add support for atomic int and mutex on Apple systems
 
@@ -8614,7 +11443,7 @@ Date:   Fri Feb 24 13:51:09 2012 -0500
 
 commit 8004429102d7d3a8c42e1cbfe231835de4d3d782
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Feb 23 18:47:17 2012 -0500
+Date:  Thu Feb 23 18:47:17 2012 -0500
 
     Remove unused hb_atomic_int_set()
 
@@ -8626,9 +11455,9 @@ Date:   Thu Feb 23 18:47:17 2012 -0500
 
 commit 45227c10e416894ba7f84fdf72d849cecdb9b898
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Feb 23 19:47:43 2012 -0500
+Date:  Thu Feb 23 19:47:43 2012 -0500
 
-    Add hb-warning.cc.  Oops!
+    Add hb-warning.cc. Oops!
 
  src/hb-warning.cc |   53
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -8636,7 +11465,7 @@ Date:   Thu Feb 23 19:47:43 2012 -0500
 
 commit bd7ff1dec5b92ee59fa060e793f88499adcd8c11
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Feb 23 15:06:16 2012 -0500
+Date:  Thu Feb 23 15:06:16 2012 -0500
 
     Allow disabling multi-threaded support
 
@@ -8647,24 +11476,24 @@ Date:   Thu Feb 23 15:06:16 2012 -0500
     Mozilla Bug 666661 - gfx/harfbuzz/src/hb-prive.h - compiler warnings
     on mac
 
- src/Makefile.am          |    1 +
+ src/Makefile.am         |    1 +
  src/hb-mutex-private.hh  |    6 +++---
  src/hb-object-private.hh |   11 +++--------
  3 files changed, 7 insertions(+), 11 deletions(-)
 
 commit 634c9e3423a9c23793400d1f56e98070e00b6056
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Feb 22 16:43:21 2012 -0500
+Date:  Wed Feb 22 16:43:21 2012 -0500
 
     Minor
 
- src/hb-ot-shape-private.hh |   69
+ src/hb-ot-shape-private.hh |  69
  +++++++++++++++++++++++++-------------------
  1 files changed, 39 insertions(+), 30 deletions(-)
 
 commit 514b6f88668da4eab85103c536dabe24b7bc457b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Feb 22 16:34:37 2012 -0500
+Date:  Wed Feb 22 16:34:37 2012 -0500
 
     Followup: Reorder Hebrew combining classes for better rendering
 
@@ -8673,12 +11502,12 @@ Date:   Wed Feb 22 16:34:37 2012 -0500
     Bug 662055 - advanced Hebrew diacritics are shown correctly only in
     particular order.
 
- src/hb-ot-shape-private.hh |   20 ++++++++++----------
+ src/hb-ot-shape-private.hh |  20 ++++++++++----------
  1 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 6e78607ea71e3e5306f88f227ddba76133d16ed0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Feb 22 16:31:15 2012 -0500
+Date:  Wed Feb 22 16:31:15 2012 -0500
 
     Reorder Hebrew combining classes for better rendering
 
@@ -8687,22 +11516,22 @@ Date:   Wed Feb 22 16:31:15 2012 -0500
     Bug 662055 - advanced Hebrew diacritics are shown correctly only in
     particular order
 
- src/hb-ot-shape-private.hh |   28 ++++++++++++++++++++++++++++
+ src/hb-ot-shape-private.hh |  28 ++++++++++++++++++++++++++++
  1 files changed, 28 insertions(+), 0 deletions(-)
 
 commit 7a70ca78e06c676befe1ae17199fff1f000f8188
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Feb 21 11:31:47 2012 -0500
+Date:  Tue Feb 21 11:31:47 2012 -0500
 
     Add test case from https://bugzilla.mozilla.org/show_bug.cgi?id=714067
 
- .../shaper-arabic/script-arabic/misc/MANIFEST      |    1 +
- .../script-arabic/misc/ligature-diacritics.txt     |    1 +
+ .../shaper-arabic/script-arabic/misc/MANIFEST     |    1 +
+ .../script-arabic/misc/ligature-diacritics.txt     |   1 +
  2 files changed, 2 insertions(+), 0 deletions(-)
 
 commit f51e167436a51b890ffe3f7f7920498fa287acd9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jan 30 09:48:33 2012 -0500
+Date:  Mon Jan 30 09:48:33 2012 -0500
 
     Minor error handling
 
@@ -8711,7 +11540,7 @@ Date:   Mon Jan 30 09:48:33 2012 -0500
 
 commit bee74efbdebc4e46ce57daa8a88bcf06b13411fe
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 27 02:14:08 2012 -0500
+Date:  Fri Jan 27 02:14:08 2012 -0500
 
     Update git.mk to new upstream
 
@@ -8720,7 +11549,7 @@ Date:   Fri Jan 27 02:14:08 2012 -0500
 
 commit 134aa7bc7e3f9b9de76c9de2ed4b7344a7b323f9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 27 02:09:40 2012 -0500
+Date:  Fri Jan 27 02:09:40 2012 -0500
 
     Make checks more OS X friendly
 
@@ -8730,16 +11559,16 @@ Date:   Fri Jan 27 02:09:40 2012 -0500
 
 commit 6152199368399bf98368ea3c794fa760b49756ba
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 27 01:57:59 2012 -0500
+Date:  Fri Jan 27 01:57:59 2012 -0500
 
     Fix check-header-guards on OS X
 
- src/check-header-guards.sh |    2 +-
+ src/check-header-guards.sh |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit c62e41b6aad1fc56225d0e53d6d4abd0f005fe3b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 27 02:20:58 2012 -0500
+Date:  Fri Jan 27 02:20:58 2012 -0500
 
     Minor
 
@@ -8748,38 +11577,38 @@ Date:   Fri Jan 27 02:20:58 2012 -0500
 
 commit 1a5a91dc0d8bf4b72a2f22dc6300b06ad7000b79
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 22 19:57:00 2012 -0500
+Date:  Sun Jan 22 19:57:00 2012 -0500
 
     Add a few more tests
 
- .../indic/script-devanagari/misc/misc.txt          |    3 +++
- .../south-east-asian/script-thai/misc/misc.txt     |    9 +++++++++
+ .../indic/script-devanagari/misc/misc.txt         |    3 +++
+ .../south-east-asian/script-thai/misc/misc.txt     |   9 +++++++++
  2 files changed, 12 insertions(+), 0 deletions(-)
 
 commit 1795f3a222a85cdf80c78a0e9181d23dd1673876
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 22 19:29:45 2012 -0500
+Date:  Sun Jan 22 19:29:45 2012 -0500
 
     Add a couple Thai test cases from Thep
 
- .../in-tree/shaper-indic/south-east-asian/MANIFEST |    1 +
- .../south-east-asian/script-thai/MANIFEST          |    1 +
- .../south-east-asian/script-thai/misc/MANIFEST     |    1 +
- .../south-east-asian/script-thai/misc/misc.txt     |    2 ++
+ .../in-tree/shaper-indic/south-east-asian/MANIFEST |   1 +
+ .../south-east-asian/script-thai/MANIFEST         |    1 +
+ .../south-east-asian/script-thai/misc/MANIFEST     |   1 +
+ .../south-east-asian/script-thai/misc/misc.txt     |   2 ++
  4 files changed, 5 insertions(+), 0 deletions(-)
 
 commit ec3f506682fc6e2d7d7455e49d6c82ac9dd0c660
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 22 19:10:55 2012 -0500
+Date:  Sun Jan 22 19:10:55 2012 -0500
 
     Add Devanagari test from Tom Hacohen
 
- .../indic/script-devanagari/misc/misc.txt          |    1 +
+ .../indic/script-devanagari/misc/misc.txt         |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 commit 71be4ca3dd5eaaca31957e34fef11f6aeb4aebdf
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 22 16:26:49 2012 -0500
+Date:  Sun Jan 22 16:26:49 2012 -0500
 
     Also ignore "ChangeLog" in manifests
 
@@ -8788,7 +11617,7 @@ Date:   Sun Jan 22 16:26:49 2012 -0500
 
 commit 3c9a39ecd65990f2c7b29bb741c6a538fa425531
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 22 16:21:19 2012 -0500
+Date:  Sun Jan 22 16:21:19 2012 -0500
 
     Remove newline
 
@@ -8797,20 +11626,20 @@ Date:   Sun Jan 22 16:21:19 2012 -0500
 
 commit e4ccbfe276db5ed098ddcf78a7bb8f2da4263128
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 22 16:07:32 2012 -0500
+Date:  Sun Jan 22 16:07:32 2012 -0500
 
     Allow --color=html in hb-diff
 
     Not that useful right now as we don't escape < and >.  Perhaps
     another tool can be added to convert the ANSI output to HTML.
 
- test/shaping/hb-diff          |    2 +-
+ test/shaping/hb-diff         |    2 +-
  test/shaping/hb_test_tools.py |   22 +++++++++++++++++-----
  2 files changed, 18 insertions(+), 6 deletions(-)
 
 commit 71632c96daa4ba15e13f4d9e7f2c121d0162614e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 22 15:31:44 2012 -0500
+Date:  Sun Jan 22 15:31:44 2012 -0500
 
     Fallback to Latin script if the font has no other usable scripts
 
@@ -8841,23 +11670,23 @@ Date:   Sun Jan 22 15:31:44 2012 -0500
 
     JK
 
- src/hb-ot-layout.cc |    9 +++++++++
+ src/hb-ot-layout.cc |   9 +++++++++
  1 files changed, 9 insertions(+), 0 deletions(-)
 
 commit 8f80f93491be73f05eba908591c856339acda51e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 20:03:25 2012 -0500
+Date:  Sat Jan 21 20:03:25 2012 -0500
 
     More shoveling around
 
  test/shaping/hb-diff-filter-failures |    2 +-
- test/shaping/hb-manifest-read        |    2 +-
- test/shaping/hb_test_tools.py        |   27 ++++++++++++++++-----------
+ test/shaping/hb-manifest-read       |    2 +-
+ test/shaping/hb_test_tools.py       |   27 ++++++++++++++++-----------
  3 files changed, 18 insertions(+), 13 deletions(-)
 
 commit c78c6e9844a23144ce7fa29afbf57b74587bfcd0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 19:55:16 2012 -0500
+Date:  Sat Jan 21 19:55:16 2012 -0500
 
     Cleanup
 
@@ -8867,7 +11696,7 @@ Date:   Sat Jan 21 19:55:16 2012 -0500
 
 commit ab94a9c542f7ec9143335b73493ccb75d4586a3a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 19:43:58 2012 -0500
+Date:  Sat Jan 21 19:43:58 2012 -0500
 
     Distribute testing tools
 
@@ -8876,7 +11705,7 @@ Date:   Sat Jan 21 19:43:58 2012 -0500
 
 commit 3e86feb54c94e46b60168fd2a4773183eb1354b4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 19:40:30 2012 -0500
+Date:  Sat Jan 21 19:40:30 2012 -0500
 
     Speed up colorless diff
 
@@ -8885,7 +11714,7 @@ Date:   Sat Jan 21 19:40:30 2012 -0500
 
 commit 1e58df603457cb4b57da78b5d4a8df66aa7d7be4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 19:37:31 2012 -0500
+Date:  Sat Jan 21 19:37:31 2012 -0500
 
     Cleanup manifest code
 
@@ -8894,18 +11723,18 @@ Date:   Sat Jan 21 19:37:31 2012 -0500
 
 commit 956d552e108eeb50bb3ad21588830af7a2f3862a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 19:31:51 2012 -0500
+Date:  Sat Jan 21 19:31:51 2012 -0500
 
     Port hb-manifest-update to Python
 
  test/shaping/hb-manifest-update |   23 +++--------------------
- test/shaping/hb_test_tools.py   |   38
+ test/shaping/hb_test_tools.py  |   38
  ++++++++++++++++++++++++++++++--------
  2 files changed, 33 insertions(+), 28 deletions(-)
 
 commit 3a34e9e351ed0ee3eb27f9c0f154bc227f1226bf
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 19:15:41 2012 -0500
+Date:  Sat Jan 21 19:15:41 2012 -0500
 
     Ignore Broken Pipe errors
 
@@ -8915,7 +11744,7 @@ Date:   Sat Jan 21 19:15:41 2012 -0500
 
 commit d5300241680844f5625f32792f7dd7181ed05f9b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 19:07:22 2012 -0500
+Date:  Sat Jan 21 19:07:22 2012 -0500
 
     [util] Make clusters work with char offset instead of UTF-8 offset
 
@@ -8931,7 +11760,7 @@ Date:   Sat Jan 21 19:07:22 2012 -0500
 
 commit 0f68f4a0b5ee78cbdb2a89a9a1a9125afe72ed2f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 21 18:59:48 2012 -0500
+Date:  Sat Jan 21 18:59:48 2012 -0500
 
     Correctly print out Unicode strings
 
@@ -8940,108 +11769,108 @@ Date:   Sat Jan 21 18:59:48 2012 -0500
 
 commit f22089ac24f43ff048c2a0f1c1f604ae3a96be8b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 21:21:47 2012 -0500
+Date:  Fri Jan 20 21:21:47 2012 -0500
 
     Misc fixes
 
- test/shaping/hb-diff          |    8 ++++----
+ test/shaping/hb-diff         |    8 ++++----
  test/shaping/hb_test_tools.py |    4 ++--
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 96968bfae5ce61a0a098bf0e6acd2210a309a499
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 21:16:34 2012 -0500
+Date:  Fri Jan 20 21:16:34 2012 -0500
 
     Port hb-manifest-read to Python
 
  test/shaping/hb-diff-filter-failures |    2 +-
- test/shaping/hb-manifest-read        |   37 ++-----------------------
- test/shaping/hb_test_tools.py        |   49
+ test/shaping/hb-manifest-read       |   37 ++-----------------------
+ test/shaping/hb_test_tools.py       |   49
  ++++++++++++++++++++++++++++++---
  3 files changed, 48 insertions(+), 40 deletions(-)
 
 commit a59ed46fa4f7b76605f8ce6e75783ead406468f5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 20:56:32 2012 -0500
+Date:  Fri Jan 20 20:56:32 2012 -0500
 
     Add final residues from test-shape-complex
 
- .../in-tree/shaper-arabic/script-nko/misc/MANIFEST |    1 +
- .../in-tree/shaper-arabic/script-nko/misc/misc.txt |    5 +++++
- test/shaping/texts/in-tree/shaper-default/MANIFEST |    1 +
- .../shaper-default/script-linear-b/MANIFEST        |    1 +
- .../shaper-default/script-linear-b/misc/MANIFEST   |    1 +
- .../shaper-default/script-linear-b/misc/misc.txt   |    1 +
- test/shaping/texts/in-tree/shaper-indic/MANIFEST   |    1 +
- .../in-tree/shaper-indic/south-east-asian/MANIFEST |    1 +
- .../south-east-asian/script-khmer/MANIFEST         |    1 +
- .../south-east-asian/script-khmer/misc/MANIFEST    |    1 +
- .../south-east-asian/script-khmer/misc/misc.txt    |    9 +++++++++
+ .../in-tree/shaper-arabic/script-nko/misc/MANIFEST |   1 +
+ .../in-tree/shaper-arabic/script-nko/misc/misc.txt |   5 +++++
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 +
+ .../shaper-default/script-linear-b/MANIFEST       |    1 +
+ .../shaper-default/script-linear-b/misc/MANIFEST   |   1 +
+ .../shaper-default/script-linear-b/misc/misc.txt   |   1 +
+ test/shaping/texts/in-tree/shaper-indic/MANIFEST   |   1 +
+ .../in-tree/shaper-indic/south-east-asian/MANIFEST |   1 +
+ .../south-east-asian/script-khmer/MANIFEST        |    1 +
+ .../south-east-asian/script-khmer/misc/MANIFEST    |   1 +
+ .../south-east-asian/script-khmer/misc/misc.txt    |   9 +++++++++
  11 files changed, 23 insertions(+), 0 deletions(-)
 
 commit 820e0ed318d9b187a131baa9491d5d390ec33ef4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 20:51:52 2012 -0500
+Date:  Fri Jan 20 20:51:52 2012 -0500
 
     Add Punjabi tests from test-shape-complex also
 
- .../indic/script-punjabi/misc/MANIFEST             |    1 +
- .../indic/script-punjabi/misc/misc.txt             |    1 +
+ .../indic/script-punjabi/misc/MANIFEST                    |    1 +
+ .../indic/script-punjabi/misc/misc.txt                    |    1 +
  2 files changed, 2 insertions(+), 0 deletions(-)
 
 commit a7d71c105772fb612871b4cae59bdae47bbc8751
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 20:50:09 2012 -0500
+Date:  Fri Jan 20 20:50:09 2012 -0500
 
     Add Tamil test data from Muguntharaj Subramanian
 
- .../shaper-indic/indic/script-tamil/misc/MANIFEST  |    1 +
- .../shaper-indic/indic/script-tamil/misc/misc.txt  |   43
+ .../shaper-indic/indic/script-tamil/misc/MANIFEST  |   1 +
+ .../shaper-indic/indic/script-tamil/misc/misc.txt  |  43
  ++++++++++++++++++++
  2 files changed, 44 insertions(+), 0 deletions(-)
 
 commit 5992a9941e7f19181df1e34e79e514ccedc3d284
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 20:48:14 2012 -0500
+Date:  Fri Jan 20 20:48:14 2012 -0500
 
     Import test data from late test-shape-complex
 
- .../in-tree/shaper-arabic/script-arabic/MANIFEST   |    1 +
- .../in-tree/shaper-arabic/script-mandaic/MANIFEST  |    1 +
- .../shaper-arabic/script-mongolian/MANIFEST        |    1 +
- .../in-tree/shaper-arabic/script-nko/MANIFEST      |    1 +
- .../in-tree/shaper-arabic/script-syriac/MANIFEST   |    1 +
- .../shaper-indic/indic/script-assamese/MANIFEST    |    1 +
- .../shaper-indic/indic/script-bengali/MANIFEST     |    1 +
- .../indic/script-bengali/misc/MANIFEST             |    1 +
- .../indic/script-bengali/misc/misc.txt             |   48
+ .../in-tree/shaper-arabic/script-arabic/MANIFEST   |   1 +
+ .../in-tree/shaper-arabic/script-mandaic/MANIFEST  |   1 +
+ .../shaper-arabic/script-mongolian/MANIFEST       |    1 +
+ .../in-tree/shaper-arabic/script-nko/MANIFEST     |    1 +
+ .../in-tree/shaper-arabic/script-syriac/MANIFEST   |   1 +
+ .../shaper-indic/indic/script-assamese/MANIFEST    |   1 +
+ .../shaper-indic/indic/script-bengali/MANIFEST     |   1 +
+ .../indic/script-bengali/misc/MANIFEST                    |    1 +
+ .../indic/script-bengali/misc/misc.txt                    |   48
  ++++++++++++++++++++
- .../shaper-indic/indic/script-devanagari/MANIFEST  |    1 +
- .../indic/script-devanagari/misc/MANIFEST          |    1 +
- .../indic/script-devanagari/misc/misc.txt          |   23 +++++++++
- .../shaper-indic/indic/script-gujarati/MANIFEST    |    1 +
- .../shaper-indic/indic/script-kannada/MANIFEST     |    1 +
- .../indic/script-kannada/misc/MANIFEST             |    1 +
- .../indic/script-kannada/misc/misc.txt             |   17 +++++++
- .../shaper-indic/indic/script-malayalam/MANIFEST   |    1 +
- .../indic/script-malayalam/misc/MANIFEST           |    1 +
- .../indic/script-malayalam/misc/misc.txt           |   22 +++++++++
- .../shaper-indic/indic/script-oriya/MANIFEST       |    1 +
- .../shaper-indic/indic/script-oriya/misc/MANIFEST  |    1 +
- .../shaper-indic/indic/script-oriya/misc/misc.txt  |   28 +++++++++++
- .../shaper-indic/indic/script-punjabi/MANIFEST     |    1 +
- .../shaper-indic/indic/script-sinhala/MANIFEST     |    1 +
- .../indic/script-sinhala/misc/MANIFEST             |    1 +
- .../indic/script-sinhala/misc/misc.txt             |    6 +++
- .../shaper-indic/indic/script-tamil/MANIFEST       |    1 +
- .../shaper-indic/indic/script-telugu/MANIFEST      |    1 +
- .../shaper-indic/indic/script-telugu/misc/MANIFEST |    1 +
- .../shaper-indic/indic/script-telugu/misc/misc.txt |   11 +++++
+ .../shaper-indic/indic/script-devanagari/MANIFEST  |   1 +
+ .../indic/script-devanagari/misc/MANIFEST         |    1 +
+ .../indic/script-devanagari/misc/misc.txt         |   23 +++++++++
+ .../shaper-indic/indic/script-gujarati/MANIFEST    |   1 +
+ .../shaper-indic/indic/script-kannada/MANIFEST     |   1 +
+ .../indic/script-kannada/misc/MANIFEST                    |    1 +
+ .../indic/script-kannada/misc/misc.txt                    |   17 +++++++
+ .../shaper-indic/indic/script-malayalam/MANIFEST   |   1 +
+ .../indic/script-malayalam/misc/MANIFEST          |    1 +
+ .../indic/script-malayalam/misc/misc.txt          |   22 +++++++++
+ .../shaper-indic/indic/script-oriya/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-oriya/misc/MANIFEST  |   1 +
+ .../shaper-indic/indic/script-oriya/misc/misc.txt  |  28 +++++++++++
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |   1 +
+ .../shaper-indic/indic/script-sinhala/MANIFEST     |   1 +
+ .../indic/script-sinhala/misc/MANIFEST                    |    1 +
+ .../indic/script-sinhala/misc/misc.txt                    |    6 +++
+ .../shaper-indic/indic/script-tamil/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-telugu/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-telugu/misc/MANIFEST |   1 +
+ .../shaper-indic/indic/script-telugu/misc/misc.txt |  11 +++++
  30 files changed, 178 insertions(+), 0 deletions(-)
 
 commit 46ac45647760984c6220f04ba4521038e628b169
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 19:32:17 2012 -0500
+Date:  Fri Jan 20 19:32:17 2012 -0500
 
     Fix Unicode encoding issue
 
@@ -9050,7 +11879,7 @@ Date:   Fri Jan 20 19:32:17 2012 -0500
 
 commit ad34e39a4a320310b1edd9fc4d7e740373510c69
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 18:39:27 2012 -0500
+Date:  Fri Jan 20 18:39:27 2012 -0500
 
     Make test tools interactive
 
@@ -9061,38 +11890,38 @@ Date:   Fri Jan 20 18:39:27 2012 -0500
 
 commit 91540a7d97051a3d6e97fdcd1e98af23e0780cdd
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 18:27:52 2012 -0500
+Date:  Fri Jan 20 18:27:52 2012 -0500
 
     Move most testing logic into hb_test_tools.py
 
     The actual utils are one-liners now.
 
- test/shaping/hb-diff                 |   77 ++-------------
+ test/shaping/hb-diff                |   77 ++-------------
  test/shaping/hb-diff-filter-failures |   27 +-----
  test/shaping/hb-unicode-decode       |   18 +---
  test/shaping/hb-unicode-encode       |   21 +----
  test/shaping/hb-unicode-prettyname   |   53 +----------
- test/shaping/hb_test_tools.py        |  180
+ test/shaping/hb_test_tools.py       |  180
  ++++++++++++++++++++++++++++++++++
  6 files changed, 197 insertions(+), 179 deletions(-)
 
 commit 66aa080033dcff07b8bb5e7b1f0e3511f067d6c1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 17:36:10 2012 -0500
+Date:  Fri Jan 20 17:36:10 2012 -0500
 
     Remove test-shape-complex
 
     New shaping testsuite and framework coming.
 
- test/api/Makefile.am               |    6 -
- test/api/test-shape-complex.c      | 1237
+ test/api/Makefile.am              |    6 -
+ test/api/test-shape-complex.c     | 1237
  ------------------------------------
- test/shaping/hb-unicode-prettyname |    1 +
+ test/shaping/hb-unicode-prettyname |   1 +
  3 files changed, 1 insertions(+), 1243 deletions(-)
 
 commit ed459bfb63c58b59fc0dbe25021c396e8ef8683c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 17:24:05 2012 -0500
+Date:  Fri Jan 20 17:24:05 2012 -0500
 
     Add hb-unicode-encode
 
@@ -9101,7 +11930,7 @@ Date:   Fri Jan 20 17:24:05 2012 -0500
 
 commit d8134bc017ca3383e0978ddee57070eb3aab8964
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 17:18:59 2012 -0500
+Date:  Fri Jan 20 17:18:59 2012 -0500
 
     [hb-shape] Add parantheses around --show-text output
 
@@ -9110,7 +11939,7 @@ Date:   Fri Jan 20 17:18:59 2012 -0500
 
 commit b12c4d43614199f8910a06507603f6c431d9df67
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 17:17:44 2012 -0500
+Date:  Fri Jan 20 17:17:44 2012 -0500
 
     Add hb-diff-filter-failures
 
@@ -9119,429 +11948,429 @@ Date:   Fri Jan 20 17:17:44 2012 -0500
 
 commit d4bffbc55bf4c23ab5c7f46af613aeecc79ac515
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 17:16:35 2012 -0500
+Date:  Fri Jan 20 17:16:35 2012 -0500
 
     Move
 
- test/shaping/texts/MANIFEST                        |    4 +-
- test/shaping/texts/in-tree/MANIFEST                |    3 +
- test/shaping/texts/in-tree/shaper-arabic/MANIFEST  |    5 +
- test/shaping/texts/in-tree/shaper-indic/MANIFEST   |    1 +
- .../texts/in-tree/shaper-indic/indic/MANIFEST      |   11 +
- .../shaper-indic/indic/script-assamese/MANIFEST    |    1 +
- .../indic/script-assamese/utrrs/LICENSE            |   19 +
- .../indic/script-assamese/utrrs/MANIFEST           |    3 +
- .../indic/script-assamese/utrrs/README             |   13 +
- .../indic/script-assamese/utrrs/SOURCES            |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   40 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   10 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   11 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-assamese/utrrs/codepoint/MANIFEST |    7 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   59 +
+ test/shaping/texts/MANIFEST                       |    4 +-
+ test/shaping/texts/in-tree/MANIFEST               |    3 +
+ test/shaping/texts/in-tree/shaper-arabic/MANIFEST  |   5 +
+ test/shaping/texts/in-tree/shaper-indic/MANIFEST   |   1 +
+ .../texts/in-tree/shaper-indic/indic/MANIFEST     |   11 +
+ .../shaper-indic/indic/script-assamese/MANIFEST    |   1 +
+ .../indic/script-assamese/utrrs/LICENSE           |   19 +
+ .../indic/script-assamese/utrrs/MANIFEST          |    3 +
+ .../indic/script-assamese/utrrs/README                    |   13 +
+ .../indic/script-assamese/utrrs/SOURCES           |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  11 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-assamese/utrrs/codepoint/MANIFEST |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  59 +
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  131 ++
- .../indic/script-assamese/utrrs/gpos/MANIFEST      |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  139 ++
- .../indic/script-assamese/utrrs/gsub/MANIFEST      |    1 +
- .../shaper-indic/indic/script-bengali/MANIFEST     |    1 +
- .../indic/script-bengali/utrrs/LICENSE             |   19 +
- .../indic/script-bengali/utrrs/MANIFEST            |    3 +
- .../shaper-indic/indic/script-bengali/utrrs/README |   13 +
- .../indic/script-bengali/utrrs/SOURCES             |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    1 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   36 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   10 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-bengali/utrrs/codepoint/MANIFEST  |    7 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   58 +
+ .../indic/script-assamese/utrrs/gpos/MANIFEST     |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  139 ++
+ .../indic/script-assamese/utrrs/gsub/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-bengali/MANIFEST     |   1 +
+ .../indic/script-bengali/utrrs/LICENSE                    |   19 +
+ .../indic/script-bengali/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-bengali/utrrs/README |  13 +
+ .../indic/script-bengali/utrrs/SOURCES                    |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-bengali/utrrs/codepoint/MANIFEST  |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  58 +
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  119 ++
- .../indic/script-bengali/utrrs/gpos/MANIFEST       |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  215 +++
- .../indic/script-bengali/utrrs/gsub/MANIFEST       |    1 +
- .../shaper-indic/indic/script-devanagari/MANIFEST  |    1 +
- .../indic/script-devanagari/utrrs/LICENSE          |   19 +
- .../indic/script-devanagari/utrrs/MANIFEST         |    3 +
- .../indic/script-devanagari/utrrs/README           |   13 +
- .../indic/script-devanagari/utrrs/SOURCES          |    2 +
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    8 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   45 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   14 +
- ...tFeatureCodepoint-DevnagariSpecificAddition.txt |    1 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...ndicFontFeatureCodepoint-GenericPunctuation.txt |    2 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   16 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |   10 +
- .../script-devanagari/utrrs/codepoint/MANIFEST     |    9 +
+ .../indic/script-bengali/utrrs/gpos/MANIFEST      |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  215 +++
+ .../indic/script-bengali/utrrs/gsub/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-devanagari/MANIFEST  |   1 +
+ .../indic/script-devanagari/utrrs/LICENSE         |   19 +
+ .../indic/script-devanagari/utrrs/MANIFEST        |    3 +
+ .../indic/script-devanagari/utrrs/README          |   13 +
+ .../indic/script-devanagari/utrrs/SOURCES         |    2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   8 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   45 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  14 +
+ ...tFeatureCodepoint-DevnagariSpecificAddition.txt |   1 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...ndicFontFeatureCodepoint-GenericPunctuation.txt |   2 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  16 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |  10 +
+ .../script-devanagari/utrrs/codepoint/MANIFEST     |   9 +
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  185 +++
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  185 +++
- .../indic/script-devanagari/utrrs/gpos/MANIFEST    |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            | 1367
+ .../indic/script-devanagari/utrrs/gpos/MANIFEST    |   2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1367
  ++++++++++++++++++++
- .../indic/script-devanagari/utrrs/gsub/MANIFEST    |    1 +
- .../shaper-indic/indic/script-gujarati/MANIFEST    |    1 +
- .../indic/script-gujarati/utrrs/LICENSE            |   19 +
- .../indic/script-gujarati/utrrs/MANIFEST           |    3 +
- .../indic/script-gujarati/utrrs/README             |   13 +
- .../indic/script-gujarati/utrrs/SOURCES            |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    1 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   34 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   13 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    7 +
- .../indic/script-gujarati/utrrs/codepoint/MANIFEST |    7 +
+ .../indic/script-devanagari/utrrs/gsub/MANIFEST    |   1 +
+ .../shaper-indic/indic/script-gujarati/MANIFEST    |   1 +
+ .../indic/script-gujarati/utrrs/LICENSE           |   19 +
+ .../indic/script-gujarati/utrrs/MANIFEST          |    3 +
+ .../indic/script-gujarati/utrrs/README                    |   13 +
+ .../indic/script-gujarati/utrrs/SOURCES           |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  13 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   7 +
+ .../indic/script-gujarati/utrrs/codepoint/MANIFEST |   7 +
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  170 +++
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  170 +++
- .../indic/script-gujarati/utrrs/gpos/MANIFEST      |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            | 1156
+ .../indic/script-gujarati/utrrs/gpos/MANIFEST     |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1156
  +++++++++++++++++
- .../indic/script-gujarati/utrrs/gsub/MANIFEST      |    1 +
- .../shaper-indic/indic/script-kannada/MANIFEST     |    1 +
- .../indic/script-kannada/utrrs/LICENSE             |   19 +
- .../indic/script-kannada/utrrs/MANIFEST            |    3 +
- .../shaper-indic/indic/script-kannada/utrrs/README |   13 +
- .../indic/script-kannada/utrrs/SOURCES             |    2 +
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    1 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   40 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   13 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    9 +
- .../indic/script-kannada/utrrs/codepoint/MANIFEST  |    8 +
+ .../indic/script-gujarati/utrrs/gsub/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-kannada/MANIFEST     |   1 +
+ .../indic/script-kannada/utrrs/LICENSE                    |   19 +
+ .../indic/script-kannada/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-kannada/utrrs/README |  13 +
+ .../indic/script-kannada/utrrs/SOURCES                    |    2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   1 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   9 +
+ .../indic/script-kannada/utrrs/codepoint/MANIFEST  |   8 +
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  188 +++
- .../indic/script-kannada/utrrs/gpos/MANIFEST       |    1 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  306 +++++
- .../indic/script-kannada/utrrs/gsub/MANIFEST       |    1 +
- .../shaper-indic/indic/script-malayalam/MANIFEST   |    1 +
- .../indic/script-malayalam/utrrs/LICENSE           |   19 +
- .../indic/script-malayalam/utrrs/MANIFEST          |    2 +
- .../indic/script-malayalam/utrrs/README            |   13 +
- .../indic/script-malayalam/utrrs/SOURCES           |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   36 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    4 +
- .../script-malayalam/utrrs/codepoint/MANIFEST      |    7 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  254 ++++
- .../indic/script-malayalam/utrrs/gsub/MANIFEST     |    1 +
- .../shaper-indic/indic/script-oriya/MANIFEST       |    1 +
- .../shaper-indic/indic/script-oriya/utrrs/LICENSE  |   19 +
- .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |    2 +
- .../shaper-indic/indic/script-oriya/utrrs/README   |   13 +
- .../shaper-indic/indic/script-oriya/utrrs/SOURCES  |    2 +
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    3 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   34 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 +
- .../IndicFontFeatureCodepoint-OriyaSpecific.txt    |    2 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    8 +
- .../indic/script-oriya/utrrs/codepoint/MANIFEST    |    9 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  170 +++
- .../indic/script-oriya/utrrs/gsub/MANIFEST         |    1 +
- .../shaper-indic/indic/script-punjabi/MANIFEST     |    1 +
- .../indic/script-punjabi/utrrs/LICENSE             |   19 +
- .../indic/script-punjabi/utrrs/MANIFEST            |    3 +
- .../shaper-indic/indic/script-punjabi/utrrs/README |   13 +
- .../indic/script-punjabi/utrrs/SOURCES             |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   38 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |    9 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |    6 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   10 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |    7 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   22 +
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |    2 +
- .../indic/script-punjabi/utrrs/gpos/MANIFEST       |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  152 +++
- .../indic/script-punjabi/utrrs/gsub/MANIFEST       |    1 +
- .../shaper-indic/indic/script-sinhala/MANIFEST     |    1 +
- .../indic/script-sinhala/utrrs/LICENSE             |   19 +
- .../indic/script-sinhala/utrrs/MANIFEST            |    3 +
- .../shaper-indic/indic/script-sinhala/utrrs/README |   13 +
- .../indic/script-sinhala/utrrs/SOURCES             |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   41 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   17 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   18 +
- .../IndicFontFeatureCodepoint-Punctuation.txt      |    1 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    3 +
- .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |    5 +
- .../utrrs/gpos/IndicFontFeatureGPOS.txt            |  162 +++
- .../indic/script-sinhala/utrrs/gpos/MANIFEST       |    1 +
- .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt   |    1 +
- .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt    |   41 +
- .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt     |   42 +
- .../gsub/IndicFontFeatureGSUB-Special-Cases.txt    |    2 +
- .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt  |    1 +
- .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt    |   41 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |    1 +
- .../indic/script-sinhala/utrrs/gsub/MANIFEST       |    7 +
- .../shaper-indic/indic/script-tamil/MANIFEST       |    1 +
- .../shaper-indic/indic/script-tamil/utrrs/LICENSE  |   19 +
- .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |    3 +
- .../shaper-indic/indic/script-tamil/utrrs/README   |   13 +
- .../shaper-indic/indic/script-tamil/utrrs/SOURCES  |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   23 +
- .../IndicFontFeatureCodepoint-CurrencySymbols.txt  |    1 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   11 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 +
- .../IndicFontFeatureCodepoint-Numerics.txt         |    3 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-Symbols.txt          |    6 +
- .../IndicFontFeatureCodepoint-TamilSymbol.txt      |    1 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    4 +
- .../indic/script-tamil/utrrs/codepoint/MANIFEST    |   10 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   64 +
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   44 +
- .../indic/script-tamil/utrrs/gpos/MANIFEST         |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |    4 +
- .../indic/script-tamil/utrrs/gsub/MANIFEST         |    1 +
- .../shaper-indic/indic/script-telugu/MANIFEST      |    1 +
- .../shaper-indic/indic/script-telugu/utrrs/LICENSE |   19 +
- .../indic/script-telugu/utrrs/MANIFEST             |    3 +
- .../shaper-indic/indic/script-telugu/utrrs/README  |   13 +
- .../shaper-indic/indic/script-telugu/utrrs/SOURCES |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   38 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   13 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-telugu/utrrs/codepoint/MANIFEST   |    7 +
+ .../indic/script-kannada/utrrs/gpos/MANIFEST      |    1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  306 +++++
+ .../indic/script-kannada/utrrs/gsub/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-malayalam/MANIFEST   |   1 +
+ .../indic/script-malayalam/utrrs/LICENSE          |   19 +
+ .../indic/script-malayalam/utrrs/MANIFEST         |    2 +
+ .../indic/script-malayalam/utrrs/README           |   13 +
+ .../indic/script-malayalam/utrrs/SOURCES          |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 +
+ .../script-malayalam/utrrs/codepoint/MANIFEST     |    7 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  254 ++++
+ .../indic/script-malayalam/utrrs/gsub/MANIFEST     |   1 +
+ .../shaper-indic/indic/script-oriya/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-oriya/utrrs/LICENSE  |  19 +
+ .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |   2 +
+ .../shaper-indic/indic/script-oriya/utrrs/README   |  13 +
+ .../shaper-indic/indic/script-oriya/utrrs/SOURCES  |   2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   3 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-OriyaSpecific.txt    |   2 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   8 +
+ .../indic/script-oriya/utrrs/codepoint/MANIFEST    |   9 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  170 +++
+ .../indic/script-oriya/utrrs/gsub/MANIFEST        |    1 +
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |   1 +
+ .../indic/script-punjabi/utrrs/LICENSE                    |   19 +
+ .../indic/script-punjabi/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-punjabi/utrrs/README |  13 +
+ .../indic/script-punjabi/utrrs/SOURCES                    |    2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |   9 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |   6 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   2 +
+ .../indic/script-punjabi/utrrs/gpos/MANIFEST      |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  152 +++
+ .../indic/script-punjabi/utrrs/gsub/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-sinhala/MANIFEST     |   1 +
+ .../indic/script-sinhala/utrrs/LICENSE                    |   19 +
+ .../indic/script-sinhala/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-sinhala/utrrs/README |  13 +
+ .../indic/script-sinhala/utrrs/SOURCES                    |    2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   41 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  17 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  18 +
+ .../IndicFontFeatureCodepoint-Punctuation.txt     |    1 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   3 +
+ .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |   5 +
+ .../utrrs/gpos/IndicFontFeatureGPOS.txt           |  162 +++
+ .../indic/script-sinhala/utrrs/gpos/MANIFEST      |    1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt   |   1 +
+ .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt    |  41 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt     |  42 +
+ .../gsub/IndicFontFeatureGSUB-Special-Cases.txt    |   2 +
+ .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt  |   1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt    |  41 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    1 +
+ .../indic/script-sinhala/utrrs/gsub/MANIFEST      |    7 +
+ .../shaper-indic/indic/script-tamil/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-tamil/utrrs/LICENSE  |  19 +
+ .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |   3 +
+ .../shaper-indic/indic/script-tamil/utrrs/README   |  13 +
+ .../shaper-indic/indic/script-tamil/utrrs/SOURCES  |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   23 +
+ .../IndicFontFeatureCodepoint-CurrencySymbols.txt  |   1 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  11 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-Numerics.txt        |    3 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-Symbols.txt         |    6 +
+ .../IndicFontFeatureCodepoint-TamilSymbol.txt     |    1 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 +
+ .../indic/script-tamil/utrrs/codepoint/MANIFEST    |  10 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  64 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  44 +
+ .../indic/script-tamil/utrrs/gpos/MANIFEST        |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    4 +
+ .../indic/script-tamil/utrrs/gsub/MANIFEST        |    1 +
+ .../shaper-indic/indic/script-telugu/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-telugu/utrrs/LICENSE |  19 +
+ .../indic/script-telugu/utrrs/MANIFEST                    |    3 +
+ .../shaper-indic/indic/script-telugu/utrrs/README  |  13 +
+ .../shaper-indic/indic/script-telugu/utrrs/SOURCES |   2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-telugu/utrrs/codepoint/MANIFEST   |   7 +
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  385 ++++++
- .../indic/script-telugu/utrrs/gpos/MANIFEST        |    1 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  287 ++++
- .../indic/script-telugu/utrrs/gsub/MANIFEST        |    1 +
- test/shaping/texts/shaper-arabic/MANIFEST          |    5 -
- test/shaping/texts/shaper-indic/MANIFEST           |    1 -
- test/shaping/texts/shaper-indic/indic/MANIFEST     |   11 -
- .../shaper-indic/indic/script-assamese/MANIFEST    |    1 -
- .../indic/script-assamese/utrrs/LICENSE            |   19 -
- .../indic/script-assamese/utrrs/MANIFEST           |    3 -
- .../indic/script-assamese/utrrs/README             |   13 -
- .../indic/script-assamese/utrrs/SOURCES            |    2 -
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   40 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   10 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   11 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 -
- .../indic/script-assamese/utrrs/codepoint/MANIFEST |    7 -
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   59 -
+ .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ++++
+ .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 +
+ test/shaping/texts/shaper-arabic/MANIFEST         |    5 -
+ test/shaping/texts/shaper-indic/MANIFEST          |    1 -
+ test/shaping/texts/shaper-indic/indic/MANIFEST     |  11 -
+ .../shaper-indic/indic/script-assamese/MANIFEST    |   1 -
+ .../indic/script-assamese/utrrs/LICENSE           |   19 -
+ .../indic/script-assamese/utrrs/MANIFEST          |    3 -
+ .../indic/script-assamese/utrrs/README                    |   13 -
+ .../indic/script-assamese/utrrs/SOURCES           |    2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  11 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
+ .../indic/script-assamese/utrrs/codepoint/MANIFEST |   7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  59 -
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  131 --
- .../indic/script-assamese/utrrs/gpos/MANIFEST      |    2 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  139 --
- .../indic/script-assamese/utrrs/gsub/MANIFEST      |    1 -
- .../shaper-indic/indic/script-bengali/MANIFEST     |    1 -
- .../indic/script-bengali/utrrs/LICENSE             |   19 -
- .../indic/script-bengali/utrrs/MANIFEST            |    3 -
- .../shaper-indic/indic/script-bengali/utrrs/README |   13 -
- .../indic/script-bengali/utrrs/SOURCES             |    2 -
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    1 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   36 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   10 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 -
- .../indic/script-bengali/utrrs/codepoint/MANIFEST  |    7 -
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   58 -
+ .../indic/script-assamese/utrrs/gpos/MANIFEST     |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  139 --
+ .../indic/script-assamese/utrrs/gsub/MANIFEST     |    1 -
+ .../shaper-indic/indic/script-bengali/MANIFEST     |   1 -
+ .../indic/script-bengali/utrrs/LICENSE                    |   19 -
+ .../indic/script-bengali/utrrs/MANIFEST           |    3 -
+ .../shaper-indic/indic/script-bengali/utrrs/README |  13 -
+ .../indic/script-bengali/utrrs/SOURCES                    |    2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
+ .../indic/script-bengali/utrrs/codepoint/MANIFEST  |   7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  58 -
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  119 --
- .../indic/script-bengali/utrrs/gpos/MANIFEST       |    2 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  215 ---
- .../indic/script-bengali/utrrs/gsub/MANIFEST       |    1 -
- .../shaper-indic/indic/script-devanagari/MANIFEST  |    1 -
- .../indic/script-devanagari/utrrs/LICENSE          |   19 -
- .../indic/script-devanagari/utrrs/MANIFEST         |    3 -
- .../indic/script-devanagari/utrrs/README           |   13 -
- .../indic/script-devanagari/utrrs/SOURCES          |    2 -
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    8 -
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   45 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   14 -
- ...tFeatureCodepoint-DevnagariSpecificAddition.txt |    1 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...ndicFontFeatureCodepoint-GenericPunctuation.txt |    2 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   16 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |   10 -
- .../script-devanagari/utrrs/codepoint/MANIFEST     |    9 -
+ .../indic/script-bengali/utrrs/gpos/MANIFEST      |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  215 ---
+ .../indic/script-bengali/utrrs/gsub/MANIFEST      |    1 -
+ .../shaper-indic/indic/script-devanagari/MANIFEST  |   1 -
+ .../indic/script-devanagari/utrrs/LICENSE         |   19 -
+ .../indic/script-devanagari/utrrs/MANIFEST        |    3 -
+ .../indic/script-devanagari/utrrs/README          |   13 -
+ .../indic/script-devanagari/utrrs/SOURCES         |    2 -
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   8 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   45 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  14 -
+ ...tFeatureCodepoint-DevnagariSpecificAddition.txt |   1 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...ndicFontFeatureCodepoint-GenericPunctuation.txt |   2 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  16 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |  10 -
+ .../script-devanagari/utrrs/codepoint/MANIFEST     |   9 -
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  185 ---
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  185 ---
- .../indic/script-devanagari/utrrs/gpos/MANIFEST    |    2 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            | 1367
+ .../indic/script-devanagari/utrrs/gpos/MANIFEST    |   2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1367
  --------------------
- .../indic/script-devanagari/utrrs/gsub/MANIFEST    |    1 -
- .../shaper-indic/indic/script-gujarati/MANIFEST    |    1 -
- .../indic/script-gujarati/utrrs/LICENSE            |   19 -
- .../indic/script-gujarati/utrrs/MANIFEST           |    3 -
- .../indic/script-gujarati/utrrs/README             |   13 -
- .../indic/script-gujarati/utrrs/SOURCES            |    2 -
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    1 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   34 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   13 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    7 -
- .../indic/script-gujarati/utrrs/codepoint/MANIFEST |    7 -
+ .../indic/script-devanagari/utrrs/gsub/MANIFEST    |   1 -
+ .../shaper-indic/indic/script-gujarati/MANIFEST    |   1 -
+ .../indic/script-gujarati/utrrs/LICENSE           |   19 -
+ .../indic/script-gujarati/utrrs/MANIFEST          |    3 -
+ .../indic/script-gujarati/utrrs/README                    |   13 -
+ .../indic/script-gujarati/utrrs/SOURCES           |    2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  13 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   7 -
+ .../indic/script-gujarati/utrrs/codepoint/MANIFEST |   7 -
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  170 ---
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  170 ---
- .../indic/script-gujarati/utrrs/gpos/MANIFEST      |    2 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            | 1156
+ .../indic/script-gujarati/utrrs/gpos/MANIFEST     |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1156
  -----------------
- .../indic/script-gujarati/utrrs/gsub/MANIFEST      |    1 -
- .../shaper-indic/indic/script-kannada/MANIFEST     |    1 -
- .../indic/script-kannada/utrrs/LICENSE             |   19 -
- .../indic/script-kannada/utrrs/MANIFEST            |    3 -
- .../shaper-indic/indic/script-kannada/utrrs/README |   13 -
- .../indic/script-kannada/utrrs/SOURCES             |    2 -
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    1 -
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   40 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   13 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    9 -
- .../indic/script-kannada/utrrs/codepoint/MANIFEST  |    8 -
+ .../indic/script-gujarati/utrrs/gsub/MANIFEST     |    1 -
+ .../shaper-indic/indic/script-kannada/MANIFEST     |   1 -
+ .../indic/script-kannada/utrrs/LICENSE                    |   19 -
+ .../indic/script-kannada/utrrs/MANIFEST           |    3 -
+ .../shaper-indic/indic/script-kannada/utrrs/README |  13 -
+ .../indic/script-kannada/utrrs/SOURCES                    |    2 -
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   1 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   9 -
+ .../indic/script-kannada/utrrs/codepoint/MANIFEST  |   8 -
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  188 ---
- .../indic/script-kannada/utrrs/gpos/MANIFEST       |    1 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  306 -----
- .../indic/script-kannada/utrrs/gsub/MANIFEST       |    1 -
- .../shaper-indic/indic/script-malayalam/MANIFEST   |    1 -
- .../indic/script-malayalam/utrrs/LICENSE           |   19 -
- .../indic/script-malayalam/utrrs/MANIFEST          |    2 -
- .../indic/script-malayalam/utrrs/README            |   13 -
- .../indic/script-malayalam/utrrs/SOURCES           |    2 -
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   36 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    4 -
- .../script-malayalam/utrrs/codepoint/MANIFEST      |    7 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  254 ----
- .../indic/script-malayalam/utrrs/gsub/MANIFEST     |    1 -
- .../texts/shaper-indic/indic/script-oriya/MANIFEST |    1 -
- .../shaper-indic/indic/script-oriya/utrrs/LICENSE  |   19 -
- .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |    2 -
- .../shaper-indic/indic/script-oriya/utrrs/README   |   13 -
- .../shaper-indic/indic/script-oriya/utrrs/SOURCES  |    2 -
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    3 -
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   34 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 -
- .../IndicFontFeatureCodepoint-OriyaSpecific.txt    |    2 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    8 -
- .../indic/script-oriya/utrrs/codepoint/MANIFEST    |    9 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  170 ---
- .../indic/script-oriya/utrrs/gsub/MANIFEST         |    1 -
- .../shaper-indic/indic/script-punjabi/MANIFEST     |    1 -
- .../indic/script-punjabi/utrrs/LICENSE             |   19 -
- .../indic/script-punjabi/utrrs/MANIFEST            |    3 -
- .../shaper-indic/indic/script-punjabi/utrrs/README |   13 -
- .../indic/script-punjabi/utrrs/SOURCES             |    2 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   38 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |    9 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |    6 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   10 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 -
- .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |    7 -
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   22 -
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |    2 -
- .../indic/script-punjabi/utrrs/gpos/MANIFEST       |    2 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  152 ---
- .../indic/script-punjabi/utrrs/gsub/MANIFEST       |    1 -
- .../shaper-indic/indic/script-sinhala/MANIFEST     |    1 -
- .../indic/script-sinhala/utrrs/LICENSE             |   19 -
- .../indic/script-sinhala/utrrs/MANIFEST            |    3 -
- .../shaper-indic/indic/script-sinhala/utrrs/README |   13 -
- .../indic/script-sinhala/utrrs/SOURCES             |    2 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   41 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   17 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   18 -
- .../IndicFontFeatureCodepoint-Punctuation.txt      |    1 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    3 -
- .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |    5 -
- .../utrrs/gpos/IndicFontFeatureGPOS.txt            |  162 ---
- .../indic/script-sinhala/utrrs/gpos/MANIFEST       |    1 -
- .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt   |    1 -
- .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt    |   41 -
- .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt     |   42 -
- .../gsub/IndicFontFeatureGSUB-Special-Cases.txt    |    2 -
- .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt  |    1 -
- .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt    |   41 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |    1 -
- .../indic/script-sinhala/utrrs/gsub/MANIFEST       |    7 -
- .../texts/shaper-indic/indic/script-tamil/MANIFEST |    1 -
- .../shaper-indic/indic/script-tamil/utrrs/LICENSE  |   19 -
- .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |    3 -
- .../shaper-indic/indic/script-tamil/utrrs/README   |   13 -
- .../shaper-indic/indic/script-tamil/utrrs/SOURCES  |    2 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   23 -
- .../IndicFontFeatureCodepoint-CurrencySymbols.txt  |    1 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   11 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 -
- .../IndicFontFeatureCodepoint-Numerics.txt         |    3 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-Symbols.txt          |    6 -
- .../IndicFontFeatureCodepoint-TamilSymbol.txt      |    1 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    4 -
- .../indic/script-tamil/utrrs/codepoint/MANIFEST    |   10 -
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   64 -
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   44 -
- .../indic/script-tamil/utrrs/gpos/MANIFEST         |    2 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |    4 -
- .../indic/script-tamil/utrrs/gsub/MANIFEST         |    1 -
- .../shaper-indic/indic/script-telugu/MANIFEST      |    1 -
- .../shaper-indic/indic/script-telugu/utrrs/LICENSE |   19 -
- .../indic/script-telugu/utrrs/MANIFEST             |    3 -
- .../shaper-indic/indic/script-telugu/utrrs/README  |   13 -
- .../shaper-indic/indic/script-telugu/utrrs/SOURCES |    2 -
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 -
- .../IndicFontFeatureCodepoint-Consonants.txt       |   38 -
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   13 -
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 -
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 -
- .../indic/script-telugu/utrrs/codepoint/MANIFEST   |    7 -
+ .../indic/script-kannada/utrrs/gpos/MANIFEST      |    1 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  306 -----
+ .../indic/script-kannada/utrrs/gsub/MANIFEST      |    1 -
+ .../shaper-indic/indic/script-malayalam/MANIFEST   |   1 -
+ .../indic/script-malayalam/utrrs/LICENSE          |   19 -
+ .../indic/script-malayalam/utrrs/MANIFEST         |    2 -
+ .../indic/script-malayalam/utrrs/README           |   13 -
+ .../indic/script-malayalam/utrrs/SOURCES          |    2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 -
+ .../script-malayalam/utrrs/codepoint/MANIFEST     |    7 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  254 ----
+ .../indic/script-malayalam/utrrs/gsub/MANIFEST     |   1 -
+ .../texts/shaper-indic/indic/script-oriya/MANIFEST |   1 -
+ .../shaper-indic/indic/script-oriya/utrrs/LICENSE  |  19 -
+ .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |   2 -
+ .../shaper-indic/indic/script-oriya/utrrs/README   |  13 -
+ .../shaper-indic/indic/script-oriya/utrrs/SOURCES  |   2 -
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   3 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 -
+ .../IndicFontFeatureCodepoint-OriyaSpecific.txt    |   2 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   8 -
+ .../indic/script-oriya/utrrs/codepoint/MANIFEST    |   9 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  170 ---
+ .../indic/script-oriya/utrrs/gsub/MANIFEST        |    1 -
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |   1 -
+ .../indic/script-punjabi/utrrs/LICENSE                    |   19 -
+ .../indic/script-punjabi/utrrs/MANIFEST           |    3 -
+ .../shaper-indic/indic/script-punjabi/utrrs/README |  13 -
+ .../indic/script-punjabi/utrrs/SOURCES                    |    2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |   9 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |   6 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
+ .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |   7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   2 -
+ .../indic/script-punjabi/utrrs/gpos/MANIFEST      |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  152 ---
+ .../indic/script-punjabi/utrrs/gsub/MANIFEST      |    1 -
+ .../shaper-indic/indic/script-sinhala/MANIFEST     |   1 -
+ .../indic/script-sinhala/utrrs/LICENSE                    |   19 -
+ .../indic/script-sinhala/utrrs/MANIFEST           |    3 -
+ .../shaper-indic/indic/script-sinhala/utrrs/README |  13 -
+ .../indic/script-sinhala/utrrs/SOURCES                    |    2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   41 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  17 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  18 -
+ .../IndicFontFeatureCodepoint-Punctuation.txt     |    1 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   3 -
+ .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |   5 -
+ .../utrrs/gpos/IndicFontFeatureGPOS.txt           |  162 ---
+ .../indic/script-sinhala/utrrs/gpos/MANIFEST      |    1 -
+ .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt   |   1 -
+ .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt    |  41 -
+ .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt     |  42 -
+ .../gsub/IndicFontFeatureGSUB-Special-Cases.txt    |   2 -
+ .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt  |   1 -
+ .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt    |  41 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    1 -
+ .../indic/script-sinhala/utrrs/gsub/MANIFEST      |    7 -
+ .../texts/shaper-indic/indic/script-tamil/MANIFEST |   1 -
+ .../shaper-indic/indic/script-tamil/utrrs/LICENSE  |  19 -
+ .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |   3 -
+ .../shaper-indic/indic/script-tamil/utrrs/README   |  13 -
+ .../shaper-indic/indic/script-tamil/utrrs/SOURCES  |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   23 -
+ .../IndicFontFeatureCodepoint-CurrencySymbols.txt  |   1 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  11 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 -
+ .../IndicFontFeatureCodepoint-Numerics.txt        |    3 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-Symbols.txt         |    6 -
+ .../IndicFontFeatureCodepoint-TamilSymbol.txt     |    1 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 -
+ .../indic/script-tamil/utrrs/codepoint/MANIFEST    |  10 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  64 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  44 -
+ .../indic/script-tamil/utrrs/gpos/MANIFEST        |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    4 -
+ .../indic/script-tamil/utrrs/gsub/MANIFEST        |    1 -
+ .../shaper-indic/indic/script-telugu/MANIFEST     |    1 -
+ .../shaper-indic/indic/script-telugu/utrrs/LICENSE |  19 -
+ .../indic/script-telugu/utrrs/MANIFEST                    |    3 -
+ .../shaper-indic/indic/script-telugu/utrrs/README  |  13 -
+ .../shaper-indic/indic/script-telugu/utrrs/SOURCES |   2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
+ .../indic/script-telugu/utrrs/codepoint/MANIFEST   |   7 -
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  385 ------
- .../indic/script-telugu/utrrs/gpos/MANIFEST        |    1 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  287 ----
- .../indic/script-telugu/utrrs/gsub/MANIFEST        |    1 -
+ .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ----
+ .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 -
  410 files changed, 7601 insertions(+), 7600 deletions(-)
 
 commit 45f640c98d752161e51eda63061d70fad9ab9f68
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 14:24:21 2012 -0500
+Date:  Fri Jan 20 14:24:21 2012 -0500
 
     Minor
 
@@ -9550,231 +12379,231 @@ Date:   Fri Jan 20 14:24:21 2012 -0500
 
 commit 47ca766a9cbdfb304f60e23a4dee0a155075a277
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 14:21:53 2012 -0500
+Date:  Fri Jan 20 14:21:53 2012 -0500
 
     Minor
 
- test/shaping/hb-unicode-decode     |    2 +-
- test/shaping/hb-unicode-prettyname |    5 ++---
+ test/shaping/hb-unicode-decode     |   2 +-
+ test/shaping/hb-unicode-prettyname |   5 ++---
  2 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 8f1db07894674b02c36ca9352e666b4618ee8832
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 13:57:57 2012 -0500
+Date:  Fri Jan 20 13:57:57 2012 -0500
 
     [test/shaping] Add some Indic test data for the new test suite
 
     Imported from UTRRS.
 
- test/shaping/texts/shaper-indic/indic/MANIFEST     |    2 +-
- .../shaper-indic/indic/script-assamese/MANIFEST    |    1 +
- .../indic/script-assamese/utrrs/LICENSE            |   19 +
- .../indic/script-assamese/utrrs/MANIFEST           |    3 +
- .../indic/script-assamese/utrrs/README             |   13 +
- .../indic/script-assamese/utrrs/SOURCES            |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   40 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   10 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   11 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-assamese/utrrs/codepoint/MANIFEST |    7 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   59 +
+ test/shaping/texts/shaper-indic/indic/MANIFEST     |   2 +-
+ .../shaper-indic/indic/script-assamese/MANIFEST    |   1 +
+ .../indic/script-assamese/utrrs/LICENSE           |   19 +
+ .../indic/script-assamese/utrrs/MANIFEST          |    3 +
+ .../indic/script-assamese/utrrs/README                    |   13 +
+ .../indic/script-assamese/utrrs/SOURCES           |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  11 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-assamese/utrrs/codepoint/MANIFEST |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  59 +
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  131 ++
- .../indic/script-assamese/utrrs/gpos/MANIFEST      |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  139 ++
- .../indic/script-assamese/utrrs/gsub/MANIFEST      |    1 +
- .../shaper-indic/indic/script-bengali/MANIFEST     |    1 +
- .../indic/script-bengali/utrrs/LICENSE             |   19 +
- .../indic/script-bengali/utrrs/MANIFEST            |    3 +
- .../shaper-indic/indic/script-bengali/utrrs/README |   13 +
- .../indic/script-bengali/utrrs/SOURCES             |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    1 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   36 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   10 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-bengali/utrrs/codepoint/MANIFEST  |    7 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   58 +
+ .../indic/script-assamese/utrrs/gpos/MANIFEST     |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  139 ++
+ .../indic/script-assamese/utrrs/gsub/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-bengali/MANIFEST     |   1 +
+ .../indic/script-bengali/utrrs/LICENSE                    |   19 +
+ .../indic/script-bengali/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-bengali/utrrs/README |  13 +
+ .../indic/script-bengali/utrrs/SOURCES                    |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-bengali/utrrs/codepoint/MANIFEST  |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  58 +
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  119 ++
- .../indic/script-bengali/utrrs/gpos/MANIFEST       |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  215 +++
- .../indic/script-bengali/utrrs/gsub/MANIFEST       |    1 +
- .../shaper-indic/indic/script-devanagari/MANIFEST  |    1 +
- .../indic/script-devanagari/utrrs/LICENSE          |   19 +
- .../indic/script-devanagari/utrrs/MANIFEST         |    3 +
- .../indic/script-devanagari/utrrs/README           |   13 +
- .../indic/script-devanagari/utrrs/SOURCES          |    2 +
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    8 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   45 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   14 +
- ...tFeatureCodepoint-DevnagariSpecificAddition.txt |    1 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...ndicFontFeatureCodepoint-GenericPunctuation.txt |    2 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   16 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |   10 +
- .../script-devanagari/utrrs/codepoint/MANIFEST     |    9 +
+ .../indic/script-bengali/utrrs/gpos/MANIFEST      |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  215 +++
+ .../indic/script-bengali/utrrs/gsub/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-devanagari/MANIFEST  |   1 +
+ .../indic/script-devanagari/utrrs/LICENSE         |   19 +
+ .../indic/script-devanagari/utrrs/MANIFEST        |    3 +
+ .../indic/script-devanagari/utrrs/README          |   13 +
+ .../indic/script-devanagari/utrrs/SOURCES         |    2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   8 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   45 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  14 +
+ ...tFeatureCodepoint-DevnagariSpecificAddition.txt |   1 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...ndicFontFeatureCodepoint-GenericPunctuation.txt |   2 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  16 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |  10 +
+ .../script-devanagari/utrrs/codepoint/MANIFEST     |   9 +
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  185 +++
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  185 +++
- .../indic/script-devanagari/utrrs/gpos/MANIFEST    |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            | 1367
+ .../indic/script-devanagari/utrrs/gpos/MANIFEST    |   2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1367
  ++++++++++++++++++++
- .../indic/script-devanagari/utrrs/gsub/MANIFEST    |    1 +
- .../shaper-indic/indic/script-gujarati/MANIFEST    |    1 +
- .../indic/script-gujarati/utrrs/LICENSE            |   19 +
- .../indic/script-gujarati/utrrs/MANIFEST           |    3 +
- .../indic/script-gujarati/utrrs/README             |   13 +
- .../indic/script-gujarati/utrrs/SOURCES            |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    1 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   34 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   13 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    7 +
- .../indic/script-gujarati/utrrs/codepoint/MANIFEST |    7 +
+ .../indic/script-devanagari/utrrs/gsub/MANIFEST    |   1 +
+ .../shaper-indic/indic/script-gujarati/MANIFEST    |   1 +
+ .../indic/script-gujarati/utrrs/LICENSE           |   19 +
+ .../indic/script-gujarati/utrrs/MANIFEST          |    3 +
+ .../indic/script-gujarati/utrrs/README                    |   13 +
+ .../indic/script-gujarati/utrrs/SOURCES           |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  13 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   7 +
+ .../indic/script-gujarati/utrrs/codepoint/MANIFEST |   7 +
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  170 +++
  .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  170 +++
- .../indic/script-gujarati/utrrs/gpos/MANIFEST      |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            | 1156
+ .../indic/script-gujarati/utrrs/gpos/MANIFEST     |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1156
  +++++++++++++++++
- .../indic/script-gujarati/utrrs/gsub/MANIFEST      |    1 +
- .../shaper-indic/indic/script-kannada/MANIFEST     |    1 +
- .../indic/script-kannada/utrrs/LICENSE             |   19 +
- .../indic/script-kannada/utrrs/MANIFEST            |    3 +
- .../shaper-indic/indic/script-kannada/utrrs/README |   13 +
- .../indic/script-kannada/utrrs/SOURCES             |    2 +
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    1 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    4 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   40 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   13 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    9 +
- .../indic/script-kannada/utrrs/codepoint/MANIFEST  |    8 +
+ .../indic/script-gujarati/utrrs/gsub/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-kannada/MANIFEST     |   1 +
+ .../indic/script-kannada/utrrs/LICENSE                    |   19 +
+ .../indic/script-kannada/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-kannada/utrrs/README |  13 +
+ .../indic/script-kannada/utrrs/SOURCES                    |    2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   1 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   9 +
+ .../indic/script-kannada/utrrs/codepoint/MANIFEST  |   8 +
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  188 +++
- .../indic/script-kannada/utrrs/gpos/MANIFEST       |    1 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  306 +++++
- .../indic/script-kannada/utrrs/gsub/MANIFEST       |    1 +
- .../shaper-indic/indic/script-malayalam/MANIFEST   |    1 +
- .../indic/script-malayalam/utrrs/LICENSE           |   19 +
- .../indic/script-malayalam/utrrs/MANIFEST          |    2 +
- .../indic/script-malayalam/utrrs/README            |   13 +
- .../indic/script-malayalam/utrrs/SOURCES           |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   36 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    4 +
- .../script-malayalam/utrrs/codepoint/MANIFEST      |    7 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  254 ++++
- .../indic/script-malayalam/utrrs/gsub/MANIFEST     |    1 +
- .../texts/shaper-indic/indic/script-oriya/MANIFEST |    1 +
- .../shaper-indic/indic/script-oriya/utrrs/LICENSE  |   19 +
- .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |    2 +
- .../shaper-indic/indic/script-oriya/utrrs/README   |   13 +
- .../shaper-indic/indic/script-oriya/utrrs/SOURCES  |    2 +
- ...icFontFeatureCodepoint-AdditionalConsonants.txt |    3 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   34 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   12 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 +
- .../IndicFontFeatureCodepoint-OriyaSpecific.txt    |    2 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    8 +
- .../indic/script-oriya/utrrs/codepoint/MANIFEST    |    9 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  170 +++
- .../indic/script-oriya/utrrs/gsub/MANIFEST         |    1 +
- .../shaper-indic/indic/script-punjabi/MANIFEST     |    1 +
- .../indic/script-punjabi/utrrs/LICENSE             |   19 +
- .../indic/script-punjabi/utrrs/MANIFEST            |    3 +
- .../shaper-indic/indic/script-punjabi/utrrs/README |   13 +
- .../indic/script-punjabi/utrrs/SOURCES             |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   38 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |    9 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |    6 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   10 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |    7 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   22 +
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |    2 +
- .../indic/script-punjabi/utrrs/gpos/MANIFEST       |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  152 +++
- .../indic/script-punjabi/utrrs/gsub/MANIFEST       |    1 +
- .../shaper-indic/indic/script-sinhala/MANIFEST     |    1 +
- .../indic/script-sinhala/utrrs/LICENSE             |   19 +
- .../indic/script-sinhala/utrrs/MANIFEST            |    3 +
- .../shaper-indic/indic/script-sinhala/utrrs/README |   13 +
- .../indic/script-sinhala/utrrs/SOURCES             |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   41 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   17 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   18 +
- .../IndicFontFeatureCodepoint-Punctuation.txt      |    1 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    3 +
- .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |    5 +
- .../utrrs/gpos/IndicFontFeatureGPOS.txt            |  162 +++
- .../indic/script-sinhala/utrrs/gpos/MANIFEST       |    1 +
- .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt   |    1 +
- .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt    |   41 +
- .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt     |   42 +
- .../gsub/IndicFontFeatureGSUB-Special-Cases.txt    |    2 +
- .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt  |    1 +
- .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt    |   41 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |    1 +
- .../indic/script-sinhala/utrrs/gsub/MANIFEST       |    7 +
- .../texts/shaper-indic/indic/script-tamil/MANIFEST |    1 +
- .../shaper-indic/indic/script-tamil/utrrs/LICENSE  |   19 +
- .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |    3 +
- .../shaper-indic/indic/script-tamil/utrrs/README   |   13 +
- .../shaper-indic/indic/script-tamil/utrrs/SOURCES  |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   23 +
- .../IndicFontFeatureCodepoint-CurrencySymbols.txt  |    1 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   11 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   12 +
- .../IndicFontFeatureCodepoint-Numerics.txt         |    3 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-Symbols.txt          |    6 +
- .../IndicFontFeatureCodepoint-TamilSymbol.txt      |    1 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    4 +
- .../indic/script-tamil/utrrs/codepoint/MANIFEST    |   10 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |   64 +
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   44 +
- .../indic/script-tamil/utrrs/gpos/MANIFEST         |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |    4 +
- .../indic/script-tamil/utrrs/gsub/MANIFEST         |    1 +
- .../shaper-indic/indic/script-telugu/MANIFEST      |    1 +
- .../shaper-indic/indic/script-telugu/utrrs/LICENSE |   19 +
- .../indic/script-telugu/utrrs/MANIFEST             |    3 +
- .../shaper-indic/indic/script-telugu/utrrs/README  |   13 +
- .../shaper-indic/indic/script-telugu/utrrs/SOURCES |    2 +
- .../IndicFontFeatureCodepoint-AdditionalVowels.txt |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt       |   38 +
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   13 +
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |   10 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |   14 +
- .../IndicFontFeatureCodepoint-Reserved.txt         |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |    6 +
- .../indic/script-telugu/utrrs/codepoint/MANIFEST   |    7 +
+ .../indic/script-kannada/utrrs/gpos/MANIFEST      |    1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  306 +++++
+ .../indic/script-kannada/utrrs/gsub/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-malayalam/MANIFEST   |   1 +
+ .../indic/script-malayalam/utrrs/LICENSE          |   19 +
+ .../indic/script-malayalam/utrrs/MANIFEST         |    2 +
+ .../indic/script-malayalam/utrrs/README           |   13 +
+ .../indic/script-malayalam/utrrs/SOURCES          |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 +
+ .../script-malayalam/utrrs/codepoint/MANIFEST     |    7 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  254 ++++
+ .../indic/script-malayalam/utrrs/gsub/MANIFEST     |   1 +
+ .../texts/shaper-indic/indic/script-oriya/MANIFEST |   1 +
+ .../shaper-indic/indic/script-oriya/utrrs/LICENSE  |  19 +
+ .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |   2 +
+ .../shaper-indic/indic/script-oriya/utrrs/README   |  13 +
+ .../shaper-indic/indic/script-oriya/utrrs/SOURCES  |   2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   3 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-OriyaSpecific.txt    |   2 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   8 +
+ .../indic/script-oriya/utrrs/codepoint/MANIFEST    |   9 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  170 +++
+ .../indic/script-oriya/utrrs/gsub/MANIFEST        |    1 +
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |   1 +
+ .../indic/script-punjabi/utrrs/LICENSE                    |   19 +
+ .../indic/script-punjabi/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-punjabi/utrrs/README |  13 +
+ .../indic/script-punjabi/utrrs/SOURCES                    |    2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |   9 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |   6 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   2 +
+ .../indic/script-punjabi/utrrs/gpos/MANIFEST      |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  152 +++
+ .../indic/script-punjabi/utrrs/gsub/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-sinhala/MANIFEST     |   1 +
+ .../indic/script-sinhala/utrrs/LICENSE                    |   19 +
+ .../indic/script-sinhala/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-sinhala/utrrs/README |  13 +
+ .../indic/script-sinhala/utrrs/SOURCES                    |    2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   41 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  17 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  18 +
+ .../IndicFontFeatureCodepoint-Punctuation.txt     |    1 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   3 +
+ .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |   5 +
+ .../utrrs/gpos/IndicFontFeatureGPOS.txt           |  162 +++
+ .../indic/script-sinhala/utrrs/gpos/MANIFEST      |    1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt   |   1 +
+ .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt    |  41 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt     |  42 +
+ .../gsub/IndicFontFeatureGSUB-Special-Cases.txt    |   2 +
+ .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt  |   1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt    |  41 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    1 +
+ .../indic/script-sinhala/utrrs/gsub/MANIFEST      |    7 +
+ .../texts/shaper-indic/indic/script-tamil/MANIFEST |   1 +
+ .../shaper-indic/indic/script-tamil/utrrs/LICENSE  |  19 +
+ .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |   3 +
+ .../shaper-indic/indic/script-tamil/utrrs/README   |  13 +
+ .../shaper-indic/indic/script-tamil/utrrs/SOURCES  |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   23 +
+ .../IndicFontFeatureCodepoint-CurrencySymbols.txt  |   1 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  11 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-Numerics.txt        |    3 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-Symbols.txt         |    6 +
+ .../IndicFontFeatureCodepoint-TamilSymbol.txt     |    1 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 +
+ .../indic/script-tamil/utrrs/codepoint/MANIFEST    |  10 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  64 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  44 +
+ .../indic/script-tamil/utrrs/gpos/MANIFEST        |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    4 +
+ .../indic/script-tamil/utrrs/gsub/MANIFEST        |    1 +
+ .../shaper-indic/indic/script-telugu/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-telugu/utrrs/LICENSE |  19 +
+ .../indic/script-telugu/utrrs/MANIFEST                    |    3 +
+ .../shaper-indic/indic/script-telugu/utrrs/README  |  13 +
+ .../shaper-indic/indic/script-telugu/utrrs/SOURCES |   2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-telugu/utrrs/codepoint/MANIFEST   |   7 +
  .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  385 ++++++
- .../indic/script-telugu/utrrs/gpos/MANIFEST        |    1 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt            |  287 ++++
- .../indic/script-telugu/utrrs/gsub/MANIFEST        |    1 +
+ .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ++++
+ .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 +
  202 files changed, 7581 insertions(+), 1 deletions(-)
 
 commit 11267aef364b1cc5683ce65aaf544b7f2a127fb3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 13:57:14 2012 -0500
+Date:  Fri Jan 20 13:57:14 2012 -0500
 
     Fix
 
@@ -9783,27 +12612,27 @@ Date:   Fri Jan 20 13:57:14 2012 -0500
 
 commit 4e84ce48d5d41cf1bad2fb8774e5c66745b0e75e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 13:50:55 2012 -0500
+Date:  Fri Jan 20 13:50:55 2012 -0500
 
     Move hb-diff to test/shaping/
 
  test/shaping/hb-diff |   70
  ++++++++++++++++++++++++++++++++++++++++++++++++++
  util/Makefile.am     |    2 -
- util/hb-diff         |   70
+ util/hb-diff        |   70
  --------------------------------------------------
  3 files changed, 70 insertions(+), 72 deletions(-)
 
 commit f868e1b84d2f73688d4d6558d44610b1ac75ec13
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 13:50:05 2012 -0500
+Date:  Fri Jan 20 13:50:05 2012 -0500
 
     Add hb-unicode-decode
 
- test/shaping/hb-manifest-read    |   36
+ test/shaping/hb-manifest-read   |   36
  ++++++++++++++++++++++++++++++++++++
  test/shaping/hb-manifest-update  |   22 ++++++++++++++++++++++
- test/shaping/hb-read-manifest    |   36
+ test/shaping/hb-read-manifest   |   36
  ------------------------------------
  test/shaping/hb-unicode-decode   |   19 +++++++++++++++++++
  test/shaping/hb-update-manifests |   22 ----------------------
@@ -9811,44 +12640,44 @@ Date:   Fri Jan 20 13:50:05 2012 -0500
 
 commit 9ab23ef4749b51e60464b9ef2a92739cdc2b36ba
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 13:49:56 2012 -0500
+Date:  Fri Jan 20 13:49:56 2012 -0500
 
     Minor
 
- test/shaping/hb-unicode-prettyname |    5 +++++
+ test/shaping/hb-unicode-prettyname |   5 +++++
  1 files changed, 5 insertions(+), 0 deletions(-)
 
 commit c8d81db03335192f20f08ab8fabe9869fd7350a2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 13:39:27 2012 -0500
+Date:  Fri Jan 20 13:39:27 2012 -0500
 
     Recognize more characters
 
- test/shaping/hb-unicode-prettyname |    7 +++++++
+ test/shaping/hb-unicode-prettyname |   7 +++++++
  1 files changed, 7 insertions(+), 0 deletions(-)
 
 commit 0016d4662d486fa32c2191df801a2792f44b273c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Jan 20 13:31:59 2012 -0500
+Date:  Fri Jan 20 13:31:59 2012 -0500
 
     [test] Make hb-unicode-prettyname take a --stdin option
 
- test/shaping/hb-unicode-prettyname |   15 +++++++++------
+ test/shaping/hb-unicode-prettyname |  15 +++++++++------
  1 files changed, 9 insertions(+), 6 deletions(-)
 
 commit ad8c6446f2e0d21d065203924467f6a2c418401e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 20:28:31 2012 -0500
+Date:  Thu Jan 19 20:28:31 2012 -0500
 
     [test/shaping] Add hb-unicode-prettyname
 
- test/shaping/hb-unicode-prettyname |   38
+ test/shaping/hb-unicode-prettyname |  38
  ++++++++++++++++++++++++++++++++++++
  1 files changed, 38 insertions(+), 0 deletions(-)
 
 commit e900869b0f373d25b72d966338beb6cbc53e6446
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 20:28:15 2012 -0500
+Date:  Thu Jan 19 20:28:15 2012 -0500
 
     [test/shaping] Add hb-read-manifest
 
@@ -9857,7 +12686,7 @@ Date:   Thu Jan 19 20:28:15 2012 -0500
 
 commit a211cd3ffce3aa100e92d837384bbaa9decf6b09
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 20:27:53 2012 -0500
+Date:  Thu Jan 19 20:27:53 2012 -0500
 
     Ignore AUTHORS also
 
@@ -9866,7 +12695,7 @@ Date:   Thu Jan 19 20:27:53 2012 -0500
 
 commit c91c4fa47140c0d6191241a832fc534b1c1514ce
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 17:51:57 2012 -0500
+Date:  Thu Jan 19 17:51:57 2012 -0500
 
     [hb-shape] Change glyphstring brackets from </> to [/]
 
@@ -9878,7 +12707,7 @@ Date:   Thu Jan 19 17:51:57 2012 -0500
 
 commit 36fe87d1b4bf8317074a597501d1ee52c0bec38d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 16:55:26 2012 -0500
+Date:  Thu Jan 19 16:55:26 2012 -0500
 
     More Indic tests from Pravin
 
@@ -9888,95 +12717,95 @@ Date:   Thu Jan 19 16:55:26 2012 -0500
 
 commit a33e46cf7d9862856fd7ecb04e047cc58a9785c8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 15:43:48 2012 -0500
+Date:  Thu Jan 19 15:43:48 2012 -0500
 
     [test/shaping] Add hb-update-manifests
 
- test/shaping/Makefile.am                       |    6 ++----
- test/shaping/hb-update-manifests               |   22
+ test/shaping/Makefile.am                      |    6 ++----
+ test/shaping/hb-update-manifests              |   22
  ++++++++++++++++++++++
  test/shaping/texts/shaper-indic/indic/MANIFEST |    1 +
  3 files changed, 25 insertions(+), 4 deletions(-)
 
 commit d4de562adf691425b15e3e9c0eec035feaa60413
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 15:21:04 2012 -0500
+Date:  Thu Jan 19 15:21:04 2012 -0500
 
     Start adding new shaping test suite together
 
- configure.ac                                   |    1 +
- test/Makefile.am                               |    2 +-
- test/shaping/Makefile.am                       |   10 ++++++++++
- test/shaping/texts/MANIFEST                    |    3 +++
- test/shaping/texts/shaper-arabic/MANIFEST      |    5 +++++
- test/shaping/texts/shaper-indic/MANIFEST       |    1 +
+ configure.ac                                  |    1 +
+ test/Makefile.am                              |    2 +-
+ test/shaping/Makefile.am                      |   10 ++++++++++
+ test/shaping/texts/MANIFEST                   |    3 +++
+ test/shaping/texts/shaper-arabic/MANIFEST     |    5 +++++
+ test/shaping/texts/shaper-indic/MANIFEST      |    1 +
  test/shaping/texts/shaper-indic/indic/MANIFEST |   10 ++++++++++
  7 files changed, 31 insertions(+), 1 deletions(-)
 
 commit 7a4a848db27d1605195f677c9c8632cde558aa05
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 15:15:21 2012 -0500
+Date:  Thu Jan 19 15:15:21 2012 -0500
 
     Minor
 
- src/hb-ot-shape-complex-private.hh |    3 ++-
+ src/hb-ot-shape-complex-private.hh |   3 ++-
  1 files changed, 2 insertions(+), 1 deletions(-)
 
 commit 4d6dafd47f4271549e528d2e8047d50562aef399
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 14:52:02 2012 -0500
+Date:  Thu Jan 19 14:52:02 2012 -0500
 
     Rename test/ to test/api/
 
- configure.ac                  |    1 +
- test/Makefile.am              |  128 +-----
- test/api/Makefile.am          |  131 +++++
- test/api/hb-test.h            |  265 +++++++++
- test/api/test-blob.c          |  301 +++++++++++
+ configure.ac                 |    1 +
+ test/Makefile.am             |  128 +-----
+ test/api/Makefile.am         |  131 +++++
+ test/api/hb-test.h           |  265 +++++++++
+ test/api/test-blob.c         |  301 +++++++++++
  test/api/test-buffer.c        |  783 +++++++++++++++++++++++++++
- test/api/test-c.c             |   58 ++
+ test/api/test-c.c            |   58 ++
  test/api/test-common.c        |  213 ++++++++
  test/api/test-cplusplus.cc    |   30 +
- test/api/test-font.c          |  502 +++++++++++++++++
+ test/api/test-font.c         |  502 +++++++++++++++++
  test/api/test-object.c        |  367 +++++++++++++
  test/api/test-ot-tag.c        |  241 +++++++++
  test/api/test-shape-complex.c | 1189
  +++++++++++++++++++++++++++++++++++++++++
- test/api/test-shape.c         |  165 ++++++
+ test/api/test-shape.c        |  165 ++++++
  test/api/test-unicode.c       |  887 ++++++++++++++++++++++++++++++
  test/api/test-version.c       |   80 +++
- test/hb-test.h                |  265 ---------
- test/test-blob.c              |  301 -----------
- test/test-buffer.c            |  783 ---------------------------
- test/test-c.c                 |   58 --
- test/test-common.c            |  213 --------
+ test/hb-test.h                       |  265 ---------
+ test/test-blob.c             |  301 -----------
+ test/test-buffer.c           |  783 ---------------------------
+ test/test-c.c                |   58 --
+ test/test-common.c           |  213 --------
  test/test-cplusplus.cc        |   30 -
- test/test-font.c              |  502 -----------------
- test/test-object.c            |  367 -------------
- test/test-ot-tag.c            |  241 ---------
+ test/test-font.c             |  502 -----------------
+ test/test-object.c           |  367 -------------
+ test/test-ot-tag.c           |  241 ---------
  test/test-shape-complex.c     | 1189
  -----------------------------------------
- test/test-shape.c             |  165 ------
- test/test-unicode.c           |  887 ------------------------------
- test/test-version.c           |   80 ---
+ test/test-shape.c            |  165 ------
+ test/test-unicode.c          |  887 ------------------------------
+ test/test-version.c          |   80 ---
  29 files changed, 5214 insertions(+), 5208 deletions(-)
 
 commit 3b5c22c39b87155f315853fb0c40edcf14e99b54
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 14:28:11 2012 -0500
+Date:  Thu Jan 19 14:28:11 2012 -0500
 
     Remove src/test.cc
 
     Not really useful.
 
  src/Makefile.am |    6 +--
- src/test.cc     |  132
+ src/test.cc    |  132
  -------------------------------------------------------
  2 files changed, 1 insertions(+), 137 deletions(-)
 
 commit 4983feebbbb25e79201bf34035e4d58e61218758
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 13:54:52 2012 -0500
+Date:  Thu Jan 19 13:54:52 2012 -0500
 
     [hb-diff] Clean up
 
@@ -9985,7 +12814,7 @@ Date:   Thu Jan 19 13:54:52 2012 -0500
 
 commit cdc673d97c5ffedb386865a81f54a5cedcbad27c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 12:46:18 2012 -0500
+Date:  Thu Jan 19 12:46:18 2012 -0500
 
     [hb-shape] Add --show-line-num
 
@@ -9998,7 +12827,7 @@ Date:   Thu Jan 19 12:46:18 2012 -0500
 
 commit cc4d9810d6318ca2e4de3b8d62f03b51cc21ee05
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 12:32:20 2012 -0500
+Date:  Thu Jan 19 12:32:20 2012 -0500
 
     [hb-shape] Add --show-text and --show-unicode options
 
@@ -10009,7 +12838,7 @@ Date:   Thu Jan 19 12:32:20 2012 -0500
 
 commit 27c36af411c7c4d75dd25d79fc76dd92c6bb9643
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 12:30:43 2012 -0500
+Date:  Thu Jan 19 12:30:43 2012 -0500
 
     Fix OOB in hb-shape
 
@@ -10018,7 +12847,7 @@ Date:   Thu Jan 19 12:30:43 2012 -0500
 
 commit 8d2781d69274672303e30522e222bd01c6b5e781
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Jan 19 11:36:39 2012 -0500
+Date:  Thu Jan 19 11:36:39 2012 -0500
 
     [test] Add two Indic test cases from Bernard Massot
 
@@ -10027,7 +12856,7 @@ Date:   Thu Jan 19 11:36:39 2012 -0500
 
 commit 8750abaf8410005facbea8c886c592bead7f959b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jan 18 22:47:44 2012 -0500
+Date:  Wed Jan 18 22:47:44 2012 -0500
 
     [util] Add --help-features
 
@@ -10038,7 +12867,7 @@ Date:   Wed Jan 18 22:47:44 2012 -0500
 
 commit 889caa52fa1bef61013ec1d127f84d7d5907ef1e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jan 18 22:32:52 2012 -0500
+Date:  Wed Jan 18 22:32:52 2012 -0500
 
     [icu] Use U_FAILURE
 
@@ -10047,7 +12876,7 @@ Date:   Wed Jan 18 22:32:52 2012 -0500
 
 commit 36a4f4a482456ee816dcb59befa0b0538ba487df
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jan 18 22:16:49 2012 -0500
+Date:  Wed Jan 18 22:16:49 2012 -0500
 
     Replace u_strlen() with u_countChar32()
 
@@ -10058,18 +12887,18 @@ Date:   Wed Jan 18 22:16:49 2012 -0500
 
 commit 055fb24d03ae518fa0aa6c2860a03f3cb6a5ef0d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jan 18 21:58:34 2012 -0500
+Date:  Wed Jan 18 21:58:34 2012 -0500
 
     Add test for bug in ICU decompose
 
     As reported by Kenichi Ishibashi on 2011-10-28.
 
- test/test-unicode.c |    2 +-
+ test/test-unicode.c |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit c521e793bd6c1dafacb94253a45b9c70ab38525e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jan 18 21:51:05 2012 -0500
+Date:  Wed Jan 18 21:51:05 2012 -0500
 
     Fix OOB in replace_glyph()
 
@@ -10080,7 +12909,7 @@ Date:   Wed Jan 18 21:51:05 2012 -0500
 
 commit 03408ce73d003ed4e58e3f8472f9445e72b86bee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jan 18 21:28:34 2012 -0500
+Date:  Wed Jan 18 21:28:34 2012 -0500
 
     Fix more possible buffer overruns
 
@@ -10091,7 +12920,7 @@ Date:   Wed Jan 18 21:28:34 2012 -0500
 
 commit 7d479900cd11bc88148cd601ee43bc5492ce5843
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jan 18 21:19:32 2012 -0500
+Date:  Wed Jan 18 21:19:32 2012 -0500
 
     Refactor the two remaining uses of _hb_ot_layout_skip_mark()
 
@@ -10101,7 +12930,7 @@ Date:   Wed Jan 18 21:19:32 2012 -0500
 
 commit 506ffeb8e77a668fa305139582d215c32e46bb03
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Jan 18 16:07:53 2012 -0500
+Date:  Wed Jan 18 16:07:53 2012 -0500
 
     Further mark skippy fixes from Jonathan Kew
 
@@ -10112,7 +12941,7 @@ Date:   Wed Jan 18 16:07:53 2012 -0500
 
 commit a4a48fe6d4f884a37e720430347d10dbe3562a79
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Jan 17 18:08:41 2012 -0500
+Date:  Tue Jan 17 18:08:41 2012 -0500
 
     Fix mark skipping regression
 
@@ -10123,7 +12952,7 @@ Date:   Tue Jan 17 18:08:41 2012 -0500
 
 commit 4ab97311541225906f6b737a2b47de252224cc09
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jan 16 22:05:08 2012 -0500
+Date:  Mon Jan 16 22:05:08 2012 -0500
 
     Refactor mark skipping
 
@@ -10135,7 +12964,7 @@ Date:   Mon Jan 16 22:05:08 2012 -0500
 
 commit 370f03e9c69d98d735eafb7e72b13b17f42cbaa9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jan 16 17:03:55 2012 -0500
+Date:  Mon Jan 16 17:03:55 2012 -0500
 
     Minor
 
@@ -10145,7 +12974,7 @@ Date:   Mon Jan 16 17:03:55 2012 -0500
 
 commit 4d3aeb8cb2bc1ca7cdd03ba28ba8c334f12d4c03
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jan 16 16:43:26 2012 -0500
+Date:  Mon Jan 16 16:43:26 2012 -0500
 
     [GSUB/GPOS] Fix mark skip indexing issues
 
@@ -10162,19 +12991,19 @@ Date:   Mon Jan 16 16:43:26 2012 -0500
 
 commit e8eedf2687f05372bf5476e84139d01ba67c9f73
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Jan 16 16:39:40 2012 -0500
+Date:  Mon Jan 16 16:39:40 2012 -0500
 
     Avoid enum trailing commas
 
     Based on patch from Jonathan Kew.
 
- src/hb-ot-shape-complex-indic.cc   |    4 ++--
- src/hb-ot-shape-complex-private.hh |    2 ++
+ src/hb-ot-shape-complex-indic.cc   |   4 ++--
+ src/hb-ot-shape-complex-private.hh |   2 ++
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 3d0ddd12801689b4093ffca97da4dd9ca669b64a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 15 15:55:52 2012 -0500
+Date:  Sun Jan 15 15:55:52 2012 -0500
 
     Require glib >= 2.16 for the gobject option
 
@@ -10183,7 +13012,7 @@ Date:   Sun Jan 15 15:55:52 2012 -0500
 
 commit 95ab82a992ab916046c2e6205db7cadeec88d206
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sun Jan 15 14:56:56 2012 -0500
+Date:  Sun Jan 15 14:56:56 2012 -0500
 
     Disable gtk-doc macro
 
@@ -10194,7 +13023,7 @@ Date:   Sun Jan 15 14:56:56 2012 -0500
 
 commit 299ae0c3a367c84a835eadbd1276ca284d2720c0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 14 21:29:45 2012 -0500
+Date:  Sat Jan 14 21:29:45 2012 -0500
 
     [icu] Remove glib-ism
 
@@ -10203,7 +13032,7 @@ Date:   Sat Jan 14 21:29:45 2012 -0500
 
 commit a097043f9a81e6c20caf69a5dabdf9e00438d79b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Jan 14 17:55:51 2012 -0500
+Date:  Sat Jan 14 17:55:51 2012 -0500
 
     Allow space in one more place when parsing features
 
@@ -10212,7 +13041,7 @@ Date:   Sat Jan 14 17:55:51 2012 -0500
 
 commit af92135424b994062648f4fb7e26af0bd970a4b1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Oct 21 09:18:43 2011 -0700
+Date:  Fri Oct 21 09:18:43 2011 -0700
 
     Minor
 
@@ -10221,7 +13050,7 @@ Date:   Fri Oct 21 09:18:43 2011 -0700
 
 commit 89d89646e8163b6c0874b9a3c14d4da974ea8219
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Oct 17 11:50:54 2011 -0700
+Date:  Mon Oct 17 11:50:54 2011 -0700
 
     Fix intrin.h b0rkage with older MSVC
 
@@ -10232,7 +13061,7 @@ Date:   Mon Oct 17 11:50:54 2011 -0700
 
 commit af913c5788e600e36d29f44fe4e77db84cf8c442
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Oct 17 11:39:28 2011 -0700
+Date:  Mon Oct 17 11:39:28 2011 -0700
 
     Fix infinite loop in normalization code with variation selectors
 
@@ -10243,7 +13072,7 @@ Date:   Mon Oct 17 11:39:28 2011 -0700
 
 commit fd528c17b7b5ac912f1ac980e1d9981f561c3b46
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Oct 12 15:03:58 2011 -0400
+Date:  Wed Oct 12 15:03:58 2011 -0400
 
     [util] Add --list-shapers to hb-view and hb-shape
 
@@ -10252,7 +13081,7 @@ Date:   Wed Oct 12 15:03:58 2011 -0400
 
 commit a17554bfd51dc8a37b1674d1ede63e616618e0a6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Sep 28 16:57:34 2011 -0400
+Date:  Wed Sep 28 16:57:34 2011 -0400
 
     Make test-c.c actually use hb
 
@@ -10264,7 +13093,7 @@ Date:   Wed Sep 28 16:57:34 2011 -0400
 
 commit 55deff7595ef357d000fef83559c74c9f8acad00
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Sep 28 16:20:09 2011 -0400
+Date:  Wed Sep 28 16:20:09 2011 -0400
 
     Add comments
 
@@ -10273,7 +13102,7 @@ Date:   Wed Sep 28 16:20:09 2011 -0400
 
 commit a240d5a0a3ccc71902e7a341b6d531995319999d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Sep 27 13:50:45 2011 -0400
+Date:  Tue Sep 27 13:50:45 2011 -0400
 
     Add TODO item
 
@@ -10282,7 +13111,7 @@ Date:   Tue Sep 27 13:50:45 2011 -0400
 
 commit 52ebdff49d13f239efc886de935d47be9860f6e5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Sep 27 12:38:16 2011 -0400
+Date:  Tue Sep 27 12:38:16 2011 -0400
 
     Fix GSUB lookuptype 1 subtype 1 delta wrapping
 
@@ -10291,7 +13120,7 @@ Date:   Tue Sep 27 12:38:16 2011 -0400
 
 commit 5857720cd35078d1c3906c8b2db3190b5166b66f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Sep 27 12:36:26 2011 -0400
+Date:  Tue Sep 27 12:36:26 2011 -0400
 
     [util] s/%d/%u/ when printing glyph ids and clusters
 
@@ -10300,7 +13129,7 @@ Date:   Tue Sep 27 12:36:26 2011 -0400
 
 commit b95324cdd217f44c40c5fd44898e659500f19511
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Sep 21 16:50:39 2011 -0400
+Date:  Wed Sep 21 16:50:39 2011 -0400
 
     Minor
 
@@ -10309,7 +13138,7 @@ Date:   Wed Sep 21 16:50:39 2011 -0400
 
 commit 0cd33592ab4bb486ffc438ba0efdac2fa7a1bb7f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Sep 21 16:49:33 2011 -0400
+Date:  Wed Sep 21 16:49:33 2011 -0400
 
     Fix possible leaks
 
@@ -10318,7 +13147,7 @@ Date:   Wed Sep 21 16:49:33 2011 -0400
 
 commit d3f3690b485e1d240fec4f204aef54e07853a244
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Sep 21 16:41:43 2011 -0400
+Date:  Wed Sep 21 16:41:43 2011 -0400
 
     hb-shape: In --no-glyph-names, output glyph number directly
 
@@ -10329,7 +13158,7 @@ Date:   Wed Sep 21 16:41:43 2011 -0400
 
 commit 088c1e27c0fc0cdef999cf1f567e4d5eb2cfb2e4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Sep 20 14:43:55 2011 -0400
+Date:  Tue Sep 20 14:43:55 2011 -0400
 
     [util] Fix option parsing
 
@@ -10344,7 +13173,7 @@ Date:   Tue Sep 20 14:43:55 2011 -0400
 
 commit d606daa4cca323c8977b2e52e6863dc0f1b72fa9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Sep 20 14:34:06 2011 -0400
+Date:  Tue Sep 20 14:34:06 2011 -0400
 
     Whitespace
 
@@ -10354,7 +13183,7 @@ Date:   Tue Sep 20 14:34:06 2011 -0400
 
 commit e700bce1189465a159a7c3c179f231be224f31cc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Sep 20 11:20:53 2011 -0400
+Date:  Tue Sep 20 11:20:53 2011 -0400
 
     [util] Add hb-diff
 
@@ -10371,13 +13200,13 @@ Date:   Tue Sep 20 11:20:53 2011 -0400
     You can pipe the colored output to 'less -r'.
 
  util/Makefile.am |    2 +
- util/hb-diff     |   59
+ util/hb-diff    |   59
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2 files changed, 61 insertions(+), 0 deletions(-)
 
 commit 880c1f0e4ede65890592d28dfb38bb06f5b57500
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 23:10:22 2011 -0400
+Date:  Mon Sep 19 23:10:22 2011 -0400
 
     Rewrite ICU detection code with in-house macros
 
@@ -10388,27 +13217,27 @@ Date:   Mon Sep 19 23:10:22 2011 -0400
 
 commit f83f0f4836691b04306c2ef80979f2e1d76a2f28
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 18:51:48 2011 -0400
+Date:  Mon Sep 19 18:51:48 2011 -0400
 
     [graphite] Add note about graphite shaker brokenness
 
- src/hb-graphite2.cc |    8 ++++++++
+ src/hb-graphite2.cc |   8 ++++++++
  1 files changed, 8 insertions(+), 0 deletions(-)
 
 commit 422558142aabb996d8ad1848df7ea4d5a8ade98a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 17:57:02 2011 -0400
+Date:  Mon Sep 19 17:57:02 2011 -0400
 
     [util] Account for line-space in surface size
 
- util/options.cc    |    2 +-
- util/options.hh    |    1 -
- util/view-cairo.cc |    2 +-
+ util/options.cc    |   2 +-
+ util/options.hh    |   1 -
+ util/view-cairo.cc |   2 +-
  3 files changed, 2 insertions(+), 3 deletions(-)
 
 commit b5afd8f78e6b372f1bbed469329c1554adb20eea
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 16:56:21 2011 -0400
+Date:  Mon Sep 19 16:56:21 2011 -0400
 
     [util] Rename --output to --output_file, and --format to
     --output-format
@@ -10418,7 +13247,7 @@ Date:   Mon Sep 19 16:56:21 2011 -0400
 
 commit 0a965eee880428a43ad7f9d1317c344666247dd7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 16:53:47 2011 -0400
+Date:  Mon Sep 19 16:53:47 2011 -0400
 
     Minor
 
@@ -10427,7 +13256,7 @@ Date:   Mon Sep 19 16:53:47 2011 -0400
 
 commit 466393c2f04fb5b3dcb3e81ea9609905fa8c9648
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 16:50:18 2011 -0400
+Date:  Mon Sep 19 16:50:18 2011 -0400
 
     Really fix build this time
 
@@ -10436,7 +13265,7 @@ Date:   Mon Sep 19 16:50:18 2011 -0400
 
 commit fe1605db4f28ed75d5debe0db45a19aa77f0585f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 16:49:03 2011 -0400
+Date:  Mon Sep 19 16:49:03 2011 -0400
 
     Fix dist
 
@@ -10445,7 +13274,7 @@ Date:   Mon Sep 19 16:49:03 2011 -0400
 
 commit 8b8b19056decaf09e4e0ccd9412ee1aeb30f4de7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 16:41:17 2011 -0400
+Date:  Mon Sep 19 16:41:17 2011 -0400
 
     [util] Add hb-shape utility
 
@@ -10453,7 +13282,7 @@ Date:   Mon Sep 19 16:41:17 2011 -0400
 
     The output format is kinda cryptic.  Suggestions welcome.
 
- configure.ac         |    6 -
+ configure.ac        |    6 -
  util/Makefile.am     |   44 ++++--
  util/common.cc       |   43 ------
  util/common.hh       |   57 --------
@@ -10472,7 +13301,7 @@ Date:   Mon Sep 19 16:41:17 2011 -0400
 
 commit eb2d8be7a8ede0c0f5e346cf06516792f83f36f7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 16:15:22 2011 -0400
+Date:  Mon Sep 19 16:15:22 2011 -0400
 
     Minor
 
@@ -10481,89 +13310,89 @@ Date:   Mon Sep 19 16:15:22 2011 -0400
 
 commit f6496663c2f6849a944e41afcf9511f378477532
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 15:45:52 2011 -0400
+Date:  Mon Sep 19 15:45:52 2011 -0400
 
     [util] If no text is provided, simply call cairo_show_glyphs()
 
- util/view-cairo.cc |   92
+ util/view-cairo.cc |  92
  +++++++++++++++++++++++++++++-----------------------
  1 files changed, 51 insertions(+), 41 deletions(-)
 
 commit 5c299343118d1eaff32ffb2a5dac077cfff67dee
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 14:53:26 2011 -0400
+Date:  Mon Sep 19 14:53:26 2011 -0400
 
     [uniscribe] Various improvements
 
- src/hb-uniscribe.cc |   30 +++++++++++++++++++-----------
+ src/hb-uniscribe.cc |  30 +++++++++++++++++++-----------
  1 files changed, 19 insertions(+), 11 deletions(-)
 
 commit 11e51993ab562d4c7460eb7c43d0e97404e628e7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Sep 19 09:58:55 2011 -0400
+Date:  Mon Sep 19 09:58:55 2011 -0400
 
     [util] Move font-size into view-options
 
- util/options.cc    |    2 +-
- util/options.hh    |    7 +++----
- util/view-cairo.cc |    4 ++--
+ util/options.cc    |   2 +-
+ util/options.hh    |   7 +++----
+ util/view-cairo.cc |   4 ++--
  3 files changed, 6 insertions(+), 7 deletions(-)
 
 commit 0fe296019746689551d224a5f6fb7e0ebe1b91dc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Sep 17 09:59:58 2011 -0400
+Date:  Sat Sep 17 09:59:58 2011 -0400
 
     Fix Linux build when io.h is available
 
     Bug 40953 - fail compile git: make[2]: *** [hb_view-options.o] Error 1
 
- configure.ac    |    2 +-
+ configure.ac   |    2 +-
  util/options.cc |    8 ++++----
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit d2b3ab9ecebbf46cb9dac1f09c17379c50ea4575
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 16:59:17 2011 -0400
+Date:  Fri Sep 16 16:59:17 2011 -0400
 
     Fix "[util] Fix hb-view crash with bogus font."
 
- util/view-cairo.cc |    2 +-
+ util/view-cairo.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit da4a2a1426ee3aa9d9678ec12c9ba4dfcba0bcf8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 16:56:34 2011 -0400
+Date:  Fri Sep 16 16:56:34 2011 -0400
 
     Cosmetic
 
- util/view-cairo.cc |   31 +++++++++++++++++++++++--------
+ util/view-cairo.cc |  31 +++++++++++++++++++++++--------
  1 files changed, 23 insertions(+), 8 deletions(-)
 
 commit 4274ed7ab6fb03fbf8eaaa43ab06647dc0beed79
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 16:52:26 2011 -0400
+Date:  Fri Sep 16 16:52:26 2011 -0400
 
     [util] Fix hb-view crash with bogus font
 
- util/view-cairo.cc |    8 +++++++-
+ util/view-cairo.cc |   8 +++++++-
  1 files changed, 7 insertions(+), 1 deletions(-)
 
 commit 5ddd9cc499f2470eca239ae357a5c8a3626c0809
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 16:40:44 2011 -0400
+Date:  Fri Sep 16 16:40:44 2011 -0400
 
     Minor
 
- src/hb-private.hh         |    2 +-
- src/hb-unicode-private.hh |    4 ++--
- src/test.cc               |    4 ++--
- util/common.hh            |    2 +-
- util/options.cc           |    8 ++++----
+ src/hb-private.hh        |    2 +-
+ src/hb-unicode-private.hh |   4 ++--
+ src/test.cc              |    4 ++--
+ util/common.hh                   |    2 +-
+ util/options.cc          |    8 ++++----
  5 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 652d64aa8d32d914bf3ee2f2c451de103fea8fa9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 16:34:39 2011 -0400
+Date:  Fri Sep 16 16:34:39 2011 -0400
 
     TODO items
 
@@ -10572,7 +13401,7 @@ Date:   Fri Sep 16 16:34:39 2011 -0400
 
 commit 947c9a778c0d4b428b58806f98c34ede59b7439c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 16:33:18 2011 -0400
+Date:  Fri Sep 16 16:33:18 2011 -0400
 
     Minor
 
@@ -10581,7 +13410,7 @@ Date:   Fri Sep 16 16:33:18 2011 -0400
 
 commit d5476a30a10da5e54783c8dbf04340225a9a00d7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 12:30:50 2011 -0400
+Date:  Fri Sep 16 12:30:50 2011 -0400
 
     Minor
 
@@ -10590,19 +13419,19 @@ Date:   Fri Sep 16 12:30:50 2011 -0400
 
 commit 55aeb0490454cc1ba93a42f307ed1230f59dee4b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 02:08:36 2011 -0400
+Date:  Fri Sep 16 02:08:36 2011 -0400
 
     Fix reading text from stdin
 
- util/options.cc    |   76
+ util/options.cc    |  76
  ++++++++++++++++++++++++++++++++++------------------
- util/options.hh    |   16 +++++++----
- util/view-cairo.cc |    6 +++-
+ util/options.hh    |  16 +++++++----
+ util/view-cairo.cc |   6 +++-
  3 files changed, 64 insertions(+), 34 deletions(-)
 
 commit a75c1b125159f6cfb6b652a9ec40803f7c7e3f71
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 01:16:41 2011 -0400
+Date:  Fri Sep 16 01:16:41 2011 -0400
 
     Move code around
 
@@ -10612,20 +13441,20 @@ Date:   Fri Sep 16 01:16:41 2011 -0400
 
 commit 7bf6ecd3bfb1ccf5d9ac6fe274efa74b46885fea
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 01:11:30 2011 -0400
+Date:  Fri Sep 16 01:11:30 2011 -0400
 
     Always shape at size=upem
 
     Fixes bug with uniscribe not handling GIGANTIC sizes.
 
- util/options.cc    |    2 +-
- util/view-cairo.cc |    8 ++++----
- util/view-cairo.hh |    2 +-
+ util/options.cc    |   2 +-
+ util/view-cairo.cc |   8 ++++----
+ util/view-cairo.hh |   2 +-
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 674ee58d9bc9f825d769220d77f58513edae4558
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 00:54:05 2011 -0400
+Date:  Fri Sep 16 00:54:05 2011 -0400
 
     Minor
 
@@ -10634,14 +13463,14 @@ Date:   Fri Sep 16 00:54:05 2011 -0400
 
 commit 4451168e5d1ea26560899e9a9733b3a3f1853050
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 16 00:38:19 2011 -0400
+Date:  Fri Sep 16 00:38:19 2011 -0400
 
     Fix binary stdin/stdout io in Windows
 
     Make --font-file accept "-" to mean stdin, and have it work
     in Windows too!
 
- configure.ac    |    2 +-
+ configure.ac   |    2 +-
  util/common.hh  |    5 ++++
  util/options.cc |   64
  +++++++++++++++++++++++++++++++++++++++++++++---------
@@ -10650,7 +13479,7 @@ Date:   Fri Sep 16 00:38:19 2011 -0400
 
 commit 639b5957d9c7b6d8bef6784e3467ccc055ddeea4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 15 18:09:49 2011 -0400
+Date:  Thu Sep 15 18:09:49 2011 -0400
 
     Minor
 
@@ -10660,22 +13489,22 @@ Date:   Thu Sep 15 18:09:49 2011 -0400
 
 commit f7e2ef74f856ee13d6fd6cf3f1e04bc162203bc2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 15 17:52:00 2011 -0400
+Date:  Thu Sep 15 17:52:00 2011 -0400
 
     [hb-view] Make print to stdout work in Windows
 
     Apparently there's no equivalent to "/dev/stdout", so write using
     stdio to be able to output to stdout.
 
- util/common.hh     |    1 +
- util/options.hh    |   31 ++++++++++++++++----
- util/view-cairo.cc |   79
+ util/common.hh     |   1 +
+ util/options.hh    |  31 ++++++++++++++++----
+ util/view-cairo.cc |  79
  +++++++++++++++++++++++++++++++++++-----------------
  3 files changed, 78 insertions(+), 33 deletions(-)
 
 commit 36b10f58cc70ce9570d17b30616f9cb27423e03b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 15 16:29:51 2011 -0400
+Date:  Thu Sep 15 16:29:51 2011 -0400
 
     Minor
 
@@ -10684,38 +13513,38 @@ Date:   Thu Sep 15 16:29:51 2011 -0400
 
 commit c4611cb66f8e3a133ec00e3ace62ef19d9b95b28
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Sep 13 13:33:11 2011 -0400
+Date:  Tue Sep 13 13:33:11 2011 -0400
 
     Fix test
 
- src/hb-graphite2.h |    1 +
- src/hb-ot-shape.h  |    1 +
- src/hb-uniscribe.h |    1 +
+ src/hb-graphite2.h |   1 +
+ src/hb-ot-shape.h  |   1 +
+ src/hb-uniscribe.h |   1 +
  3 files changed, 3 insertions(+), 0 deletions(-)
 
 commit b9b10ad78b1f977494a3a42b58f8040fe16505a3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Sep 13 13:30:39 2011 -0400
+Date:  Tue Sep 13 13:30:39 2011 -0400
 
     [util] Refactor hb-view completely
 
     Now we can use the same code to do other utils...
 
- configure.ac       |    2 +
- util/Makefile.am   |    2 +
- util/common.cc     |    7 +-
- util/common.hh     |    2 +-
+ configure.ac      |    2 +
+ util/Makefile.am   |   2 +
+ util/common.cc     |   7 +-
+ util/common.hh     |   2 +-
  util/hb-view.cc    |  244 ++++-------------------------
  util/options.cc    |  321 +++++++++++++++++++++++++++-----------
  util/options.hh    |  179 +++++++++++++++++++---
  util/view-cairo.cc |  440
  ++++++++++++++++++++++++++++++++++++++++++++++++++++
- util/view-cairo.hh |   63 ++++++++
+ util/view-cairo.hh |  63 ++++++++
  9 files changed, 927 insertions(+), 333 deletions(-)
 
 commit bc4b07b05ea9e39eb9f966eb2c3e1c737efa77ff
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 8 17:08:32 2011 -0400
+Date:  Thu Sep 8 17:08:32 2011 -0400
 
     More reshuffling
 
@@ -10727,7 +13556,7 @@ Date:   Thu Sep 8 17:08:32 2011 -0400
 
 commit 516857eb51bbb79ff4adf44e3fefbf460f9ee8f8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 8 16:50:24 2011 -0400
+Date:  Thu Sep 8 16:50:24 2011 -0400
 
     [util] Simplify more
 
@@ -10736,7 +13565,7 @@ Date:   Thu Sep 8 16:50:24 2011 -0400
 
 commit 4f4b114a5592c2f5d128ee795f159b438ad97829
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 8 16:49:02 2011 -0400
+Date:  Thu Sep 8 16:49:02 2011 -0400
 
     [util] Move code around
 
@@ -10746,7 +13575,7 @@ Date:   Thu Sep 8 16:49:02 2011 -0400
 
 commit 46d86a73a103b061144018c3fe947b57548fc58f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 8 16:43:15 2011 -0400
+Date:  Thu Sep 8 16:43:15 2011 -0400
 
     Minor
 
@@ -10757,7 +13586,7 @@ Date:   Thu Sep 8 16:43:15 2011 -0400
 
 commit 90e312cb85df7a6dc350cb62138ab950790e3d15
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 8 16:42:37 2011 -0400
+Date:  Thu Sep 8 16:42:37 2011 -0400
 
     [util] Move code around
 
@@ -10767,7 +13596,7 @@ Date:   Thu Sep 8 16:42:37 2011 -0400
 
 commit 109cb382898f491eed733dba4ef5ba12de94aaf6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 8 16:00:04 2011 -0400
+Date:  Thu Sep 8 16:00:04 2011 -0400
 
     [util] Further refactor option parsing
 
@@ -10778,17 +13607,17 @@ Date:   Thu Sep 8 16:00:04 2011 -0400
 
 commit bc187e5ac7433f5561b0e97e8c62172c73883f3f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Sep 8 13:35:17 2011 -0400
+Date:  Thu Sep 8 13:35:17 2011 -0400
 
     Refine Indic scripts, following Martin Hosken's recommendation
 
- src/hb-ot-shape-complex-private.hh |   56
+ src/hb-ot-shape-complex-private.hh |  56
  ++++++++++++++++++++++--------------
  1 files changed, 34 insertions(+), 22 deletions(-)
 
 commit 738d096a06822e63b3894bd817ecb90e5fb94f73
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 2 13:31:19 2011 -0400
+Date:  Fri Sep 2 13:31:19 2011 -0400
 
     Pass through unknown ISO 639-3 language tags to OpenType engine
 
@@ -10796,81 +13625,81 @@ Date:   Fri Sep 2 13:31:19 2011 -0400
     language is three letters long, use it directly as OpenType language
     tag (after case conversion and padding).
 
- src/hb-ot-tag.cc   |    8 ++++++++
- test/test-ot-tag.c |    5 +++++
+ src/hb-ot-tag.cc   |   8 ++++++++
+ test/test-ot-tag.c |   5 +++++
  2 files changed, 13 insertions(+), 0 deletions(-)
 
 commit ea02cbf03c084b3ead6e9e4c9af07b3b47608d5b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Sep 2 12:39:20 2011 -0400
+Date:  Fri Sep 2 12:39:20 2011 -0400
 
     [graphite] Don't preload glyphs
 
     Doesn't seem to be slower.
 
- src/hb-graphite2.cc |    2 +-
+ src/hb-graphite2.cc |   2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 commit 210a06f3d7bd2df55ebd1743da74f327c5a7a967
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 26 13:39:49 2011 +0200
+Date:  Fri Aug 26 13:39:49 2011 +0200
 
     Minor
 
- src/hb-graphite2.h |   12 ++++++------
- src/hb-ot-shape.h  |    1 -
- src/hb-uniscribe.h |    1 -
+ src/hb-graphite2.h |  12 ++++++------
+ src/hb-ot-shape.h  |   1 -
+ src/hb-uniscribe.h |   1 -
  3 files changed, 6 insertions(+), 8 deletions(-)
 
 commit 4a8d2e379a34b19bccc72bc3e2d9ace3fdd27733
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 26 09:40:54 2011 +0200
+Date:  Fri Aug 26 09:40:54 2011 +0200
 
     [graphite2] Chop a few more lines
 
- src/hb-graphite2.cc |   13 ++++---------
+ src/hb-graphite2.cc |  13 ++++---------
  1 files changed, 4 insertions(+), 9 deletions(-)
 
 commit 81ec289da799bd2f50da9382507c606d2c779ab9
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 26 09:33:06 2011 +0200
+Date:  Fri Aug 26 09:33:06 2011 +0200
 
     Minor
 
- src/hb-graphite2.cc |   24 ++++++++++++------------
+ src/hb-graphite2.cc |  24 ++++++++++++------------
  1 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 3380de5abbaff535e1cf57ea7e5c2a7c4fdcfe66
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 26 09:30:49 2011 +0200
+Date:  Fri Aug 26 09:30:49 2011 +0200
 
     [graphite] Use buffer->replace_glyphs()
 
- src/hb-graphite2.cc |    3 +--
+ src/hb-graphite2.cc |   3 +--
  1 files changed, 1 insertions(+), 2 deletions(-)
 
 commit 9ebe8c0286856d46430ae184ba7303bd34485883
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 26 09:29:42 2011 +0200
+Date:  Fri Aug 26 09:29:42 2011 +0200
 
     Add buffer->replace_glyphs()
 
  src/hb-buffer-private.hh |    3 +++
- src/hb-buffer.cc         |   26 ++++++++++++++++++++++++++
+ src/hb-buffer.cc        |   26 ++++++++++++++++++++++++++
  2 files changed, 29 insertions(+), 0 deletions(-)
 
 commit a5edb1031c204464da4f852ba3d90e8cc20cd20e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 26 09:27:13 2011 +0200
+Date:  Fri Aug 26 09:27:13 2011 +0200
 
     Minor
 
- src/hb-graphite2.cc |    9 +++++----
+ src/hb-graphite2.cc |   9 +++++----
  1 files changed, 5 insertions(+), 4 deletions(-)
 
 commit 290e3ee51727df75d136ccfff79831b94d1583b6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 26 09:25:04 2011 +0200
+Date:  Fri Aug 26 09:25:04 2011 +0200
 
     [graphite] Only pass the first part language tag to graphite
 
@@ -10882,12 +13711,12 @@ Date:   Fri Aug 26 09:25:04 2011 +0200
     2) Padding.  IMO, tag padding is always with spaces, but Martin was
     talking about NUL bytes.
 
- src/hb-graphite2.cc |    5 +++--
+ src/hb-graphite2.cc |   5 +++--
  1 files changed, 3 insertions(+), 2 deletions(-)
 
 commit 4c9fe88d30036340fe592bcbc375049b84602b8b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Aug 26 09:18:53 2011 +0200
+Date:  Fri Aug 26 09:18:53 2011 +0200
 
     [API] Make all _from_string() functions take a len parameter
 
diff --git a/INSTALL b/INSTALL
index 7d1c323..a1e89e1 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,8 +1,8 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
+Inc.
 
    Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -226,6 +226,11 @@ order to use an ANSI C compiler:
 
 and if that doesn't work, install pre-built binaries of GCC for HP-UX.
 
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
    On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
 parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
 a workaround.  If GNU CC is not installed, it is therefore recommended
index ecaffd4..d718126 100644 (file)
@@ -2,6 +2,8 @@
 
 NULL =
 
+ACLOCAL_AMFLAGS = -I m4
+
 SUBDIRS = src util test
 
 pkgconfigdir = $(libdir)/pkgconfig
@@ -10,6 +12,7 @@ pkgconfig_DATA = harfbuzz.pc
 EXTRA_DIST = \
        autogen.sh \
        harfbuzz.doap \
+       Android.mk \
        $(NULL)
 
 MAINTAINERCLEANFILES = \
@@ -18,7 +21,6 @@ MAINTAINERCLEANFILES = \
        $(srcdir)/autoscan.log \
        $(srcdir)/compile \
        $(srcdir)/config.guess \
-       $(srcdir)/config.h.in \
        $(srcdir)/config.sub \
        $(srcdir)/configure.scan \
        $(srcdir)/depcomp \
index d17050f..7c65d6e 100644 (file)
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -43,7 +43,11 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
        COPYING ChangeLog INSTALL NEWS THANKS TODO compile \
        config.guess config.sub depcomp install-sh ltmain.sh missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -52,11 +56,11 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = harfbuzz.pc
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+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_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
@@ -88,6 +92,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
 DATA = $(pkgconfig_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
@@ -102,9 +112,11 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  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__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -133,6 +145,8 @@ am__relativize = \
 GZIP_ENV = --best
 DIST_ARCHIVES = $(distdir).tar.bz2
 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@
@@ -160,6 +174,7 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -186,6 +201,8 @@ HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -201,6 +218,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -217,6 +235,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -229,6 +250,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -237,6 +259,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -262,7 +285,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -279,12 +301,14 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
+ACLOCAL_AMFLAGS = -I m4
 SUBDIRS = src util test
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = harfbuzz.pc
 EXTRA_DIST = \
        autogen.sh \
        harfbuzz.doap \
+       Android.mk \
        $(NULL)
 
 MAINTAINERCLEANFILES = \
@@ -293,7 +317,6 @@ MAINTAINERCLEANFILES = \
        $(srcdir)/autoscan.log \
        $(srcdir)/compile \
        $(srcdir)/config.guess \
-       $(srcdir)/config.h.in \
        $(srcdir)/config.sub \
        $(srcdir)/configure.scan \
        $(srcdir)/depcomp \
@@ -323,7 +346,7 @@ all: config.h
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-am--refresh:
+am--refresh: Makefile
        @:
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
@@ -359,10 +382,8 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-       @if test ! -f $@; then \
-         rm -f stamp-h1; \
-         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
-       else :; fi
+       @if test ! -f $@; then rm -f stamp-h1; else :; fi
+       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
        @rm -f stamp-h1
@@ -402,9 +423,7 @@ uninstall-pkgconfigDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+       dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -621,7 +640,11 @@ dist-gzip: distdir
        tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
        $(am__remove_distdir)
 dist-bzip2: distdir
-       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzip: distdir
+       tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
        $(am__remove_distdir)
 
 dist-lzma: distdir
@@ -629,7 +652,7 @@ dist-lzma: distdir
        $(am__remove_distdir)
 
 dist-xz: distdir
-       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+       tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
        $(am__remove_distdir)
 
 dist-tarZ: distdir
@@ -646,7 +669,7 @@ dist-zip: distdir
        $(am__remove_distdir)
 
 dist dist-all: distdir
-       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
        $(am__remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
@@ -660,6 +683,8 @@ distcheck: dist
          bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
        *.tar.lzma*) \
          lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.lz*) \
+         lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
        *.tar.xz*) \
          xz -dc $(distdir).tar.xz | $(am__untar) ;;\
        *.tar.Z*) \
@@ -679,6 +704,7 @@ distcheck: dist
          && am__cwd=`pwd` \
          && $(am__cd) $(distdir)/_build \
          && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
            $(DISTCHECK_CONFIGURE_FLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -707,8 +733,16 @@ distcheck: dist
          list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
          sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-       @$(am__cd) '$(distuninstallcheck_dir)' \
-       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+       @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)"; \
@@ -742,10 +776,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -834,16 +873,16 @@ uninstall-am: uninstall-pkgconfigDATA
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
        all all-am am--refresh check check-am clean clean-generic \
        clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
-       dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
-       dist-zip distcheck distclean distclean-generic distclean-hdr \
-       distclean-libtool distclean-tags distcleancheck distdir \
-       distuninstallcheck dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-pkgconfigDATA install-ps \
-       install-ps-am install-strip installcheck installcheck-am \
-       installdirs installdirs-am maintainer-clean \
+       dist-gzip dist-hook dist-lzip dist-lzma dist-shar dist-tarZ \
+       dist-xz dist-zip distcheck distclean distclean-generic \
+       distclean-hdr distclean-libtool distclean-tags distcleancheck \
+       distdir distuninstallcheck dvi dvi-am html html-am info \
+       info-am install install-am install-data install-data-am \
+       install-dvi install-dvi-am install-exec install-exec-am \
+       install-html install-html-am install-info install-info-am \
+       install-man install-pdf install-pdf-am install-pkgconfigDATA \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
        maintainer-clean-generic mostlyclean mostlyclean-generic \
        mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
        uninstall uninstall-am uninstall-pkgconfigDATA
diff --git a/NEWS b/NEWS
index d3dbe1a..7542e8e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,227 @@
+Overview of changes leading to 0.9.12
+Thursday, January 18, 2013
+=====================================
+
+- Build fixes for Sun compiler.
+- Minor bug fix.
+
+Overview of changes leading to 0.9.11
+Thursday, January 10, 2013
+=====================================
+
+- Build fixes.
+- Fix GPOS mark attachment with null Anchor offsets.
+- [Indic] Fix old-spec reordering of viramas if sequence ends in one.
+- Fix multi-threaded shaper data creation crash.
+- Add atomic ops for Solaris.
+
+API changes:
+- Rename hb_buffer_clear() to hb_buffer_clear_contents().
+
+
+Overview of changes leading to 0.9.10
+Thursday, January 3, 2013
+=====================================
+
+- [Indic] Fixed rendering of Malayalam dot-reph
+- Updated OT language tags.
+- Updated graphite2 backend.
+- Improved hb_ot_layout_get_size_params() logic.
+- Improve hb-shape/hb-view help output.
+- Fixed hb-set.h implementation to not crash.
+- Fixed various issues with hb_ot_layout_collect_lookups().
+- Various build fixes.
+
+New API:
+
+hb_graphite2_face_get_gr_face()
+hb_graphite2_font_get_gr_font()
+hb_coretext_face_get_cg_font()
+
+Modified API:
+
+hb_ot_layout_get_size_params()
+
+
+Overview of changes leading to 0.9.9
+Wednesday, December 5, 2012
+====================================
+
+- Fix build on Windows.
+- Minor improvements.
+
+
+Overview of changes leading to 0.9.8
+Tuesday, December 4, 2012
+====================================
+
+
+- Actually implement hb_shape_plan_get_shaper ().
+- Make UCDB data tables const.
+- Lots of internal refactoring in OTLayout tables.
+- Flesh out hb_ot_layout_lookup_collect_glyphs().
+
+New API:
+
+hb_ot_layout_collect_lookups()
+hb_ot_layout_get_size_params()
+
+
+Overview of changes leading to 0.9.7
+Sunday, November 21, 2012
+====================================
+
+
+HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.
+
+- Fix Arabic contextual joining using pre-context text.
+- Fix Sinhala "split matra" mess.
+- Fix Khmer shaping with broken fonts.
+- Implement Thai "PUA" shaping for old fonts.
+- Do NOT route Kharoshthi script through the Indic shaper.
+- Disable fallback positioning for Indic and Thai shapers.
+- Misc fixes.
+
+
+hb-shape / hb-view changes:
+
+- Add --text-before and --text-after
+- Add --bot / --eot / --preserve-default-ignorables
+- hb-shape --output-format=json
+
+
+New API:
+
+hb_buffer_clear()
+
+hb_buffer_flags_t
+
+HB_BUFFER_FLAGS_DEFAULT
+HB_BUFFER_FLAG_BOT
+HB_BUFFER_FLAG_EOT
+HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
+
+hb_buffer_set_flags()
+hb_buffer_get_flags()
+
+HB_BUFFER_SERIALIZE_FLAGS
+hb_buffer_serialize_glyphs()
+hb_buffer_deserialize_glyphs()
+hb_buffer_serialize_list_formats()
+
+hb_set_add_range()
+hb_set_del_range()
+hb_set_get_population()
+hb_set_next_range()
+
+hb_face_[sg]et_glyph_count()
+
+hb_segment_properties_t
+HB_SEGMENT_PROPERTIES_DEFAULT
+hb_segment_properties_equal()
+hb_segment_properties_hash()
+
+hb_buffer_set_segment_properties()
+hb_buffer_get_segment_properties()
+
+hb_ot_layout_glyph_class_t
+hb_ot_layout_get_glyph_class()
+hb_ot_layout_get_glyphs_in_class()
+
+hb_shape_plan_t
+hb_shape_plan_create()
+hb_shape_plan_create_cached()
+hb_shape_plan_get_empty()
+hb_shape_plan_reference()
+hb_shape_plan_destroy()
+hb_shape_plan_set_user_data()
+hb_shape_plan_get_user_data()
+hb_shape_plan_execute()
+hb_shape_plan_get_shaper()
+
+hb_ot_shape_plan_collect_lookups()
+
+
+API changes:
+
+- Remove "mask" parameter from hb_buffer_add().
+- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup().
+- hb-set.h API const correction.
+- Renamed hb_set_min/max() to hb_set_get_min/max().
+- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups().
+- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().
+
+
+
+Overview of changes leading to 0.9.6
+Sunday, November 13, 2012
+====================================
+
+- Don't clear pre-context text if no new context is provided.
+- Fix ReverseChainingSubstLookup, which was totally borked.
+- Adjust output format of hb-shape a bit.
+- Include config.h.in in-tree.  Makes it easier for alternate build systems.
+- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
+- Use ICU LayoutEngine's C API instead of C++.  Avoids much headache.
+- Drop glyphs for all of Unicode Default_Ignorable characters.
+- Misc build fixes.
+
+Arabic shaper:
+- Enable 'dlig' and 'mset' features in Arabic shaper.
+- Implement 'Phags-pa shaping, improve Mongolian.
+
+Indic shaper:
+- Decompose Sinhala split matras the way old HarfBuzz / Pango did.
+- Initial support for Consonant Medials.
+- Start adding new-style Myanmar shaping.
+- Make reph and 'pref' logic introspect the font.
+- Route Meetei-Mayek through the Indic shaper.
+- Don't apply 'liga' in Indic shaper.
+- Improve Malayalam pre-base reordering Ra interaction with Chillus.
+
+
+
+Overview of changes leading to 0.9.5
+Sunday, October 14, 2012
+====================================
+
+- Synthetic-GSUB Arabic fallback shaping.
+
+- Misc Indic improvements.
+
+- Add build system support for pthread.
+
+- Imported UCDN for in-tree Unicode callbacks implementation.
+
+- Context-aware Arabic joining.
+
+- Misc other fixes.
+
+- New API:
+
+  hb_feature_to/from-string()
+  hb_buffer_[sg]et_content_type()
+
+
+
+Overview of changes leading to 0.9.4
+Tuesday, Sep 03, 2012
+====================================
+
+- Indic improvements with old-spec Malayalam.
+
+- Better fallback glyph positioning, specially with Thai / Lao marks.
+
+- Implement dotted-circle insertion.
+
+- Better Arabic fallback shaping / ligation.
+
+- Added ICU LayoutEngine backend for testing.  Call it by the 'icu_le' name.
+
+- Misc fixes.
+
+
+
 Overview of changes leading to 0.9.3
 Friday, Aug 18, 2012
 ====================================
diff --git a/TODO b/TODO
index 1344bf3..c93b33e 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,17 +1,21 @@
 General fixes:
 =============
 
-- Ligature matching and match_input() of (Chain)Context should use the
-  same logic.  Right now the Ligature logic is more involved.  Possibly
-  merge, or duplicate.
+- AAT 'morx' implementation.
+
+- Return "safe-to-break" bit from shaping.
+
+- Disable 'vert' if 'vrt2' is available (eg. Motoya fonts with arrow chars).
+
+- Fix TT 'kern' on/off and GPOS interaction (move kerning before GPOS).
+
+- Implement 'rand' feature.
 
 - mask propagation? (when ligation, "or" the masks).
 
 - Warn at compile time (and runtime with HB_DEBUG?) if no Unicode / font
   funcs found / set.
 
-- Fix TT 'kern' on/off and GPOS interaction (move kerning before GPOS).
-
 - Do proper rounding when scaling from font space?  May be a non-issue.
 
 - Misc features:
@@ -19,16 +23,12 @@ General fixes:
   * vkna,hkna etc for kana, etc
   * smpl,trad for ZHS / ZHT
 
-- Add Pango backend?
-
-- Add ICUlayout backend?
-
-- Add ICUlayout API?
-
 
 API issues to fix before 1.0:
 ============================
 
+- API to accept a list of languages.
+
 - Add default font_funcs / Unicode funcs API and to utils.
 
 - Add init_func to font_funcs.  Adjust ft.
@@ -49,24 +49,16 @@ API additions
 
 - Buffer (de)serialize API ala hb-shape?
 
-- Move feature parsing from util into the library
-
 - Add hb-cairo glue
 
 - Add sanitize API (and a cached version, that saves result on blob user-data)
 
 - Add glib GBoxedType stuff and introspection
 
-- Finish Uniscribe / CoreText face / font get API
-
 - BCP 47 language handling / API (language_matches?)
 
-- Add hb_face_get_glyph_count()?
-
 - Add hb_font_create_linear()?
 
-- Add hb_shape_plan()/hb_shape_planned()
-
 - Add query API for aalt-like features?
 
 - SFNT api? get_num_faces? get_table_tags? (there's something in stash)
@@ -79,10 +71,7 @@ API additions
 hb-view / hb-shape enhancements:
 ===============================
 
-- --output-format should list available formats.
 - Add --width, --height, --auto-size, --align, etc?
-- Add XML and JSON formats to hb-shape
-- --features="init=medi=isol=fina=0"
 
 
 Tests to write:
@@ -96,6 +85,7 @@ Tests to write:
 
 - GObject, FreeType, etc
 
-- hb_set_t
-
 - hb_cache_t and relatives
+
+- hb_feature_to/from_string
+- hb_buffer_[sg]et_contents
index 5df2c98..777baa0 100644 (file)
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
-[m4_warning([this file was generated for autoconf 2.65.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 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'.])])
 
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 56 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-                  [m4_fatal([Libtool version $1 or higher is required],
-                            63)])],
-       [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
-  *\ * | *\    *)
-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    _LT_PATH_MAGIC
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME.  Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
-       [m4_ifval([$1], [$1], [$2])])
-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
-    m4_ifval([$4],
-       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
-    lt_dict_add_subkey([lt_decl_dict], [$2],
-       [tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
-  [0], [m4_fatal([$0: too few arguments: $#])],
-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[m4_assert([$# <= 2])dnl
-_$0(m4_quote(m4_default([$1], [[, ]])),
-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
-m4_define([_lt_decl_varnames_tagged],
-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
-     m4_if([$2], [],
-          m4_quote(lt_decl_varnames),
-       m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
-                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly.  In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-#    # Some comment about what VAR is for.
-#    visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
-                                          [description])))[]dnl
-m4_pushdef([_libtool_name],
-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
-    [0], [_libtool_name=[$]$1],
-    [1], [_libtool_name=$lt_[]$1],
-    [2], [_libtool_name=$lt_[]$1],
-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
-       dnl If the libtool generation code has been placed in $CONFIG_LT,
-       dnl instead of duplicating it all over again into config.status,
-       dnl then we will have config.status run $CONFIG_LT later, so it
-       dnl needs to know what name is stored there:
-        [AC_CONFIG_COMMANDS([libtool],
-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
-    dnl If the libtool generation code is destined for config.status,
-    dnl expand the accumulated commands and init code now:
-    [AC_CONFIG_COMMANDS([libtool],
-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
-exec AS_MESSAGE_LOG_FD>>config.log
-{
-  echo
-  AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
-  -h, --help      print this help, then exit
-  -V, --version   print version number, then exit
-  -q, --quiet     do not print progress messages
-  -d, --debug     don't remove temporary files
-
-Report bugs to <bug-libtool@gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
-  case $[1] in
-    --version | --v* | -V )
-      echo "$lt_cl_version"; exit 0 ;;
-    --help | --h* | -h )
-      echo "$lt_cl_help"; exit 0 ;;
-    --debug | --d* | -d )
-      debug=: ;;
-    --quiet | --q* | --silent | --s* | -q )
-      lt_cl_silent=: ;;
-
-    -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
-    *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
-  esac
-  shift
-done
-
-if $lt_cl_silent; then
-  exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure.  Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars.  Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
-  m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-  _LT_PROG_LTMAIN
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
-  [C],                 [_LT_LANG(C)],
-  [C++],               [_LT_LANG(CXX)],
-  [Java],              [_LT_LANG(GCJ)],
-  [Fortran 77],                [_LT_LANG(F77)],
-  [Fortran],           [_LT_LANG(FC)],
-  [Windows Resource],  [_LT_LANG(RC)],
-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
-    [_LT_LANG($1)],
-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
-  [LT_SUPPORTED_TAG([$1])dnl
-  m4_append([_LT_TAGS], [$1 ])dnl
-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
-  _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
-  [LT_LANG(CXX)],
-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
-  [LT_LANG(F77)],
-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
-  [LT_LANG(FC)],
-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-  [LT_LANG(GCJ)],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-    [LT_LANG(GCJ)],
-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
-      [LT_LANG(GCJ)],
-      [m4_ifdef([AC_PROG_GCJ],
-       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([A][M_PROG_GCJ],
-       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([LT_PROG_GCJ],
-       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
-  [LT_LANG(RC)],
-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-    AC_CHECK_TOOL([LIPO], [lipo], [:])
-    AC_CHECK_TOOL([OTOOL], [otool], [:])
-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
-    _LT_DECL([], [DSYMUTIL], [1],
-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
-    _LT_DECL([], [NMEDIT], [1],
-      [Tool to change global to local symbols on Mac OS X])
-    _LT_DECL([], [LIPO], [1],
-      [Tool to manipulate fat objects and archives on Mac OS X])
-    _LT_DECL([], [OTOOL], [1],
-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
-    _LT_DECL([], [OTOOL64], [1],
-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
-      [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-       # By default we will add the -single_module flag. You can override
-       # by either setting the environment variable LT_MULTI_MODULE
-       # non-empty at configure time, or by adding -multi_module to the
-       # link flags.
-       rm -rf libconftest.dylib*
-       echo "int foo(void){return 1;}" > conftest.c
-       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
-       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-         lt_cv_apple_cc_single_mod=yes
-       else
-         cat conftest.err >&AS_MESSAGE_LOG_FD
-       fi
-       rm -rf libconftest.dylib*
-       rm -f conftest.*
-      fi])
-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
-      [lt_cv_ld_exported_symbols_list],
-      [lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-       [lt_cv_ld_exported_symbols_list=yes],
-       [lt_cv_ld_exported_symbols_list=no])
-       LDFLAGS="$save_LDFLAGS"
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-       10.[[012]]*)
-         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-       10.*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_automatic, $1)=yes
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
-  _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-    m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-],[])
-  else
-  _LT_TAGVAR(ld_shlibs, $1)=no
-  fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-        [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-          test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-         # Cool, printf works
-         :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-            test "X$echo_testing_string" = 'X\t' &&
-            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-            test "X$echo_testing_string" = "X$echo_test_string"; then
-         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-         export CONFIG_SHELL
-         SHELL="$CONFIG_SHELL"
-         export SHELL
-         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-            test "X$echo_testing_string" = 'X\t' &&
-            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-            test "X$echo_testing_string" = "X$echo_test_string"; then
-         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-         # maybe with a smaller string...
-         prev=:
-
-         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-           then
-             break
-           fi
-           prev="$cmd"
-         done
-
-         if test "$prev" != 'sed 50q "[$]0"'; then
-           echo_test_string=`eval $prev`
-           export echo_test_string
-           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-         else
-           # Oops.  We lost completely, so just stick with echo.
-           ECHO=echo
-         fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(lt_ECHO)
-])
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-  [AS_HELP_STRING([--disable-libtool-lock],
-    [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-       HPUX_IA64_MODE="32"
-       ;;
-      *ELF-64*)
-       HPUX_IA64_MODE="64"
-       ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-       *32-bit*)
-         LD="${LD-ld} -melf32bsmip"
-         ;;
-       *N32*)
-         LD="${LD-ld} -melf32bmipn32"
-         ;;
-       *64-bit*)
-         LD="${LD-ld} -melf64bmip"
-       ;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-       *32-bit*)
-         LD="${LD-ld} -32"
-         ;;
-       *N32*)
-         LD="${LD-ld} -n32"
-         ;;
-       *64-bit*)
-         LD="${LD-ld} -64"
-         ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-       case $host in
-         x86_64-*kfreebsd*-gnu)
-           LD="${LD-ld} -m elf_i386_fbsd"
-           ;;
-         x86_64-*linux*)
-           LD="${LD-ld} -m elf_i386"
-           ;;
-         ppc64-*linux*|powerpc64-*linux*)
-           LD="${LD-ld} -m elf32ppclinux"
-           ;;
-         s390x-*linux*)
-           LD="${LD-ld} -m elf_s390"
-           ;;
-         sparc64-*linux*)
-           LD="${LD-ld} -m elf32_sparc"
-           ;;
-       esac
-       ;;
-      *64-bit*)
-       case $host in
-         x86_64-*kfreebsd*-gnu)
-           LD="${LD-ld} -m elf_x86_64_fbsd"
-           ;;
-         x86_64-*linux*)
-           LD="${LD-ld} -m elf_x86_64"
-           ;;
-         ppc*-*linux*|powerpc*-*linux*)
-           LD="${LD-ld} -m elf64ppc"
-           ;;
-         s390*-*linux*|s390*-*tpf*)
-           LD="${LD-ld} -m elf64_s390"
-           ;;
-         sparc*-*linux*)
-           LD="${LD-ld} -m elf64_sparc"
-           ;;
-       esac
-       ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-         LD="${LD-ld} -64"
-       fi
-       ;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
-    [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
-    [Commands used to build an old-style archive])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$5], , :, [$5])
-else
-    m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$4], , :, [$4])
-else
-    m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-             test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
-    [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL          RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL                DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL                0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW         DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW       RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW     DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW     0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}]
-_LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_dlunknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-    ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-         [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
-       [AC_CHECK_FUNC([dlopen],
-             [lt_cv_dlopen="dlopen"],
-         [AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-           [AC_CHECK_LIB([svld], [dlopen],
-                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-             [AC_CHECK_LIB([dld], [dld_link],
-                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
-             ])
-           ])
-         ])
-       ])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-         lt_cv_dlopen_self, [dnl
-         _LT_TRY_DLOPEN_SELF(
-           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-         lt_cv_dlopen_self_static, [dnl
-         _LT_TRY_DLOPEN_SELF(
-           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
-        [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
-        [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
-        [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
-       [Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
-         [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
-    [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      AC_MSG_RESULT([yes])
-    else
-      AC_MSG_RESULT([no])
-    fi
-    ;;
-  *)
-    AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_OBJDUMP])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
-       [], [
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[[4-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-          echo ' yes '
-          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-       :
-      else
-       can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[[3-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       else
-               version_type=irix
-       fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-       ;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
-    [Variables whose values should be saved in libtool wrapper scripts and
-    restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
-    [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
-    [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
-    [[List of archive names.  First name is the real one, the rest are links.
-    The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
-    [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [postinstall_cmds], [2],
-    [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
-    [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
-    [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
-    [[As "finish_cmds", except a single script fragment to be evaled but
-    not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
-    [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
-    [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="m4_if([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-       case $deplibs_check_method in
-       "file_magic "*)
-         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-           $EGREP "$file_magic_regex" > /dev/null; then
-           :
-         else
-           cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
-         fi ;;
-       esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
-        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_ARG_WITH([gnu-ld],
-    [AS_HELP_STRING([--with-gnu-ld],
-       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break
-       ;;
-      *)
-       test "$with_gnu_ld" != yes && break
-       ;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[[45]]*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[[3-9]]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd* | netbsdelf*-gnu)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
-    [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-       # Check to see if the nm accepts a BSD-compat flag.
-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-       #   nm: unknown option "B" ignored
-       # Tru64's nm complains that /dev/null is an invalid object file
-       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-       */dev/null* | *'Invalid file or object type'*)
-         lt_cv_path_NM="$tmp_nm -B"
-         break
-         ;;
-       *)
-         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-         */dev/null*)
-           lt_cv_path_NM="$tmp_nm -p"
-           break
-           ;;
-         *)
-           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-           continue # so that we can try to find one that supports BSD flags
-           ;;
-         esac
-         ;;
-       esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
-  AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
-  [lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
-  cat conftest.out >&AS_MESSAGE_LOG_FD
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
-       [Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris*)
-  symcode='[[BDRT]]'
-  ;;
-sco3.2v5*)
-  symcode='[[DT]]'
-  ;;
-sysv4.2uw2*)
-  symcode='[[DT]]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[[ABDT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx]"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-       mv -f "$nlist"T "$nlist"
-      else
-       rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-         cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-         # Now generate the symbol file.
-         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-         cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-         cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-         # Now try linking the two files.
-         mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
-         LIBS="conftstm.$ac_objext"
-         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-           pipe_works=yes
-         fi
-         LIBS="$lt_save_LIBS"
-         CFLAGS="$lt_save_CFLAGS"
-       else
-         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-       fi
-      else
-       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
-    [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-    [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
-    [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
-    [Transform the output of nm in a C name address pair when lib prefix is needed])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-m4_if([$1], [CXX], [
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-       ;;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       ;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-       # All AIX code is PIC.
-       if test "$host_cpu" = ia64; then
-         # AIX 5 now supports IA64 processor
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-       else
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-       fi
-       ;;
-      chorus*)
-       case $cc_basename in
-       cxch68*)
-         # Green Hills C++ Compiler
-         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-         ;;
-       esac
-       ;;
-      dgux*)
-       case $cc_basename in
-         ec++*)
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           ;;
-         ghcx*)
-           # Green Hills C++ Compiler
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      freebsd* | dragonfly*)
-       # FreeBSD uses GNU C++
-       ;;
-      hpux9* | hpux10* | hpux11*)
-       case $cc_basename in
-         CC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-           if test "$host_cpu" != ia64; then
-             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-           fi
-           ;;
-         aCC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-           case $host_cpu in
-           hppa*64*|ia64*)
-             # +Z the default
-             ;;
-           *)
-             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-             ;;
-           esac
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      interix*)
-       # This is c89, which is MS Visual C++ (no shared libs)
-       # Anyone wants to do a port?
-       ;;
-      irix5* | irix6* | nonstopux*)
-       case $cc_basename in
-         CC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           # CC pic flag -KPIC is the default.
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-       case $cc_basename in
-         KCC*)
-           # KAI C++ Compiler
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-           ;;
-         ecpc* )
-           # old Intel C++ for x86_64 which still supported -KPIC.
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-           ;;
-         icpc* )
-           # Intel C++, used to be incompatible with GCC.
-           # ICC 10 doesn't accept -KPIC any more.
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-           ;;
-         pgCC* | pgcpp*)
-           # Portland Group C++ compiler
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-         cxx*)
-           # Compaq C++
-           # Make sure the PIC flag is empty.  It appears that all Alpha
-           # Linux and Compaq Tru64 Unix objects are PIC.
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           ;;
-         xlc* | xlC*)
-           # IBM XL 8.0 on PPC
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-           ;;
-         *)
-           case `$CC -V 2>&1 | sed 5q` in
-           *Sun\ C*)
-             # Sun C++ 5.9
-             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-             ;;
-           esac
-           ;;
-       esac
-       ;;
-      lynxos*)
-       ;;
-      m88k*)
-       ;;
-      mvs*)
-       case $cc_basename in
-         cxx*)
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      netbsd* | netbsdelf*-gnu)
-       ;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-       case $cc_basename in
-         KCC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-           ;;
-         RCC*)
-           # Rational C++ 2.4.1
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         cxx*)
-           # Digital/Compaq C++
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           # Make sure the PIC flag is empty.  It appears that all Alpha
-           # Linux and Compaq Tru64 Unix objects are PIC.
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      psos*)
-       ;;
-      solaris*)
-       case $cc_basename in
-         CC*)
-           # Sun C++ 4.2, 5.x and Centerline C++
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-           ;;
-         gcx*)
-           # Green Hills C++ Compiler
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      sunos4*)
-       case $cc_basename in
-         CC*)
-           # Sun C++ 4.x
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-         lcc*)
-           # Lucid
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-       case $cc_basename in
-         CC*)
-           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-       esac
-       ;;
-      tandem*)
-       case $cc_basename in
-         NCC*)
-           # NonStop-UX NCC 3.20
-           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      vxworks*)
-       ;;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-       ;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-       # +Z the default
-       ;;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       ;;
-      esac
-      ;;
-
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      m4_if([$1], [GCJ], [],
-       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-       # +Z the default
-       ;;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-       ;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
-       ;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-       # which looks to be a dead project)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      xl*)
-       # IBM XL C 8.0/Fortran 10.1 on PPC
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-       ;;
-      *)
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)
-         # Sun C 5.9
-         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-         ;;
-       *Sun\ F*)
-         # Sun Fortran 8.3 passes all unrecognized flags to the linker
-         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
-         ;;
-       esac
-       ;;
-      esac
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-       [How to pass a linker flag through the compiler])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
-       [Additional compiler flags for building library objects])
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
-       [Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[[4-9]]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-  ;;
-  *)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-], [
-  runpath_var=
-  _LT_TAGVAR(allow_undefined_flag, $1)=
-  _LT_TAGVAR(always_export_symbols, $1)=no
-  _LT_TAGVAR(archive_cmds, $1)=
-  _LT_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_TAGVAR(compiler_needs_object, $1)=no
-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(hardcode_automatic, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(inherit_rpath, $1)=no
-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_TAGVAR(module_cmds, $1)=
-  _LT_TAGVAR(module_expsym_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
-  esac
-
-  _LT_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[[3-9]]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=no
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-       # If the export-symbols file already is a .def file (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-         cp $export_symbols $output_objdir/$soname.def;
-       else
-         echo EXPORTS > $output_objdir/$soname.def;
-         cat $export_symbols >> $output_objdir/$soname.def;
-       fi~
-       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    interix[[3-9]]*)
-      _LT_TAGVAR(hardcode_direct, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-       case $cc_basename in
-         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
-       esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-        && test "$tmp_diet" = no
-      then
-       tmp_addflag=
-       tmp_sharedflag='-shared'
-       case $cc_basename,$host_cpu in
-        pgcc*)                         # Portland Group C compiler
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag'
-         ;;
-       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag -Mnomain' ;;
-       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
-         tmp_addflag=' -i_dynamic' ;;
-       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
-         tmp_addflag=' -i_dynamic -nofor_main' ;;
-       ifc* | ifort*)                  # Intel Fortran compiler
-         tmp_addflag=' -nofor_main' ;;
-       lf95*)                          # Lahey Fortran 8.1
-         _LT_TAGVAR(whole_archive_flag_spec, $1)=
-         tmp_sharedflag='--shared' ;;
-       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
-         tmp_sharedflag='-qmkshrobj'
-         tmp_addflag= ;;
-       esac
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)                       # Sun C 5.9
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-         _LT_TAGVAR(compiler_needs_object, $1)=yes
-         tmp_sharedflag='-G' ;;
-       *Sun\ F*)                       # Sun Fortran 8.3
-         tmp_sharedflag='-G' ;;
-       esac
-       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-           echo "local: *; };" >> $output_objdir/$libname.ver~
-           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-       case $cc_basename in
-       xlf*)
-         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-         if test "x$supports_anon_versioning" = xyes; then
-           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-             echo "local: *; };" >> $output_objdir/$libname.ver~
-             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-         fi
-         ;;
-       esac
-      else
-        _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-       wlarc=
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-       ;;
-       *)
-         # For security reasons, it is highly recommended that you always
-         # use absolute paths for naming shared libraries, and exclude the
-         # DT_RUNPATH tag from executables and libraries.  But doing so
-         # requires that you compile everything twice, which is a pain.
-         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-         else
-           _LT_TAGVAR(ld_shlibs, $1)=no
-         fi
-       ;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       _LT_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
-       # On IA64, the linker does run time linking by default, so we don't
-       # have to do anything special.
-       aix_use_runtimelinking=no
-       exp_sym_flag='-Bexport'
-       no_entry_flag=""
-      else
-       # If we're using GNU nm, then we don't want the "-C" option.
-       # -C means demangle to AIX nm, but means don't demangle with GNU nm
-       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-       else
-         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-       fi
-       aix_use_runtimelinking=no
-
-       # Test if we are trying to use run time linking or normal
-       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-       # need to do runtime linking.
-       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-         for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-           aix_use_runtimelinking=yes
-           break
-         fi
-         done
-         ;;
-       esac
-
-       exp_sym_flag='-bexport'
-       no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_TAGVAR(archive_cmds, $1)=''
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-      if test "$GCC" = yes; then
-       case $host_os in aix4.[[012]]|aix4.[[012]].*)
-       # We only want to do this on AIX 4.2 and lower, the check
-       # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
-         if test -f "$collect2name" &&
-          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-         then
-         # We have reworked collect2
-         :
-         else
-         # We have old collect2
-         _LT_TAGVAR(hardcode_direct, $1)=unsupported
-         # It fails to find uninstalled libraries when the uninstalled
-         # path is not listed in the libpath.  Setting hardcode_minus_L
-         # to unsupported forces relinking
-         _LT_TAGVAR(hardcode_minus_L, $1)=yes
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-         _LT_TAGVAR(hardcode_libdir_separator, $1)=
-         fi
-         ;;
-       esac
-       shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
-       fi
-       _LT_TAGVAR(link_all_deplibs, $1)=no
-      else
-       # not using gcc
-       if test "$host_cpu" = ia64; then
-       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-       # chokes on -Wl,-G. The following line is correct:
-         shared_flag='-G'
-       else
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
-         else
-           shared_flag='${wl}-bM:SRE'
-         fi
-       fi
-      fi
-
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-       # Warning - without using the other runtime loading flags (-brtl),
-       # -berok will link without error, but may produce a broken library.
-       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-       if test "$host_cpu" = ia64; then
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-       else
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-         # Warning - without using the other run time loading flags,
-         # -berok will link without error, but may produce a broken library.
-         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-         # Exported symbols can be pulled into shared objects from archives
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-         # This is similar to how AIX traditionally builds its shared libraries.
-         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-       fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[[45]]*)
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      _LT_DARWIN_LINKER_FEATURES($1)
-      ;;
-
-    dgux*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-       _LT_TAGVAR(hardcode_direct, $1)=yes
-       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-       # hardcode_minus_L: Not really in the search PATH,
-       # but as the default location of the library.
-       _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       case $host_cpu in
-       hppa*64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      else
-       case $host_cpu in
-       hppa*64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      fi
-      if test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       case $host_cpu in
-       hppa*64*|ia64*)
-         _LT_TAGVAR(hardcode_direct, $1)=no
-         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-         ;;
-       *)
-         _LT_TAGVAR(hardcode_direct, $1)=yes
-         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-         # hardcode_minus_L: Not really in the search PATH,
-         # but as the default location of the library.
-         _LT_TAGVAR(hardcode_minus_L, $1)=yes
-         ;;
-       esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       # Try to use the -exported_symbol ld option, if it does not
-       # work, assume that -exports_file does not work either and
-       # implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(inherit_rpath, $1)=yes
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-       _LT_TAGVAR(hardcode_direct, $1)=yes
-       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-       else
-         case $host_os in
-          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-            ;;
-          *)
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-            ;;
-         esac
-       fi
-      else
-       _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-       # Both c and cxx compiler support -rpath directly
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-       case `$CC -V 2>&1` in
-       *"Compilers 5.0"*)
-         wlarc=''
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-         ;;
-       *)
-         wlarc='${wl}'
-         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-         ;;
-       esac
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
-       # The compiler driver will combine and reorder linker options,
-       # but understands `-z linker_flag'.  GCC discards it without `$wl',
-       # but is careful enough not to reorder.
-       # Supported since Solaris 2.6 (maybe 2.5.1?)
-       if test "$GCC" = yes; then
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-       else
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-       fi
-       ;;
-      esac
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-       # Use $CC to link under sequent, because it throws in some extra .o
-       # files that make .init and .fini sections work.
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-       sni)
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-       ;;
-       siemens)
-         ## LD is ld it makes a PLAMLIB
-         ## CC just makes a GrossModule.
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-         _LT_TAGVAR(hardcode_direct, $1)=no
-        ;;
-       motorola)
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-       ;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       _LT_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
-       ;;
-      esac
-    fi
-  fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
-    [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
-    [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
-    [enable_shared_with_static_runtimes], [0],
-    [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
-    [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
-    [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
-    [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
-    [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
-    [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
-    [Commands used to build a loadable module if different from building
-    a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
-    [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
-    [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
-    [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
-    [Flag to hardcode $libdir into a binary during linking.
-    This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
-    [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
-    library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
-    [Set to "yes" if building a shared library automatically hardcodes DIR
-    into the library and all subsequent libraries and executables linked
-    against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
-    [Set to yes if linker adds runtime paths of dependent libraries
-    to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
-    [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
-_LT_TAGDECL([], [always_export_symbols], [0],
-    [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
-    [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
-    [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
-    [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
-    [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [file_list_spec], [1],
-    [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl    [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_SYS_DYNAMIC_LINKER($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-  LT_SYS_DLOPEN_SELF
-  _LT_CMD_STRIPLIB
-
-  # Report which library types will actually be built
-  AC_MSG_CHECKING([if libtool supports shared libraries])
-  AC_MSG_RESULT([$can_build_shared])
-
-  AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  AC_MSG_RESULT([$enable_shared])
-
-  AC_MSG_CHECKING([whether to build static libraries])
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  AC_MSG_RESULT([$enable_static])
-
-  _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-    else
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-      LT_PATH_LD
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-         $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-    _LT_TAGVAR(ld_shlibs, $1)=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-      aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-           for ld_flag in $LDFLAGS; do
-             case $ld_flag in
-             *-brtl*)
-               aix_use_runtimelinking=yes
-               break
-               ;;
-             esac
-           done
-           ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        _LT_TAGVAR(archive_cmds, $1)=''
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
-         if test -f "$collect2name" &&
-            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-         then
-           # We have reworked collect2
-           :
-         else
-           # We have old collect2
-           _LT_TAGVAR(hardcode_direct, $1)=unsupported
-           # It fails to find uninstalled libraries when the uninstalled
-           # path is not listed in the libpath.  Setting hardcode_minus_L
-           # to unsupported forces relinking
-           _LT_TAGVAR(hardcode_minus_L, $1)=yes
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-           _LT_TAGVAR(hardcode_libdir_separator, $1)=
-         fi
-          esac
-          shared_flag='-shared'
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag="$shared_flag "'${wl}-G'
-         fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-         # chokes on -Wl,-G. The following line is correct:
-         shared_flag='-G'
-          else
-           if test "$aix_use_runtimelinking" = yes; then
-             shared_flag='${wl}-G'
-           else
-             shared_flag='${wl}-bM:SRE'
-           fi
-          fi
-        fi
-
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-       # export.
-        _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          _LT_SYS_MODULE_PATH_AIX
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-           # Determine the default libpath from the value encoded in an
-           # empty executable.
-           _LT_SYS_MODULE_PATH_AIX
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-           # Warning - without using the other run time loading flags,
-           # -berok will link without error, but may produce a broken library.
-           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-           # Exported symbols can be pulled into shared objects from archives
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-           # This is similar to how AIX traditionally builds its shared
-           # libraries.
-           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-         # support --undefined.  This deserves some investigation.  FIXME
-         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       else
-         _LT_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-         # FIXME: insert proper C++ library support
-         _LT_TAGVAR(ld_shlibs, $1)=no
-         ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-           cp $export_symbols $output_objdir/$soname.def;
-          else
-           echo EXPORTS > $output_objdir/$soname.def;
-           cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-        _LT_DARWIN_LINKER_FEATURES($1)
-       ;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          ghcx*)
-           # Green Hills C++ Compiler
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          *)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-        esac
-        ;;
-
-      freebsd[[12]]*)
-        # C++ shared libraries reported to be fairly broken before
-       # switch to ELF
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      freebsd-elf*)
-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-                                            # but as the default
-                                            # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            _LT_TAGVAR(ld_shlibs, $1)=no
-            ;;
-          aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              _LT_TAGVAR(ld_shlibs, $1)=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            _LT_TAGVAR(hardcode_direct, $1)=no
-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-            ;;
-          *)
-            _LT_TAGVAR(hardcode_direct, $1)=yes
-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-                                                # but as the default
-                                                # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          aCC*)
-           case $host_cpu in
-             hppa*64*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-               ;;
-             ia64*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-               ;;
-             *)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-               ;;
-           esac
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           #
-           # There doesn't appear to be a way to prevent this compiler from
-           # explicitly linking system object files so we need to strip them
-           # from the output so that they don't get included in the library
-           # dependencies.
-           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-           ;;
-          *)
-           if test "$GXX" = yes; then
-             if test $with_gnu_ld = no; then
-               case $host_cpu in
-                 hppa*64*)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-                   ;;
-                 ia64*)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-                   ;;
-                 *)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-                   ;;
-               esac
-             fi
-           else
-             # FIXME: insert proper C++ library support
-             _LT_TAGVAR(ld_shlibs, $1)=no
-           fi
-           ;;
-        esac
-        ;;
-
-      interix[[3-9]]*)
-       _LT_TAGVAR(hardcode_direct, $1)=no
-       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-       # Instead, shared libraries are loaded at an image base (0x10000000 by
-       # default) and relocated if they conflict, which is a slow very memory
-       # consuming and fragmenting process.  To avoid this, we pick a random,
-       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-       ;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-           # SGI C++
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-           # Archives containing C++ object files must be created using
-           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-           # necessary to make sure instantiated templates are included
-           # in the archive.
-           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-           ;;
-          *)
-           if test "$GXX" = yes; then
-             if test "$with_gnu_ld" = no; then
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-             else
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-             fi
-           fi
-           _LT_TAGVAR(link_all_deplibs, $1)=yes
-           ;;
-        esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(inherit_rpath, $1)=yes
-        ;;
-
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-        case $cc_basename in
-          KCC*)
-           # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-           # KCC will only create a shared library if the output file
-           # ends with ".so" (or ".sl" for HP-UX), so rename the library
-           # to its proper name (with version) after linking.
-           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           #
-           # There doesn't appear to be a way to prevent this compiler from
-           # explicitly linking system object files so we need to strip them
-           # from the output so that they don't get included in the library
-           # dependencies.
-           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-           # Archives containing C++ object files must be created using
-           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-           ;;
-         icpc* | ecpc* )
-           # Intel C++
-           with_gnu_ld=yes
-           # version 8.0 and above of icpc choke on multiply defined symbols
-           # if we add $predep_objects and $postdep_objects, however 7.1 and
-           # earlier do not add the objects themselves.
-           case `$CC -V 2>&1` in
-             *"Version 7."*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-               ;;
-             *)  # Version 8.0 or newer
-               tmp_idyn=
-               case $host_cpu in
-                 ia64*) tmp_idyn=' -i_dynamic';;
-               esac
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-               ;;
-           esac
-           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-           ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-           case `$CC -V` in
-           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
-             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-               $RANLIB $oldlib'
-             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-             ;;
-           *) # Version 6 will use weak symbols
-             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-             ;;
-           esac
-
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-         cxx*)
-           # Compaq C++
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-           runpath_var=LD_RUN_PATH
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           #
-           # There doesn't appear to be a way to prevent this compiler from
-           # explicitly linking system object files so we need to strip them
-           # from the output so that they don't get included in the library
-           # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-           ;;
-         xl*)
-           # IBM XL 8.0 on PPC, with GNU ld
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           if test "x$supports_anon_versioning" = xyes; then
-             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-               echo "local: *; };" >> $output_objdir/$libname.ver~
-               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-           fi
-           ;;
-         *)
-           case `$CC -V 2>&1 | sed 5q` in
-           *Sun\ C*)
-             # Sun C++ 5.9
-             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-             _LT_TAGVAR(compiler_needs_object, $1)=yes
-
-             # Not sure whether something based on
-             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-             # would be better.
-             output_verbose_link_cmd='echo'
-
-             # Archives containing C++ object files must be created using
-             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-             # necessary to make sure instantiated templates are included
-             # in the archive.
-             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-             ;;
-           esac
-           ;;
-       esac
-       ;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       ;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-       ;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-         *)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-       esac
-       ;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-         wlarc=
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-         _LT_TAGVAR(hardcode_direct, $1)=yes
-         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       fi
-       # Workaround some broken pre-1.5 toolchains
-       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-       ;;
-
-      *nto* | *qnx*)
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-       ;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       ;;
-
-      openbsd*)
-       if test -f /usr/libexec/ld.so; then
-         _LT_TAGVAR(hardcode_direct, $1)=yes
-         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-         fi
-         output_verbose_link_cmd=echo
-       else
-         _LT_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-           # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-           # KCC will only create a shared library if the output file
-           # ends with ".so" (or ".sl" for HP-UX), so rename the library
-           # to its proper name (with version) after linking.
-           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-           # Archives containing C++ object files must be created using
-           # the KAI C++ compiler.
-           case $host in
-             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
-             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
-           esac
-           ;;
-          RCC*)
-           # Rational C++ 2.4.1
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          cxx*)
-           case $host in
-             osf3*)
-               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-               ;;
-             *)
-               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-                 echo "-hidden">> $lib.exp~
-                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-                 $RM $lib.exp'
-               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-               ;;
-           esac
-
-           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           #
-           # There doesn't appear to be a way to prevent this compiler from
-           # explicitly linking system object files so we need to strip them
-           # from the output so that they don't get included in the library
-           # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-           ;;
-         *)
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-             case $host in
-               osf3*)
-                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-                 ;;
-               *)
-                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-                 ;;
-             esac
-
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-             # Commands to make compiler produce verbose output that lists
-             # what "hidden" libraries, object files and flags are used when
-             # linking a shared library.
-             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-           else
-             # FIXME: insert proper C++ library support
-             _LT_TAGVAR(ld_shlibs, $1)=no
-           fi
-           ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-           # Sun C++ 4.x
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          lcc*)
-           # Lucid
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          *)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-           # Sun C++ 4.2, 5.x and Centerline C++
-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
-           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-           case $host_os in
-             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-             *)
-               # The compiler driver will combine and reorder linker options,
-               # but understands `-z linker_flag'.
-               # Supported since Solaris 2.6 (maybe 2.5.1?)
-               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-               ;;
-           esac
-           _LT_TAGVAR(link_all_deplibs, $1)=yes
-
-           output_verbose_link_cmd='echo'
-
-           # Archives containing C++ object files must be created using
-           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-           # necessary to make sure instantiated templates are included
-           # in the archive.
-           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-           ;;
-          gcx*)
-           # Green Hills C++ Compiler
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-           # The C++ compiler must be used to create the archive.
-           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-           ;;
-          *)
-           # GNU C++ compiler with Solaris linker
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-               # Commands to make compiler produce verbose output that lists
-               # what "hidden" libraries, object files and flags are used when
-               # linking a shared library.
-               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-             else
-               # g++ 2.7 appears to require `-G' NOT `-shared' on this
-               # platform.
-               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-               # Commands to make compiler produce verbose output that lists
-               # what "hidden" libraries, object files and flags are used when
-               # linking a shared library.
-               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-             fi
-
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-             case $host_os in
-               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-               *)
-                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-                 ;;
-             esac
-           fi
-           ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-       # Note: We can NOT use -z defs as we might desire, because we do not
-       # link with -lc, and that would cause any symbols used from libc to
-       # always be unresolved, which means just about no library would
-       # ever link correctly.  If we're not using GNU ld we use -z text
-       # though, which does catch some bad symbols but isn't as heavy-handed
-       # as -z defs.
-       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-       _LT_TAGVAR(link_all_deplibs, $1)=yes
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-       runpath_var='LD_RUN_PATH'
-
-       case $cc_basename in
-          CC*)
-           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           ;;
-         *)
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           ;;
-       esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-           # NonStop-UX NCC 3.20
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-          *)
-           # FIXME: insert proper C++ library support
-           _LT_TAGVAR(ld_shlibs, $1)=no
-           ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-    esac
-
-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-_LT_EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-        prev=$p
-        continue
-       else
-        prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-        case $p in
-        -L* | -R*)
-          # Internal compiler library paths should come after those
-          # provided the user.  The postdeps already come after the
-          # user supplied libs so there is no need to process them.
-          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-          else
-            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-          fi
-          ;;
-        # The "-l" case would never come before the object being
-        # linked, so don't bother handling this case.
-        esac
-       else
-        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
-        else
-          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
-        fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-        pre_test_object_deps_done=yes
-        continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-          _LT_TAGVAR(predep_objects, $1)="$p"
-        else
-          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
-        fi
-       else
-        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-          _LT_TAGVAR(postdep_objects, $1)="$p"
-        else
-          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
-        fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  _LT_TAGVAR(predep_objects,$1)=
-  _LT_TAGVAR(postdep_objects,$1)=
-  _LT_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
-    [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
-    [Dependencies to place before and after the objects being linked to
-    create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
-    [The library search path used internally by the compiler when linking
-    a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${F77-"f77"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-  GCC=$G77
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-         test "$enable_shared" = yes && enable_static=no
-       fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${FC-"f95"}
-  compiler=$CC
-  GCC=$ac_cv_fc_compiler_gnu
-
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-         test "$enable_shared" = yes && enable_static=no
-       fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC="$lt_save_CC"
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
-  :
-  _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
-    [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-      AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_OBJDUMP
-# --------------
-# If we don't have a new enough Autoconf to choose the best objdump
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_OBJDUMP],
-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
-AC_SUBST([OBJDUMP])
-])
-
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
-    ;;
-  esac
-])
-
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-                     [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-                  [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_shared=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-       [Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_static=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-       [Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_fast_install=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-        [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
-       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-                [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-                [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-                [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-                [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-                [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-            [m4_foreach([_Lt_suffix],
-               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-                [lt_append([$1], [$2], [$3])$4],
-                [$5])],
-         [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-       [$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers                      -*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 3017 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
-# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-# 
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
-AC_DEFUN([PKG_PROG_PKG_CONFIG],
-[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
-AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
-       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-fi
-if test -n "$PKG_CONFIG"; then
-       _pkg_min_version=m4_default([$1], [0.9.0])
-       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
-       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-               AC_MSG_RESULT([yes])
-       else
-               AC_MSG_RESULT([no])
-               PKG_CONFIG=""
-       fi
-               
-fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists.  Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-#
-# Similar to PKG_CHECK_MODULES, make sure that the first instance of
-# this or PKG_CHECK_MODULES is called, or make sure to call
-# PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_EXISTS],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-if test -n "$PKG_CONFIG" && \
-    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
-  m4_ifval([$2], [$2], [:])
-m4_ifvaln([$3], [else
-  $3])dnl
-fi])
-
-
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
-m4_define([_PKG_CONFIG],
-[if test -n "$PKG_CONFIG"; then
-    if test -n "$$1"; then
-        pkg_cv_[]$1="$$1"
-    else
-        PKG_CHECK_EXISTS([$3],
-                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
-                        [pkg_failed=yes])
-    fi
-else
-       pkg_failed=untried
-fi[]dnl
-])# _PKG_CONFIG
-
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
-AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
-
-
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_MODULES],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-
-pkg_failed=no
-AC_MSG_CHECKING([for $1])
-
-_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test $pkg_failed = yes; then
-        _PKG_SHORT_ERRORS_SUPPORTED
-        if test $_pkg_short_errors_supported = yes; then
-               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
-        else 
-               $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-        fi
-       # Put the nasty error message in config.log where it belongs
-       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-
-       ifelse([$4], , [AC_MSG_ERROR(dnl
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT
-])],
-               [AC_MSG_RESULT([no])
-                $4])
-elif test $pkg_failed = untried; then
-       ifelse([$4], , [AC_MSG_FAILURE(dnl
-[The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
-               [$4])
-else
-       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
-       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
-        AC_MSG_RESULT([yes])
-       ifelse([$3], , :, [$3])
-fi[]dnl
-])# PKG_CHECK_MODULES
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
@@ -8158,7 +38,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 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.11.1], [],
+m4_if([$1], [1.11.3], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -8174,19 +54,21 @@ m4_define([_AM_AUTOCONF_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.11.1])dnl
+[AM_AUTOMAKE_VERSION([1.11.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, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # 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/../..'.
@@ -8268,14 +150,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 10
+# serial 12
 
 # 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,
@@ -8315,6 +197,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # 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.
@@ -8379,7 +262,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
        break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    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.
@@ -8444,10 +327,13 @@ AC_DEFUN([AM_DEP_TRACK],
 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 -*-
@@ -8669,12 +555,15 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -8841,12 +730,15 @@ else
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_MKDIR_P
 # ---------------
 # Check for `mkdir -p'.
@@ -8869,13 +761,14 @@ esac
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 5
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -8883,13 +776,13 @@ 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)])])
@@ -8965,13 +858,13 @@ Check your system clock])
 fi
 AC_MSG_RESULT(yes)])
 
-# Copyright (C) 2009  Free Software Foundation, Inc.
+# Copyright (C) 2009, 2011  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
+# serial 2
 
 # AM_SILENT_RULES([DEFAULT])
 # --------------------------
@@ -8986,18 +879,50 @@ 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, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_INSTALL_STRIP
 # ---------------------
 # One issue with vendor `install' (even GNU) is that you can't
@@ -9020,13 +945,13 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -9035,13 +960,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9063,10 +988,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# 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}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
@@ -9135,3 +1061,10 @@ AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
+m4_include([m4/ax_pthread.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/pkg.m4])
index 833a621..47640c3 100755 (executable)
@@ -7,12 +7,6 @@ test -n "$srcdir" || srcdir=.
 olddir=`pwd`
 cd $srcdir
 
-echo -n "checking for ragel... "
-which ragel || {
-       echo "You need to install ragel... See http://www.complang.org/ragel/"
-       exit 1
-}
-
 echo -n "checking for pkg-config... "
 which pkg-config || {
        echo "*** No pkg-config found, please install it ***"
diff --git a/compile b/compile
index c0096a7..b1f4749 100755 (executable)
--- a/compile
+++ b/compile
@@ -1,10 +1,10 @@
 #! /bin/sh
-# Wrapper for compilers which do not understand `-c -o'.
+# Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2009-10-06.20; # UTC
+scriptversion=2012-01-04.17; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
-# Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
+# Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -29,21 +29,186 @@ scriptversion=2009-10-06.20; # UTC
 # bugs to <bug-automake@gnu.org> or send patches to
 # <automake-patches@gnu.org>.
 
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""       $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+       # lazily determine how to convert abs files
+       case `uname -s` in
+         MINGW*)
+           file_conv=mingw
+           ;;
+         CYGWIN*)
+           file_conv=cygwin
+           ;;
+         *)
+           file_conv=wine
+           ;;
+       esac
+      fi
+      case $file_conv/,$2, in
+       *,$file_conv,*)
+         ;;
+       mingw/*)
+         file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+         ;;
+       cygwin/*)
+         file=`cygpath -m "$file" || echo "$file"`
+         ;;
+       wine/*)
+         file=`winepath -w "$file" || echo "$file"`
+         ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+       -o)
+         # configure might choose to run compile as 'compile cc -o foo foo.c'.
+         eat=1
+         case $2 in
+           *.o | *.[oO][bB][jJ])
+             func_file_conv "$2"
+             set x "$@" -Fo"$file"
+             shift
+             ;;
+           *)
+             func_file_conv "$2"
+             set x "$@" -Fe"$file"
+             shift
+             ;;
+         esac
+         ;;
+       -I*)
+         func_file_conv "${1#-I}" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
+       -l*)
+         lib=${1#-l}
+         found=no
+         save_IFS=$IFS
+         IFS=';'
+         for dir in $lib_path $LIB
+         do
+           IFS=$save_IFS
+           if $shared && test -f "$dir/$lib.dll.lib"; then
+             found=yes
+             set x "$@" "$dir/$lib.dll.lib"
+             break
+           fi
+           if test -f "$dir/$lib.lib"; then
+             found=yes
+             set x "$@" "$dir/$lib.lib"
+             break
+           fi
+         done
+         IFS=$save_IFS
+
+         test "$found" != yes && set x "$@" "$lib.lib"
+         shift
+         ;;
+       -L*)
+         func_file_conv "${1#-L}"
+         if test -z "$lib_path"; then
+           lib_path=$file
+         else
+           lib_path="$lib_path;$file"
+         fi
+         linker_opts="$linker_opts -LIBPATH:$file"
+         ;;
+       -static)
+         shared=false
+         ;;
+       -Wl,*)
+         arg=${1#-Wl,}
+         save_ifs="$IFS"; IFS=','
+         for flag in $arg; do
+           IFS="$save_ifs"
+           linker_opts="$linker_opts $flag"
+         done
+         IFS="$save_ifs"
+         ;;
+       -Xlinker)
+         eat=1
+         linker_opts="$linker_opts $2"
+         ;;
+       -*)
+         set x "$@" "$1"
+         shift
+         ;;
+       *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+         func_file_conv "$1"
+         set x "$@" -Tp"$file"
+         shift
+         ;;
+       *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+         func_file_conv "$1" mingw
+         set x "$@" "$file"
+         shift
+         ;;
+       *)
+         set x "$@" "$1"
+         shift
+         ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
      exit 1;
      ;;
   -h | --h*)
     cat <<\EOF
 Usage: compile [--help] [--version] PROGRAM [ARGS]
 
-Wrapper for compilers which do not understand `-c -o'.
-Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
 arguments, and rename the output as expected.
 
 If you are trying to build a whole package this is not the
-right script to run: please start by reading the file `INSTALL'.
+right script to run: please start by reading the file 'INSTALL'.
 
 Report bugs to <bug-automake@gnu.org>.
 EOF
@@ -53,11 +218,13 @@ EOF
     echo "compile $scriptversion"
     exit $?
     ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
 esac
 
 ofile=
 cfile=
-eat=
 
 for arg
 do
@@ -66,8 +233,8 @@ do
   else
     case $1 in
       -o)
-       # configure might choose to run compile as `compile cc -o foo foo.c'.
-       # So we strip `-o arg' only if arg is an object.
+       # configure might choose to run compile as 'compile cc -o foo foo.c'.
+       # So we strip '-o arg' only if arg is an object.
        eat=1
        case $2 in
          *.o | *.obj)
@@ -94,10 +261,10 @@ do
 done
 
 if test -z "$ofile" || test -z "$cfile"; then
-  # If no `-o' option was seen then we might have been invoked from a
+  # If no '-o' option was seen then we might have been invoked from a
   # pattern rule where we don't need one.  That is ok -- this is a
   # normal compilation that the losing compiler can handle.  If no
-  # `.c' file was seen then we are probably linking.  That is also
+  # '.c' file was seen then we are probably linking.  That is also
   # ok.
   exec "$@"
 fi
@@ -106,7 +273,7 @@ fi
 cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
 
 # Create the lock directory.
-# Note: use `[/\\:.-]' here to ensure that we don't use the same name
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
 # that we are using for the .o file.  Also, base the name on the expected
 # object file name, since that is what matters with a parallel build.
 lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
index e3a2116..d622a44 100755 (executable)
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-06-10'
+timestamp='2012-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,9 +17,7 @@ timestamp='2009-06-10'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,16 +25,16 @@ timestamp='2009-06-10'
 # the same distribution terms that you use for the rest of that program.
 
 
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # exits with 0.  Otherwise, it exits with 1.
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -56,8 +54,9 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
        # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
        # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
        # switched to ELF, *-*-netbsd* would select the old
        # object file format.  This provides both forward
@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                fi
                ;;
            *)
-               os=netbsd
+               os=netbsd
                ;;
        esac
        # The OS release
@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
                ;;
        *5.*)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
                ;;
        esac
        # According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
        echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       exit ;;
+       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+       exitcode=$?
+       trap '' 0
+       exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
        # How do we know it's Interix rather than the generic POSIX subsystem?
        # Should we change UNAME_MACHINE based on the output of uname instead
@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        echo s390-ibm-zvmoe
        exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+       echo powerpc-ibm-os400
        exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
        echo arm-acorn-riscix${UNAME_RELEASE}
@@ -333,6 +335,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
        echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
        exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+       echo i386-pc-auroraux${UNAME_RELEASE}
+       exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
        eval $set_cc_for_build
        SUN_ARCH="i386"
@@ -391,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint${UNAME_RELEASE}
        exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
        echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+       exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint${UNAME_RELEASE}
        exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-milan-mint${UNAME_RELEASE}
+       exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-hades-mint${UNAME_RELEASE}
+       exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-unknown-mint${UNAME_RELEASE}
+       exit ;;
     m68k:machten:*:*)
        echo m68k-apple-machten${UNAME_RELEASE}
        exit ;;
@@ -477,8 +482,8 @@ EOF
        echo m88k-motorola-sysv3
        exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       # DG/UX returns AViiON for all architectures
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
        if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
        then
            if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -491,7 +496,7 @@ EOF
        else
            echo i586-dg-dgux${UNAME_RELEASE}
        fi
-       exit ;;
+       exit ;;
     M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
        echo m88k-dolphin-sysv3
        exit ;;
@@ -548,7 +553,7 @@ EOF
                echo rs6000-ibm-aix3.2
        fi
        exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[4567])
        IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
        if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
                IBM_ARCH=rs6000
@@ -591,52 +596,52 @@ EOF
            9000/[678][0-9][0-9])
                if [ -x /usr/bin/getconf ]; then
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                   case "${sc_cpu_version}" in
+                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                     532)                      # CPU_PA_RISC2_0
+                       case "${sc_kernel_bits}" in
+                         32) HP_ARCH="hppa2.0n" ;;
+                         64) HP_ARCH="hppa2.0w" ;;
                          '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+                       esac ;;
+                   esac
                fi
                if [ "${HP_ARCH}" = "" ]; then
                    eval $set_cc_for_build
-                   sed 's/^              //' << EOF >$dummy.c
+                   sed 's/^            //' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+               #define _HPUX_SOURCE
+               #include <stdlib.h>
+               #include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+               int main ()
+               {
+               #if defined(_SC_KERNEL_BITS)
+                   long bits = sysconf(_SC_KERNEL_BITS);
+               #endif
+                   long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-               {
-               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-                   switch (bits)
-                       {
-                       case 64: puts ("hppa2.0w"); break;
-                       case 32: puts ("hppa2.0n"); break;
-                       default: puts ("hppa2.0"); break;
-                       } break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-                   puts ("hppa2.0"); break;
-              #endif
-               default: puts ("hppa1.0"); break;
-               }
-                  exit (0);
-              }
+                   switch (cpu)
+                       {
+                       case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+                       case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+                       case CPU_PA_RISC2_0:
+               #if defined(_SC_KERNEL_BITS)
+                           switch (bits)
+                               {
+                               case 64: puts ("hppa2.0w"); break;
+                               case 32: puts ("hppa2.0n"); break;
+                               default: puts ("hppa2.0"); break;
+                               } break;
+               #else  /* !defined(_SC_KERNEL_BITS) */
+                           puts ("hppa2.0"); break;
+               #endif
+                       default: puts ("hppa1.0"); break;
+                       }
+                   exit (0);
+               }
 EOF
                    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -727,22 +732,22 @@ EOF
        exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
        echo c1-convex-bsd
-        exit ;;
+       exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
        if getsysinfo -f scalar_acc
        then echo c32-convex-bsd
        else echo c2-convex-bsd
        fi
-        exit ;;
+       exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
        echo c34-convex-bsd
-        exit ;;
+       exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
        echo c38-convex-bsd
-        exit ;;
+       exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
        echo c4-convex-bsd
-        exit ;;
+       exit ;;
     CRAY*Y-MP:*:*:*)
        echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
        exit ;;
@@ -766,14 +771,14 @@ EOF
        exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
        FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
        echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -785,13 +790,12 @@ EOF
        echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
        exit ;;
     *:FreeBSD:*:*)
-       case ${UNAME_MACHINE} in
-           pc98)
-               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       case ${UNAME_PROCESSOR} in
            amd64)
                echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
            *)
-               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
        esac
        exit ;;
     i*:CYGWIN*:*)
@@ -800,19 +804,22 @@ EOF
     *:MINGW*:*)
        echo ${UNAME_MACHINE}-pc-mingw32
        exit ;;
+    i*:MSYS*:*)
+       echo ${UNAME_MACHINE}-pc-msys
+       exit ;;
     i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
        exit ;;
     i*:PW*:*)
        echo ${UNAME_MACHINE}-pc-pw32
        exit ;;
-    *:Interix*:[3456]*)
-       case ${UNAME_MACHINE} in
+    *:Interix*:*)
+       case ${UNAME_MACHINE} in
            x86)
                echo i586-pc-interix${UNAME_RELEASE}
                exit ;;
-           EM64T | authenticamd | genuineintel)
+           authenticamd | genuineintel | EM64T)
                echo x86_64-unknown-interix${UNAME_RELEASE}
                exit ;;
            IA64)
@@ -854,6 +861,27 @@ EOF
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
        exit ;;
+    aarch64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    aarch64_be:Linux:*:*)
+       UNAME_MACHINE=aarch64_be
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+       esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
     arm*:Linux:*:*)
        eval $set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -861,20 +889,40 @@ EOF
        then
            echo ${UNAME_MACHINE}-unknown-linux-gnu
        else
-           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+               | grep -q __ARM_PCS_VFP
+           then
+               echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+           else
+               echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+           fi
        fi
        exit ;;
     avr32*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     cris:Linux:*:*)
-       echo cris-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-gnu
        exit ;;
     crisv32:Linux:*:*)
-       echo crisv32-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-gnu
        exit ;;
     frv:Linux:*:*)
-       echo frv-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    hexagon:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       LIBC=gnu
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
        exit ;;
     ia64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -901,39 +949,18 @@ EOF
        #endif
        #endif
 EOF
-       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-           /^CPU/{
-               s: ::g
-               p
-           }'`"
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
        test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
        ;;
     or32:Linux:*:*)
-       echo or32-unknown-linux-gnu
-       exit ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
-       exit ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
-       exit ;;
-    alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-         EV5)   UNAME_MACHINE=alphaev5 ;;
-         EV56)  UNAME_MACHINE=alphaev56 ;;
-         PCA56) UNAME_MACHINE=alphapca56 ;;
-         PCA57) UNAME_MACHINE=alphapca56 ;;
-         EV6)   UNAME_MACHINE=alphaev6 ;;
-         EV67)  UNAME_MACHINE=alphaev67 ;;
-         EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-       objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     padre:Linux:*:*)
        echo sparc-unknown-linux-gnu
        exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
        case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -942,14 +969,17 @@ EOF
          *)    echo hppa-unknown-linux-gnu ;;
        esac
        exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
        exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
        echo ${UNAME_MACHINE}-ibm-linux
        exit ;;
     sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     sh*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -957,67 +987,18 @@ EOF
     sparc:Linux:*:* | sparc64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
+    tile*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
     vax:Linux:*:*)
        echo ${UNAME_MACHINE}-dec-linux-gnu
        exit ;;
     x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
-    i*86:Linux:*:*)
-       # The BFD linker knows what the default object file format is, so
-       # first see if it will tell us. cd to the root directory to prevent
-       # problems with other programs or directories called `ld' in the path.
-       # Set LC_ALL=C to ensure ld outputs messages in English.
-       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-                        | sed -ne '/supported targets:/!d
-                                   s/[         ][      ]*/ /g
-                                   s/.*supported targets: *//
-                                   s/ .*//
-                                   p'`
-        case "$ld_supported_targets" in
-         elf32-i386)
-               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-               ;;
-       esac
-       # Determine whether the default compiler is a.out or elf
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <features.h>
-       #ifdef __ELF__
-       # ifdef __GLIBC__
-       #  if __GLIBC__ >= 2
-       LIBC=gnu
-       #  else
-       LIBC=gnulibc1
-       #  endif
-       # else
-       LIBC=gnulibc1
-       # endif
-       #else
-       #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-       LIBC=gnu
-       #else
-       LIBC=gnuaout
-       #endif
-       #endif
-       #ifdef __dietlibc__
-       LIBC=dietlibc
-       #endif
-EOF
-       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-           /^LIBC/{
-               s: ::g
-               p
-           }'`"
-       test x"${LIBC}" != x && {
-               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-               exit
-       }
-       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-       ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
        # earlier versions are messed up and put the nodename in both
@@ -1025,11 +1006,11 @@ EOF
        echo i386-sequent-sysv4
        exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+       # Unixware is an offshoot of SVR4, but it has its own version
+       # number series starting with 2...
+       # I am not positive that other SVR4 systems won't match this,
        # I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+       # Use sysv4.2uw... so that sysv4* matches it.
        echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
        exit ;;
     i*86:OS/2:*:*)
@@ -1061,7 +1042,7 @@ EOF
        fi
        exit ;;
     i*86:*:5:[678]*)
-       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
        case `/bin/uname -X | grep "^Machine"` in
            *486*)           UNAME_MACHINE=i486 ;;
            *Pentium)        UNAME_MACHINE=i586 ;;
@@ -1089,13 +1070,13 @@ EOF
        exit ;;
     pc:*:*:*)
        # Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
+       # uname -m prints for DJGPP always 'pc', but it prints nothing about
+       # the processor, so we play safe by assuming i586.
        # Note: whatever this is, it MUST be the same as what config.sub
        # prints for the "djgpp" host, or else GDB configury will decide that
        # this is a cross-build.
        echo i586-pc-msdosdjgpp
-        exit ;;
+       exit ;;
     Intel:Mach:3*:*)
        echo i386-pc-mach3
        exit ;;
@@ -1130,8 +1111,8 @@ EOF
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
          && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4; exit; } ;;
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
        OS_REL='.3'
        test -r /etc/.relid \
@@ -1174,10 +1155,10 @@ EOF
                echo ns32k-sni-sysv
        fi
        exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                       # says <Richard.M.Bartel@ccMail.Census.GOV>
+       echo i586-unisys-sysv4
+       exit ;;
     *:UNIX_System_V:4*:FTX*)
        # From Gerald Hewes <hewes@openmarket.com>.
        # How about differentiating between stratus architectures? -djm
@@ -1203,11 +1184,11 @@ EOF
        exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
        if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
+               echo mips-nec-sysv${UNAME_RELEASE}
        else
-               echo mips-unknown-sysv${UNAME_RELEASE}
+               echo mips-unknown-sysv${UNAME_RELEASE}
        fi
-        exit ;;
+       exit ;;
     BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
        echo powerpc-be-beos
        exit ;;
@@ -1247,6 +1228,16 @@ EOF
     *:Darwin:*:*)
        UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
        case $UNAME_PROCESSOR in
+           i386)
+               eval $set_cc_for_build
+               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                     grep IS_64BIT_ARCH >/dev/null
+                 then
+                     UNAME_PROCESSOR="x86_64"
+                 fi
+               fi ;;
            unknown) UNAME_PROCESSOR=powerpc ;;
        esac
        echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
@@ -1262,6 +1253,9 @@ EOF
     *:QNX:*:4*)
        echo i386-pc-qnx
        exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+       echo neo-tandem-nsk${UNAME_RELEASE}
+       exit ;;
     NSE-?:NONSTOP_KERNEL:*:*)
        echo nse-tandem-nsk${UNAME_RELEASE}
        exit ;;
@@ -1307,13 +1301,13 @@ EOF
        echo pdp10-unknown-its
        exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+       echo mips-sei-seiux${UNAME_RELEASE}
        exit ;;
     *:DragonFly:*:*)
        echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
        exit ;;
     *:*VMS:*:*)
-       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
        case "${UNAME_MACHINE}" in
            A*) echo alpha-dec-vms ; exit ;;
            I*) echo ia64-dec-vms ; exit ;;
@@ -1331,6 +1325,9 @@ EOF
     i*86:AROS:*:*)
        echo ${UNAME_MACHINE}-pc-aros
        exit ;;
+    x86_64:VMkernel:*:*)
+       echo ${UNAME_MACHINE}-unknown-esx
+       exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1353,11 +1350,11 @@ main ()
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+       "4"
 #else
-         ""
+       ""
 #endif
-         ); exit (0);
+       ); exit (0);
 #endif
 #endif
 
index 0b5876e..4b5c99a 100644 (file)
@@ -1,9 +1,5 @@
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
-/* Define to 1 if you have the <ApplicationServices/ApplicationServices.h>
-   header file. */
-#undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
-
 /* Define to 1 if you have the `atexit' function. */
 #undef HAVE_ATEXIT
 
@@ -46,6 +42,9 @@
 /* Have ICU library */
 #undef HAVE_ICU
 
+/* Have ICU Layout Engine library */
+#undef HAVE_ICU_LE
+
 /* Have Intel __sync_* atomic primitives */
 #undef HAVE_INTEL_ATOMIC_PRIMITIVES
 
 /* Have native OpenType Layout backend */
 #undef HAVE_OT
 
+/* Have POSIX threads */
+#undef HAVE_PTHREAD
+
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
+
 /* Define to 1 if you have the <sched.h> header file. */
 #undef HAVE_SCHED_H
 
-/* Define to 1 if you have the `sched_yield' function. */
+/* Have sched_yield */
 #undef HAVE_SCHED_YIELD
 
+/* Have Solaris __machine_*_barrier and atomic_* operations */
+#undef HAVE_SOLARIS_ATOMIC_OPS
+
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Have UCDN Unicode functions */
+#undef HAVE_UCDN
+
 /* Have Uniscribe backend */
 #undef HAVE_UNISCRIBE
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
-/* Define to 1 if you have the <usp10.h> header file. */
-#undef HAVE_USP10_H
-
-/* Define to 1 if you have the <windows.h> header file. */
-#undef HAVE_WINDOWS_H
-
 /* Define to 1 if you have the `_setmode' function. */
 #undef HAVE__SETMODE
 
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
+/* Define to necessary symbol if this constant uses a non-standard name on
+   your system. */
+#undef PTHREAD_CREATE_JOINABLE
+
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
index eb0389a..c894da4 100755 (executable)
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-06-11'
+timestamp='2012-02-10'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2009-06-11'
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -32,13 +30,16 @@ timestamp='2009-06-11'
 
 
 # Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -72,8 +73,9 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -120,13 +122,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -149,12 +156,12 @@ case $os in
        -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
        -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
        -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray)
+       -apple | -axis | -knuth | -cray | -microblaze)
                os=
                basic_machine=$1
                ;;
-        -bluegene*)
-               os=-cnk
+       -bluegene*)
+               os=-cnk
                ;;
        -sim | -cisco | -oki | -wec | -winbond)
                os=
@@ -170,10 +177,10 @@ case $os in
                os=-chorusos
                basic_machine=$1
                ;;
-       -chorusrdb)
-               os=-chorusrdb
+       -chorusrdb)
+               os=-chorusrdb
                basic_machine=$1
-               ;;
+               ;;
        -hiux*)
                os=-hiuxwe2
                ;;
@@ -242,17 +249,22 @@ case $basic_machine in
        # Some are omitted here because they have special meanings below.
        1750a | 580 \
        | a29k \
+       | aarch64 | aarch64_be \
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
        | am33_2.0 \
        | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
        | bfin \
        | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
+       | epiphany \
        | fido | fr30 | frv \
        | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | hexagon \
        | i370 | i860 | i960 | ia64 \
        | ip2k | iq2000 \
+       | le32 | le64 \
        | lm32 \
        | m32c | m32r | m32rle | m68000 | m68k | m88k \
        | maxq | mb | microblaze | mcore | mep | metag \
@@ -278,27 +290,39 @@ case $basic_machine in
        | moxie \
        | mt \
        | msp430 \
+       | nds32 | nds32le | nds32be \
        | nios | nios2 \
        | ns16k | ns32k \
+       | open8 \
        | or32 \
        | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | powerpc | powerpc64 | powerpc64le | powerpcle \
        | pyramid \
+       | rl78 | rx \
        | score \
        | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
        | sh64 | sh64le \
        | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
        | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu | strongarm \
-       | tahoe | thumb | tic4x | tic80 | tron \
-       | v850 | v850e \
+       | spu \
+       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+       | ubicom32 \
+       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
        | we32k \
-       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | x86 | xc16x | xstormy16 | xtensa \
        | z8k | z80)
                basic_machine=$basic_machine-unknown
                ;;
-       m6811 | m68hc11 | m6812 | m68hc12)
-               # Motorola 68HC11/12.
+       c54x)
+               basic_machine=tic54x-unknown
+               ;;
+       c55x)
+               basic_machine=tic55x-unknown
+               ;;
+       c6x)
+               basic_machine=tic6x-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
                basic_machine=$basic_machine-unknown
                os=-none
                ;;
@@ -308,6 +332,21 @@ case $basic_machine in
                basic_machine=mt-unknown
                ;;
 
+       strongarm | thumb | xscale)
+               basic_machine=arm-unknown
+               ;;
+       xgate)
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       xscaleeb)
+               basic_machine=armeb-unknown
+               ;;
+
+       xscaleel)
+               basic_machine=armel-unknown
+               ;;
+
        # We use `pc' rather than `unknown'
        # because (1) that's what they normally are, and
        # (2) the word "unknown" tends to confuse beginning users.
@@ -322,25 +361,29 @@ case $basic_machine in
        # Recognize the basic CPU types with company name.
        580-* \
        | a29k-* \
+       | aarch64-* | aarch64_be-* \
        | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
        | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
        | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
+       | be32-* | be64-* \
        | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* \
        | clipper-* | craynv-* | cydra-* \
        | d10v-* | d30v-* | dlx-* \
        | elxsi-* \
        | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | hexagon-* \
        | i*86-* | i860-* | i960-* | ia64-* \
        | ip2k-* | iq2000-* \
+       | le32-* | le64-* \
        | lm32-* \
        | m32c-* | m32r-* | m32rle-* \
        | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
        | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
        | mips16-* \
        | mips64-* | mips64el-* \
@@ -362,24 +405,29 @@ case $basic_machine in
        | mmix-* \
        | mt-* \
        | msp430-* \
+       | nds32-* | nds32le-* | nds32be-* \
        | nios-* | nios2-* \
        | none-* | np1-* | ns16k-* | ns32k-* \
+       | open8-* \
        | orion-* \
        | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
        | pyramid-* \
-       | romp-* | rs6000-* \
+       | rl78-* | romp-* | rs6000-* | rx-* \
        | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
        | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
        | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
        | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-       | tahoe-* | thumb-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+       | tahoe-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tile*-* \
        | tron-* \
-       | v850-* | v850e-* | vax-* \
+       | ubicom32-* \
+       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+       | vax-* \
        | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* \
        | xstormy16-* | xtensa*-* \
        | ymp-* \
        | z8k-* | z80-*)
@@ -404,7 +452,7 @@ case $basic_machine in
                basic_machine=a29k-amd
                os=-udi
                ;;
-       abacus)
+       abacus)
                basic_machine=abacus-unknown
                ;;
        adobe68k)
@@ -474,11 +522,20 @@ case $basic_machine in
                basic_machine=powerpc-ibm
                os=-cnk
                ;;
+       c54x-*)
+               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c55x-*)
+               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c6x-*)
+               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
        c90)
                basic_machine=c90-cray
                os=-unicos
                ;;
-        cegcc)
+       cegcc)
                basic_machine=arm-unknown
                os=-cegcc
                ;;
@@ -510,7 +567,7 @@ case $basic_machine in
                basic_machine=craynv-cray
                os=-unicosmp
                ;;
-       cr16)
+       cr16 | cr16-*)
                basic_machine=cr16-unknown
                os=-elf
                ;;
@@ -668,7 +725,6 @@ case $basic_machine in
        i370-ibm* | ibm*)
                basic_machine=i370-ibm
                ;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
        i*86v32)
                basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
                os=-sysv32
@@ -726,6 +782,9 @@ case $basic_machine in
                basic_machine=ns32k-utek
                os=-sysv
                ;;
+       microblaze)
+               basic_machine=microblaze-xilinx
+               ;;
        mingw32)
                basic_machine=i386-pc
                os=-mingw32
@@ -762,10 +821,18 @@ case $basic_machine in
        ms1-*)
                basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
                ;;
+       msys)
+               basic_machine=i386-pc
+               os=-msys
+               ;;
        mvs)
                basic_machine=i370-ibm
                os=-mvs
                ;;
+       nacl)
+               basic_machine=le32-unknown
+               os=-nacl
+               ;;
        ncr3000)
                basic_machine=i486-ncr
                os=-sysv4
@@ -830,6 +897,12 @@ case $basic_machine in
        np1)
                basic_machine=np1-gould
                ;;
+       neo-tandem)
+               basic_machine=neo-tandem
+               ;;
+       nse-tandem)
+               basic_machine=nse-tandem
+               ;;
        nsr-tandem)
                basic_machine=nsr-tandem
                ;;
@@ -912,9 +985,10 @@ case $basic_machine in
                ;;
        power)  basic_machine=power-ibm
                ;;
-       ppc)    basic_machine=powerpc-unknown
+       ppc | ppcbe)    basic_machine=powerpc-unknown
                ;;
-       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+       ppc-* | ppcbe-*)
+               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
        ppcle | powerpclittle | ppc-le | powerpc-little)
                basic_machine=powerpcle-unknown
@@ -1008,6 +1082,9 @@ case $basic_machine in
                basic_machine=i860-stratus
                os=-sysv4
                ;;
+       strongarm-* | thumb-*)
+               basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
        sun2)
                basic_machine=m68000-sun
                ;;
@@ -1064,20 +1141,8 @@ case $basic_machine in
                basic_machine=t90-cray
                os=-unicos
                ;;
-       tic54x | c54x*)
-               basic_machine=tic54x-unknown
-               os=-coff
-               ;;
-       tic55x | c55x*)
-               basic_machine=tic55x-unknown
-               os=-coff
-               ;;
-       tic6x | c6x*)
-               basic_machine=tic6x-unknown
-               os=-coff
-               ;;
        tile*)
-               basic_machine=tile-unknown
+               basic_machine=$basic_machine-unknown
                os=-linux-gnu
                ;;
        tx39)
@@ -1147,6 +1212,9 @@ case $basic_machine in
        xps | xps100)
                basic_machine=xps100-honeywell
                ;;
+       xscale-* | xscalee[bl]-*)
+               basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+               ;;
        ymp)
                basic_machine=ymp-cray
                os=-unicos
@@ -1244,9 +1312,12 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+       # First match some system type aliases
+       # that might get confused with valid system types.
        # -solaris* is a basic system type, with this one exception.
+       -auroraux)
+               os=-auroraux
+               ;;
        -solaris1 | -solaris1.*)
                os=`echo $os | sed -e 's|solaris1|sunos4|'`
                ;;
@@ -1268,8 +1339,8 @@ case $os in
        # -sysv* is not here because it comes later, after sysvr4.
        -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
              | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-             | -kopensolaris* \
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+             | -sym* | -kopensolaris* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
              | -aos* | -aros* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1281,8 +1352,9 @@ case $os in
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* | -cegcc* \
-             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-uclibc* \
              | -uxpv* | -beos* | -mpeix* | -udk* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
              | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1290,7 +1362,7 @@ case $os in
              | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
              | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
              | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
        -qnx*)
@@ -1329,7 +1401,7 @@ case $os in
        -opened*)
                os=-openedition
                ;;
-        -os400*)
+       -os400*)
                os=-os400
                ;;
        -wince*)
@@ -1378,7 +1450,7 @@ case $os in
        -sinix*)
                os=-sysv4
                ;;
-        -tpf*)
+       -tpf*)
                os=-tpf
                ;;
        -triton*)
@@ -1423,6 +1495,8 @@ case $os in
        -dicos*)
                os=-dicos
                ;;
+       -nacl*)
+               ;;
        -none)
                ;;
        *)
@@ -1445,10 +1519,10 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
-        score-*)
+       score-*)
                os=-elf
                ;;
-        spu-*)
+       spu-*)
                os=-elf
                ;;
        *-acorn)
@@ -1460,8 +1534,17 @@ case $basic_machine in
        arm*-semi)
                os=-aout
                ;;
-        c4x-* | tic4x-*)
-               os=-coff
+       c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       tic54x-*)
+               os=-coff
+               ;;
+       tic55x-*)
+               os=-coff
+               ;;
+       tic6x-*)
+               os=-coff
                ;;
        # This must come before the *-dec entry.
        pdp10-*)
@@ -1481,14 +1564,11 @@ case $basic_machine in
                ;;
        m68000-sun)
                os=-sunos3
-               # This also exists in the configure program, but was not the
-               # default.
-               # os=-sunos4
                ;;
        m68*-cisco)
                os=-aout
                ;;
-        mep-*)
+       mep-*)
                os=-elf
                ;;
        mips*-cisco)
@@ -1515,7 +1595,7 @@ case $basic_machine in
        *-ibm)
                os=-aix
                ;;
-       *-knuth)
+       *-knuth)
                os=-mmixware
                ;;
        *-wec)
index 816acb6..248b0eb 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,13 +1,13 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for HarfBuzz 0.9.3.
+# Generated by GNU Autoconf 2.68 for HarfBuzz 0.9.12.
 #
 # Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz>.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -91,6 +91,7 @@ fi
 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
@@ -173,6 +174,14 @@ test x\$exitcode = x0 || exit 1"
   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 -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
 test \$(( 1 + 1 )) = 2 || exit 1"
   if (eval "$as_required") 2>/dev/null; then :
   as_have_required=yes
@@ -216,11 +225,18 @@ IFS=$as_save_IFS
   # 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
        export CONFIG_SHELL
-       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+       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+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -320,7 +336,7 @@ $as_echo X"$as_dir" |
       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"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -360,19 +376,19 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# 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.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  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: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -529,161 +545,14 @@ 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'"
 
-
-
-# Check that we are running under the correct shell.
 SHELL=${CONFIG_SHELL-/bin/sh}
 
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-$*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-          test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-         # Cool, printf works
-         :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-            test "X$echo_testing_string" = 'X\t' &&
-            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-            test "X$echo_testing_string" = "X$echo_test_string"; then
-         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-         export CONFIG_SHELL
-         SHELL="$CONFIG_SHELL"
-         export SHELL
-         ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-            test "X$echo_testing_string" = 'X\t' &&
-            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-            test "X$echo_testing_string" = "X$echo_test_string"; then
-         ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        else
-         # maybe with a smaller string...
-         prev=:
-
-         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-           then
-             break
-           fi
-           prev="$cmd"
-         done
-
-         if test "$prev" != 'sed 50q "$0"'; then
-           echo_test_string=`eval $prev`
-           export echo_test_string
-           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-         else
-           # Oops.  We lost completely, so just stick with echo.
-           ECHO=echo
-         fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
 
 test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# 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`
 
@@ -702,8 +571,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='HarfBuzz'
 PACKAGE_TARNAME='harfbuzz'
-PACKAGE_VERSION='0.9.3'
-PACKAGE_STRING='HarfBuzz 0.9.3'
+PACKAGE_VERSION='0.9.12'
+PACKAGE_STRING='HarfBuzz 0.9.12'
 PACKAGE_BUGREPORT='http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz'
 PACKAGE_URL='http://harfbuzz.org/'
 
@@ -764,6 +633,10 @@ HAVE_GRAPHITE2_FALSE
 HAVE_GRAPHITE2_TRUE
 GRAPHITE2_LIBS
 GRAPHITE2_CFLAGS
+HAVE_ICU_LE_FALSE
+HAVE_ICU_LE_TRUE
+ICU_LE_LIBS
+ICU_LE_CFLAGS
 HAVE_ICU_FALSE
 HAVE_ICU_TRUE
 ICU_LIBS
@@ -789,18 +662,28 @@ HAVE_GLIB_FALSE
 HAVE_GLIB_TRUE
 GLIB_LIBS
 GLIB_CFLAGS
-PKG_CONFIG
+HAVE_UCDN_FALSE
+HAVE_UCDN_TRUE
 HAVE_HB_OLD_FALSE
 HAVE_HB_OLD_TRUE
 HAVE_OT_FALSE
 HAVE_OT_TRUE
+HAVE_PTHREAD_FALSE
+HAVE_PTHREAD_TRUE
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
 OS_WIN32_FALSE
 OS_WIN32_TRUE
+HAVE_GCC_FALSE
+HAVE_GCC_TRUE
 HB_LIBTOOL_VERSION_INFO
 HB_VERSION
 HB_VERSION_MICRO
 HB_VERSION_MINOR
 HB_VERSION_MAJOR
+PKG_CONFIG
 CXXCPP
 am__fastdepCXX_FALSE
 am__fastdepCXX_TRUE
@@ -814,9 +697,11 @@ OTOOL
 LIPO
 NMEDIT
 DSYMUTIL
-lt_ECHO
+MANIFEST_TOOL
 RANLIB
+ac_ct_AR
 AR
+DLLTOOL
 OBJDUMP
 LN_S
 NM
@@ -830,6 +715,7 @@ SED
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
+am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
@@ -854,6 +740,8 @@ build
 LIBTOOL
 AM_BACKSLASH
 AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 am__untar
 am__tar
 AMTAR
@@ -925,6 +813,7 @@ with_pic
 enable_fast_install
 enable_dependency_tracking
 with_gnu_ld
+with_sysroot
 enable_libtool_lock
 '
       ac_precious_vars='build_alias
@@ -953,6 +842,8 @@ CAIRO_FT_CFLAGS
 CAIRO_FT_LIBS
 ICU_CFLAGS
 ICU_LIBS
+ICU_LE_CFLAGS
+ICU_LE_LIBS
 GRAPHITE2_CFLAGS
 GRAPHITE2_LIBS
 FREETYPE_CFLAGS
@@ -1019,8 +910,9 @@ do
   fi
 
   case $ac_option in
-  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)   ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1065,7 +957,7 @@ do
     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"
+      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
@@ -1091,7 +983,7 @@ do
     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"
+      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
@@ -1295,7 +1187,7 @@ do
     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"
+      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
@@ -1311,7 +1203,7 @@ do
     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"
+      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
@@ -1341,8 +1233,8 @@ do
   | --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."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1350,7 +1242,7 @@ Try \`$0 --help' for more information."
     # 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'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1360,7 +1252,7 @@ Try \`$0 --help' for more information."
     $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}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1368,13 +1260,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  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" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1397,7 +1289,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  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'
@@ -1411,8 +1303,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1427,9 +1319,9 @@ 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"
+  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"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1468,11 +1360,11 @@ else
 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"
+  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"
+       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
@@ -1498,7 +1390,7 @@ 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 HarfBuzz 0.9.3 to adapt to many kinds of systems.
+\`configure' configures HarfBuzz 0.9.12 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1512,7 +1404,7 @@ Configuration:
       --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
+  -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
@@ -1568,7 +1460,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of HarfBuzz 0.9.3:";;
+     short | recursive ) echo "Configuration of HarfBuzz 0.9.12:";;
    esac
   cat <<\_ACEOF
 
@@ -1589,9 +1481,11 @@ Optional Features:
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
 
 Some influential environment variables:
   CC          C compiler command
@@ -1625,6 +1519,9 @@ Some influential environment variables:
               linker flags for CAIRO_FT, overriding pkg-config
   ICU_CFLAGS  C compiler flags for ICU, overriding pkg-config
   ICU_LIBS    linker flags for ICU, overriding pkg-config
+  ICU_LE_CFLAGS
+              C compiler flags for ICU_LE, overriding pkg-config
+  ICU_LE_LIBS linker flags for ICU_LE, overriding pkg-config
   GRAPHITE2_CFLAGS
               C compiler flags for GRAPHITE2, overriding pkg-config
   GRAPHITE2_LIBS
@@ -1701,10 +1598,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-HarfBuzz configure 0.9.3
-generated by GNU Autoconf 2.65
+HarfBuzz configure 0.9.12
+generated by GNU Autoconf 2.68
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1748,7 +1645,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1794,7 +1691,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1808,7 +1705,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1826,7 +1723,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1851,7 +1748,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then :
@@ -1862,7 +1759,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1904,7 +1801,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1917,7 +1814,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1972,7 +1869,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -2009,7 +1906,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_compile
@@ -2035,7 +1932,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
         test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
         test ! -s conftest.err
        }; then :
@@ -2046,7 +1943,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_cpp
@@ -2092,7 +1989,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_link
@@ -2105,10 +2002,10 @@ fi
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2144,7 +2041,7 @@ if ac_fn_c_try_cpp "$LINENO"; then :
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+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; }
 
@@ -2167,17 +2064,15 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( cat <<\_ASBOX
-## ------------------------------------------------------------------------- ##
+( $as_echo "## ------------------------------------------------------------------------- ##
 ## Report this to http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz ##
-## ------------------------------------------------------------------------- ##
-_ASBOX
+## ------------------------------------------------------------------------- ##"
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2186,15 +2081,69 @@ eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
+
+# 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
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by HarfBuzz $as_me 0.9.3, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+It was created by HarfBuzz $as_me 0.9.12, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2304,11 +2253,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2342,11 +2289,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2359,11 +2304,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2377,11 +2320,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2436,7 +2377,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # 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
@@ -2451,7 +2397,11 @@ do
     { $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"
+    . "$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
 
@@ -2527,7 +2477,7 @@ if $ac_cache_corrupted; then
 $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
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2542,6 +2492,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+
 ac_config_headers="$ac_config_headers config.h"
 
 
@@ -2549,16 +2500,22 @@ am__api_version='1.11'
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  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 \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2587,7 +2544,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2674,11 +2631,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+    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;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2700,7 +2657,7 @@ if (
       # 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
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" "$LINENO" 5
    fi
 
@@ -2710,7 +2667,7 @@ then
    # Ok.
    :
 else
-   as_fn_error "newly created file is older than distributed files!
+   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
@@ -2764,7 +2721,7 @@ if test "$cross_compiling" != no; then
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2804,7 +2761,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2857,7 +2814,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2908,7 +2865,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2948,7 +2905,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2956,7 +2913,7 @@ SHELL = /bin/sh
 all:
        @echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# 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;;
@@ -2990,7 +2947,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   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
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
   fi
 fi
 
@@ -3006,7 +2963,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='harfbuzz'
- VERSION='0.9.3'
+ VERSION='0.9.12'
 
 
 # Some tools Automake needs.
@@ -3027,11 +2984,11 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
+# 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}'
 
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
@@ -3047,6 +3004,33 @@ yes) AM_DEFAULT_VERBOSITY=0;;
 no)  AM_DEFAULT_VERBOSITY=1;;
 *)   AM_DEFAULT_VERBOSITY=0;;
 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='\'
 
 
@@ -3060,8 +3044,8 @@ esac
 
 
 
-macro_version='2.2.6b'
-macro_revision='1.3017'
+macro_version='2.4.2'
+macro_revision='1.3337'
 
 
 
@@ -3079,27 +3063,27 @@ ltmain="$ac_aux_dir/ltmain.sh"
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -3117,14 +3101,14 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -3132,7 +3116,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -3148,6 +3132,75 @@ IFS=$ac_save_IFS
 case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 DEPDIR="${am__leading_dot}deps"
 
 ac_config_commands="$ac_config_commands depfiles"
@@ -3200,6 +3253,7 @@ 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=
@@ -3220,7 +3274,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3260,7 +3314,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3313,7 +3367,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3353,7 +3407,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3412,7 +3466,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3456,7 +3510,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3510,8 +3564,8 @@ 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; }
+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
@@ -3625,9 +3679,8 @@ 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_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+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; }
@@ -3669,8 +3722,8 @@ 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; }
+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
@@ -3727,9 +3780,9 @@ $as_echo "$ac_try_echo"; } >&5
     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.
+as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -3740,7 +3793,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3780,8 +3833,8 @@ 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; }
+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
@@ -3791,7 +3844,7 @@ OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3828,7 +3881,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3906,7 +3959,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -4005,7 +4058,7 @@ depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+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
@@ -4014,6 +4067,7 @@ else
   # 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.
@@ -4073,7 +4127,7 @@ else
        break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    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.
@@ -4130,7 +4184,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -4185,7 +4239,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
@@ -4212,7 +4266,7 @@ Xsed="$SED -e 1s/^X//"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4261,7 +4315,7 @@ esac
   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
+    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
@@ -4275,7 +4329,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4327,7 +4381,7 @@ esac
   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
+    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
@@ -4342,7 +4396,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
+if ${ac_cv_path_FGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
@@ -4394,7 +4448,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -4473,7 +4527,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -4510,10 +4564,10 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -4540,7 +4594,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then :
+if ${lt_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -4593,14 +4647,17 @@ if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -4638,13 +4695,13 @@ fi
 fi
 if test -z "$DUMPBIN"; then
   ac_ct_DUMPBIN=$DUMPBIN
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  for ac_prog in dumpbin "link -dump"
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DUMPBIN"; then
@@ -4693,6 +4750,15 @@ esac
   fi
 fi
 
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
 
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
@@ -4707,18 +4773,18 @@ test -z "$NM" && NM=nm
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then :
+if ${lt_cv_nm_interface+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:4715: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:4718: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:4721: output\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -4742,7 +4808,7 @@ fi
 # find the maximum length of command line arguments
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
 $as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
@@ -4775,6 +4841,11 @@ else
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -4800,6 +4871,11 @@ else
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -4839,8 +4915,8 @@ else
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+                = "X$teststring$teststring"; } >/dev/null 2>&1 &&
              test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -4882,8 +4958,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -4932,9 +5008,83 @@ esac
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
 $as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then :
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_reload_flag='-r'
@@ -4948,6 +5098,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -4970,7 +5125,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -5010,7 +5165,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
 set dummy objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -5069,7 +5224,7 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
 $as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then :
+if ${lt_cv_deplibs_check_method+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -5111,16 +5266,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -5150,6 +5307,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -5158,11 +5319,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -5183,7 +5344,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -5265,6 +5426,21 @@ esac
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
 $as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -5280,16 +5456,26 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
 
+
+
+
+
+
+
+
+
+
+
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5298,7 +5484,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5308,10 +5494,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -5319,17 +5505,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5338,7 +5524,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5348,16 +5534,168 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_AR" = x; then
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
     AR="false"
   else
     case $cross_compiling:$ac_tool_warned in
@@ -5368,12 +5706,14 @@ ac_tool_warned=yes ;;
 esac
     AR=$ac_ct_AR
   fi
-else
-  AR="$ac_cv_prog_AR"
 fi
 
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
 
 
 
@@ -5381,6 +5721,60 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+       # Ensure the archiver fails upon bogus file names.
+       rm -f conftest.$ac_objext libconftest.a
+       { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+       if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
 
 
 
@@ -5390,7 +5784,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -5430,7 +5824,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -5489,7 +5883,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -5529,7 +5923,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -5591,15 +5985,27 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
 
 
 
@@ -5646,7 +6052,7 @@ compiler=$CC
 # Check for command to grab the raw symbol name followed by C symbol from nm.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -5707,8 +6113,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -5732,6 +6138,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -5744,6 +6151,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -5769,8 +6177,8 @@ _LT_EOF
   test $ac_status = 0; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s "$nlist"; then
@@ -5785,6 +6193,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
        if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
          cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -5796,7 +6216,7 @@ _LT_EOF
          cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT_DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -5822,8 +6242,8 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
          # Now try linking the two files.
          mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
+         lt_globsym_save_LIBS=$LIBS
+         lt_globsym_save_CFLAGS=$CFLAGS
          LIBS="conftstm.$ac_objext"
          CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
@@ -5833,8 +6253,8 @@ _LT_EOF
   test $ac_status = 0; } && test -s conftest${ac_exeext}; then
            pipe_works=yes
          fi
-         LIBS="$lt_save_LIBS"
-         CFLAGS="$lt_save_CFLAGS"
+         LIBS=$lt_globsym_save_LIBS
+         CFLAGS=$lt_globsym_save_CFLAGS
        else
          echo "cannot find nm_test_func in $nlist" >&5
        fi
@@ -5871,6 +6291,13 @@ else
 $as_echo "ok" >&6; }
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
 
 
 
@@ -5893,6 +6320,47 @@ fi
 
 
 
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
 # Check whether --enable-libtool-lock was given.
 if test "${enable_libtool_lock+set}" = set; then :
   enableval=$enable_libtool_lock;
@@ -5924,7 +6392,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 5927 "configure"' > conftest.$ac_ext
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -6018,7 +6486,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   CFLAGS="$CFLAGS -belf"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then :
+if ${lt_cv_cc_needs_belf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_ext=c
@@ -6059,7 +6527,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -6070,7 +6538,20 @@ sparc*-*solaris*)
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
        if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
          LD="${LD-ld} -64"
@@ -6086,19 +6567,16 @@ esac
 
 need_locks="$enable_libtool_lock"
 
-
-  case $host_os in
-    rhapsody* | darwin*)
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$DSYMUTIL"; then
-  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6107,7 +6585,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6117,10 +6595,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -6128,17 +6606,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
-  ac_ct_DSYMUTIL=$DSYMUTIL
-  # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_DSYMUTIL"; then
-  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6147,7 +6625,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6157,17 +6635,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_DSYMUTIL" = x; then
-    DSYMUTIL=":"
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -6175,22 +6653,50 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    DSYMUTIL=$ac_ct_DSYMUTIL
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
   fi
 else
-  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
 
+
+
+  case $host_os in
+    rhapsody* | darwin*)
     if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$NMEDIT"; then
-  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6199,7 +6705,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6209,12 +6715,104 @@ IFS=$as_save_IFS
 
 fi
 fi
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6226,7 +6824,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then
 set dummy nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NMEDIT"; then
@@ -6278,7 +6876,7 @@ fi
 set dummy ${ac_tool_prefix}lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LIPO+set}" = set; then :
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$LIPO"; then
@@ -6318,7 +6916,7 @@ if test -z "$ac_cv_prog_LIPO"; then
 set dummy lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_LIPO"; then
@@ -6370,7 +6968,7 @@ fi
 set dummy ${ac_tool_prefix}otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL+set}" = set; then :
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL"; then
@@ -6410,7 +7008,7 @@ if test -z "$ac_cv_prog_OTOOL"; then
 set dummy otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL"; then
@@ -6462,7 +7060,7 @@ fi
 set dummy ${ac_tool_prefix}otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL64"; then
@@ -6502,7 +7100,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then
 set dummy otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL64"; then
@@ -6577,7 +7175,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
 $as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
@@ -6593,7 +7191,13 @@ else
        $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
          -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+       # If there is a non-empty error log, and "single_module"
+       # appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+         cat conftest.err >&5
+       # Otherwise, if the output was created with a 0 exit code from
+       # the compiler, it worked.
+       elif test -f libconftest.dylib && test $_lt_result -eq 0; then
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&5
@@ -6604,9 +7208,10 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_exported_symbols_list=no
@@ -6636,6 +7241,41 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+       cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+       lt_cv_ld_force_load=yes
+      else
+       cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
@@ -6663,7 +7303,7 @@ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
     else
       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
     fi
-    if test "$DSYMUTIL" != ":"; then
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -6683,7 +7323,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -6713,7 +7353,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -6729,11 +7369,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -6772,7 +7412,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -6788,18 +7428,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+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; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -6811,7 +7451,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6928,8 +7568,7 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -6943,7 +7582,7 @@ for ac_header in dlfcn.h
 do :
   ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
 "
-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_DLFCN_H 1
 _ACEOF
@@ -6954,6 +7593,8 @@ done
 
 
 
+
+
 # Set options
 # Check whether --enable-static was given.
 if test "${enable_static+set}" = set; then :
@@ -7028,7 +7669,22 @@ fi
 
 # Check whether --with-pic was given.
 if test "${with_pic+set}" = set; then :
-  withval=$with_pic; pic_mode="$withval"
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+       IFS="$lt_save_ifs"
+       if test "X$lt_pkg" = "X$lt_p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
   pic_mode=default
 fi
@@ -7105,6 +7761,11 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
+
+
+
+
+
 test -z "$LN_S" && LN_S="ln -s"
 
 
@@ -7126,7 +7787,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
+if ${lt_cv_objdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f .libs 2>/dev/null
@@ -7154,19 +7815,6 @@ _ACEOF
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 case $host_os in
 aix3*)
   # AIX sometimes has problems with the GCC collect2 program.  For some
@@ -7179,23 +7827,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -7224,7 +7855,7 @@ for cc_temp in $compiler""; do
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
 # Only perform the check for file, if the check method requires it
@@ -7234,7 +7865,7 @@ file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -7300,7 +7931,7 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
 $as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -7424,16 +8055,25 @@ _lt_linker_boilerplate=`cat conftest.err`
 $RM -r conftest*
 
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
 
 lt_prog_compiler_no_builtin_flag=
 
 if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_rtti_exceptions=no
@@ -7449,15 +8089,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7452: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:7456: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_rtti_exceptions=yes
@@ -7486,8 +8126,6 @@ fi
 lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   if test "$GCC" = yes; then
     lt_prog_compiler_wl='-Wl,'
@@ -7535,6 +8173,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -7577,6 +8221,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -7639,7 +8292,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
        lt_prog_compiler_pic='--shared'
        lt_prog_compiler_static='--static'
        ;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+       # NAG Fortran compiler
+       lt_prog_compiler_wl='-Wl,-Wl,,'
+       lt_prog_compiler_pic='-PIC'
+       lt_prog_compiler_static='-Bstatic'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
        lt_prog_compiler_wl='-Wl,'
@@ -7651,25 +8310,40 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
         # All Alpha code is PIC.
         lt_prog_compiler_static='-non_shared'
         ;;
-      xl*)
-       # IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+       # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
        lt_prog_compiler_wl='-Wl,'
        lt_prog_compiler_pic='-qpic'
        lt_prog_compiler_static='-qstaticlink'
        ;;
       *)
        case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       *Sun\ F* | *Sun*Fortran*)
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Qoption ld '
+         ;;
        *Sun\ C*)
          # Sun C 5.9
          lt_prog_compiler_pic='-KPIC'
          lt_prog_compiler_static='-Bstatic'
          lt_prog_compiler_wl='-Wl,'
          ;;
-       *Sun\ F*)
-         # Sun Fortran 8.3 passes all unrecognized flags to the linker
-         lt_prog_compiler_pic='-KPIC'
+        *Intel*\ [CF]*Compiler*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fPIC'
+         lt_prog_compiler_static='-static'
+         ;;
+       *Portland\ Group*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fpic'
          lt_prog_compiler_static='-Bstatic'
-         lt_prog_compiler_wl=''
          ;;
        esac
        ;;
@@ -7701,7 +8375,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-KPIC'
       lt_prog_compiler_static='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
        lt_prog_compiler_wl='-Qoption ld ';;
       *)
        lt_prog_compiler_wl='-Wl,';;
@@ -7758,13 +8432,17 @@ case $host_os in
     lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
 
 #
 # Check to make sure the PIC flag actually works.
@@ -7772,7 +8450,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; }
 if test -n "$lt_prog_compiler_pic"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works=no
@@ -7788,15 +8466,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7791: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:7795: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works=yes
@@ -7825,13 +8503,18 @@ fi
 
 
 
+
+
+
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
@@ -7844,7 +8527,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works=yes
@@ -7874,7 +8557,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -7893,16 +8576,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7896: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:7900: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -7929,7 +8612,7 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -7948,16 +8631,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7951: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:7955: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -8023,7 +8706,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   hardcode_direct=no
   hardcode_direct_absolute=no
   hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
   hardcode_libdir_separator=
   hardcode_minus_L=no
   hardcode_shlibpath_var=unsupported
@@ -8067,13 +8749,39 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   openbsd*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu)
+  linux* | k*bsd*-gnu | gnu*)
     link_all_deplibs=no
     ;;
   esac
 
   ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+       # The AIX port of GNU ld has always aspired to compatibility
+       # with the native linker.  However, as the warning in the GNU ld
+       # block says, versions before 2.19.5* couldn't really create working
+       # shared libraries, regardless of the interface used.
+       case `$LD -v 2>&1` in
+         *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+         *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+         *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+         *)
+           lt_use_gnu_ld_interface=yes
+           ;;
+       esac
+       ;;
+      *)
+       lt_use_gnu_ld_interface=yes
+       ;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -8107,11 +8815,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
        ld_shlibs=no
        cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -8147,10 +8856,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -8168,6 +8879,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
@@ -8193,15 +8909,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
         && test "$tmp_diet" = no
       then
-       tmp_addflag=
+       tmp_addflag=' $pic_flag'
        tmp_sharedflag='-shared'
        case $cc_basename,$host_cpu in
         pgcc*)                         # Portland Group C compiler
-         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
          tmp_addflag=' $pic_flag'
          ;;
-       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
-         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+       pgf77* | pgf90* | pgf95* | pgfortran*)
+                                       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
          tmp_addflag=' $pic_flag -Mnomain' ;;
        ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
          tmp_addflag=' -i_dynamic' ;;
@@ -8212,13 +8929,17 @@ _LT_EOF
        lf95*)                          # Lahey Fortran 8.1
          whole_archive_flag_spec=
          tmp_sharedflag='--shared' ;;
-       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
+       xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
          tmp_sharedflag='-qmkshrobj'
          tmp_addflag= ;;
+       nvcc*)  # Cuda Compiler Driver 2.2
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         compiler_needs_object=yes
+         ;;
        esac
        case `$CC -V 2>&1 | sed 5q` in
        *Sun\ C*)                       # Sun C 5.9
-         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
          compiler_needs_object=yes
          tmp_sharedflag='-G' ;;
        *Sun\ F*)                       # Sun Fortran 8.3
@@ -8234,17 +8955,16 @@ _LT_EOF
         fi
 
        case $cc_basename in
-       xlf*)
+       xlf* | bgf* | bgxlf* | mpixlf*)
          # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
          whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-         hardcode_libdir_flag_spec=
-         hardcode_libdir_flag_spec_ld='-rpath $libdir'
-         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
          if test "x$supports_anon_versioning" = xyes; then
            archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
              echo "local: *; };" >> $output_objdir/$libname.ver~
-             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+             $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
          fi
          ;;
        esac
@@ -8258,8 +8978,8 @@ _LT_EOF
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -8277,8 +8997,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
        ld_shlibs=no
       fi
@@ -8324,8 +9044,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
        ld_shlibs=no
       fi
@@ -8365,8 +9085,10 @@ _LT_EOF
       else
        # If we're using GNU nm, then we don't want the "-C" option.
        # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       # Also, AIX nm treats weak defined symbols like other global
+       # defined symbols, whereas GNU nm marks them as "W".
        if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
        else
          export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
        fi
@@ -8454,7 +9176,13 @@ _LT_EOF
        allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -8467,25 +9195,32 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
        if test "$host_cpu" = ia64; then
          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
@@ -8494,7 +9229,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
        else
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -8507,30 +9248,42 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
          # Warning - without using the other run time loading flags,
          # -berok will link without error, but may produce a broken library.
          no_undefined_flag=' ${wl}-bernotok'
          allow_undefined_flag=' ${wl}-berok'
-         # Exported symbols can be pulled into shared objects from archives
-         whole_archive_flag_spec='$convenience'
+         if test "$with_gnu_ld" = yes; then
+           # We only use this code for GNU lds that support --whole-archive.
+           whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+         else
+           # Exported symbols can be pulled into shared objects from archives
+           whole_archive_flag_spec='$convenience'
+         fi
          archive_cmds_need_lc=yes
          # This is similar to how AIX traditionally builds its shared libraries.
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -8562,20 +9315,64 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      allow_undefined_flag=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_from_new_cmds='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
+      case $cc_basename in
+      cl*)
+       # Native MSVC
+       hardcode_libdir_flag_spec=' '
+       allow_undefined_flag=unsupported
+       always_export_symbols=yes
+       file_list_spec='@'
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=".dll"
+       # FIXME: Setting linknames here is a bad hack.
+       archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+         else
+           sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+         fi~
+         $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+         linknames='
+       # The linker will not automatically build a static lib if we build a DLL.
+       # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+       enable_shared_with_static_runtimes=yes
+       exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+       export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+       # Don't use ranlib
+       old_postinstall_cmds='chmod 644 $oldlib'
+       postlink_cmds='lt_outputfile="@OUTPUT@"~
+         lt_tool_outputfile="@TOOL_OUTPUT@"~
+         case $lt_outputfile in
+           *.exe|*.EXE) ;;
+           *)
+             lt_outputfile="$lt_outputfile.exe"
+             lt_tool_outputfile="$lt_tool_outputfile.exe"
+             ;;
+         esac~
+         if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+           $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+           $RM "$lt_outputfile.manifest";
+         fi'
+       ;;
+      *)
+       # Assume MSVC wrapper
+       hardcode_libdir_flag_spec=' '
+       allow_undefined_flag=unsupported
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=".dll"
+       # FIXME: Setting linknames here is a bad hack.
+       archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+       # The linker will automatically build a .lib file if we build a DLL.
+       old_archive_from_new_cmds='true'
+       # FIXME: Should let the user specify the lib program.
+       old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+       enable_shared_with_static_runtimes=yes
+       ;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -8585,7 +9382,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
-  whole_archive_flag_spec=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec=''
+  fi
   link_all_deplibs=yes
   allow_undefined_flag="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -8593,7 +9395,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -8611,10 +9413,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       hardcode_shlibpath_var=no
       ;;
 
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -8627,7 +9425,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
       hardcode_minus_L=yes
@@ -8636,7 +9434,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
       hardcode_shlibpath_var=no
@@ -8644,7 +9442,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     hpux9*)
       if test "$GCC" = yes; then
-       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
        archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -8659,14 +9457,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+       archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
        archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
       if test "$with_gnu_ld" = no; then
        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-       hardcode_libdir_flag_spec_ld='+b $libdir'
        hardcode_libdir_separator=:
        hardcode_direct=yes
        hardcode_direct_absolute=yes
@@ -8678,16 +9475,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
        case $host_cpu in
        hppa*64*)
          archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        ia64*)
-         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
-         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        esac
       else
@@ -8699,7 +9496,46 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
          archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
-         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+
+         # Older versions of the 11.00 compiler do not understand -b yet
+         # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
          ;;
        esac
       fi
@@ -8727,26 +9563,39 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
        # Try to use the -exported_symbol ld option, if it does not
        # work, assume that -exports_file does not work either and
        # implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+       # This should be the same for all languages, so no per-tag cache variable.
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+          LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-int foo(void) {}
+int foo (void) { return 0; }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        LDFLAGS="$save_LDFLAGS"
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+       if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+       fi
       else
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -8808,17 +9657,17 @@ rm -f core conftest.err conftest.$ac_objext \
       hardcode_libdir_flag_spec='-L$libdir'
       hardcode_minus_L=yes
       allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
        allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -8828,13 +9677,13 @@ rm -f core conftest.err conftest.$ac_objext \
     osf4* | osf5*)     # as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
       else
        allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
        archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
        # Both c and cxx compiler support -rpath directly
        hardcode_libdir_flag_spec='-rpath $libdir'
@@ -8847,9 +9696,9 @@ rm -f core conftest.err conftest.$ac_objext \
       no_undefined_flag=' -z defs'
       if test "$GCC" = yes; then
        wlarc='${wl}'
-       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
        archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
        case `$CC -V 2>&1` in
        *"Compilers 5.0"*)
@@ -9037,44 +9886,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl
-       pic_flag=$lt_prog_compiler_pic
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag
-        allow_undefined_flag=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$lt_prog_compiler_wl
+         pic_flag=$lt_prog_compiler_pic
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$allow_undefined_flag
+         allow_undefined_flag=
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-         archive_cmds_need_lc=no
-        else
-         archive_cmds_need_lc=yes
-        fi
-        allow_undefined_flag=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
+         then
+           lt_cv_archive_cmds_need_lc=no
+         else
+           lt_cv_archive_cmds_need_lc=yes
+         fi
+         allow_undefined_flag=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
       ;;
     esac
   fi
@@ -9232,11 +10087,6 @@ esac
 
 
 
-
-
-
-
-
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -9245,16 +10095,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -9267,7 +10124,7 @@ if test "$GCC" = yes; then
        lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -9287,7 +10144,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[lt_foo]++; }
   if (lt_freq[lt_foo] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi
@@ -9313,7 +10176,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -9322,7 +10185,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -9375,7 +10238,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -9387,7 +10250,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -9406,8 +10269,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -9428,36 +10292,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -9478,7 +10389,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -9486,10 +10397,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -9497,7 +10404,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -9515,7 +10422,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -9535,12 +10442,26 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -9586,12 +10507,14 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -9607,7 +10530,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
        if test "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
+               version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
        fi ;;
@@ -9644,9 +10567,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -9654,12 +10577,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -9672,13 +10600,17 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
@@ -9687,7 +10619,7 @@ rm -f core conftest.err conftest.$ac_objext \
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
   fi
 
@@ -9731,7 +10663,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -9800,7 +10732,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -9825,7 +10757,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -9849,7 +10781,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -9880,7 +10812,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -9890,7 +10822,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
 
 
 
+
+
+
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action=
@@ -10074,7 +11011,7 @@ else
   # if libdl is installed we need to link against it
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -10108,7 +11045,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
 
 
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
+if test "x$ac_cv_func_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
 $as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+if ${ac_cv_lib_dld_shl_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -10161,16 +11098,16 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
 else
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = x""yes; then :
+if test "x$ac_cv_func_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -10204,12 +11141,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+if ${ac_cv_lib_svld_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -10243,12 +11180,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+if ${ac_cv_lib_dld_dld_link+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -10282,7 +11219,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
@@ -10323,7 +11260,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
 $as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then :
+if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
          if test "$cross_compiling" = yes; then :
@@ -10332,7 +11269,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10335 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -10373,7 +11310,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -10382,7 +11325,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
       /* dlclose (self); */
     }
   else
@@ -10419,7 +11366,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; }
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then :
+if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
          if test "$cross_compiling" = yes; then :
@@ -10428,7 +11375,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10431 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -10469,7 +11416,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -10478,7 +11431,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
       /* dlclose (self); */
     }
   else
@@ -10647,6 +11604,8 @@ CC="$lt_save_CC"
 
 
 
+
+
         ac_config_commands="$ac_config_commands libtool"
 
 
@@ -10667,7 +11626,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -10707,7 +11666,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -10760,7 +11719,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -10800,7 +11759,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -10859,7 +11818,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -10903,7 +11862,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -10957,8 +11916,8 @@ 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; }
+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
@@ -10987,7 +11946,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11024,7 +11983,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -11102,7 +12061,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -11201,7 +12160,7 @@ depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+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
@@ -11210,6 +12169,7 @@ else
   # 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.
@@ -11269,7 +12229,7 @@ else
        break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    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.
@@ -11333,7 +12293,7 @@ $as_echo_n "checking whether cc understands -c and -o together... " >&6; }
 fi
 set dummy $CC; ac_cc=`$as_echo "$2" |
                      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11466,7 +12426,7 @@ if test -z "$CXX"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
+if ${ac_cv_prog_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
@@ -11510,7 +12470,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
@@ -11588,7 +12548,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11625,7 +12585,7 @@ ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
+if ${ac_cv_prog_cxx_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
@@ -11711,7 +12671,7 @@ depcc="$CXX"  am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -11720,6 +12680,7 @@ else
   # 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.
@@ -11779,7 +12740,7 @@ else
        break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    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.
 
 
 
-ac_ext=cpp
+
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+
+      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
+{ $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; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
 do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$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
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
 
+else
+  # Broken: fails on valid input.
+continue
 fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  # 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_CXXCPP=$CXXCPP
 
-    test -n "$CXX" && break
-  done
 fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$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_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  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
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-        CXXFLAGS="-g"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-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="$CXX"  am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-       continue
-      else
-       break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_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; }
-if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CXXCPP needs to be expanded
-    for CXXCPP in "$CXX -E" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
-  CXXCPP=$ac_cv_prog_CXXCPP
+  CXXCPP=$ac_cv_prog_CXXCPP
 else
   ac_cv_prog_CXXCPP=$CXXCPP
 fi
@@ -12319,7 +12905,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -12335,17 +12921,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+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;}
-_lt_caught_CXX_error=yes; }
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -12358,9 +12945,6 @@ else
   _lt_caught_CXX_error=yes
 fi
 
-
-
-
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -12376,7 +12960,6 @@ export_dynamic_flag_spec_CXX=
 hardcode_direct_CXX=no
 hardcode_direct_absolute_CXX=no
 hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
 hardcode_libdir_separator_CXX=
 hardcode_minus_L_CXX=no
 hardcode_shlibpath_var_CXX=unsupported
@@ -12386,6 +12969,8 @@ module_cmds_CXX=
 module_expsym_cmds_CXX=
 link_all_deplibs_CXX=unknown
 old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
 no_undefined_flag_CXX=
 whole_archive_flag_spec_CXX=
 enable_shared_with_static_runtimes_CXX=no
@@ -12441,6 +13026,7 @@ $RM -r conftest*
 
   # Allow CC to be a program name with arguments.
   lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
   lt_save_LD=$LD
   lt_save_GCC=$GCC
   GCC=$GXX
@@ -12458,6 +13044,7 @@ $RM -r conftest*
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   compiler_CXX=$CC
   for cc_temp in $compiler""; do
@@ -12468,7 +13055,7 @@ $RM -r conftest*
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
   if test -n "$compiler"; then
@@ -12531,7 +13118,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -12568,10 +13155,10 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -12597,8 +13184,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       if test "$with_gnu_ld" = yes; then
-        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 
         hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
         export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -12630,7 +13217,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
       # Commands to make compiler produce verbose output that lists
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
     else
       GXX=no
@@ -12740,7 +13327,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
           allow_undefined_flag_CXX='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+          if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -12753,26 +13346,33 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
           hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
 
-          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
         else
           if test "$host_cpu" = ia64; then
            hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
@@ -12781,7 +13381,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           else
            # Determine the default libpath from the value encoded in an
            # empty executable.
-           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+           if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -12794,30 +13400,42 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
            hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
            # Warning - without using the other run time loading flags,
            # -berok will link without error, but may produce a broken library.
            no_undefined_flag_CXX=' ${wl}-bernotok'
            allow_undefined_flag_CXX=' ${wl}-berok'
-           # Exported symbols can be pulled into shared objects from archives
-           whole_archive_flag_spec_CXX='$convenience'
+           if test "$with_gnu_ld" = yes; then
+             # We only use this code for GNU lds that support --whole-archive.
+             whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           else
+             # Exported symbols can be pulled into shared objects from archives
+             whole_archive_flag_spec_CXX='$convenience'
+           fi
            archive_cmds_need_lc_CXX=yes
            # This is similar to how AIX traditionally builds its shared
            # libraries.
@@ -12847,28 +13465,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-        # as there is no search path for DLLs.
-        hardcode_libdir_flag_spec_CXX='-L$libdir'
-        allow_undefined_flag_CXX=unsupported
-        always_export_symbols_CXX=no
-        enable_shared_with_static_runtimes_CXX=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-           cp $export_symbols $output_objdir/$soname.def;
-          else
-           echo EXPORTS > $output_objdir/$soname.def;
-           cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          ld_shlibs_CXX=no
-        fi
-        ;;
+       case $GXX,$cc_basename in
+       ,cl* | no,cl*)
+         # Native MSVC
+         # hardcode_libdir_flag_spec is actually meaningless, as there is
+         # no search path for DLLs.
+         hardcode_libdir_flag_spec_CXX=' '
+         allow_undefined_flag_CXX=unsupported
+         always_export_symbols_CXX=yes
+         file_list_spec_CXX='@'
+         # Tell ltmain to make .lib files, not .a files.
+         libext=lib
+         # Tell ltmain to make .dll files, not .so files.
+         shrext_cmds=".dll"
+         # FIXME: Setting linknames here is a bad hack.
+         archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+         archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+             $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+           else
+             $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+           fi~
+           $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+           linknames='
+         # The linker will not automatically build a static lib if we build a DLL.
+         # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+         enable_shared_with_static_runtimes_CXX=yes
+         # Don't use ranlib
+         old_postinstall_cmds_CXX='chmod 644 $oldlib'
+         postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+           lt_tool_outputfile="@TOOL_OUTPUT@"~
+           case $lt_outputfile in
+             *.exe|*.EXE) ;;
+             *)
+               lt_outputfile="$lt_outputfile.exe"
+               lt_tool_outputfile="$lt_tool_outputfile.exe"
+               ;;
+           esac~
+           func_to_tool_file "$lt_outputfile"~
+           if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+             $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+             $RM "$lt_outputfile.manifest";
+           fi'
+         ;;
+       *)
+         # g++
+         # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+         # as there is no search path for DLLs.
+         hardcode_libdir_flag_spec_CXX='-L$libdir'
+         export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+         allow_undefined_flag_CXX=unsupported
+         always_export_symbols_CXX=no
+         enable_shared_with_static_runtimes_CXX=yes
+
+         if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+           archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           # If the export-symbols file already is a .def file (1st line
+           # is EXPORTS), use it as is; otherwise, prepend...
+           archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+             cp $export_symbols $output_objdir/$soname.def;
+           else
+             echo EXPORTS > $output_objdir/$soname.def;
+             cat $export_symbols >> $output_objdir/$soname.def;
+           fi~
+           $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+         else
+           ld_shlibs_CXX=no
+         fi
+         ;;
+       esac
+       ;;
       darwin* | rhapsody*)
 
 
@@ -12876,7 +13541,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
   hardcode_shlibpath_var_CXX=unsupported
-  whole_archive_flag_spec_CXX=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
   link_all_deplibs_CXX=yes
   allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -12884,7 +13554,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -12918,7 +13588,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         esac
         ;;
 
-      freebsd[12]*)
+      freebsd2.*)
         # C++ shared libraries reported to be fairly broken before
        # switch to ELF
         ld_shlibs_CXX=no
@@ -12937,6 +13607,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       gnu*)
         ;;
 
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
       hpux9*)
         hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
         hardcode_libdir_separator_CXX=:
@@ -12961,11 +13636,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             if test "$GXX" = yes; then
-              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               ld_shlibs_CXX=no
@@ -13026,7 +13701,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
            ;;
           *)
            if test "$GXX" = yes; then
@@ -13036,10 +13711,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
                    archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                  ia64*)
-                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                  *)
-                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                esac
              fi
@@ -13069,7 +13744,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         case $cc_basename in
           CC*)
            # SGI C++
-           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 
            # Archives containing C++ object files must be created using
            # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -13080,9 +13755,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           *)
            if test "$GXX" = yes; then
              if test "$with_gnu_ld" = no; then
-               archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
              else
-               archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
              fi
            fi
            link_all_deplibs_CXX=yes
@@ -13111,7 +13786,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
            hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
            export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13148,26 +13823,26 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
            case `$CC -V` in
-           *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+           *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
              prelink_cmds_CXX='tpldir=Template.dir~
                rm -rf $tpldir~
                $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
              old_archive_cmds_CXX='tpldir=Template.dir~
                rm -rf $tpldir~
                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
                $RANLIB $oldlib'
              archive_cmds_CXX='tpldir=Template.dir~
                rm -rf $tpldir~
                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
              archive_expsym_cmds_CXX='tpldir=Template.dir~
                rm -rf $tpldir~
                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
              ;;
-           *) # Version 6 will use weak symbols
+           *) # Version 6 and above use weak symbols
              archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
              archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
              ;;
@@ -13175,7 +13850,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
            hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
            export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-           whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+           whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
             ;;
          cxx*)
            # Compaq C++
@@ -13194,9 +13869,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
            ;;
-         xl*)
+         xl* | mpixl* | bgxl*)
            # IBM XL 8.0 on PPC, with GNU ld
            hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
            export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13216,13 +13891,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
              archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
              archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
              hardcode_libdir_flag_spec_CXX='-R$libdir'
-             whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
              compiler_needs_object_CXX=yes
 
              # Not sure whether something based on
              # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
              # would be better.
-             output_verbose_link_cmd='echo'
+             output_verbose_link_cmd='func_echo_all'
 
              # Archives containing C++ object files must be created using
              # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -13291,7 +13966,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
            export_dynamic_flag_spec_CXX='${wl}-E'
            whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
          fi
-         output_verbose_link_cmd=echo
+         output_verbose_link_cmd=func_echo_all
        else
          ld_shlibs_CXX=no
        fi
@@ -13326,15 +14001,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
            case $host in
              osf3*)
                allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
                hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
                ;;
              *)
                allow_undefined_flag_CXX=' -expect_unresolved \*'
-               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
                archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
                  echo "-hidden">> $lib.exp~
-                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
                  $RM $lib.exp'
                hardcode_libdir_flag_spec_CXX='-rpath $libdir'
                ;;
@@ -13350,17 +14025,17 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
            ;;
          *)
            if test "$GXX" = yes && test "$with_gnu_ld" = no; then
              allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
              case $host in
                osf3*)
-                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
                  ;;
                *)
-                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
                  ;;
              esac
 
@@ -13370,7 +14045,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
              # Commands to make compiler produce verbose output that lists
              # what "hidden" libraries, object files and flags are used when
              # linking a shared library.
-             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
            else
              # FIXME: insert proper C++ library support
@@ -13406,7 +14081,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
       solaris*)
         case $cc_basename in
-          CC*)
+          CC* | sunCC*)
            # Sun C++ 4.2, 5.x and Centerline C++
             archive_cmds_need_lc_CXX=yes
            no_undefined_flag_CXX=' -zdefs'
@@ -13427,7 +14102,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
            esac
            link_all_deplibs_CXX=yes
 
-           output_verbose_link_cmd='echo'
+           output_verbose_link_cmd='func_echo_all'
 
            # Archives containing C++ object files must be created using
            # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -13447,14 +14122,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
            if test "$GXX" = yes && test "$with_gnu_ld" = no; then
              no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
              if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-               archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
                archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                 $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
                # linking a shared library.
-               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              else
                # g++ 2.7 appears to require `-G' NOT `-shared' on this
                # platform.
@@ -13465,7 +14140,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
                # linking a shared library.
-               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              fi
 
              hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
@@ -13519,6 +14194,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           CC*)
            archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
            archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+             '"$old_archive_cmds_CXX"
+           reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+             '"$reload_cmds_CXX"
            ;;
          *)
            archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -13580,6 +14259,14 @@ private:
 };
 _LT_EOF
 
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -13593,7 +14280,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -13602,13 +14289,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
           test $p = "-R"; then
         prev=$p
         continue
-       else
-        prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-        case $p in
-        -L* | -R*)
+        case ${prev} in
+        -L | -R)
           # Internal compiler library paths should come after those
           # provided the user.  The postdeps already come after the
           # user supplied libs so there is no need to process them.
@@ -13628,8 +14324,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
           postdeps_CXX="${postdeps_CXX} ${prev}${p}"
         fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -13665,6 +14363,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 case $host_os in
@@ -13700,7 +14399,7 @@ linux*)
 
 solaris*)
   case $cc_basename in
-  CC*)
+  CC* | sunCC*)
     # The more standards-conforming stlport4 library is
     # incompatible with the Cstd library. Avoid specifying
     # it if it's in CXXFLAGS. Ignore libCrun as
@@ -13765,8 +14464,6 @@ fi
 lt_prog_compiler_pic_CXX=
 lt_prog_compiler_static_CXX=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -13816,6 +14513,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       # DJGPP does not support shared libraries at all
       lt_prog_compiler_pic_CXX=
       ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
     interix[3-9]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
@@ -13865,6 +14567,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
          ;;
        esac
        ;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+       ;;
       dgux*)
        case $cc_basename in
          ec++*)
@@ -13954,8 +14661,8 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
            lt_prog_compiler_pic_CXX=
            lt_prog_compiler_static_CXX='-non_shared'
            ;;
-         xlc* | xlC*)
-           # IBM XL 8.0 on PPC
+         xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+           # IBM XL 8.0, 9.0 on PPC and BlueGene
            lt_prog_compiler_wl_CXX='-Wl,'
            lt_prog_compiler_pic_CXX='-qpic'
            lt_prog_compiler_static_CXX='-qstaticlink'
@@ -14017,7 +14724,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
        ;;
       solaris*)
        case $cc_basename in
-         CC*)
+         CC* | sunCC*)
            # Sun C++ 4.2, 5.x and Centerline C++
            lt_prog_compiler_pic_CXX='-KPIC'
            lt_prog_compiler_static_CXX='-Bstatic'
@@ -14082,10 +14789,17 @@ case $host_os in
     lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
 
 #
 # Check to make sure the PIC flag actually works.
@@ -14093,7 +14807,7 @@ $as_echo "$lt_prog_compiler_pic_CXX" >&6; }
 if test -n "$lt_prog_compiler_pic_CXX"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works_CXX=no
@@ -14109,15 +14823,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14112: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14116: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works_CXX=yes
 
 
 
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works_CXX=no
@@ -14162,7 +14878,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works_CXX=yes
@@ -14189,7 +14905,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_CXX=no
@@ -14208,16 +14924,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14211: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14215: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_CXX=yes
@@ -14241,7 +14957,7 @@ $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_CXX=no
@@ -14260,16 +14976,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14263: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14267: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_CXX=yes
 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
 
   export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
   case $host_os in
   aix[4-9]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     else
       export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     export_symbols_cmds_CXX="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
+    case $cc_basename in
+    cl*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
     link_all_deplibs_CXX=no
-  ;;
+    ;;
   *)
     export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
@@ -14375,44 +15101,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_CXX
-       pic_flag=$lt_prog_compiler_pic_CXX
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
-        allow_undefined_flag_CXX=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$lt_prog_compiler_wl_CXX
+         pic_flag=$lt_prog_compiler_pic_CXX
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+         allow_undefined_flag_CXX=
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-         archive_cmds_need_lc_CXX=no
-        else
-         archive_cmds_need_lc_CXX=yes
-        fi
-        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+         then
+           lt_cv_archive_cmds_need_lc_CXX=no
+         else
+           lt_cv_archive_cmds_need_lc_CXX=yes
+         fi
+         allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
       ;;
     esac
   fi
@@ -14480,8 +15212,6 @@ esac
 
 
 
-
-
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -14507,7 +15237,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -14516,7 +15246,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -14569,7 +15299,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -14581,7 +15311,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -14600,8 +15330,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -14622,36 +15353,82 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+    *)
+      sys_lib_search_path_spec="$LIB"
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
+        # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
       else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
       ;;
     esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -14671,7 +15448,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -14679,10 +15456,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -14690,7 +15463,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -14708,7 +15481,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -14728,12 +15501,26 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -14779,12 +15566,14 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -14800,7 +15589,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
        if test "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
+               version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
        fi ;;
@@ -14837,9 +15626,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -14847,12 +15636,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -14865,13 +15659,17 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
@@ -14880,7 +15678,7 @@ rm -f core conftest.err conftest.$ac_objext \
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
   fi
 
@@ -14924,7 +15722,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -14993,7 +15791,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -15018,7 +15816,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -15042,7 +15840,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -15073,7 +15871,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -15083,7 +15881,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -15102,213 +15900,748 @@ if test "$GCC" = yes; then
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+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 "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
 fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.20
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+
 fi
 
+# Version
 
 
 
 
+HB_VERSION_MAJOR=0
+HB_VERSION_MINOR=9
+HB_VERSION_MICRO=12
+HB_VERSION=0.9.12
 
 
 
 
 
+# Libtool version
 
 
 
 
+HB_LIBTOOL_VERSION_INFO=912:0:912
 
 
 
+# Functions and headers
+for ac_func in atexit mprotect sysconf getpagesize mmap _setmode isatty
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
 
+fi
+done
 
+for ac_header in unistd.h sys/mman.h io.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
 
 
+# Compiler flags
 
+if test "x$GCC" = "xyes"; then
 
+       # Make symbols link locally
+       LDFLAGS="$LDFLAGS -Bsymbolic-functions"
 
+       # Make sure we don't link to libstdc++
+       CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions"
 
+       # Assorted warnings
+       CXXFLAGS="$CXXFLAGS -Wcast-align"
 
+       case "$host" in
+               *-*-mingw*)
+               ;;
+               *)
+                       # Hide inline methods
+                       CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
+               ;;
+       esac
 
+       case "$host" in
+               arm-*-*)
+                       # Request byte alignment on arm
+                       CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
+               ;;
+       esac
+fi
 
+ if test "x$GCC" = "xyes"; then
+  HAVE_GCC_TRUE=
+  HAVE_GCC_FALSE='#'
+else
+  HAVE_GCC_TRUE='#'
+  HAVE_GCC_FALSE=
+fi
 
 
+hb_os_win32=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5
+$as_echo_n "checking for native Win32... " >&6; }
+case "$host" in
+  *-*-mingw*)
+    hb_os_win32=yes
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hb_os_win32" >&5
+$as_echo "$hb_os_win32" >&6; }
+ if test "$hb_os_win32" = "yes"; then
+  OS_WIN32_TRUE=
+  OS_WIN32_FALSE='#'
+else
+  OS_WIN32_TRUE='#'
+  OS_WIN32_FALSE=
+fi
 
 
+have_pthread=false
+if test "$hb_os_win32" = no; then
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action_CXX=
-if test -n "$hardcode_libdir_flag_spec_CXX" ||
-   test -n "$runpath_var_CXX" ||
-   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+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
 
-  # We can hardcode non-existent directories.
-  if test "$hardcode_direct_CXX" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
-     test "$hardcode_minus_L_CXX" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action_CXX=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action_CXX=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action_CXX=unsupported
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
-$as_echo "$hardcode_action_CXX" >&6; }
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
+$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-if test "$hardcode_action_CXX" = relink ||
-   test "$inherit_rpath_CXX" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_join ();
+int
+main ()
+{
+return pthread_join ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test x"$ax_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+#      ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case ${host_os} in
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+        ;;
 
+        darwin*)
+        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ;;
+esac
 
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
 
+        case $flag in
+                none)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+                ;;
 
+                -*)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
+$as_echo_n "checking whether pthreads work with $flag... " >&6; }
+                PTHREAD_CFLAGS="$flag"
+                ;;
 
+                pthread-config)
+                # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ax_pthread_config"; then
+  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ax_pthread_config="yes"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
+fi
+fi
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-  fi # test -n "$compiler"
 
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
+                if test x"$ax_pthread_config" = xno; then continue; fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
 
-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 the pthreads library -l$flag" >&5
+$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
 
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
 
-# Version
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = xyes; then
+                break;
+        fi
 
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
 
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+        attr_name=unknown
+        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $attr; return attr /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  attr_name=$attr; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        done
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
+$as_echo "$attr_name" >&6; }
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
 
-HB_VERSION_MAJOR=0
-HB_VERSION_MINOR=9
-HB_VERSION_MICRO=3
-HB_VERSION=0.9.3
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $attr_name
+_ACEOF
 
+        fi
 
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
+$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
+        flag=no
+        case ${host_os} in
+            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+            osf* | hpux*) flag="-D_REENTRANT";;
+            solaris*)
+            if test "$GCC" = "yes"; then
+                flag="-D_REENTRANT"
+            else
+                flag="-mt -D_REENTRANT"
+            fi
+            ;;
+        esac
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
+$as_echo "${flag}" >&6; }
+        if test "x$flag" != xno; then
+            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
 
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
 
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-# Libtool version
+                    #include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_PRIO_INHERIT=yes
+else
+  ax_cv_PTHREAD_PRIO_INHERIT=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: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
 
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
 
+fi
 
-HB_LIBTOOL_VERSION_INFO=903:0:903
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
 
+        # More AIX lossage: must compile with xlc_r or cc_r
+        if test x"$GCC" != xyes; then
+          for ac_prog in xlc_r cc_r
+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_PTHREAD_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PTHREAD_CC"; then
+  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_PTHREAD_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
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-# Functions and headers
-for ac_func in atexit mprotect sysconf getpagesize sched_yield mmap _setmode isatty
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
+  test -n "$PTHREAD_CC" && break
 done
+test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
 
-for ac_header in unistd.h sys/mman.h sched.h io.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
+        else
+          PTHREAD_CC=$CC
+        fi
+else
+        PTHREAD_CC="$CC"
 fi
 
-done
-
 
-# Compiler flags
 
-if test "x$GCC" = "xyes"; then
 
-       # Make symbols link locally
-       LDFLAGS="$LDFLAGS -Bsymbolic-functions"
 
-       # Make sure we don't link to libstdc++
-       CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions"
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
+        have_pthread=true
+        :
+else
+        ax_pthread_ok=no
 
-       # Assorted warnings
-       CXXFLAGS="$CXXFLAGS -Wcast-align"
+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
 
-       case "$host" in
-               *-*-mingw*)
-               ;;
-               *)
-                       # Hide inline methods
-                       CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
-               ;;
-       esac
 
-       case "$host" in
-               arm-*-*)
-                       # Request byte alignment on arm
-                       CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
-               ;;
-       esac
 fi
+if $have_pthread; then
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5
-$as_echo_n "checking for native Win32... " >&6; }
-case "$host" in
-  *-*-mingw*)
-    hb_os_win32=yes
-    ;;
-  *)
-    hb_os_win32=no
-    ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hb_os_win32" >&5
-$as_echo "$hb_os_win32" >&6; }
- if test "$hb_os_win32" = "yes"; then
-  OS_WIN32_TRUE=
-  OS_WIN32_FALSE='#'
+$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
+
+fi
+ if $have_pthread; then
+  HAVE_PTHREAD_TRUE=
+  HAVE_PTHREAD_FALSE='#'
 else
-  OS_WIN32_TRUE='#'
-  OS_WIN32_FALSE=
+  HAVE_PTHREAD_TRUE='#'
+  HAVE_PTHREAD_FALSE=
 fi
 
 
 
 
 
+have_ucdn=true
+if $have_ucdn; then
 
+$as_echo "#define HAVE_UCDN 1" >>confdefs.h
 
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
-       if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $PKG_CONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_PKG_CONFIG"; then
-  ac_pt_PKG_CONFIG=$PKG_CONFIG
-  # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $ac_pt_PKG_CONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
 fi
-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-if test -n "$ac_pt_PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+ if $have_ucdn; then
+  HAVE_UCDN_TRUE=
+  HAVE_UCDN_FALSE='#'
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  HAVE_UCDN_TRUE='#'
+  HAVE_UCDN_FALSE=
 fi
 
-  if test "x$ac_pt_PKG_CONFIG" = x; then
-    PKG_CONFIG=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    PKG_CONFIG=$ac_pt_PKG_CONFIG
-  fi
-else
-  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
-fi
 
-fi
-if test -n "$PKG_CONFIG"; then
-       _pkg_min_version=0.9.0
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
-       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-               PKG_CONFIG=""
-       fi
 
-fi
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
@@ -15962,6 +17195,7 @@ $as_echo "yes" >&6; }
        have_icu=true
 fi
 if $have_icu; then
+       CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
 
 $as_echo "#define HAVE_ICU 1" >>confdefs.h
 
 
 
 pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICU_LE" >&5
+$as_echo_n "checking for ICU_LE... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ICU_LE_CFLAGS"; then
+        pkg_cv_ICU_LE_CFLAGS="$ICU_LE_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-le icu-uc\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "icu-le icu-uc") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ICU_LE_CFLAGS=`$PKG_CONFIG --cflags "icu-le icu-uc" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ICU_LE_LIBS"; then
+        pkg_cv_ICU_LE_LIBS="$ICU_LE_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-le icu-uc\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "icu-le icu-uc") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ICU_LE_LIBS=`$PKG_CONFIG --libs "icu-le icu-uc" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               ICU_LE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "icu-le icu-uc"`
+        else
+               ICU_LE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "icu-le icu-uc"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$ICU_LE_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                have_icu_le=false
+elif test $pkg_failed = untried; then
+       have_icu_le=false
+else
+       ICU_LE_CFLAGS=$pkg_cv_ICU_LE_CFLAGS
+       ICU_LE_LIBS=$pkg_cv_ICU_LE_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       have_icu_le=true
+fi
+if $have_icu_le; then
+
+$as_echo "#define HAVE_ICU_LE 1" >>confdefs.h
+
+fi
+ if $have_icu_le; then
+  HAVE_ICU_LE_TRUE=
+  HAVE_ICU_LE_FALSE='#'
+else
+  HAVE_ICU_LE_TRUE='#'
+  HAVE_ICU_LE_FALSE=
+fi
+
+
+
+
+pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GRAPHITE2" >&5
 $as_echo_n "checking for GRAPHITE2... " >&6; }
 
@@ -16144,7 +17464,7 @@ $as_echo "#define HAVE_FREETYPE 1" >>confdefs.h
        for ac_func in FT_Face_GetCharVariantIndex
 do :
   ac_fn_c_check_func "$LINENO" "FT_Face_GetCharVariantIndex" "ac_cv_func_FT_Face_GetCharVariantIndex"
-if test "x$ac_cv_func_FT_Face_GetCharVariantIndex" = x""yes; then :
+if test "x$ac_cv_func_FT_Face_GetCharVariantIndex" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FT_FACE_GETCHARVARIANTINDEX 1
 _ACEOF
 
 
 
-for ac_header in usp10.h windows.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ScriptShapeOpenType in usp10" >&5
+$as_echo_n "checking for ScriptShapeOpenType in usp10... " >&6; }
+saved_LIBS=$LIBS
+LIBS="$LIBS -lusp10 -lgdi32"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+        #define _WIN32_WINNT 0x0600
+        #include <windows.h>
+        #include <usp10.h>
+
+int
+main ()
+{
+ScriptShapeOpenType
+  ;
+  return 0;
+}
 _ACEOF
- have_uniscribe=true
+if ac_fn_c_try_link "$LINENO"; then :
+  have_uniscribe=true; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  have_uniscribe=false
+  have_uniscribe=false;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
-done
-
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$saved_LIBS
 if $have_uniscribe; then
        UNISCRIBE_CFLAGS=
        UNISCRIBE_LIBS="-lusp10 -lgdi32"
 
 
 
-for ac_header in ApplicationServices/ApplicationServices.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "ApplicationServices/ApplicationServices.h" "ac_cv_header_ApplicationServices_ApplicationServices_h" "$ac_includes_default"
-if test "x$ac_cv_header_ApplicationServices_ApplicationServices_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H 1
-_ACEOF
- have_coretext=true
+ac_fn_c_check_type "$LINENO" "CTFontRef" "ac_cv_type_CTFontRef" "#include <ApplicationServices/ApplicationServices.h>
+"
+if test "x$ac_cv_type_CTFontRef" = xyes; then :
+  have_coretext=true
 else
   have_coretext=false
 fi
 
-done
-
 if $have_coretext; then
        CORETEXT_CFLAGS=
-       CORETEXT_LIBS=
+       CORETEXT_LIBS="-framework ApplicationServices"
 
 
 
@@ -16235,7 +17562,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Intel atomic primitives" >&5
 $as_echo_n "checking for Intel atomic primitives... " >&6; }
-if test "${hb_cv_have_intel_atomic_primitives+set}" = set; then :
+if ${hb_cv_have_intel_atomic_primitives+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -16273,7 +17600,122 @@ $as_echo "#define HAVE_INTEL_ATOMIC_PRIMITIVES 1" >>confdefs.h
 fi
 
 
-ac_config_files="$ac_config_files Makefile harfbuzz.pc src/Makefile src/hb-version.h src/hb-old/Makefile util/Makefile test/Makefile test/api/Makefile test/shaping/Makefile"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris atomic operations" >&5
+$as_echo_n "checking for Solaris atomic operations... " >&6; }
+if ${hb_cv_have_solaris_atomic_ops+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+       hb_cv_have_solaris_atomic_ops=false
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+               #include <atomic.h>
+               /* This requires Solaris Studio 12.2 or newer: */
+               #include <mbarrier.h>
+               void memory_barrier (void) { __machine_rw_barrier (); }
+               int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
+               void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  hb_cv_have_solaris_atomic_ops=true
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hb_cv_have_solaris_atomic_ops" >&5
+$as_echo "$hb_cv_have_solaris_atomic_ops" >&6; }
+if $hb_cv_have_solaris_atomic_ops; then
+
+$as_echo "#define HAVE_SOLARIS_ATOMIC_OPS 1" >>confdefs.h
+
+fi
+
+if test "$os_win32" = no && ! $have_pthread; then
+       for ac_header in sched.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
+if test "x$ac_cv_header_sched_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SCHED_H 1
+_ACEOF
+
+fi
+
+done
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sched_yield" >&5
+$as_echo_n "checking for library containing sched_yield... " >&6; }
+if ${ac_cv_search_sched_yield+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sched_yield ();
+int
+main ()
+{
+return sched_yield ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_sched_yield=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_sched_yield+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_sched_yield+:} false; then :
+
+else
+  ac_cv_search_sched_yield=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sched_yield" >&5
+$as_echo "$ac_cv_search_sched_yield" >&6; }
+ac_res=$ac_cv_search_sched_yield
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+$as_echo "#define HAVE_SCHED_YIELD 1" >>confdefs.h
+
+fi
+
+fi
+
+
+ac_config_files="$ac_config_files Makefile harfbuzz.pc src/Makefile src/hb-version.h src/hb-icu-le/Makefile src/hb-old/Makefile src/hb-ucdn/Makefile util/Makefile test/Makefile test/api/Makefile test/shaping/Makefile"
 
 
 cat >confcache <<\_ACEOF
@@ -16340,10 +17782,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    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;}
-    cat confcache >$cache_file
+      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;}
@@ -16359,6 +17812,7 @@ 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$//'
@@ -16382,79 +17836,91 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
+  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.
+  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.
+  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__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+if test -z "${HAVE_GCC_TRUE}" && test -z "${HAVE_GCC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_GCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then
-  as_fn_error "conditional \"OS_WIN32\" was never defined.
+  as_fn_error $? "conditional \"OS_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_PTHREAD_TRUE}" && test -z "${HAVE_PTHREAD_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_PTHREAD\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_OT_TRUE}" && test -z "${HAVE_OT_FALSE}"; then
-  as_fn_error "conditional \"HAVE_OT\" was never defined.
+  as_fn_error $? "conditional \"HAVE_OT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_HB_OLD_TRUE}" && test -z "${HAVE_HB_OLD_FALSE}"; then
-  as_fn_error "conditional \"HAVE_HB_OLD\" was never defined.
+  as_fn_error $? "conditional \"HAVE_HB_OLD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_UCDN_TRUE}" && test -z "${HAVE_UCDN_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_UCDN\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then
-  as_fn_error "conditional \"HAVE_GLIB\" was never defined.
+  as_fn_error $? "conditional \"HAVE_GLIB\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_GTHREAD_TRUE}" && test -z "${HAVE_GTHREAD_FALSE}"; then
-  as_fn_error "conditional \"HAVE_GTHREAD\" was never defined.
+  as_fn_error $? "conditional \"HAVE_GTHREAD\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_GOBJECT_TRUE}" && test -z "${HAVE_GOBJECT_FALSE}"; then
-  as_fn_error "conditional \"HAVE_GOBJECT\" was never defined.
+  as_fn_error $? "conditional \"HAVE_GOBJECT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_CAIRO_TRUE}" && test -z "${HAVE_CAIRO_FALSE}"; then
-  as_fn_error "conditional \"HAVE_CAIRO\" was never defined.
+  as_fn_error $? "conditional \"HAVE_CAIRO\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_CAIRO_FT_TRUE}" && test -z "${HAVE_CAIRO_FT_FALSE}"; then
-  as_fn_error "conditional \"HAVE_CAIRO_FT\" was never defined.
+  as_fn_error $? "conditional \"HAVE_CAIRO_FT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_ICU_TRUE}" && test -z "${HAVE_ICU_FALSE}"; then
-  as_fn_error "conditional \"HAVE_ICU\" was never defined.
+  as_fn_error $? "conditional \"HAVE_ICU\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_ICU_LE_TRUE}" && test -z "${HAVE_ICU_LE_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_ICU_LE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_GRAPHITE2_TRUE}" && test -z "${HAVE_GRAPHITE2_FALSE}"; then
-  as_fn_error "conditional \"HAVE_GRAPHITE2\" was never defined.
+  as_fn_error $? "conditional \"HAVE_GRAPHITE2\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_FREETYPE_TRUE}" && test -z "${HAVE_FREETYPE_FALSE}"; then
-  as_fn_error "conditional \"HAVE_FREETYPE\" was never defined.
+  as_fn_error $? "conditional \"HAVE_FREETYPE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_UNISCRIBE_TRUE}" && test -z "${HAVE_UNISCRIBE_FALSE}"; then
-  as_fn_error "conditional \"HAVE_UNISCRIBE\" was never defined.
+  as_fn_error $? "conditional \"HAVE_UNISCRIBE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_CORETEXT_TRUE}" && test -z "${HAVE_CORETEXT_FALSE}"; then
-  as_fn_error "conditional \"HAVE_CORETEXT\" was never defined.
+  as_fn_error $? "conditional \"HAVE_CORETEXT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -16555,6 +18021,7 @@ fi
 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
@@ -16600,19 +18067,19 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# 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.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  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: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -16808,7 +18275,7 @@ $as_echo X"$as_dir" |
       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"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -16861,8 +18328,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by HarfBuzz $as_me 0.9.3, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+This file was extended by HarfBuzz $as_me 0.9.12, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -16928,11 +18395,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-HarfBuzz config.status 0.9.3
-configured by $0, generated by GNU Autoconf 2.65,
+HarfBuzz config.status 0.9.12
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -16950,11 +18417,16 @@ 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
@@ -16976,6 +18448,7 @@ do
     $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;;
@@ -16988,7 +18461,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -16997,7 +18470,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -17051,184 +18524,208 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 sed_quote_subst='$sed_quote_subst'
 double_quote_subst='$double_quote_subst'
 delay_variable_subst='$delay_variable_subst'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
-LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
 
 LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
-for var in SED \
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
 GREP \
 EGREP \
 FGREP \
@@ -17241,8 +18738,13 @@ reload_flag \
 OBJDUMP \
 deplibs_check_method \
 file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
 AR \
 AR_FLAGS \
+archiver_list_spec \
 STRIP \
 RANLIB \
 CC \
@@ -17252,14 +18754,14 @@ lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-SHELL \
-ECHO \
+nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
 lt_prog_compiler_pic \
+lt_prog_compiler_wl \
 lt_prog_compiler_static \
 lt_cv_prog_compiler_c_o \
 need_locks \
+MANIFEST_TOOL \
 DSYMUTIL \
 NMEDIT \
 LIPO \
@@ -17273,9 +18775,7 @@ with_gnu_ld \
 allow_undefined_flag \
 no_undefined_flag \
 hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
-fix_srcfile_path \
 exclude_expsyms \
 include_expsyms \
 file_list_spec \
@@ -17283,6 +18783,7 @@ variables_saved_for_relink \
 libname_spec \
 library_names_spec \
 soname_spec \
+install_override_mode \
 finish_eval \
 old_striplib \
 striplib \
@@ -17293,10 +18794,11 @@ predeps \
 postdeps \
 compiler_lib_search_path \
 LD_CXX \
+reload_flag_CXX \
 compiler_CXX \
 lt_prog_compiler_no_builtin_flag_CXX \
-lt_prog_compiler_wl_CXX \
 lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
 lt_prog_compiler_static_CXX \
 lt_cv_prog_compiler_c_o_CXX \
 export_dynamic_flag_spec_CXX \
@@ -17306,9 +18808,7 @@ with_gnu_ld_CXX \
 allow_undefined_flag_CXX \
 no_undefined_flag_CXX \
 hardcode_libdir_flag_spec_CXX \
-hardcode_libdir_flag_spec_ld_CXX \
 hardcode_libdir_separator_CXX \
-fix_srcfile_path_CXX \
 exclude_expsyms_CXX \
 include_expsyms_CXX \
 file_list_spec_CXX \
@@ -17318,9 +18818,9 @@ postdep_objects_CXX \
 predeps_CXX \
 postdeps_CXX \
 compiler_lib_search_path_CXX; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -17342,11 +18842,13 @@ module_cmds \
 module_expsym_cmds \
 export_symbols_cmds \
 prelink_cmds \
+postlink_cmds \
 postinstall_cmds \
 postuninstall_cmds \
 finish_cmds \
 sys_lib_search_path_spec \
 sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
 old_archive_cmds_CXX \
 old_archive_from_new_cmds_CXX \
 old_archive_from_expsyms_cmds_CXX \
@@ -17355,10 +18857,11 @@ archive_expsym_cmds_CXX \
 module_cmds_CXX \
 module_expsym_cmds_CXX \
 export_symbols_cmds_CXX \
-prelink_cmds_CXX; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -17366,12 +18869,6 @@ prelink_cmds_CXX; do
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
-  ;;
-esac
-
 ac_aux_dir='$ac_aux_dir'
 xsi_shell='$xsi_shell'
 lt_shell_append='$lt_shell_append'
     "harfbuzz.pc") CONFIG_FILES="$CONFIG_FILES harfbuzz.pc" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
     "src/hb-version.h") CONFIG_FILES="$CONFIG_FILES src/hb-version.h" ;;
+    "src/hb-icu-le/Makefile") CONFIG_FILES="$CONFIG_FILES src/hb-icu-le/Makefile" ;;
     "src/hb-old/Makefile") CONFIG_FILES="$CONFIG_FILES src/hb-old/Makefile" ;;
+    "src/hb-ucdn/Makefile") CONFIG_FILES="$CONFIG_FILES src/hb-ucdn/Makefile" ;;
     "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
     "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
     "test/api/Makefile") CONFIG_FILES="$CONFIG_FILES test/api/Makefile" ;;
     "test/shaping/Makefile") CONFIG_FILES="$CONFIG_FILES test/shaping/Makefile" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $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
 }
@@ -17448,12 +18948,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || 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.
@@ -17470,12 +18971,12 @@ if test "x$ac_cr" = x; then
 fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -17484,18 +18985,18 @@ _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 '$'`
+  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
+    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
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -17503,7 +19004,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -17551,7 +19052,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = "\a"
 
@@ -17583,21 +19084,29 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+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 $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# 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[        ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[    ]*\):*/\1/
+  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
@@ -17609,7 +19118,7 @@ fi # test -n "$CONFIG_FILES"
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -17621,11 +19130,11 @@ _ACEOF
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  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
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -17710,7 +19219,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -17723,7 +19232,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -17742,7 +19251,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) 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 `:'.
@@ -17751,7 +19260,7 @@ do
           [\\/$]*) false;;
           *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
           esac ||
-          as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+          as_fn_error "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'"
@@ -17777,8 +19286,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -17914,23 +19423,24 @@ s&@INSTALL@&$ac_INSTALL&;t t
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+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' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { 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
+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;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) 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
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -17939,21 +19449,21 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      && 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 "$tmp/config.h" "$ac_file" \
-       || as_fn_error "could not create $ac_file" "$LINENO" 5
+      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 "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      && 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"
@@ -18114,7 +19624,8 @@ $as_echo X"$file" |
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -18162,6 +19673,15 @@ pic_mode=$pic_mode
 # Whether or not to optimize for fast installation.
 fast_install=$enable_fast_install
 
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
 # The host system.
 host_alias=$host_alias
 host=$host
@@ -18211,9 +19731,11 @@ SP2NL=$lt_lt_SP2NL
 # turn newlines into spaces.
 NL2SP=$lt_lt_NL2SP
 
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
 
 # An object symbol dumper.
 OBJDUMP=$lt_OBJDUMP
@@ -18221,13 +19743,30 @@ OBJDUMP=$lt_OBJDUMP
 # Method to check whether dependent libraries are shared objects.
 deplibs_check_method=$lt_deplibs_check_method
 
-# Command to use when deplibs_check_method == "file_magic".
+# Command to use when deplibs_check_method = "file_magic".
 file_magic_cmd=$lt_file_magic_cmd
 
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
 # The archiver.
 AR=$lt_AR
+
+# Flags to create an archive.
 AR_FLAGS=$lt_AR_FLAGS
 
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
 # A symbol stripping program.
 STRIP=$lt_STRIP
 
@@ -18236,6 +19775,9 @@ RANLIB=$lt_RANLIB
 old_postinstall_cmds=$lt_old_postinstall_cmds
 old_postuninstall_cmds=$lt_old_postuninstall_cmds
 
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
 # A C compiler.
 LTCC=$lt_CC
 
@@ -18254,14 +19796,14 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 # Transform the output of nm in a C name address pair when lib prefix is needed.
 global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
 
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
 
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
 
 # Used to examine libraries when file_magic_cmd begins with "file".
 MAGIC_CMD=$MAGIC_CMD
@@ -18269,6 +19811,9 @@ MAGIC_CMD=$MAGIC_CMD
 # Must we lock files when doing compilation?
 need_locks=$lt_need_locks
 
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
 # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
 DSYMUTIL=$lt_DSYMUTIL
 
@@ -18325,6 +19870,9 @@ library_names_spec=$lt_library_names_spec
 # The coded name of the library, if different from the real name.
 soname_spec=$lt_soname_spec
 
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
 # Command to use after installation of a shared archive.
 postinstall_cmds=$lt_postinstall_cmds
 
@@ -18364,6 +19912,10 @@ striplib=$lt_striplib
 # The linker used to build libraries.
 LD=$lt_LD
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds
 
@@ -18376,12 +19928,12 @@ with_gcc=$GCC
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static
 
@@ -18431,10 +19983,6 @@ no_undefined_flag=$lt_no_undefined_flag
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
@@ -18468,9 +20016,6 @@ inherit_rpath=$inherit_rpath
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols
 
@@ -18486,6 +20031,9 @@ include_expsyms=$lt_include_expsyms
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec
 
@@ -18532,212 +20080,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1+=\$2"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1=\$$1\$2"
-}
-
-_LT_EOF
-    ;;
-  esac
-
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 
@@ -18749,6 +20254,10 @@ _LT_EOF
 # The linker used to build libraries.
 LD=$lt_LD_CXX
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds_CXX
 
@@ -18761,12 +20270,12 @@ with_gcc=$GCC_CXX
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic_CXX
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static_CXX
 
@@ -18816,10 +20325,6 @@ no_undefined_flag=$lt_no_undefined_flag_CXX
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
 
@@ -18853,9 +20358,6 @@ inherit_rpath=$inherit_rpath_CXX
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs_CXX
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_CXX
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols_CXX
 
@@ -18871,6 +20373,9 @@ include_expsyms=$lt_include_expsyms_CXX
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds_CXX
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec_CXX
 
@@ -18905,7 +20410,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -18926,10 +20431,59 @@ if test "$no_create" != yes; then
   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 $?
+  $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
 
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}:
+
+Build configuration:
+
+Unicode callbacks (you want at least one):
+       Glib:                   ${have_glib}
+       ICU:                    ${have_icu}
+       UCDN:                   ${have_ucdn}
+
+Font callbacks (the more the better):
+       FreeType:               ${have_freetype}
+
+Tools used for command-line utilities:
+       Cairo:                  ${have_cairo}
+
+Additional shapers (the more the better):
+       Graphite2:              ${have_graphite}
+
+Test / platform shapers (not normally needed):
+       CoreText:               ${have_coretext}
+       ICU Layout Engine:      ${have_icu_le}
+       Old HarfBuzz:           ${have_hb_old}
+       Uniscribe:              ${have_uniscribe}
+" >&5
+$as_echo "$as_me:
+
+Build configuration:
+
+Unicode callbacks (you want at least one):
+       Glib:                   ${have_glib}
+       ICU:                    ${have_icu}
+       UCDN:                   ${have_ucdn}
+
+Font callbacks (the more the better):
+       FreeType:               ${have_freetype}
+
+Tools used for command-line utilities:
+       Cairo:                  ${have_cairo}
+
+Additional shapers (the more the better):
+       Graphite2:              ${have_graphite}
+
+Test / platform shapers (not normally needed):
+       CoreText:               ${have_coretext}
+       ICU Layout Engine:      ${have_icu_le}
+       Old HarfBuzz:           ${have_hb_old}
+       Uniscribe:              ${have_uniscribe}
+" >&6;}
index 916a5d4..202bef9 100644 (file)
@@ -1,10 +1,11 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [0.9.3],
+        [0.9.12],
         [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
         [harfbuzz],
         [http://harfbuzz.org/])
 
+AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_SRCDIR([harfbuzz.pc.in])
 AC_CONFIG_HEADERS([config.h])
 
@@ -19,6 +20,7 @@ LT_INIT([disable-static])
 AC_PROG_CC
 AM_PROG_CC_C_O
 AC_PROG_CXX
+PKG_PROG_PKG_CONFIG([0.20])
 
 # Version
 m4_define(hb_version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]]))
@@ -53,8 +55,8 @@ dnl GOBJECT_INTROSPECTION_CHECK([0.9.0])
 dnl GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
 
 # Functions and headers
-AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize sched_yield mmap _setmode isatty)
-AC_CHECK_HEADERS(unistd.h sys/mman.h sched.h io.h)
+AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap _setmode isatty)
+AC_CHECK_HEADERS(unistd.h sys/mman.h io.h)
 
 # Compiler flags
 AC_CANONICAL_HOST
@@ -86,18 +88,27 @@ if test "x$GCC" = "xyes"; then
        esac
 fi
 
+AM_CONDITIONAL(HAVE_GCC, test "x$GCC" = "xyes")
+
+hb_os_win32=no
 AC_MSG_CHECKING([for native Win32])
 case "$host" in
   *-*-mingw*)
     hb_os_win32=yes
     ;;
-  *)
-    hb_os_win32=no
-    ;;
 esac
 AC_MSG_RESULT([$hb_os_win32])
 AM_CONDITIONAL(OS_WIN32, test "$hb_os_win32" = "yes")
 
+have_pthread=false
+if test "$hb_os_win32" = no; then
+       AX_PTHREAD([have_pthread=true])
+fi
+if $have_pthread; then
+       AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
+fi
+AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
+
 dnl ==========================================================================
 
 have_ot=true
@@ -116,6 +127,14 @@ AM_CONDITIONAL(HAVE_HB_OLD, $have_hb_old)
 
 dnl ===========================================================================
 
+have_ucdn=true
+if $have_ucdn; then
+       AC_DEFINE(HAVE_UCDN, 1, [Have UCDN Unicode functions])
+fi
+AM_CONDITIONAL(HAVE_UCDN, $have_ucdn)
+
+dnl ===========================================================================
+
 PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, have_glib=true, have_glib=false)
 if $have_glib; then
        AC_DEFINE(HAVE_GLIB, 1, [Have glib2 library])
@@ -154,12 +173,21 @@ dnl ==========================================================================
 
 PKG_CHECK_MODULES(ICU, icu-uc, have_icu=true, have_icu=false)
 if $have_icu; then
+       CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
        AC_DEFINE(HAVE_ICU, 1, [Have ICU library])
 fi
 AM_CONDITIONAL(HAVE_ICU, $have_icu)
 
 dnl ==========================================================================
 
+PKG_CHECK_MODULES(ICU_LE, icu-le icu-uc, have_icu_le=true, have_icu_le=false)
+if $have_icu_le; then
+       AC_DEFINE(HAVE_ICU_LE, 1, [Have ICU Layout Engine library])
+fi
+AM_CONDITIONAL(HAVE_ICU_LE, $have_icu_le)
+
+dnl ==========================================================================
+
 PKG_CHECK_MODULES(GRAPHITE2, graphite2, have_graphite=true, have_graphite=false)
 if $have_graphite; then
     AC_DEFINE(HAVE_GRAPHITE2, 1, [Have Graphite library])
@@ -183,7 +211,19 @@ AM_CONDITIONAL(HAVE_FREETYPE, $have_freetype)
 
 dnl ===========================================================================
 
-AC_CHECK_HEADERS(usp10.h windows.h, have_uniscribe=true, have_uniscribe=false)
+AC_MSG_CHECKING([for ScriptShapeOpenType in usp10])
+saved_LIBS=$LIBS
+LIBS="$LIBS -lusp10 -lgdi32"
+AC_LINK_IFELSE([AC_LANG_PROGRAM(
+       [[
+        #define _WIN32_WINNT 0x0600
+        #include <windows.h>
+        #include <usp10.h>
+        ]],
+       ScriptShapeOpenType)],
+       [have_uniscribe=true; AC_MSG_RESULT(yes)],
+       [have_uniscribe=false;AC_MSG_RESULT(no)])
+LIBS=$saved_LIBS
 if $have_uniscribe; then
        UNISCRIBE_CFLAGS=
        UNISCRIBE_LIBS="-lusp10 -lgdi32"
@@ -195,10 +235,10 @@ AM_CONDITIONAL(HAVE_UNISCRIBE, $have_uniscribe)
 
 dnl ===========================================================================
 
-AC_CHECK_HEADERS(ApplicationServices/ApplicationServices.h, have_coretext=true, have_coretext=false)
+AC_CHECK_TYPE(CTFontRef, have_coretext=true, have_coretext=false, [#include <ApplicationServices/ApplicationServices.h>])
 if $have_coretext; then
        CORETEXT_CFLAGS=
-       CORETEXT_LIBS=
+       CORETEXT_LIBS="-framework ApplicationServices"
        AC_SUBST(CORETEXT_CFLAGS)
        AC_SUBST(CORETEXT_LIBS)
        AC_DEFINE(HAVE_CORETEXT, 1, [Have Core Text backend])
@@ -223,12 +263,37 @@ fi
 
 dnl ===========================================================================
 
+AC_CACHE_CHECK([for Solaris atomic operations], hb_cv_have_solaris_atomic_ops, [
+       hb_cv_have_solaris_atomic_ops=false
+       AC_TRY_LINK([
+               #include <atomic.h>
+               /* This requires Solaris Studio 12.2 or newer: */
+               #include <mbarrier.h>
+               void memory_barrier (void) { __machine_rw_barrier (); }
+               int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
+               void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
+               ], [], hb_cv_have_solaris_atomic_ops=true
+       )
+])
+if $hb_cv_have_solaris_atomic_ops; then
+       AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
+fi
+
+if test "$os_win32" = no && ! $have_pthread; then
+       AC_CHECK_HEADERS(sched.h)
+       AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
+fi
+
+dnl ===========================================================================
+
 AC_CONFIG_FILES([
 Makefile
 harfbuzz.pc
 src/Makefile
 src/hb-version.h
+src/hb-icu-le/Makefile
 src/hb-old/Makefile
+src/hb-ucdn/Makefile
 util/Makefile
 test/Makefile
 test/api/Makefile
@@ -236,3 +301,28 @@ test/shaping/Makefile
 ])
 
 AC_OUTPUT
+
+AC_MSG_NOTICE([
+
+Build configuration:
+
+Unicode callbacks (you want at least one):
+       Glib:                   ${have_glib}
+       ICU:                    ${have_icu}
+       UCDN:                   ${have_ucdn}
+
+Font callbacks (the more the better):
+       FreeType:               ${have_freetype}
+
+Tools used for command-line utilities:
+       Cairo:                  ${have_cairo}
+
+Additional shapers (the more the better):
+       Graphite2:              ${have_graphite}
+
+Test / platform shapers (not normally needed):
+       CoreText:               ${have_coretext}
+       ICU Layout Engine:      ${have_icu_le}
+       Old HarfBuzz:           ${have_hb_old}
+       Uniscribe:              ${have_uniscribe}
+])
diff --git a/depcomp b/depcomp
index df8eea7..bd0ac08 100755 (executable)
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,10 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-12-04.11; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
+# 2011 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@ Environment variables:
   object      Object file output by `PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake@gnu.org>.
@@ -90,10 +90,18 @@ if test "$depmode" = msvcmsys; then
    # This is just like msvisualcpp but w/o cygpath translation.
    # Just convert the backslash-escaped backslashes to single forward
    # slashes to satisfy depend.m4
-   cygpath_u="sed s,\\\\\\\\,/,g"
+   cygpath_u='sed s,\\\\,/,g'
    depmode=msvisualcpp
 fi
 
+if test "$depmode" = msvc7msys; then
+   # This is just like msvc7 but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvc7
+fi
+
 case "$depmode" in
 gcc3)
 ## gcc 3 implements dependency tracking that does exactly what
@@ -158,10 +166,12 @@ gcc)
 ' < "$tmpdepfile" |
 ## Some versions of gcc put a space before the `:'.  On the theory
 ## that the space means something, we add a space to the output as
-## well.
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+      | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -405,6 +415,52 @@ tru64)
    rm -f "$tmpdepfile"
    ;;
 
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test "$stat" = 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/      \1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/        /
+  G
+  p
+}' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
   # dependency tracking mechanisms from slower ones.
@@ -503,7 +559,9 @@ makedepend)
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
   sed '1,2d' "$tmpdepfile" | tr ' ' '
 ' | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
index 6781b98..a9244eb 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-01-19.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -156,6 +156,10 @@ while test $# -ne 0; do
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
+       # Protect names problematic for `test' and other utilities.
+       case $dst_arg in
+         -* | [=\(\)!]) dst_arg=./$dst_arg;;
+       esac
        shift;;
 
     -T) no_target_directory=true;;
@@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
+    # Protect names problematic for `test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
   done
 fi
 
@@ -200,7 +208,11 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -228,9 +240,9 @@ fi
 
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for `test' and other utilities.
   case $src in
-    -*) src=./$src;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -252,12 +264,7 @@ do
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
     dst=$dst_arg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst;;
-    esac
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
@@ -385,7 +392,7 @@ do
 
       case $dstdir in
        /*) prefix='/';;
-       -*) prefix='./';;
+       [-=\(\)!]*) prefix='./';;
        *)  prefix='';;
       esac
 
@@ -403,7 +410,7 @@ do
 
       for d
       do
-       test -z "$d" && continue
+       test X"$d" = X && continue
 
        prefix=$prefix$d
        if test -d "$prefix"; then
old mode 100755 (executable)
new mode 100644 (file)
index 7ed280b..c2852d8
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,9 +1,9 @@
-# Generated from ltmain.m4sh.
 
-# ltmain.sh (GNU libtool) 2.2.6b
+# libtool (GNU libtool) 2.4.2
 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 #
 # Provide generalized library-building support services.
 #
-#     --config             show all configuration variables
-#     --debug              enable verbose shell tracing
-# -n, --dry-run            display commands without modifying any files
-#     --features           display basic configuration information and exit
-#     --mode=MODE          use operation mode MODE
-#     --preserve-dup-deps  don't remove duplicate dependency libraries
-#     --quiet, --silent    don't print informational messages
-#     --tag=TAG            use configuration variables from tag TAG
-# -v, --verbose            print informational messages (default)
-#     --version            print version information
-# -h, --help               print short or long help message
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --no-warn            don't display warning messages
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
 #
 # MODE must be one of the following:
 #
-#       clean              remove files from the build directory
-#       compile            compile a source file into a libtool object
-#       execute            automatically set library path, then run a program
-#       finish             complete the installation of libtool libraries
-#       install            install libraries or executables
-#       link               create a library or an executable
-#       uninstall          remove libraries from an installed directory
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
 #
-# MODE-ARGS vary depending on the MODE.
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
 # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
 #
 # When reporting a bug, please describe a test case to reproduce it and
 # include the following information:
 #
-#       host-triplet:  $host
-#       shell:         $SHELL
-#       compiler:              $LTCC
-#       compiler flags:                $LTCFLAGS
-#       linker:                $LD (gnu? $with_gnu_ld)
-#       $progname:             (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1
-#       automake:              $automake_version
-#       autoconf:              $autoconf_version
+#         host-triplet:        $host
+#         shell:               $SHELL
+#         compiler:            $LTCC
+#         compiler flags:              $LTCFLAGS
+#         linker:              $LD (gnu? $with_gnu_ld)
+#         $progname:   (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1
+#         automake:    $automake_version
+#         autoconf:    $autoconf_version
 #
 # Report bugs to <bug-libtool@gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
-PROGRAM=ltmain.sh
+PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.2.6b Debian-2.2.6b-2ubuntu1"
+VERSION="2.4.2 Debian-2.4.2-1ubuntu1"
 TIMESTAMP=""
-package_revision=1.3017
+package_revision=1.3337
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -91,10 +98,15 @@ fi
 BIN_SH=xpg4; export BIN_SH # for Tru64
 DUALCASE=1; export DUALCASE # for MKS sh
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
 # NLS nuisances: We save the old values to restore during execute mode.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
 lt_user_locale=
 lt_safe_locale=
 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
@@ -107,24 +119,28 @@ do
          lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
        fi"
 done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
 
 $lt_unset CDPATH
 
 
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
 
 
 
 : ${CP="cp -f"}
-: ${ECHO="echo"}
-: ${EGREP="/bin/grep -E"}
-: ${FGREP="/bin/grep -F"}
-: ${GREP="/bin/grep"}
-: ${LN_S="ln -s"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
-: ${SED="/bin/sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${Xsed="$SED -e 1s/^X//"}
 
@@ -144,6 +160,27 @@ IFS="      $lt_nl"
 dirname="s,/[^/]*$,,"
 basename="s,^.*/,,"
 
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
 # func_dirname_and_basename file append nondir_replacement
 # perform func_basename and func_dirname in a single function
 # call:
@@ -158,33 +195,183 @@ basename="s,^.*/,,"
 # those functions but instead duplicate the functionality here.
 func_dirname_and_basename ()
 {
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+               s@/\./@/@g
+               t dotsl
+               s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
 }
 
-# Generated shell functions inserted here.
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
 
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
 
 # The name of this program:
-# In the unlikely event $progname began with a '-', it would play havoc with
-# func_echo (imagine progname=-n), so we prepend ./ in that case:
 func_dirname_and_basename "$progpath"
 progname=$func_basename_result
-case $progname in
-  -*) progname=./$progname ;;
-esac
 
 # Make sure we have an absolute path for reexecution:
 case $progpath in
@@ -196,7 +383,7 @@ case $progpath in
      ;;
   *)
      save_IFS="$IFS"
-     IFS=:
+     IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
        IFS="$save_IFS"
        test -x "$progdir/$progname" && break
@@ -215,6 +402,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
 # Same as above, but do not quote variable references.
 double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
 # Re-`\' parameter expansions in output of double_quote_subst that were
 # `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
 # in input to double_quote_subst, that '$' was protected from expansion.
@@ -243,7 +439,7 @@ opt_warning=:
 # name if it has been set yet.
 func_echo ()
 {
-    $ECHO "$progname${mode+: }$mode: $*"
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
 }
 
 # func_verbose arg...
@@ -258,18 +454,25 @@ func_verbose ()
     :
 }
 
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
 # func_error arg...
 # Echo program name prefixed message to standard error.
 func_error ()
 {
-    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
 }
 
 # func_warning arg...
 # Echo program name prefixed warning message to standard error.
 func_warning ()
 {
-    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
 
     # bash bug again:
     :
@@ -326,9 +529,9 @@ func_mkdir_p ()
         case $my_directory_path in */*) ;; *) break ;; esac
 
         # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
       done
-      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
 
       save_mkdir_p_IFS="$IFS"; IFS=':'
       for my_dir in $my_dir_list; do
@@ -378,7 +581,7 @@ func_mktempdir ()
         func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
     fi
 
-    $ECHO "X$my_tmpdir" | $Xsed
+    $ECHO "$my_tmpdir"
 }
 
 
@@ -392,7 +595,7 @@ func_quote_for_eval ()
 {
     case $1 in
       *[\\\`\"\$]*)
-       func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+       func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
       *)
         func_quote_for_eval_unquoted_result="$1" ;;
     esac
@@ -419,7 +622,7 @@ func_quote_for_expand ()
 {
     case $1 in
       *[\\\`\"]*)
-       my_arg=`$ECHO "X$1" | $Xsed \
+       my_arg=`$ECHO "$1" | $SED \
            -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
       *)
         my_arg="$1" ;;
@@ -488,15 +691,39 @@ func_show_eval_locale ()
     fi
 }
 
-
-
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
 
 
 # func_version
 # Echo version message to standard output and exit.
 func_version ()
 {
-    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+       :more
+       /\./!{
+         N
+         s/\n# / /
+         b more
+       }
+       :go
+       /^# '$PROGRAM' (GNU /,/# warranty; / {
         s/^# //
        s/^# *$//
         s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
@@ -509,22 +736,28 @@ func_version ()
 # Echo short help message to standard output and exit.
 func_usage ()
 {
-    $SED -n '/^# Usage:/,/# -h/ {
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
         s/^# //
        s/^# *$//
        s/\$progname/'$progname'/
        p
     }' < "$progpath"
-    $ECHO
+    echo
     $ECHO "run \`$progname --help | more' for full usage"
     exit $?
 }
 
-# func_help
-# Echo long help message to standard output and exit.
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
 func_help ()
 {
+    $opt_debug
+
     $SED -n '/^# Usage:/,/# Report bugs to/ {
+       :print
         s/^# //
        s/^# *$//
        s*\$progname*'$progname'*
@@ -534,11 +767,18 @@ func_help ()
        s*\$LTCFLAGS*'"$LTCFLAGS"'*
        s*\$LD*'"$LD"'*
        s/\$with_gnu_ld/'"$with_gnu_ld"'/
-       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
        p
-     }' < "$progpath"
-    exit $?
+       d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
 }
 
 # func_missing_arg argname
@@ -546,63 +786,106 @@ func_help ()
 # exit_cmd.
 func_missing_arg ()
 {
-    func_error "missing argument for $1"
+    $opt_debug
+
+    func_error "missing argument for $1."
     exit_cmd=exit
 }
 
-exit_cmd=:
 
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
 
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
 
 
 
-# Check that we have a working $ECHO.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell, and then maybe $ECHO will work.
-  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
 
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit $EXIT_SUCCESS
-fi
 
 magic="%%%MAGIC variable%%%"
 magic_exe="%%%MAGIC EXE variable%%%"
 
 # Global variables.
-# $mode is unset
 nonopt=
-execute_dlfiles=
 preserve_args=
 lo2o="s/\\.lo\$/.${objext}/"
 o2lo="s/\\.${objext}\$/.lo/"
 extracted_archives=
 extracted_serial=0
 
-opt_dry_run=false
-opt_duplicate_deps=false
-opt_silent=false
-opt_debug=:
-
 # If this variable is set in any of the actions, the command in it
 # will be execed at the end.  This prevents here-documents from being
 # left over by shells.
 exec_cmd=
 
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
 # func_fatal_configuration arg...
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
@@ -636,16 +919,16 @@ func_config ()
 # Display the features supported by this script.
 func_features ()
 {
-    $ECHO "host: $host"
+    echo "host: $host"
     if test "$build_libtool_libs" = yes; then
-      $ECHO "enable shared libraries"
+      echo "enable shared libraries"
     else
-      $ECHO "disable shared libraries"
+      echo "disable shared libraries"
     fi
     if test "$build_old_libs" = yes; then
-      $ECHO "enable static libraries"
+      echo "enable static libraries"
     else
-      $ECHO "disable static libraries"
+      echo "disable static libraries"
     fi
 
     exit $?
@@ -692,117 +975,209 @@ func_enable_tag ()
   esac
 }
 
-# Parse options once, thoroughly.  This comes as soon as possible in
-# the script to make things like `libtool --version' happen quickly.
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
 {
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_warning=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
 
-  # Shorthand for --mode=foo, only valid as the first argument
-  case $1 in
-  clean|clea|cle|cl)
-    shift; set dummy --mode clean ${1+"$@"}; shift
-    ;;
-  compile|compil|compi|comp|com|co|c)
-    shift; set dummy --mode compile ${1+"$@"}; shift
-    ;;
-  execute|execut|execu|exec|exe|ex|e)
-    shift; set dummy --mode execute ${1+"$@"}; shift
-    ;;
-  finish|finis|fini|fin|fi|f)
-    shift; set dummy --mode finish ${1+"$@"}; shift
-    ;;
-  install|instal|insta|inst|ins|in|i)
-    shift; set dummy --mode install ${1+"$@"}; shift
-    ;;
-  link|lin|li|l)
-    shift; set dummy --mode link ${1+"$@"}; shift
-    ;;
-  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-    shift; set dummy --mode uninstall ${1+"$@"}; shift
-    ;;
-  esac
 
-  # Parse non-mode specific arguments:
-  while test "$#" -gt 0; do
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
     opt="$1"
     shift
-
     case $opt in
-      --config)                func_config                                     ;;
-
-      --debug)         preserve_args="$preserve_args $opt"
+      --debug|-x)      opt_debug='set -x'
                        func_echo "enabling shell trace mode"
-                       opt_debug='set -x'
                        $opt_debug
                        ;;
-
-      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
-                       execute_dlfiles="$execute_dlfiles $1"
-                       shift
+      --dry-run|--dryrun|-n)
+                       opt_dry_run=:
                        ;;
-
-      --dry-run | -n)  opt_dry_run=:                                   ;;
-      --features)       func_features                                  ;;
-      --finish)                mode="finish"                                   ;;
-
-      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
-                       case $1 in
-                         # Valid mode arguments:
-                         clean)        ;;
-                         compile)      ;;
-                         execute)      ;;
-                         finish)       ;;
-                         install)      ;;
-                         link)         ;;
-                         relink)       ;;
-                         uninstall)    ;;
-
-                         # Catch anything else as an error
-                         *) func_error "invalid argument for $opt"
-                            exit_cmd=exit
-                            break
-                            ;;
-                       esac
-
-                       mode="$1"
+      --config)
+                       opt_config=:
+func_config
+                       ;;
+      --dlopen|-dlopen)
+                       optarg="$1"
+                       opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
                        shift
                        ;;
-
       --preserve-dup-deps)
-                       opt_duplicate_deps=:                            ;;
-
-      --quiet|--silent)        preserve_args="$preserve_args $opt"
-                       opt_silent=:
+                       opt_preserve_dup_deps=:
                        ;;
-
-      --verbose| -v)   preserve_args="$preserve_args $opt"
+      --features)
+                       opt_features=:
+func_features
+                       ;;
+      --finish)
+                       opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+                       ;;
+      --help)
+                       opt_help=:
+                       ;;
+      --help-all)
+                       opt_help_all=:
+opt_help=': help-all'
+                       ;;
+      --mode)
+                       test $# = 0 && func_missing_arg $opt && break
+                       optarg="$1"
+                       opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+                       shift
+                       ;;
+      --no-silent|--no-quiet)
                        opt_silent=false
+func_append preserve_args " $opt"
                        ;;
-
-      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
-                       preserve_args="$preserve_args $opt $1"
-                       func_enable_tag "$1"    # tagname is set here
+      --no-warning|--no-warn)
+                       opt_warning=false
+func_append preserve_args " $opt"
+                       ;;
+      --no-verbose)
+                       opt_verbose=false
+func_append preserve_args " $opt"
+                       ;;
+      --silent|--quiet)
+                       opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+                       ;;
+      --verbose|-v)
+                       opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+                       ;;
+      --tag)
+                       test $# = 0 && func_missing_arg $opt && break
+                       optarg="$1"
+                       opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
                        shift
                        ;;
 
+      -\?|-h)          func_usage                              ;;
+      --help)          func_help                               ;;
+      --version)       func_version                            ;;
+
       # Separate optargs to long options:
-      -dlopen=*|--mode=*|--tag=*)
-                       func_opt_split "$opt"
-                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+      --*=*)
+                       func_split_long_opt "$opt"
+                       set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
                        shift
                        ;;
 
-      -\?|-h)          func_usage                                      ;;
-      --help)          opt_help=:                                      ;;
-      --version)       func_version                                    ;;
-
-      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
-
-      *)               nonopt="$opt"
-                       break
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+                       func_split_short_opt "$opt"
+                       set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+                       shift
                        ;;
+
+      --)              break                                   ;;
+      -*)              func_fatal_help "unrecognized option \`$opt'" ;;
+      *)               set dummy "$opt" ${1+"$@"};     shift; break  ;;
     esac
   done
 
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
 
   case $host in
     *cygwin* | *mingw* | *pw32* | *cegcc*)
@@ -810,82 +1185,44 @@ func_enable_tag ()
       opt_duplicate_compiler_generated_deps=:
       ;;
     *)
-      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
       ;;
   esac
 
-  # Having warned about all mis-specified options, bail out if
-  # anything was wrong.
-  $exit_cmd $EXIT_FAILURE
-}
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
 
-# func_check_version_match
-# Ensure that we are using m4 macros, and libtool script from the same
-# release of libtool.
-func_check_version_match ()
-{
-  if test "$package_revision" != "$macro_revision"; then
-    if test "$VERSION" != "$macro_version"; then
-      if test -z "$macro_version"; then
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from an older release.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      else
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      fi
-    else
-      cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-$progname: of $PACKAGE $VERSION and run autoconf again.
-_LT_EOF
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
     fi
 
-    exit $EXIT_MISMATCH
-  fi
-}
-
-
-## ----------- ##
-##    Main.    ##
-## ----------- ##
-
-$opt_help || {
-  # Sanity checks first:
-  func_check_version_match
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
 
-  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-    func_fatal_configuration "not configured to build any kind of library"
-  fi
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
 
-  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
 
 
-  # Darwin sucks
-  eval std_shrext=\"$shrext_cmds\"
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
 
 
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    func_error "unrecognized option \`-dlopen'"
-    $ECHO "$help" 1>&2
-    exit $EXIT_FAILURE
-  fi
 
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$progname --help --mode=$mode' for more information."
-}
 
+## ----------- ##
+##    Main.    ##
+## ----------- ##
 
 # func_lalib_p file
 # True iff FILE is a libtool `.la' library or `.lo' object file.
@@ -950,12 +1287,9 @@ func_ltwrapper_executable_p ()
 # temporary ltwrapper_script.
 func_ltwrapper_scriptname ()
 {
-    func_ltwrapper_scriptname_result=""
-    if func_ltwrapper_executable_p "$1"; then
-       func_dirname_and_basename "$1" "" "."
-       func_stripname '' '.exe' "$func_basename_result"
-       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-    fi
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
 }
 
 # func_ltwrapper_p file
@@ -1001,6 +1335,37 @@ func_source ()
 }
 
 
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
 # func_infer_tag arg
 # Infer tagged configuration to use if any are available and
 # if one wasn't chosen via the "--tag" command line option.
@@ -1013,13 +1378,15 @@ func_infer_tag ()
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
-        func_quote_for_eval "$arg"
-       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+       func_append_quoted CC_quoted "$arg"
       done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
       case $@ in
       # Blanks in the command may have been stripped by the calling shell,
       # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
       # Blanks at the start of $base_compile will cause this to fail
       # if we don't check for them as well.
       *)
@@ -1030,11 +1397,13 @@ func_infer_tag ()
            CC_quoted=
            for arg in $CC; do
              # Double-quote args containing other shell metacharacters.
-             func_quote_for_eval "$arg"
-             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+             func_append_quoted CC_quoted "$arg"
            done
+           CC_expanded=`func_echo_all $CC`
+           CC_quoted_expanded=`func_echo_all $CC_quoted`
            case "$@ " in
-             " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+           " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+           " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
              # The compiler in the base compile command matches
              # the one in the tagged configuration.
              # Assume this is the tagged configuration we want.
@@ -1097,6 +1466,486 @@ EOF
     }
 }
 
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
 # func_mode_compile arg...
 func_mode_compile ()
 {
@@ -1137,12 +1986,12 @@ func_mode_compile ()
          ;;
 
        -pie | -fpie | -fPIE)
-          pie_flag="$pie_flag $arg"
+          func_append pie_flag " $arg"
          continue
          ;;
 
        -shared | -static | -prefer-pic | -prefer-non-pic)
-         later="$later $arg"
+         func_append later " $arg"
          continue
          ;;
 
@@ -1163,15 +2012,14 @@ func_mode_compile ()
          save_ifs="$IFS"; IFS=','
          for arg in $args; do
            IFS="$save_ifs"
-           func_quote_for_eval "$arg"
-           lastarg="$lastarg $func_quote_for_eval_result"
+           func_append_quoted lastarg "$arg"
          done
          IFS="$save_ifs"
          func_stripname ' ' '' "$lastarg"
          lastarg=$func_stripname_result
 
          # Add the arguments to base_compile.
-         base_compile="$base_compile $lastarg"
+         func_append base_compile " $lastarg"
          continue
          ;;
 
@@ -1187,8 +2035,7 @@ func_mode_compile ()
       esac    #  case $arg_mode
 
       # Aesthetically quote the previous argument.
-      func_quote_for_eval "$lastarg"
-      base_compile="$base_compile $func_quote_for_eval_result"
+      func_append_quoted base_compile "$lastarg"
     done # for arg
 
     case $arg_mode in
@@ -1213,7 +2060,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -1288,7 +2135,7 @@ func_mode_compile ()
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
     if test "$compiler_c_o" = no; then
-      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
       lockfile="$output_obj.lock"
     else
       output_obj=
@@ -1319,17 +2166,16 @@ compiler."
        $opt_dry_run || $RM $removelist
        exit $EXIT_FAILURE
       fi
-      removelist="$removelist $output_obj"
+      func_append removelist " $output_obj"
       $ECHO "$srcfile" > "$lockfile"
     fi
 
     $opt_dry_run || $RM $removelist
-    removelist="$removelist $lockfile"
+    func_append removelist " $lockfile"
     trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
 
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
     func_quote_for_eval "$srcfile"
     qsrcfile=$func_quote_for_eval_result
 
@@ -1349,7 +2195,7 @@ compiler."
 
       if test -z "$output_obj"; then
        # Place PIC objects in $objdir
-       command="$command -o $lobj"
+       func_append command " -o $lobj"
       fi
 
       func_show_eval_locale "$command" \
@@ -1396,11 +2242,11 @@ compiler."
        command="$base_compile $qsrcfile $pic_flag"
       fi
       if test "$compiler_c_o" = yes; then
-       command="$command -o $obj"
+       func_append command " -o $obj"
       fi
 
       # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
+      func_append command "$suppress_output"
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
@@ -1445,13 +2291,13 @@ compiler."
 }
 
 $opt_help || {
-test "$mode" = compile && func_mode_compile ${1+"$@"}
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
 {
     # We need to display help for each of the modes.
-    case $mode in
+    case $opt_mode in
       "")
         # Generic help is extracted from the usage comments
         # at the start of this file.
@@ -1482,10 +2328,11 @@ This mode accepts the following additional options:
 
   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
   -no-suppress      do not suppress compiler output for multiple passes
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
   -shared           do not build a \`.o' file suitable for static linking
   -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
 
 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
 from the given SOURCEFILE.
@@ -1538,7 +2385,7 @@ either the \`install' or \`cp' program.
 
 The following components of INSTALL-COMMAND are treated specially:
 
-  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
 
 The rest of the components are interpreted as arguments to that command (only
 BSD-compatible install options are recognized)."
@@ -1558,6 +2405,8 @@ The following components of LINK-COMMAND are treated specially:
 
   -all-static       do not do any dynamic linking at all
   -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
   -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
@@ -1586,6 +2435,11 @@ The following components of LINK-COMMAND are treated specially:
   -version-info CURRENT[:REVISION[:AGE]]
                     specify library version info [each variable defaults to 0]
   -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
 All other options (arguments beginning with \`-') are ignored.
 
@@ -1619,18 +2473,44 @@ Otherwise, only FILE itself is deleted using RM."
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$mode'"
+        func_fatal_help "invalid operation mode \`$opt_mode'"
         ;;
     esac
 
-    $ECHO
+    echo
     $ECHO "Try \`$progname --help' for more information about other modes."
-
-    exit $?
 }
 
-  # Now that we've collected a possible --mode arg, show help if necessary
-  $opt_help && func_mode_help
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+       func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+       echo
+       func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+       H
+       d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
 
 
 # func_mode_execute arg...
@@ -1643,13 +2523,16 @@ func_mode_execute ()
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
+    for file in $opt_dlopen; do
       test -f "$file" \
        || func_fatal_help "\`$file' is not a file"
 
       dir=
       case $file in
       *.la)
+       func_resolve_sysroot "$file"
+       file=$func_resolve_sysroot_result
+
        # Check to see that this really is a libtool archive.
        func_lalib_unsafe_p "$file" \
          || func_fatal_help "\`$lib' is not a valid libtool archive"
@@ -1671,7 +2554,7 @@ func_mode_execute ()
        dir="$func_dirname_result"
 
        if test -f "$dir/$objdir/$dlname"; then
-         dir="$dir/$objdir"
+         func_append dir "/$objdir"
        else
          if test ! -f "$dir/$dlname"; then
            func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
@@ -1712,7 +2595,7 @@ func_mode_execute ()
     for file
     do
       case $file in
-      -*) ;;
+      -* | *.la | *.lo ) ;;
       *)
        # Do a test to see if this is really a libtool program.
        if func_ltwrapper_script_p "$file"; then
@@ -1728,8 +2611,7 @@ func_mode_execute ()
        ;;
       esac
       # Quote arguments (to preserve shell metacharacters).
-      func_quote_for_eval "$file"
-      args="$args $func_quote_for_eval_result"
+      func_append_quoted args "$file"
     done
 
     if test "X$opt_dry_run" = Xfalse; then
@@ -1754,29 +2636,66 @@ func_mode_execute ()
       # Display what would be done.
       if test -n "$shlibpath_var"; then
        eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-       $ECHO "export $shlibpath_var"
+       echo "export $shlibpath_var"
       fi
       $ECHO "$cmd$args"
       exit $EXIT_SUCCESS
     fi
 }
 
-test "$mode" = execute && func_mode_execute ${1+"$@"}
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
     $opt_debug
-    libdirs="$nonopt"
+    libs=
+    libdirs=
     admincmds=
 
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-       libdirs="$libdirs $dir"
-      done
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+       func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+       if func_lalib_unsafe_p "$opt"; then
+         func_append libs " $opt"
+       else
+         func_warning "\`$opt' is not a valid libtool archive"
+       fi
+
+      else
+       func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+         sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+           > $tmpdir/tmp-la
+         mv -f $tmpdir/tmp-la $lib
+       done
+        ${RM}r "$tmpdir"
+      fi
+    fi
 
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       for libdir in $libdirs; do
        if test -n "$finish_cmds"; then
          # Do each command in the finish commands.
@@ -1786,7 +2705,7 @@ func_mode_finish ()
        if test -n "$finish_eval"; then
          # Do the single finish_eval.
          eval cmds=\"$finish_eval\"
-         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+         $opt_dry_run || eval "$cmds" || func_append admincmds "
        $cmds"
        fi
       done
@@ -1795,53 +2714,55 @@ func_mode_finish ()
     # Exit here if they wanted silent mode.
     $opt_silent && exit $EXIT_SUCCESS
 
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
-    $ECHO "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      $ECHO "   $libdir"
-    done
-    $ECHO
-    $ECHO "If you ever happen to want to link against installed libraries"
-    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
-    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
-    $ECHO "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      $ECHO "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
-      $ECHO "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+       $ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+       echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+       echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+       echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+       echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+       libdir=LIBDIR
+       eval flag=\"$hardcode_libdir_flag_spec\"
 
-      $ECHO "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      $ECHO "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    $ECHO
+       $ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+       $ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+       echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
 
-    $ECHO "See any operating system documentation about shared libraries for"
-    case $host in
-      solaris2.[6789]|solaris2.1[0-9])
-        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-       $ECHO "pages."
-       ;;
-      *)
-        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
-        ;;
-    esac
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+       solaris2.[6789]|solaris2.1[0-9])
+         echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+         echo "pages."
+         ;;
+       *)
+         echo "more information, such as the ld(1) and ld.so(8) manual pages."
+         ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
     exit $EXIT_SUCCESS
 }
 
-test "$mode" = finish && func_mode_finish ${1+"$@"}
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
@@ -1852,7 +2773,7 @@ func_mode_install ()
     # install_prog (especially on Windows NT).
     if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
        # Allow the use of GNU shtool's install command.
-       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+       case $nonopt in *shtool*) :;; *) false;; esac; then
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
@@ -1866,7 +2787,12 @@ func_mode_install ()
     # The real first argument should be the name of the installation program.
     # Aesthetically quote it.
     func_quote_for_eval "$arg"
-    install_prog="$install_prog$func_quote_for_eval_result"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
 
     # We need to accept at least all the BSD install flags.
     dest=
@@ -1876,10 +2802,12 @@ func_mode_install ()
     install_type=
     isdir=no
     stripme=
+    no_mode=:
     for arg
     do
+      arg2=
       if test -n "$dest"; then
-       files="$files $dest"
+       func_append files " $dest"
        dest=$arg
        continue
       fi
@@ -1887,10 +2815,9 @@ func_mode_install ()
       case $arg in
       -d) isdir=yes ;;
       -f)
-       case " $install_prog " in
-       *[\\\ /]cp\ *) ;;
-       *) prev=$arg ;;
-       esac
+       if $install_cp; then :; else
+         prev=$arg
+       fi
        ;;
       -g | -m | -o)
        prev=$arg
@@ -1904,6 +2831,10 @@ func_mode_install ()
       *)
        # If the previous option needed an argument, then skip it.
        if test -n "$prev"; then
+         if test "x$prev" = x-m && test -n "$install_override_mode"; then
+           arg2=$install_override_mode
+           no_mode=false
+         fi
          prev=
        else
          dest=$arg
@@ -1914,7 +2845,11 @@ func_mode_install ()
 
       # Aesthetically quote the argument.
       func_quote_for_eval "$arg"
-      install_prog="$install_prog $func_quote_for_eval_result"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+       func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
     done
 
     test -z "$install_prog" && \
@@ -1923,6 +2858,13 @@ func_mode_install ()
     test -n "$prev" && \
       func_fatal_help "the \`$prev' option requires an argument"
 
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+       func_quote_for_eval "$install_override_mode"
+       func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
     if test -z "$files"; then
       if test -z "$dest"; then
        func_fatal_help "no file or destination specified"
@@ -1977,10 +2919,13 @@ func_mode_install ()
       case $file in
       *.$libext)
        # Do the static libraries later.
-       staticlibs="$staticlibs $file"
+       func_append staticlibs " $file"
        ;;
 
       *.la)
+       func_resolve_sysroot "$file"
+       file=$func_resolve_sysroot_result
+
        # Check to see that this really is a libtool archive.
        func_lalib_unsafe_p "$file" \
          || func_fatal_help "\`$file' is not a valid libtool archive"
@@ -1994,23 +2939,23 @@ func_mode_install ()
        if test "X$destdir" = "X$libdir"; then
          case "$current_libdirs " in
          *" $libdir "*) ;;
-         *) current_libdirs="$current_libdirs $libdir" ;;
+         *) func_append current_libdirs " $libdir" ;;
          esac
        else
          # Note the libdir as a future libdir.
          case "$future_libdirs " in
          *" $libdir "*) ;;
-         *) future_libdirs="$future_libdirs $libdir" ;;
+         *) func_append future_libdirs " $libdir" ;;
          esac
        fi
 
        func_dirname "$file" "/" ""
        dir="$func_dirname_result"
-       dir="$dir$objdir"
+       func_append dir "$objdir"
 
        if test -n "$relink_command"; then
          # Determine the prefix the user has applied to our future dir.
-         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+         inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
 
          # Don't allow the user to place us outside of our expected
          # location b/c this prevents finding dependent libraries that
@@ -2023,9 +2968,9 @@ func_mode_install ()
 
          if test -n "$inst_prefix_dir"; then
            # Stick the inst_prefix_dir data into the link command.
-           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+           relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
          else
-           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+           relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
          fi
 
          func_warning "relinking \`$file'"
@@ -2043,7 +2988,7 @@ func_mode_install ()
          test -n "$relink_command" && srcname="$realname"T
 
          # Install the shared library and build the symlinks.
-         func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+         func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
              'exit $?'
          tstripme="$stripme"
          case $host_os in
@@ -2083,7 +3028,7 @@ func_mode_install ()
        func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
        # Maybe install the static library, too.
-       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       test -n "$old_library" && func_append staticlibs " $dir/$old_library"
        ;;
 
       *.lo)
@@ -2183,7 +3128,7 @@ func_mode_install ()
            if test -f "$lib"; then
              func_source "$lib"
            fi
-           libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
            if test -n "$libdir" && test ! -f "$libfile"; then
              func_warning "\`$lib' has not been installed in \`$libdir'"
              finalize=no
@@ -2202,7 +3147,7 @@ func_mode_install ()
                file="$func_basename_result"
                outputname="$tmpdir/$file"
                # Replace the output file specification.
-               relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+               relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
                $opt_silent || {
                  func_quote_for_expand "$relink_command"
@@ -2221,7 +3166,7 @@ func_mode_install ()
            }
          else
            # Install the binary that we compiled earlier.
-           file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+           file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
          fi
        fi
 
@@ -2257,11 +3202,13 @@ func_mode_install ()
 
       # Set up the ranlib parameters.
       oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
 
       func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
 
       if test -n "$stripme" && test -n "$old_striplib"; then
-       func_show_eval "$old_striplib $oldlib" 'exit $?'
+       func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
       fi
 
       # Do each command in the postinstall commands.
@@ -2280,7 +3227,7 @@ func_mode_install ()
     fi
 }
 
-test "$mode" = install && func_mode_install ${1+"$@"}
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -2323,6 +3270,22 @@ func_generate_dlsyms ()
 extern \"C\" {
 #endif
 
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 /* External symbol declarations for the compiler. */\
 "
 
@@ -2332,10 +3295,11 @@ extern \"C\" {
          $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
          # Add our own program objects to the symbol list.
-         progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+         progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
          for progfile in $progfiles; do
-           func_verbose "extracting global C symbols from \`$progfile'"
-           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+           func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+           func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+           $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
          done
 
          if test -n "$exclude_expsyms"; then
@@ -2371,7 +3335,7 @@ extern \"C\" {
              eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
              eval '$MV "$nlist"T "$nlist"'
              case $host in
-               *cygwin | *mingw* | *cegcc* )
+               *cygwin* | *mingw* | *cegcc* )
                  eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
                  eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
                  ;;
@@ -2384,10 +3348,52 @@ extern \"C\" {
          func_verbose "extracting global C symbols from \`$dlprefile'"
          func_basename "$dlprefile"
          name="$func_basename_result"
-         $opt_dry_run || {
-           eval '$ECHO ": $name " >> "$nlist"'
-           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-         }
+          case $host in
+           *cygwin* | *mingw* | *cegcc* )
+             # if an import library, we need to obtain dlname
+             if func_win32_import_lib_p "$dlprefile"; then
+               func_tr_sh "$dlprefile"
+               eval "curr_lafile=\$libfile_$func_tr_sh_result"
+               dlprefile_dlbasename=""
+               if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+                 # Use subshell, to avoid clobbering current variable values
+                 dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+                 if test -n "$dlprefile_dlname" ; then
+                   func_basename "$dlprefile_dlname"
+                   dlprefile_dlbasename="$func_basename_result"
+                 else
+                   # no lafile. user explicitly requested -dlpreopen <import library>.
+                   $sharedlib_from_linklib_cmd "$dlprefile"
+                   dlprefile_dlbasename=$sharedlib_from_linklib_result
+                 fi
+               fi
+               $opt_dry_run || {
+                 if test -n "$dlprefile_dlbasename" ; then
+                   eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+                 else
+                   func_warning "Could not compute DLL name from $name"
+                   eval '$ECHO ": $name " >> "$nlist"'
+                 fi
+                 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+                 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+                   $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+               }
+             else # not an import lib
+               $opt_dry_run || {
+                 eval '$ECHO ": $name " >> "$nlist"'
+                 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+                 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+               }
+             fi
+           ;;
+           *)
+             $opt_dry_run || {
+               eval '$ECHO ": $name " >> "$nlist"'
+               func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+               eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+             }
+           ;;
+          esac
        done
 
        $opt_dry_run || {
@@ -2415,36 +3421,19 @@ extern \"C\" {
          if test -f "$nlist"S; then
            eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
          else
-           $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+           echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
          fi
 
-         $ECHO >> "$output_objdir/$my_dlsyms" "\
+         echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
 typedef struct {
   const char *name;
   void *address;
 } lt_dlsymlist;
-"
-         case $host in
-         *cygwin* | *mingw* | *cegcc* )
-           $ECHO >> "$output_objdir/$my_dlsyms" "\
-/* DATA imports from DLLs on WIN32 con't be const, because
-   runtime relocations are performed -- see ld's documentation
-   on pseudo-relocs.  */"
-           lt_dlsym_const= ;;
-         *osf5*)
-           echo >> "$output_objdir/$my_dlsyms" "\
-/* This system does not cope well with relocations in const data */"
-           lt_dlsym_const= ;;
-         *)
-           lt_dlsym_const=const ;;
-         esac
-
-         $ECHO >> "$output_objdir/$my_dlsyms" "\
-extern $lt_dlsym_const lt_dlsymlist
+extern LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[];
-$lt_dlsym_const lt_dlsymlist
+LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
 {\
   { \"$my_originator\", (void *) 0 },"
@@ -2457,7 +3446,7 @@ lt_${my_prefix}_LTX_preloaded_symbols[] =
            eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
            ;;
          esac
-         $ECHO >> "$output_objdir/$my_dlsyms" "\
+         echo >> "$output_objdir/$my_dlsyms" "\
   {0, (void *) 0}
 };
 
@@ -2484,7 +3473,7 @@ static const void *lt_preloaded_setup() {
          # linked before any other PIC object.  But we must not use
          # pic_flag when linking with -static.  The problem exists in
          # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+         *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
            pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
          *-*-hpux*)
            pic_flag_for_symtable=" $pic_flag"  ;;
@@ -2500,7 +3489,7 @@ static const void *lt_preloaded_setup() {
        for arg in $LTCFLAGS; do
          case $arg in
          -pie | -fpie | -fPIE) ;;
-         *) symtab_cflags="$symtab_cflags $arg" ;;
+         *) func_append symtab_cflags " $arg" ;;
          esac
        done
 
@@ -2515,16 +3504,16 @@ static const void *lt_preloaded_setup() {
        case $host in
        *cygwin* | *mingw* | *cegcc* )
          if test -f "$output_objdir/$my_outputname.def"; then
-           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
          else
-           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+           compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
          fi
          ;;
        *)
-         compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-         finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
          ;;
        esac
        ;;
@@ -2538,8 +3527,8 @@ static const void *lt_preloaded_setup() {
       # really was required.
 
       # Nullify the symbol file.
-      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
     fi
 }
 
@@ -2549,6 +3538,7 @@ static const void *lt_preloaded_setup() {
 # Need a lot of goo to handle *both* DLLs and import libs
 # Has to be a shell function in order to 'eat' the argument
 # that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
   $opt_debug
@@ -2559,9 +3549,11 @@ func_win32_libid ()
     win32_libid_type="x86 archive import"
     ;;
   *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
-       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
        $SED -n -e '
            1,100{
                / I /{
@@ -2590,6 +3582,131 @@ func_win32_libid ()
   $ECHO "$win32_libid_type"
 }
 
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[         ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
 
 
 # func_extract_an_archive dir oldlib
@@ -2598,7 +3715,18 @@ func_extract_an_archive ()
     $opt_debug
     f_ex_an_ar_dir="$1"; shift
     f_ex_an_ar_oldlib="$1"
-    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+                  'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
      :
     else
@@ -2669,7 +3797,7 @@ func_extract_archives ()
            darwin_file=
            darwin_files=
            for darwin_file in $darwin_filelist; do
-             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
              $LIPO -create -output "$darwin_file" $darwin_files
            done # $darwin_filelist
            $RM -rf unfat-$$
@@ -2684,25 +3812,30 @@ func_extract_archives ()
         func_extract_an_archive "$my_xdir" "$my_xabs"
        ;;
       esac
-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
     func_extract_archives_result="$my_oldobjs"
 }
 
 
-
-# func_emit_wrapper_part1 [arg=no]
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
 #
-# Emit the first part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part1 ()
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
 {
-       func_emit_wrapper_part1_arg1=no
-       if test -n "$1" ; then
-         func_emit_wrapper_part1_arg1=$1
-       fi
+       func_emit_wrapper_arg1=${1-no}
 
        $ECHO "\
 #! $SHELL
@@ -2718,7 +3851,6 @@ func_emit_wrapper_part1 ()
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
 sed_quote_subst='$sed_quote_subst'
 
 # Be Bourne compatible
@@ -2749,31 +3881,135 @@ if test \"\$libtool_install_magic\" = \"$magic\"; then
 else
   # When we are sourced in execute mode, \$file and \$ECHO are already set.
   if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    ECHO=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$ECHO works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$ECHO will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
 "
-       $ECHO "\
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
 
   # Find the directory that this script lives in.
-  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
 
   # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
   while test -n \"\$file\"; do
-    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
 
     # If there was a directory component, then change thisdir.
     if test \"x\$destdir\" != \"x\$file\"; then
@@ -2783,30 +4019,13 @@ else
       esac
     fi
 
-    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
   done
-"
-}
-# end: func_emit_wrapper_part1
-
-# func_emit_wrapper_part2 [arg=no]
-#
-# Emit the second part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part2 ()
-{
-       func_emit_wrapper_part2_arg1=no
-       if test -n "$1" ; then
-         func_emit_wrapper_part2_arg1=$1
-       fi
-
-       $ECHO "\
 
   # Usually 'no', except on cygwin/mingw when embedded into
   # the cwrapper.
-  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
   if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
     # special case for '.'
     if test \"\$thisdir\" = \".\"; then
@@ -2814,7 +4033,7 @@ func_emit_wrapper_part2 ()
     fi
     # remove .libs from thisdir
     case \"\$thisdir\" in
-    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
     $objdir )   thisdir=. ;;
     esac
   fi
@@ -2869,6 +4088,18 @@ func_emit_wrapper_part2 ()
 
   if test -f \"\$progdir/\$program\"; then"
 
+       # fixup the dll searchpath if we need to.
+       #
+       # Fix the DLL searchpath if we need to.  Do this before prepending
+       # to shlibpath, because on Windows, both are PATH and uninstalled
+       # libraries must come first.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
        # Export our shlibpath_var if we have one.
        if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
          $ECHO "\
@@ -2877,253 +4108,28 @@ func_emit_wrapper_part2 ()
 
     # Some systems cannot cope with colon-terminated $shlibpath_var
     # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
 
     export $shlibpath_var
 "
        fi
 
-       # fixup the dll searchpath if we need to.
-       if test -n "$dllsearchpath"; then
-         $ECHO "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-       fi
-
        $ECHO "\
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
       # Run the actual program with our arguments.
-"
-       case $host in
-       # Backslashes separate directories on plain windows
-       *-*-mingw | *-*-os2* | *-cegcc*)
-         $ECHO "\
-      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
-         ;;
-
-       *)
-         $ECHO "\
-      exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
-         ;;
-       esac
-       $ECHO "\
-      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-      exit 1
+      func_exec_program \${1+\"\$@\"}
     fi
   else
     # The program doesn't exist.
     \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
     \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
-    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
     exit 1
   fi
 fi\
 "
 }
-# end: func_emit_wrapper_part2
-
-
-# func_emit_wrapper [arg=no]
-#
-# Emit a libtool wrapper script on stdout.
-# Don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable.  Must ONLY be called from within
-# func_mode_link because it depends on a number of variables
-# set therein.
-#
-# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take.  If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
-# the $objdir directory.  This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
-{
-       func_emit_wrapper_arg1=no
-       if test -n "$1" ; then
-         func_emit_wrapper_arg1=$1
-       fi
-
-       # split this up so that func_emit_cwrapperexe_src
-       # can call each part independently.
-       func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
-       func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
-}
-
-
-# func_to_host_path arg
-#
-# Convert paths to host format when used with build tools.
-# Intended for use with "native" mingw (where libtool itself
-# is running under the msys shell), or in the following cross-
-# build environments:
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-# where wine is equipped with the `winepath' executable.
-# In the native mingw case, the (msys) shell automatically
-# converts paths for any non-msys applications it launches,
-# but that facility isn't available from inside the cwrapper.
-# Similar accommodations are necessary for $host mingw and
-# $build cygwin.  Calling this function does no harm for other
-# $host/$build combinations not listed above.
-#
-# ARG is the path (on $build) that should be converted to
-# the proper representation for $host. The result is stored
-# in $func_to_host_path_result.
-func_to_host_path ()
-{
-  func_to_host_path_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        case $build in
-          *mingw* ) # actually, msys
-            # awkward: cmd appends spaces to result
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_path_tmp1=`cygpath -w "$1"`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # Unfortunately, winepath does not exit with a non-zero
-            # error code, so we are forced to check the contents of
-            # stdout. On the other hand, if the command is not
-            # found, the shell will set an exit code of 127 and print
-            # *an error message* to stdout. So we must check for both
-            # error code of zero AND non-empty stdout, which explains
-            # the odd construction:
-            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
-            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
-              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-                $SED -e "$lt_sed_naive_backslashify"`
-            else
-              # Allow warning below.
-              func_to_host_path_result=""
-            fi
-            ;;
-        esac
-        if test -z "$func_to_host_path_result" ; then
-          func_error "Could not determine host path corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback:
-          func_to_host_path_result="$1"
-        fi
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_path
 
-# func_to_host_pathlist arg
-#
-# Convert pathlists to host format when used with build tools.
-# See func_to_host_path(), above. This function supports the
-# following $build/$host combinations (but does no harm for
-# combinations not listed here):
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-#
-# Path separators are also converted from $build format to
-# $host format. If ARG begins or ends with a path separator
-# character, it is preserved (but converted to $host format)
-# on output.
-#
-# ARG is a pathlist (on $build) that should be converted to
-# the proper representation on $host. The result is stored
-# in $func_to_host_pathlist_result.
-func_to_host_pathlist ()
-{
-  func_to_host_pathlist_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        # Remove leading and trailing path separator characters from
-        # ARG. msys behavior is inconsistent here, cygpath turns them
-        # into '.;' and ';.', and winepath ignores them completely.
-        func_to_host_pathlist_tmp2="$1"
-        # Once set for this call, this variable should not be
-        # reassigned. It is used in tha fallback case.
-        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
-          $SED -e 's|^:*||' -e 's|:*$||'`
-        case $build in
-          *mingw* ) # Actually, msys.
-            # Awkward: cmd appends spaces to result.
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # unfortunately, winepath doesn't convert pathlists
-            func_to_host_pathlist_result=""
-            func_to_host_pathlist_oldIFS=$IFS
-            IFS=:
-            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
-              IFS=$func_to_host_pathlist_oldIFS
-              if test -n "$func_to_host_pathlist_f" ; then
-                func_to_host_path "$func_to_host_pathlist_f"
-                if test -n "$func_to_host_path_result" ; then
-                  if test -z "$func_to_host_pathlist_result" ; then
-                    func_to_host_pathlist_result="$func_to_host_path_result"
-                  else
-                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
-                  fi
-                fi
-              fi
-              IFS=:
-            done
-            IFS=$func_to_host_pathlist_oldIFS
-            ;;
-        esac
-        if test -z "$func_to_host_pathlist_result" ; then
-          func_error "Could not determine the host path(s) corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback. This may break if $1 contains DOS-style drive
-          # specifications. The fix is not to complicate the expression
-          # below, but for the user to provide a working wine installation
-          # with winepath so that path translation in the cross-to-mingw
-          # case works properly.
-          lt_replace_pathsep_nix_to_dos="s|:|;|g"
-          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
-            $SED -e "$lt_replace_pathsep_nix_to_dos"`
-        fi
-        # Now, add the leading and trailing path separators back
-        case "$1" in
-          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
-            ;;
-        esac
-        case "$1" in
-          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
-            ;;
-        esac
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_pathlist
 
 # func_emit_cwrapperexe_src
 # emit the source code for a wrapper executable on stdout
@@ -3141,31 +4147,23 @@ func_emit_cwrapperexe_src ()
 
    This wrapper executable should never be moved out of the build directory.
    If it is, it will not operate correctly.
-
-   Currently, it simply execs the wrapper *script* "$SHELL $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
 */
 EOF
            cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #ifdef _MSC_VER
 # include <direct.h>
 # include <process.h>
 # include <io.h>
-# define setmode _setmode
 #else
 # include <unistd.h>
 # include <stdint.h>
 # ifdef __CYGWIN__
 #  include <io.h>
-#  define HAVE_SETENV
-#  ifdef __STRICT_ANSI__
-char *realpath (const char *, char *);
-int putenv (char *);
-int setenv (const char *, const char *, int);
-#  endif
 # endif
 #endif
 #include <malloc.h>
@@ -3177,6 +4175,44 @@ int setenv (const char *, const char *, int);
 #include <fcntl.h>
 #include <sys/stat.h>
 
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
 #if defined(PATH_MAX)
 # define LT_PATHMAX PATH_MAX
 #elif defined(MAXPATHLEN)
@@ -3192,14 +4228,7 @@ int setenv (const char *, const char *, int);
 # define S_IXGRP 0
 #endif
 
-#ifdef _MSC_VER
-# define S_IXUSR _S_IEXEC
-# define stat _stat
-# ifndef _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#endif
-
+/* path handling portability macros */
 #ifndef DIR_SEPARATOR
 # define DIR_SEPARATOR '/'
 # define PATH_SEPARATOR ':'
@@ -3230,10 +4259,6 @@ int setenv (const char *, const char *, int);
 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
 #endif /* PATH_SEPARATOR_2 */
 
-#ifdef __CYGWIN__
-# define FOPEN_WB "wb"
-#endif
-
 #ifndef FOPEN_WB
 # define FOPEN_WB "w"
 #endif
@@ -3246,22 +4271,13 @@ int setenv (const char *, const char *, int);
   if (stale) { free ((void *) stale); stale = 0; } \
 } while (0)
 
-#undef LTWRAPPER_DEBUGPRINTF
-#if defined DEBUGWRAPPER
-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
-static void
-ltwrapper_debugprintf (const char *fmt, ...)
-{
-    va_list args;
-    va_start (args, fmt);
-    (void) vfprintf (stderr, fmt, args);
-    va_end (args);
-}
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
 #else
-# define LTWRAPPER_DEBUGPRINTF(args)
+static int lt_debug = 0;
 #endif
 
-const char *program_name = NULL;
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
 
 void *xmalloc (size_t num);
 char *xstrdup (const char *string);
@@ -3271,41 +4287,27 @@ char *chase_symlinks (const char *pathspec);
 int make_executable (const char *path);
 int check_executable (const char *path);
 char *strendzap (char *str, const char *pat);
-void lt_fatal (const char *message, ...);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
 void lt_setenv (const char *name, const char *value);
 char *lt_extend_str (const char *orig_value, const char *add, int to_end);
-void lt_opt_process_env_set (const char *arg);
-void lt_opt_process_env_prepend (const char *arg);
-void lt_opt_process_env_append (const char *arg);
-int lt_split_name_value (const char *arg, char** name, char** value);
 void lt_update_exe_path (const char *name, const char *value);
 void lt_update_lib_path (const char *name, const char *value);
-
-static const char *script_text_part1 =
-EOF
-
-           func_emit_wrapper_part1 yes |
-               $SED -e 's/\([\\"]\)/\\\1/g' \
-                    -e 's/^/  "/' -e 's/$/\\n"/'
-           echo ";"
-           cat <<EOF
-
-static const char *script_text_part2 =
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
 EOF
-           func_emit_wrapper_part2 yes |
-               $SED -e 's/\([\\"]\)/\\\1/g' \
-                    -e 's/^/  "/' -e 's/$/\\n"/'
-           echo ";"
 
            cat <<EOF
-const char * MAGIC_EXE = "$magic_exe";
+volatile const char * MAGIC_EXE = "$magic_exe";
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
            if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-              func_to_host_pathlist "$temp_rpath"
+              func_to_host_path "$temp_rpath"
              cat <<EOF
-const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
 EOF
            else
              cat <<"EOF"
@@ -3314,10 +4316,10 @@ EOF
            fi
 
            if test -n "$dllsearchpath"; then
-              func_to_host_pathlist "$dllsearchpath:"
+              func_to_host_path "$dllsearchpath:"
              cat <<EOF
 const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
 EOF
            else
              cat <<"EOF"
@@ -3340,24 +4342,10 @@ EOF
            cat <<"EOF"
 
 #define LTWRAPPER_OPTION_PREFIX         "--lt-"
-#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
 
-static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
 static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-
 static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
-
-static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
-static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
-  /* argument is putenv-style "foo=bar", value of foo is set to bar */
-
-static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
-static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
-  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
-
-static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
-static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
-  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
 
 int
 main (int argc, char *argv[])
@@ -3374,10 +4362,13 @@ main (int argc, char *argv[])
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+  newargz = XMALLOC (char *, argc + 1);
 
-  /* very simple arg parsing; don't want to rely on getopt */
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
   for (i = 1; i < argc; i++)
     {
       if (strcmp (argv[i], dumpscript_opt) == 0)
@@ -3391,25 +4382,57 @@ EOF
              esac
 
            cat <<"EOF"
-         printf ("%s", script_text_part1);
-         printf ("%s", script_text_part2);
+         lt_dump_script (stdout);
          return 0;
        }
+      if (strcmp (argv[i], debug_opt) == 0)
+       {
+          lt_debug = 1;
+          continue;
+       }
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+                   "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
     }
+  newargz[++newargc] = NULL;
+
+EOF
+           cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+           cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
 
-  newargz = XMALLOC (char *, argc + 1);
   tmp_pathspec = find_executable (argv[0]);
   if (tmp_pathspec == NULL)
-    lt_fatal ("Couldn't find %s", argv[0]);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
-                         tmp_pathspec));
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+                 tmp_pathspec);
 
   actual_cwrapper_path = chase_symlinks (tmp_pathspec);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
-                         actual_cwrapper_path));
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+                 actual_cwrapper_path);
   XFREE (tmp_pathspec);
 
-  actual_cwrapper_name = xstrdupbase_name (actual_cwrapper_path));
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
   strendzap (actual_cwrapper_path, actual_cwrapper_name);
 
   /* wrapper name transforms */
@@ -3427,8 +4450,9 @@ EOF
   target_name = tmp_pathspec;
   tmp_pathspec = 0;
 
-  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
-                         target_name));
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(main) libtool target name: %s\n",
+                 target_name);
 EOF
 
            cat <<EOF
@@ -3478,80 +4502,19 @@ EOF
 
   lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
   lt_setenv ("DUALCASE", "1");  /* for MSK sh */
-  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
   lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
 
-  newargc=0;
-  for (i = 1; i < argc; i++)
-    {
-      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
-        {
-          if (argv[i][env_set_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_set_opt_len + 1;
-              lt_opt_process_env_set (p);
-            }
-          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_set (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_set_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
-        {
-          if (argv[i][env_prepend_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_prepend_opt_len + 1;
-              lt_opt_process_env_prepend (p);
-            }
-          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_prepend_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
-        {
-          if (argv[i][env_append_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_append_opt_len + 1;
-              lt_opt_process_env_append (p);
-            }
-          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_append (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_append_opt);
-          continue;
-        }
-      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
-        {
-          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-             namespace, but it is not one of the ones we know about and
-             have already dealt with, above (inluding dump-script), then
-             report an error. Otherwise, targets might begin to believe
-             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-             namespace. The first time any user complains about this, we'll
-             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-             or a configure.ac-settable value.
-           */
-          lt_fatal ("Unrecognized option in %s namespace: '%s'",
-                    ltwrapper_option_prefix, argv[i]);
-        }
-      /* otherwise ... */
-      newargz[++newargc] = xstrdup (argv[i]);
-    }
-  newargz[++newargc] = NULL;
-
-  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+                 nonnull (lt_argv_zero));
   for (i = 0; i < newargc; i++)
     {
-      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+                     i, nonnull (newargz[i]));
     }
 
 EOF
@@ -3560,11 +4523,14 @@ EOF
              mingw*)
                cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
   rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
   if (rval == -1)
     {
       /* failed to start process */
-      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      lt_debugprintf (__FILE__, __LINE__,
+                     "(main) failed to launch target \"%s\": %s\n",
+                     lt_argv_zero, nonnull (strerror (errno)));
       return 127;
     }
   return rval;
@@ -3586,7 +4552,7 @@ xmalloc (size_t num)
 {
   void *p = (void *) malloc (num);
   if (!p)
-    lt_fatal ("Memory exhausted");
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
 
   return p;
 }
@@ -3620,8 +4586,8 @@ check_executable (const char *path)
 {
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
-                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3638,8 +4604,8 @@ make_executable (const char *path)
   int rval = 0;
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
-                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3665,8 +4631,8 @@ find_executable (const char *wrapper)
   int tmp_len;
   char *concat_name;
 
-  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
-                         wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
 
   if ((wrapper == NULL) || (*wrapper == '\0'))
     return NULL;
@@ -3719,7 +4685,8 @@ find_executable (const char *wrapper)
                {
                  /* empty path: current directory */
                  if (getcwd (tmp, LT_PATHMAX) == NULL)
-                   lt_fatal ("getcwd failed");
+                   lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
                  tmp_len = strlen (tmp);
                  concat_name =
                    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
@@ -3744,7 +4711,8 @@ find_executable (const char *wrapper)
     }
   /* Relative path | not found in path: prepend cwd */
   if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal ("getcwd failed");
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
   tmp_len = strlen (tmp);
   concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
   memcpy (concat_name, tmp, tmp_len);
@@ -3770,8 +4738,9 @@ chase_symlinks (const char *pathspec)
   int has_symlinks = 0;
   while (strlen (tmp_pathspec) && !has_symlinks)
     {
-      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
-                             tmp_pathspec));
+      lt_debugprintf (__FILE__, __LINE__,
+                     "checking path component for symlinks: %s\n",
+                     tmp_pathspec);
       if (lstat (tmp_pathspec, &s) == 0)
        {
          if (S_ISLNK (s.st_mode) != 0)
@@ -3793,8 +4762,9 @@ chase_symlinks (const char *pathspec)
        }
       else
        {
-         char *errstr = strerror (errno);
-         lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+         lt_fatal (__FILE__, __LINE__,
+                   "error accessing file \"%s\": %s",
+                   tmp_pathspec, nonnull (strerror (errno)));
        }
     }
   XFREE (tmp_pathspec);
@@ -3807,7 +4777,8 @@ chase_symlinks (const char *pathspec)
   tmp_pathspec = realpath (pathspec, buf);
   if (tmp_pathspec == 0)
     {
-      lt_fatal ("Could not follow symlinks for %s", pathspec);
+      lt_fatal (__FILE__, __LINE__,
+               "could not follow symlinks for %s", pathspec);
     }
   return xstrdup (tmp_pathspec);
 #endif
@@ -3833,11 +4804,25 @@ strendzap (char *str, const char *pat)
   return str;
 }
 
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
 static void
-lt_error_core (int exit_status, const char *mode,
+lt_error_core (int exit_status, const char *file,
+              int line, const char *mode,
               const char *message, va_list ap)
 {
-  fprintf (stderr, "%s: %s: ", program_name, mode);
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
   vfprintf (stderr, message, ap);
   fprintf (stderr, ".\n");
 
@@ -3846,20 +4831,32 @@ lt_error_core (int exit_status, const char *mode,
 }
 
 void
-lt_fatal (const char *message, ...)
+lt_fatal (const char *file, int line, const char *message, ...)
 {
   va_list ap;
   va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
   va_end (ap);
 }
 
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
 void
 lt_setenv (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
   {
 #ifdef HAVE_SETENV
     /* always make a copy, for consistency with !HAVE_SETENV */
@@ -3904,95 +4901,12 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
   return new_value;
 }
 
-int
-lt_split_name_value (const char *arg, char** name, char** value)
-{
-  const char *p;
-  int len;
-  if (!arg || !*arg)
-    return 1;
-
-  p = strchr (arg, (int)'=');
-
-  if (!p)
-    return 1;
-
-  *value = xstrdup (++p);
-
-  len = strlen (arg) - strlen (*value);
-  *name = XMALLOC (char, len);
-  strncpy (*name, arg, len-1);
-  (*name)[len - 1] = '\0';
-
-  return 0;
-}
-
-void
-lt_opt_process_env_set (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
-    }
-
-  lt_setenv (name, value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_prepend (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 0);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_append (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 1);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
 void
 lt_update_exe_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4011,9 +4925,9 @@ lt_update_exe_path (const char *name, const char *value)
 void
 lt_update_lib_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4023,11 +4937,158 @@ lt_update_lib_path (const char *name, const char *value)
     }
 }
 
+EOF
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+       new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+       {
+         int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+         size_t length;
+         unsigned int backslashes;
+         const char *s;
+         char *quoted_string;
+         char *p;
+
+         length = 0;
+         backslashes = 0;
+         if (quote_around)
+           length++;
+         for (s = string; *s != '\0'; s++)
+           {
+             char c = *s;
+             if (c == '"')
+               length += backslashes + 1;
+             length++;
+             if (c == '\\')
+               backslashes++;
+             else
+               backslashes = 0;
+           }
+         if (quote_around)
+           length += backslashes + 1;
+
+         quoted_string = XMALLOC (char, length + 1);
+
+         p = quoted_string;
+         backslashes = 0;
+         if (quote_around)
+           *p++ = '"';
+         for (s = string; *s != '\0'; s++)
+           {
+             char c = *s;
+             if (c == '"')
+               {
+                 unsigned int j;
+                 for (j = backslashes + 1; j > 0; j--)
+                   *p++ = '\\';
+               }
+             *p++ = c;
+             if (c == '\\')
+               backslashes++;
+             else
+               backslashes = 0;
+           }
+         if (quote_around)
+           {
+             unsigned int j;
+             for (j = backslashes; j > 0; j--)
+               *p++ = '\\';
+             *p++ = '"';
+           }
+         *p = '\0';
+
+         new_argv[i] = quoted_string;
+       }
+      else
+       new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+               ;;
+           esac
 
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+           func_emit_wrapper yes |
+             $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            cat <<"EOF"
+}
 EOF
 }
 # end: func_emit_cwrapperexe_src
 
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
 # func_mode_link arg...
 func_mode_link ()
 {
@@ -4072,6 +5133,7 @@ func_mode_link ()
     new_inherited_linker_flags=
 
     avoid_version=no
+    bindir=
     dlfiles=
     dlprefiles=
     dlself=no
@@ -4164,6 +5226,11 @@ func_mode_link ()
        esac
 
        case $prev in
+       bindir)
+         bindir="$arg"
+         prev=
+         continue
+         ;;
        dlfiles|dlprefiles)
          if test "$preload" = no; then
            # Add the symbol object into the linking commands.
@@ -4195,9 +5262,9 @@ func_mode_link ()
            ;;
          *)
            if test "$prev" = dlfiles; then
-             dlfiles="$dlfiles $arg"
+             func_append dlfiles " $arg"
            else
-             dlprefiles="$dlprefiles $arg"
+             func_append dlprefiles " $arg"
            fi
            prev=
            continue
@@ -4221,7 +5288,7 @@ func_mode_link ()
            *-*-darwin*)
              case "$deplibs " in
                *" $qarg.ltframework "*) ;;
-               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+               *) func_append deplibs " $qarg.ltframework" # this is fixed later
                   ;;
              esac
              ;;
@@ -4240,7 +5307,7 @@ func_mode_link ()
            moreargs=
            for fil in `cat "$save_arg"`
            do
-#            moreargs="$moreargs $fil"
+#            func_append moreargs " $fil"
              arg=$fil
              # A libtool-controlled object.
 
@@ -4269,7 +5336,7 @@ func_mode_link ()
 
                  if test "$prev" = dlfiles; then
                    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-                     dlfiles="$dlfiles $pic_object"
+                     func_append dlfiles " $pic_object"
                      prev=
                      continue
                    else
@@ -4281,7 +5348,7 @@ func_mode_link ()
                  # CHECK ME:  I think I busted this.  -Ossama
                  if test "$prev" = dlprefiles; then
                    # Preload the old-style object.
-                   dlprefiles="$dlprefiles $pic_object"
+                   func_append dlprefiles " $pic_object"
                    prev=
                  fi
 
@@ -4351,12 +5418,12 @@ func_mode_link ()
          if test "$prev" = rpath; then
            case "$rpath " in
            *" $arg "*) ;;
-           *) rpath="$rpath $arg" ;;
+           *) func_append rpath " $arg" ;;
            esac
          else
            case "$xrpath " in
            *" $arg "*) ;;
-           *) xrpath="$xrpath $arg" ;;
+           *) func_append xrpath " $arg" ;;
            esac
          fi
          prev=
@@ -4368,28 +5435,28 @@ func_mode_link ()
          continue
          ;;
        weak)
-         weak_libs="$weak_libs $arg"
+         func_append weak_libs " $arg"
          prev=
          continue
          ;;
        xcclinker)
-         linker_flags="$linker_flags $qarg"
-         compiler_flags="$compiler_flags $qarg"
+         func_append linker_flags " $qarg"
+         func_append compiler_flags " $qarg"
          prev=
          func_append compile_command " $qarg"
          func_append finalize_command " $qarg"
          continue
          ;;
        xcompiler)
-         compiler_flags="$compiler_flags $qarg"
+         func_append compiler_flags " $qarg"
          prev=
          func_append compile_command " $qarg"
          func_append finalize_command " $qarg"
          continue
          ;;
        xlinker)
-         linker_flags="$linker_flags $qarg"
-         compiler_flags="$compiler_flags $wl$qarg"
+         func_append linker_flags " $qarg"
+         func_append compiler_flags " $wl$qarg"
          prev=
          func_append compile_command " $wl$qarg"
          func_append finalize_command " $wl$qarg"
@@ -4425,6 +5492,11 @@ func_mode_link ()
        continue
        ;;
 
+      -bindir)
+       prev=bindir
+       continue
+       ;;
+
       -dlopen)
        prev=dlfiles
        continue
@@ -4475,15 +5547,16 @@ func_mode_link ()
        ;;
 
       -L*)
-       func_stripname '-L' '' "$arg"
-       dir=$func_stripname_result
-       if test -z "$dir"; then
+       func_stripname "-L" '' "$arg"
+       if test -z "$func_stripname_result"; then
          if test "$#" -gt 0; then
            func_fatal_error "require no space between \`-L' and \`$1'"
          else
            func_fatal_error "need path for \`-L' option"
          fi
        fi
+       func_resolve_sysroot "$func_stripname_result"
+       dir=$func_resolve_sysroot_result
        # We need an absolute path.
        case $dir in
        [\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -4495,24 +5568,30 @@ func_mode_link ()
          ;;
        esac
        case "$deplibs " in
-       *" -L$dir "*) ;;
+       *" -L$dir "* | *" $arg "*)
+         # Will only happen for absolute or sysroot arguments
+         ;;
        *)
-         deplibs="$deplibs -L$dir"
-         lib_search_path="$lib_search_path $dir"
+         # Preserve sysroot, but never include relative directories
+         case $dir in
+           [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+           *) func_append deplibs " -L$dir" ;;
+         esac
+         func_append lib_search_path " $dir"
          ;;
        esac
        case $host in
        *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-         testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
          case :$dllsearchpath: in
          *":$dir:"*) ;;
          ::) dllsearchpath=$dir;;
-         *) dllsearchpath="$dllsearchpath:$dir";;
+         *) func_append dllsearchpath ":$dir";;
          esac
          case :$dllsearchpath: in
          *":$testbindir:"*) ;;
          ::) dllsearchpath=$testbindir;;
-         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         *) func_append dllsearchpath ":$testbindir";;
          esac
          ;;
        esac
@@ -4522,7 +5601,7 @@ func_mode_link ()
       -l*)
        if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
          case $host in
-         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
            # These systems don't actually have a C or math library (as such)
            continue
            ;;
@@ -4536,7 +5615,7 @@ func_mode_link ()
            ;;
          *-*-rhapsody* | *-*-darwin1.[012])
            # Rhapsody C and math libraries are in the System framework
-           deplibs="$deplibs System.ltframework"
+           func_append deplibs " System.ltframework"
            continue
            ;;
          *-*-sco3.2v5* | *-*-sco5v6*)
@@ -4556,7 +5635,7 @@ func_mode_link ()
           ;;
         esac
        fi
-       deplibs="$deplibs $arg"
+       func_append deplibs " $arg"
        continue
        ;;
 
@@ -4568,21 +5647,22 @@ func_mode_link ()
       # Tru64 UNIX uses -model [arg] to determine the layout of C++
       # classes, name mangling, and exception handling.
       # Darwin uses the -arch flag to determine output architecture.
-      -model|-arch|-isysroot)
-       compiler_flags="$compiler_flags $arg"
+      -model|-arch|-isysroot|--sysroot)
+       func_append compiler_flags " $arg"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
        prev=xcompiler
        continue
        ;;
 
-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-       compiler_flags="$compiler_flags $arg"
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+       func_append compiler_flags " $arg"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
        case "$new_inherited_linker_flags " in
            *" $arg "*) ;;
-           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+           * ) func_append new_inherited_linker_flags " $arg" ;;
        esac
        continue
        ;;
@@ -4649,13 +5729,17 @@ func_mode_link ()
        # We need an absolute path.
        case $dir in
        [\\/]* | [A-Za-z]:[\\/]*) ;;
+       =*)
+         func_stripname '=' '' "$dir"
+         dir=$lt_sysroot$func_stripname_result
+         ;;
        *)
          func_fatal_error "only absolute run-paths are allowed"
          ;;
        esac
        case "$xrpath " in
        *" $dir "*) ;;
-       *) xrpath="$xrpath $dir" ;;
+       *) func_append xrpath " $dir" ;;
        esac
        continue
        ;;
@@ -4708,8 +5792,8 @@ func_mode_link ()
        for flag in $args; do
          IFS="$save_ifs"
           func_quote_for_eval "$flag"
-         arg="$arg $wl$func_quote_for_eval_result"
-         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+         func_append arg " $func_quote_for_eval_result"
+         func_append compiler_flags " $func_quote_for_eval_result"
        done
        IFS="$save_ifs"
        func_stripname ' ' '' "$arg"
@@ -4724,9 +5808,9 @@ func_mode_link ()
        for flag in $args; do
          IFS="$save_ifs"
           func_quote_for_eval "$flag"
-         arg="$arg $wl$func_quote_for_eval_result"
-         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
-         linker_flags="$linker_flags $func_quote_for_eval_result"
+         func_append arg " $wl$func_quote_for_eval_result"
+         func_append compiler_flags " $wl$func_quote_for_eval_result"
+         func_append linker_flags " $func_quote_for_eval_result"
        done
        IFS="$save_ifs"
        func_stripname ' ' '' "$arg"
@@ -4754,23 +5838,27 @@ func_mode_link ()
        arg="$func_quote_for_eval_result"
        ;;
 
-      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-      # -r[0-9][0-9]* specifies the processor on the SGI compiler
-      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-      # +DA*, +DD* enable 64-bit mode on the HP compiler
-      # -q* pass through compiler args for the IBM compiler
-      # -m*, -t[45]*, -txscale* pass through architecture-specific
-      # compiler args for GCC
-      # -F/path gives path to uninstalled frameworks, gcc on darwin
-      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
-      # @file GCC response files
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
         func_quote_for_eval "$arg"
        arg="$func_quote_for_eval_result"
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
-        compiler_flags="$compiler_flags $arg"
+        func_append compiler_flags " $arg"
         continue
         ;;
 
@@ -4782,7 +5870,7 @@ func_mode_link ()
 
       *.$objext)
        # A standard object.
-       objs="$objs $arg"
+       func_append objs " $arg"
        ;;
 
       *.lo)
@@ -4813,7 +5901,7 @@ func_mode_link ()
 
            if test "$prev" = dlfiles; then
              if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-               dlfiles="$dlfiles $pic_object"
+               func_append dlfiles " $pic_object"
                prev=
                continue
              else
@@ -4825,7 +5913,7 @@ func_mode_link ()
            # CHECK ME:  I think I busted this.  -Ossama
            if test "$prev" = dlprefiles; then
              # Preload the old-style object.
-             dlprefiles="$dlprefiles $pic_object"
+             func_append dlprefiles " $pic_object"
              prev=
            fi
 
@@ -4870,24 +5958,25 @@ func_mode_link ()
 
       *.$libext)
        # An archive.
-       deplibs="$deplibs $arg"
-       old_deplibs="$old_deplibs $arg"
+       func_append deplibs " $arg"
+       func_append old_deplibs " $arg"
        continue
        ;;
 
       *.la)
        # A libtool-controlled library.
 
+       func_resolve_sysroot "$arg"
        if test "$prev" = dlfiles; then
          # This library was specified with -dlopen.
-         dlfiles="$dlfiles $arg"
+         func_append dlfiles " $func_resolve_sysroot_result"
          prev=
        elif test "$prev" = dlprefiles; then
          # The library was specified with -dlpreopen.
-         dlprefiles="$dlprefiles $arg"
+         func_append dlprefiles " $func_resolve_sysroot_result"
          prev=
        else
-         deplibs="$deplibs $arg"
+         func_append deplibs " $func_resolve_sysroot_result"
        fi
        continue
        ;;
@@ -4925,7 +6014,7 @@ func_mode_link ()
 
     if test -n "$shlibpath_var"; then
       # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
     else
       shlib_search_path=
     fi
@@ -4934,6 +6023,8 @@ func_mode_link ()
 
     func_dirname "$output" "/" ""
     output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
     func_mkdir_p "$output_objdir"
 
@@ -4954,12 +6045,12 @@ func_mode_link ()
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
-      if $opt_duplicate_deps ; then
+      if $opt_preserve_dup_deps ; then
        case "$libs " in
-       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       *" $deplib "*) func_append specialdeplibs " $deplib" ;;
        esac
       fi
-      libs="$libs $deplib"
+      func_append libs " $deplib"
     done
 
     if test "$linkmode" = lib; then
@@ -4972,9 +6063,9 @@ func_mode_link ()
       if $opt_duplicate_compiler_generated_deps; then
        for pre_post_dep in $predeps $postdeps; do
          case "$pre_post_deps " in
-         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
          esac
-         pre_post_deps="$pre_post_deps $pre_post_dep"
+         func_append pre_post_deps " $pre_post_dep"
        done
       fi
       pre_post_deps=
@@ -5044,17 +6135,19 @@ func_mode_link ()
        for lib in $dlprefiles; do
          # Ignore non-libtool-libs
          dependency_libs=
+         func_resolve_sysroot "$lib"
          case $lib in
-         *.la) func_source "$lib" ;;
+         *.la) func_source "$func_resolve_sysroot_result" ;;
          esac
 
          # Collect preopened libtool deplibs, except any this library
          # has declared as weak libs
          for deplib in $dependency_libs; do
-            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+           func_basename "$deplib"
+            deplib_base=$func_basename_result
            case " $weak_libs " in
            *" $deplib_base "*) ;;
-           *) deplibs="$deplibs $deplib" ;;
+           *) func_append deplibs " $deplib" ;;
            esac
          done
        done
@@ -5070,16 +6163,17 @@ func_mode_link ()
        lib=
        found=no
        case $deplib in
-       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
          if test "$linkmode,$pass" = "prog,link"; then
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
          else
-           compiler_flags="$compiler_flags $deplib"
+           func_append compiler_flags " $deplib"
            if test "$linkmode" = lib ; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
-                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+                   * ) func_append new_inherited_linker_flags " $deplib" ;;
                esac
            fi
          fi
@@ -5164,7 +6258,7 @@ func_mode_link ()
            if test "$linkmode" = lib ; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
-                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+                   * ) func_append new_inherited_linker_flags " $deplib" ;;
                esac
            fi
          fi
@@ -5177,7 +6271,8 @@ func_mode_link ()
            test "$pass" = conv && continue
            newdependency_libs="$deplib $newdependency_libs"
            func_stripname '-L' '' "$deplib"
-           newlib_search_path="$newlib_search_path $func_stripname_result"
+           func_resolve_sysroot "$func_stripname_result"
+           func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          prog)
            if test "$pass" = conv; then
@@ -5191,7 +6286,8 @@ func_mode_link ()
              finalize_deplibs="$deplib $finalize_deplibs"
            fi
            func_stripname '-L' '' "$deplib"
-           newlib_search_path="$newlib_search_path $func_stripname_result"
+           func_resolve_sysroot "$func_stripname_result"
+           func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          *)
            func_warning "\`-L' is ignored for archives/objects"
@@ -5202,17 +6298,21 @@ func_mode_link ()
        -R*)
          if test "$pass" = link; then
            func_stripname '-R' '' "$deplib"
-           dir=$func_stripname_result
+           func_resolve_sysroot "$func_stripname_result"
+           dir=$func_resolve_sysroot_result
            # Make sure the xrpath contains only unique directories.
            case "$xrpath " in
            *" $dir "*) ;;
-           *) xrpath="$xrpath $dir" ;;
+           *) func_append xrpath " $dir" ;;
            esac
          fi
          deplibs="$deplib $deplibs"
          continue
          ;;
-       *.la) lib="$deplib" ;;
+       *.la)
+         func_resolve_sysroot "$deplib"
+         lib=$func_resolve_sysroot_result
+         ;;
        *.$libext)
          if test "$pass" = conv; then
            deplibs="$deplib $deplibs"
@@ -5230,7 +6330,7 @@ func_mode_link ()
                match_pattern*)
                  set dummy $deplibs_check_method; shift
                  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-                 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+                 if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
                    | $EGREP "$match_pattern_regex" > /dev/null; then
                    valid_a_lib=yes
                  fi
@@ -5240,15 +6340,15 @@ func_mode_link ()
                ;;
              esac
              if test "$valid_a_lib" != yes; then
-               $ECHO
+               echo
                $ECHO "*** Warning: Trying to link with static lib archive $deplib."
-               $ECHO "*** I have the capability to make that library automatically link in when"
-               $ECHO "*** you link to this library.  But I can only do this if you have a"
-               $ECHO "*** shared version of the library, which you do not appear to have"
-               $ECHO "*** because the file extensions .$libext of this argument makes me believe"
-               $ECHO "*** that it is just a static archive that I should not use here."
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because the file extensions .$libext of this argument makes me believe"
+               echo "*** that it is just a static archive that I should not use here."
              else
-               $ECHO
+               echo
                $ECHO "*** Warning: Linking the shared library $output against the"
                $ECHO "*** static library $deplib is not portable!"
                deplibs="$deplib $deplibs"
@@ -5275,11 +6375,11 @@ func_mode_link ()
            if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
              # If there is no dlopen support or we're linking statically,
              # we need to preload.
-             newdlprefiles="$newdlprefiles $deplib"
+             func_append newdlprefiles " $deplib"
              compile_deplibs="$deplib $compile_deplibs"
              finalize_deplibs="$deplib $finalize_deplibs"
            else
-             newdlfiles="$newdlfiles $deplib"
+             func_append newdlfiles " $deplib"
            fi
          fi
          continue
@@ -5321,20 +6421,20 @@ func_mode_link ()
 
        # Convert "-framework foo" to "foo.ltframework"
        if test -n "$inherited_linker_flags"; then
-         tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
          for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
            case " $new_inherited_linker_flags " in
              *" $tmp_inherited_linker_flag "*) ;;
-             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+             *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
            esac
          done
        fi
-       dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
        if test "$linkmode,$pass" = "lib,link" ||
           test "$linkmode,$pass" = "prog,scan" ||
           { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+         test -n "$dlopen" && func_append dlfiles " $dlopen"
+         test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
        fi
 
        if test "$pass" = conv; then
@@ -5345,17 +6445,17 @@ func_mode_link ()
              func_fatal_error "cannot find name of link library for \`$lib'"
            fi
            # It is a libtool convenience library, so add in its objects.
-           convenience="$convenience $ladir/$objdir/$old_library"
-           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+           func_append convenience " $ladir/$objdir/$old_library"
+           func_append old_convenience " $ladir/$objdir/$old_library"
            tmp_libs=
            for deplib in $dependency_libs; do
              deplibs="$deplib $deplibs"
-             if $opt_duplicate_deps ; then
+             if $opt_preserve_dup_deps ; then
                case "$tmp_libs " in
-               *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+               *" $deplib "*) func_append specialdeplibs " $deplib" ;;
                esac
              fi
-             tmp_libs="$tmp_libs $deplib"
+             func_append tmp_libs " $deplib"
            done
          elif test "$linkmode" != prog && test "$linkmode" != lib; then
            func_fatal_error "\`$lib' is not a convenience library"
@@ -5366,9 +6466,15 @@ func_mode_link ()
 
        # Get the name of the library we link against.
        linklib=
-       for l in $old_library $library_names; do
-         linklib="$l"
-       done
+       if test -n "$old_library" &&
+          { test "$prefer_static_libs" = yes ||
+            test "$prefer_static_libs,$installed" = "built,no"; }; then
+         linklib=$old_library
+       else
+         for l in $old_library $library_names; do
+           linklib="$l"
+         done
+       fi
        if test -z "$linklib"; then
          func_fatal_error "cannot find name of link library for \`$lib'"
        fi
@@ -5385,9 +6491,9 @@ func_mode_link ()
            # statically, we need to preload.  We also need to preload any
            # dependent libraries so libltdl's deplib preloader doesn't
            # bomb out in the load deplibs phase.
-           dlprefiles="$dlprefiles $lib $dependency_libs"
+           func_append dlprefiles " $lib $dependency_libs"
          else
-           newdlfiles="$newdlfiles $lib"
+           func_append newdlfiles " $lib"
          fi
          continue
        fi # $pass = dlopen
@@ -5409,14 +6515,14 @@ func_mode_link ()
 
        # Find the relevant object directory and library name.
        if test "X$installed" = Xyes; then
-         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+         if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
            func_warning "library \`$lib' was moved."
            dir="$ladir"
            absdir="$abs_ladir"
            libdir="$abs_ladir"
          else
-           dir="$libdir"
-           absdir="$libdir"
+           dir="$lt_sysroot$libdir"
+           absdir="$lt_sysroot$libdir"
          fi
          test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
        else
@@ -5424,12 +6530,12 @@ func_mode_link ()
            dir="$ladir"
            absdir="$abs_ladir"
            # Remove this search path later
-           notinst_path="$notinst_path $abs_ladir"
+           func_append notinst_path " $abs_ladir"
          else
            dir="$ladir/$objdir"
            absdir="$abs_ladir/$objdir"
            # Remove this search path later
-           notinst_path="$notinst_path $abs_ladir"
+           func_append notinst_path " $abs_ladir"
          fi
        fi # $installed = yes
        func_stripname 'lib' '.la' "$laname"
@@ -5440,20 +6546,46 @@ func_mode_link ()
          if test -z "$libdir" && test "$linkmode" = prog; then
            func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
          fi
-         # Prefer using a static library (so that no silly _DYNAMIC symbols
-         # are required to link).
-         if test -n "$old_library"; then
-           newdlprefiles="$newdlprefiles $dir/$old_library"
-           # Keep a list of preopened convenience libraries to check
-           # that they are being used correctly in the link pass.
-           test -z "$libdir" && \
-               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
-         # Otherwise, use the dlname, so that lt_dlopen finds it.
-         elif test -n "$dlname"; then
-           newdlprefiles="$newdlprefiles $dir/$dlname"
-         else
-           newdlprefiles="$newdlprefiles $dir/$linklib"
-         fi
+         case "$host" in
+           # special handling for platforms with PE-DLLs.
+           *cygwin* | *mingw* | *cegcc* )
+             # Linker will automatically link against shared library if both
+             # static and shared are present.  Therefore, ensure we extract
+             # symbols from the import library if a shared library is present
+             # (otherwise, the dlopen module name will be incorrect).  We do
+             # this by putting the import library name into $newdlprefiles.
+             # We recover the dlopen module name by 'saving' the la file
+             # name in a special purpose variable, and (later) extracting the
+             # dlname from the la file.
+             if test -n "$dlname"; then
+               func_tr_sh "$dir/$linklib"
+               eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+               func_append newdlprefiles " $dir/$linklib"
+             else
+               func_append newdlprefiles " $dir/$old_library"
+               # Keep a list of preopened convenience libraries to check
+               # that they are being used correctly in the link pass.
+               test -z "$libdir" && \
+                 func_append dlpreconveniencelibs " $dir/$old_library"
+             fi
+           ;;
+           * )
+             # Prefer using a static library (so that no silly _DYNAMIC symbols
+             # are required to link).
+             if test -n "$old_library"; then
+               func_append newdlprefiles " $dir/$old_library"
+               # Keep a list of preopened convenience libraries to check
+               # that they are being used correctly in the link pass.
+               test -z "$libdir" && \
+                 func_append dlpreconveniencelibs " $dir/$old_library"
+             # Otherwise, use the dlname, so that lt_dlopen finds it.
+             elif test -n "$dlname"; then
+               func_append newdlprefiles " $dir/$dlname"
+             else
+               func_append newdlprefiles " $dir/$linklib"
+             fi
+           ;;
+         esac
        fi # $pass = dlpreopen
 
        if test -z "$libdir"; then
@@ -5471,7 +6603,7 @@ func_mode_link ()
 
 
        if test "$linkmode" = prog && test "$pass" != link; then
-         newlib_search_path="$newlib_search_path $ladir"
+         func_append newlib_search_path " $ladir"
          deplibs="$lib $deplibs"
 
          linkalldeplibs=no
@@ -5484,7 +6616,8 @@ func_mode_link ()
          for deplib in $dependency_libs; do
            case $deplib in
            -L*) func_stripname '-L' '' "$deplib"
-                newlib_search_path="$newlib_search_path $func_stripname_result"
+                func_resolve_sysroot "$func_stripname_result"
+                func_append newlib_search_path " $func_resolve_sysroot_result"
                 ;;
            esac
            # Need to link against all dependency_libs?
@@ -5495,12 +6628,12 @@ func_mode_link ()
              # or/and link against static libraries
              newdependency_libs="$deplib $newdependency_libs"
            fi
-           if $opt_duplicate_deps ; then
+           if $opt_preserve_dup_deps ; then
              case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             *" $deplib "*) func_append specialdeplibs " $deplib" ;;
              esac
            fi
-           tmp_libs="$tmp_libs $deplib"
+           func_append tmp_libs " $deplib"
          done # for deplib
          continue
        fi # $linkmode = prog...
@@ -5515,7 +6648,7 @@ func_mode_link ()
              # Make sure the rpath contains only unique directories.
              case "$temp_rpath:" in
              *"$absdir:"*) ;;
-             *) temp_rpath="$temp_rpath$absdir:" ;;
+             *) func_append temp_rpath "$absdir:" ;;
              esac
            fi
 
@@ -5527,7 +6660,7 @@ func_mode_link ()
            *)
              case "$compile_rpath " in
              *" $absdir "*) ;;
-             *) compile_rpath="$compile_rpath $absdir"
+             *) func_append compile_rpath " $absdir" ;;
              esac
              ;;
            esac
@@ -5536,7 +6669,7 @@ func_mode_link ()
            *)
              case "$finalize_rpath " in
              *" $libdir "*) ;;
-             *) finalize_rpath="$finalize_rpath $libdir"
+             *) func_append finalize_rpath " $libdir" ;;
              esac
              ;;
            esac
@@ -5561,12 +6694,12 @@ func_mode_link ()
          case $host in
          *cygwin* | *mingw* | *cegcc*)
              # No point in relinking DLLs because paths are not encoded
-             notinst_deplibs="$notinst_deplibs $lib"
+             func_append notinst_deplibs " $lib"
              need_relink=no
            ;;
          *)
            if test "$installed" = no; then
-             notinst_deplibs="$notinst_deplibs $lib"
+             func_append notinst_deplibs " $lib"
              need_relink=yes
            fi
            ;;
@@ -5583,7 +6716,7 @@ func_mode_link ()
            fi
          done
          if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
-           $ECHO
+           echo
            if test "$linkmode" = prog; then
              $ECHO "*** Warning: Linking the executable $output against the loadable module"
            else
@@ -5601,7 +6734,7 @@ func_mode_link ()
            *)
              case "$compile_rpath " in
              *" $absdir "*) ;;
-             *) compile_rpath="$compile_rpath $absdir"
+             *) func_append compile_rpath " $absdir" ;;
              esac
              ;;
            esac
@@ -5610,7 +6743,7 @@ func_mode_link ()
            *)
              case "$finalize_rpath " in
              *" $libdir "*) ;;
-             *) finalize_rpath="$finalize_rpath $libdir"
+             *) func_append finalize_rpath " $libdir" ;;
              esac
              ;;
            esac
@@ -5664,7 +6797,7 @@ func_mode_link ()
            linklib=$newlib
          fi # test -n "$old_archive_from_expsyms_cmds"
 
-         if test "$linkmode" = prog || test "$mode" != relink; then
+         if test "$linkmode" = prog || test "$opt_mode" != relink; then
            add_shlibpath=
            add_dir=
            add=
@@ -5686,9 +6819,9 @@ func_mode_link ()
                      if test "X$dlopenmodule" != "X$lib"; then
                        $ECHO "*** Warning: lib $linklib is a module, not a shared library"
                        if test -z "$old_library" ; then
-                         $ECHO
-                         $ECHO "*** And there doesn't seem to be a static archive available"
-                         $ECHO "*** The link will probably fail, sorry"
+                         echo
+                         echo "*** And there doesn't seem to be a static archive available"
+                         echo "*** The link will probably fail, sorry"
                        else
                          add="$dir/$old_library"
                        fi
@@ -5715,12 +6848,12 @@ func_mode_link ()
                 test "$hardcode_direct_absolute" = no; then
                add="$dir/$linklib"
              elif test "$hardcode_minus_L" = yes; then
-               add_dir="-L$dir"
+               add_dir="-L$absdir"
                # Try looking first in the location we're being installed to.
                if test -n "$inst_prefix_dir"; then
                  case $libdir in
                    [\\/]*)
-                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     func_append add_dir " -L$inst_prefix_dir$libdir"
                      ;;
                  esac
                fi
@@ -5742,7 +6875,7 @@ func_mode_link ()
            if test -n "$add_shlibpath"; then
              case :$compile_shlibpath: in
              *":$add_shlibpath:"*) ;;
-             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             *) func_append compile_shlibpath "$add_shlibpath:" ;;
              esac
            fi
            if test "$linkmode" = prog; then
@@ -5756,13 +6889,13 @@ func_mode_link ()
                 test "$hardcode_shlibpath_var" = yes; then
                case :$finalize_shlibpath: in
                *":$libdir:"*) ;;
-               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               *) func_append finalize_shlibpath "$libdir:" ;;
                esac
              fi
            fi
          fi
 
-         if test "$linkmode" = prog || test "$mode" = relink; then
+         if test "$linkmode" = prog || test "$opt_mode" = relink; then
            add_shlibpath=
            add_dir=
            add=
@@ -5776,7 +6909,7 @@ func_mode_link ()
            elif test "$hardcode_shlibpath_var" = yes; then
              case :$finalize_shlibpath: in
              *":$libdir:"*) ;;
-             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             *) func_append finalize_shlibpath "$libdir:" ;;
              esac
              add="-l$name"
            elif test "$hardcode_automatic" = yes; then
@@ -5793,7 +6926,7 @@ func_mode_link ()
              if test -n "$inst_prefix_dir"; then
                case $libdir in
                  [\\/]*)
-                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   func_append add_dir " -L$inst_prefix_dir$libdir"
                    ;;
                esac
              fi
@@ -5828,21 +6961,21 @@ func_mode_link ()
 
            # Just print a warning and add the library to dependency_libs so
            # that the program can be linked against the static library.
-           $ECHO
+           echo
            $ECHO "*** Warning: This system can not link to static lib archive $lib."
-           $ECHO "*** I have the capability to make that library automatically link in when"
-           $ECHO "*** you link to this library.  But I can only do this if you have a"
-           $ECHO "*** shared version of the library, which you do not appear to have."
+           echo "*** I have the capability to make that library automatically link in when"
+           echo "*** you link to this library.  But I can only do this if you have a"
+           echo "*** shared version of the library, which you do not appear to have."
            if test "$module" = yes; then
-             $ECHO "*** But as you try to build a module library, libtool will still create "
-             $ECHO "*** a static module, that should work as long as the dlopening application"
-             $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             echo "*** But as you try to build a module library, libtool will still create "
+             echo "*** a static module, that should work as long as the dlopening application"
+             echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
              if test -z "$global_symbol_pipe"; then
-               $ECHO
-               $ECHO "*** However, this would only work if libtool was able to extract symbol"
-               $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-               $ECHO "*** not find such a program.  So, this module is probably useless."
-               $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+               echo
+               echo "*** However, this would only work if libtool was able to extract symbol"
+               echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               echo "*** not find such a program.  So, this module is probably useless."
+               echo "*** \`nm' from GNU binutils and a full rebuild may help."
              fi
              if test "$build_old_libs" = no; then
                build_libtool_libs=module
@@ -5870,27 +7003,33 @@ func_mode_link ()
                   temp_xrpath=$func_stripname_result
                   case " $xrpath " in
                   *" $temp_xrpath "*) ;;
-                  *) xrpath="$xrpath $temp_xrpath";;
+                  *) func_append xrpath " $temp_xrpath";;
                   esac;;
-             *) temp_deplibs="$temp_deplibs $libdir";;
+             *) func_append temp_deplibs " $libdir";;
              esac
            done
            dependency_libs="$temp_deplibs"
          fi
 
-         newlib_search_path="$newlib_search_path $absdir"
+         func_append newlib_search_path " $absdir"
          # Link against this library
          test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
          # ... and its dependency_libs
          tmp_libs=
          for deplib in $dependency_libs; do
            newdependency_libs="$deplib $newdependency_libs"
-           if $opt_duplicate_deps ; then
+           case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+           if $opt_preserve_dup_deps ; then
              case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
              esac
            fi
-           tmp_libs="$tmp_libs $deplib"
+           func_append tmp_libs " $func_resolve_sysroot_result"
          done
 
          if test "$link_all_deplibs" != no; then
@@ -5900,8 +7039,10 @@ func_mode_link ()
              case $deplib in
              -L*) path="$deplib" ;;
              *.la)
+               func_resolve_sysroot "$deplib"
+               deplib=$func_resolve_sysroot_result
                func_dirname "$deplib" "" "."
-               dir="$func_dirname_result"
+               dir=$func_dirname_result
                # We need an absolute path.
                case $dir in
                [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
@@ -5928,8 +7069,8 @@ func_mode_link ()
                       if test -z "$darwin_install_name"; then
                           darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
-                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+                     func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
                      path=
                    fi
                  fi
@@ -5962,7 +7103,7 @@ func_mode_link ()
          compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
          finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
        else
-         compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
        fi
       fi
       dependency_libs="$newdependency_libs"
@@ -5979,7 +7120,7 @@ func_mode_link ()
          for dir in $newlib_search_path; do
            case "$lib_search_path " in
            *" $dir "*) ;;
-           *) lib_search_path="$lib_search_path $dir" ;;
+           *) func_append lib_search_path " $dir" ;;
            esac
          done
          newlib_search_path=
@@ -6037,10 +7178,10 @@ func_mode_link ()
            -L*)
              case " $tmp_libs " in
              *" $deplib "*) ;;
-             *) tmp_libs="$tmp_libs $deplib" ;;
+             *) func_append tmp_libs " $deplib" ;;
              esac
              ;;
-           *) tmp_libs="$tmp_libs $deplib" ;;
+           *) func_append tmp_libs " $deplib" ;;
            esac
          done
          eval $var=\"$tmp_libs\"
@@ -6056,7 +7197,7 @@ func_mode_link ()
          ;;
        esac
        if test -n "$i" ; then
-         tmp_libs="$tmp_libs $i"
+         func_append tmp_libs " $i"
        fi
       done
       dependency_libs=$tmp_libs
@@ -6097,7 +7238,7 @@ func_mode_link ()
       # Now set the variables for building old libraries.
       build_libtool_libs=no
       oldlibs="$output"
-      objs="$objs$old_deplibs"
+      func_append objs "$old_deplibs"
       ;;
 
     lib)
@@ -6130,10 +7271,10 @@ func_mode_link ()
        if test "$deplibs_check_method" != pass_all; then
          func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
        else
-         $ECHO
+         echo
          $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
          $ECHO "*** objects $objs is not portable!"
-         libobjs="$libobjs $objs"
+         func_append libobjs " $objs"
        fi
       fi
 
@@ -6192,13 +7333,14 @@ func_mode_link ()
          # which has an extra 1 added just for fun
          #
          case $version_type in
+         # correct linux to gnu/linux during the next big refactor
          darwin|linux|osf|windows|none)
            func_arith $number_major + $number_minor
            current=$func_arith_result
            age="$number_minor"
            revision="$number_revision"
            ;;
-         freebsd-aout|freebsd-elf|sunos)
+         freebsd-aout|freebsd-elf|qnx|sunos)
            current="$number_major"
            revision="$number_minor"
            age="0"
@@ -6311,7 +7453,7 @@ func_mode_link ()
          versuffix="$major.$revision"
          ;;
 
-       linux)
+       linux) # correct to gnu/linux during the next big refactor
          func_arith $current - $age
          major=.$func_arith_result
          versuffix="$major.$age.$revision"
@@ -6334,7 +7476,7 @@ func_mode_link ()
          done
 
          # Make executables depend on our current version.
-         verstring="$verstring:${current}.0"
+         func_append verstring ":${current}.0"
          ;;
 
        qnx)
@@ -6402,10 +7544,10 @@ func_mode_link ()
       fi
 
       func_generate_dlsyms "$libname" "$libname" "yes"
-      libobjs="$libobjs $symfileobj"
+      func_append libobjs " $symfileobj"
       test "X$libobjs" = "X " && libobjs=
 
-      if test "$mode" != relink; then
+      if test "$opt_mode" != relink; then
        # Remove our outputs, but don't remove object files since they
        # may have been created when compiling PIC objects.
        removelist=
@@ -6421,7 +7563,7 @@ func_mode_link ()
                   continue
                 fi
               fi
-              removelist="$removelist $p"
+              func_append removelist " $p"
               ;;
            *) ;;
          esac
@@ -6432,27 +7574,28 @@ func_mode_link ()
 
       # Now set the variables for building old libraries.
       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+       func_append oldlibs " $output_objdir/$libname.$libext"
 
        # Transform .lo files to .o files.
-       oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+       oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
       fi
 
       # Eliminate all temporary directories.
       #for path in $notinst_path; do
-      #        lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
-      #        deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
-      #        dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #        lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #        deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
       #done
 
       if test -n "$xrpath"; then
        # If the user specified any rpath flags, then add them.
        temp_xrpath=
        for libdir in $xrpath; do
-         temp_xrpath="$temp_xrpath -R$libdir"
+         func_replace_sysroot "$libdir"
+         func_append temp_xrpath " -R$func_replace_sysroot_result"
          case "$finalize_rpath " in
          *" $libdir "*) ;;
-         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         *) func_append finalize_rpath " $libdir" ;;
          esac
        done
        if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
@@ -6466,7 +7609,7 @@ func_mode_link ()
       for lib in $old_dlfiles; do
        case " $dlprefiles $dlfiles " in
        *" $lib "*) ;;
-       *) dlfiles="$dlfiles $lib" ;;
+       *) func_append dlfiles " $lib" ;;
        esac
       done
 
@@ -6476,19 +7619,19 @@ func_mode_link ()
       for lib in $old_dlprefiles; do
        case "$dlprefiles " in
        *" $lib "*) ;;
-       *) dlprefiles="$dlprefiles $lib" ;;
+       *) func_append dlprefiles " $lib" ;;
        esac
       done
 
       if test "$build_libtool_libs" = yes; then
        if test -n "$rpath"; then
          case $host in
-         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
            # these systems don't actually have a c library (as such)!
            ;;
          *-*-rhapsody* | *-*-darwin1.[012])
            # Rhapsody C library is in the System framework
-           deplibs="$deplibs System.ltframework"
+           func_append deplibs " System.ltframework"
            ;;
          *-*-netbsd*)
            # Don't link with libc until the a.out ld.so is fixed.
@@ -6505,7 +7648,7 @@ func_mode_link ()
          *)
            # Add libc to deplibs on all other systems if necessary.
            if test "$build_libtool_need_lc" = "yes"; then
-             deplibs="$deplibs -lc"
+             func_append deplibs " -lc"
            fi
            ;;
          esac
@@ -6554,7 +7697,7 @@ EOF
                if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
                  case " $predeps $postdeps " in
                  *" $i "*)
-                   newdeplibs="$newdeplibs $i"
+                   func_append newdeplibs " $i"
                    i=""
                    ;;
                  esac
@@ -6565,21 +7708,21 @@ EOF
                  set dummy $deplib_matches; shift
                  deplib_match=$1
                  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-                   newdeplibs="$newdeplibs $i"
+                   func_append newdeplibs " $i"
                  else
                    droppeddeps=yes
-                   $ECHO
+                   echo
                    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-                   $ECHO "*** I have the capability to make that library automatically link in when"
-                   $ECHO "*** you link to this library.  But I can only do this if you have a"
-                   $ECHO "*** shared version of the library, which I believe you do not have"
-                   $ECHO "*** because a test_compile did reveal that the linker did not use it for"
-                   $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+                   echo "*** I have the capability to make that library automatically link in when"
+                   echo "*** you link to this library.  But I can only do this if you have a"
+                   echo "*** shared version of the library, which I believe you do not have"
+                   echo "*** because a test_compile did reveal that the linker did not use it for"
+                   echo "*** its dynamic dependency list that programs get resolved with at runtime."
                  fi
                fi
                ;;
              *)
-               newdeplibs="$newdeplibs $i"
+               func_append newdeplibs " $i"
                ;;
              esac
            done
@@ -6597,7 +7740,7 @@ EOF
                  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
                    case " $predeps $postdeps " in
                    *" $i "*)
-                     newdeplibs="$newdeplibs $i"
+                     func_append newdeplibs " $i"
                      i=""
                      ;;
                    esac
@@ -6608,29 +7751,29 @@ EOF
                    set dummy $deplib_matches; shift
                    deplib_match=$1
                    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-                     newdeplibs="$newdeplibs $i"
+                     func_append newdeplibs " $i"
                    else
                      droppeddeps=yes
-                     $ECHO
+                     echo
                      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-                     $ECHO "*** I have the capability to make that library automatically link in when"
-                     $ECHO "*** you link to this library.  But I can only do this if you have a"
-                     $ECHO "*** shared version of the library, which you do not appear to have"
-                     $ECHO "*** because a test_compile did reveal that the linker did not use this one"
-                     $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+                     echo "*** I have the capability to make that library automatically link in when"
+                     echo "*** you link to this library.  But I can only do this if you have a"
+                     echo "*** shared version of the library, which you do not appear to have"
+                     echo "*** because a test_compile did reveal that the linker did not use this one"
+                     echo "*** as a dynamic dependency that programs can get resolved with at runtime."
                    fi
                  fi
                else
                  droppeddeps=yes
-                 $ECHO
+                 echo
                  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
-                 $ECHO "*** make it link in!  You will probably need to install it or some"
-                 $ECHO "*** library that it depends on before this library will be fully"
-                 $ECHO "*** functional.  Installing it before continuing would be even better."
+                 echo "*** make it link in!  You will probably need to install it or some"
+                 echo "*** library that it depends on before this library will be fully"
+                 echo "*** functional.  Installing it before continuing would be even better."
                fi
                ;;
              *)
-               newdeplibs="$newdeplibs $i"
+               func_append newdeplibs " $i"
                ;;
              esac
            done
@@ -6647,15 +7790,27 @@ EOF
              if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
                case " $predeps $postdeps " in
                *" $a_deplib "*)
-                 newdeplibs="$newdeplibs $a_deplib"
+                 func_append newdeplibs " $a_deplib"
                  a_deplib=""
                  ;;
                esac
              fi
              if test -n "$a_deplib" ; then
                libname=`eval "\\$ECHO \"$libname_spec\""`
+               if test -n "$file_magic_glob"; then
+                 libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+               else
+                 libnameglob=$libname
+               fi
+               test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
                for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 if test "$want_nocaseglob" = yes; then
+                   shopt -s nocaseglob
+                   potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+                   $nocaseglob
+                 else
+                   potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+                 fi
                  for potent_lib in $potential_libs; do
                      # Follow soft links.
                      if ls -lLd "$potent_lib" 2>/dev/null |
@@ -6672,13 +7827,13 @@ EOF
                        potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
                        case $potliblink in
                        [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-                       *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
                        esac
                      done
                      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
                         $SED -e 10q |
                         $EGREP "$file_magic_regex" > /dev/null; then
-                       newdeplibs="$newdeplibs $a_deplib"
+                       func_append newdeplibs " $a_deplib"
                        a_deplib=""
                        break 2
                      fi
@@ -6687,12 +7842,12 @@ EOF
              fi
              if test -n "$a_deplib" ; then
                droppeddeps=yes
-               $ECHO
+               echo
                $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-               $ECHO "*** I have the capability to make that library automatically link in when"
-               $ECHO "*** you link to this library.  But I can only do this if you have a"
-               $ECHO "*** shared version of the library, which you do not appear to have"
-               $ECHO "*** because I did check the linker path looking for a file starting"
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because I did check the linker path looking for a file starting"
                if test -z "$potlib" ; then
                  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
                else
@@ -6703,7 +7858,7 @@ EOF
              ;;
            *)
              # Add a -L argument.
-             newdeplibs="$newdeplibs $a_deplib"
+             func_append newdeplibs " $a_deplib"
              ;;
            esac
          done # Gone through all deplibs.
@@ -6719,7 +7874,7 @@ EOF
              if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
                case " $predeps $postdeps " in
                *" $a_deplib "*)
-                 newdeplibs="$newdeplibs $a_deplib"
+                 func_append newdeplibs " $a_deplib"
                  a_deplib=""
                  ;;
                esac
@@ -6730,9 +7885,9 @@ EOF
                  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
                  for potent_lib in $potential_libs; do
                    potlib="$potent_lib" # see symlink-check above in file_magic test
-                   if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+                   if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
                       $EGREP "$match_pattern_regex" > /dev/null; then
-                     newdeplibs="$newdeplibs $a_deplib"
+                     func_append newdeplibs " $a_deplib"
                      a_deplib=""
                      break 2
                    fi
@@ -6741,12 +7896,12 @@ EOF
              fi
              if test -n "$a_deplib" ; then
                droppeddeps=yes
-               $ECHO
+               echo
                $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-               $ECHO "*** I have the capability to make that library automatically link in when"
-               $ECHO "*** you link to this library.  But I can only do this if you have a"
-               $ECHO "*** shared version of the library, which you do not appear to have"
-               $ECHO "*** because I did check the linker path looking for a file starting"
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because I did check the linker path looking for a file starting"
                if test -z "$potlib" ; then
                  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
                else
@@ -6757,32 +7912,32 @@ EOF
              ;;
            *)
              # Add a -L argument.
-             newdeplibs="$newdeplibs $a_deplib"
+             func_append newdeplibs " $a_deplib"
              ;;
            esac
          done # Gone through all deplibs.
          ;;
        none | unknown | *)
          newdeplibs=""
-         tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
-             -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+         tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
          if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
            for i in $predeps $postdeps ; do
              # can't use Xsed below, because $i might contain '/'
-             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
            done
          fi
-         if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[      ]//g' |
-            $GREP . >/dev/null; then
-           $ECHO
+         case $tmp_deplibs in
+         *[!\  \ ]*)
+           echo
            if test "X$deplibs_check_method" = "Xnone"; then
-             $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+             echo "*** Warning: inter-library dependencies are not supported in this platform."
            else
-             $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+             echo "*** Warning: inter-library dependencies are not known to be supported."
            fi
-           $ECHO "*** All declared inter-library dependencies are being dropped."
+           echo "*** All declared inter-library dependencies are being dropped."
            droppeddeps=yes
-         fi
+           ;;
+         esac
          ;;
        esac
        versuffix=$versuffix_save
@@ -6794,23 +7949,23 @@ EOF
        case $host in
        *-*-rhapsody* | *-*-darwin1.[012])
          # On Rhapsody replace the C library with the System framework
-         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+         newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
          ;;
        esac
 
        if test "$droppeddeps" = yes; then
          if test "$module" = yes; then
-           $ECHO
-           $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+           echo
+           echo "*** Warning: libtool could not satisfy all declared inter-library"
            $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
-           $ECHO "*** a static module, that should work as long as the dlopening"
-           $ECHO "*** application is linked with the -dlopen flag."
+           echo "*** a static module, that should work as long as the dlopening"
+           echo "*** application is linked with the -dlopen flag."
            if test -z "$global_symbol_pipe"; then
-             $ECHO
-             $ECHO "*** However, this would only work if libtool was able to extract symbol"
-             $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-             $ECHO "*** not find such a program.  So, this module is probably useless."
-             $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+             echo
+             echo "*** However, this would only work if libtool was able to extract symbol"
+             echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             echo "*** not find such a program.  So, this module is probably useless."
+             echo "*** \`nm' from GNU binutils and a full rebuild may help."
            fi
            if test "$build_old_libs" = no; then
              oldlibs="$output_objdir/$libname.$libext"
@@ -6820,16 +7975,16 @@ EOF
              build_libtool_libs=no
            fi
          else
-           $ECHO "*** The inter-library dependencies that have been dropped here will be"
-           $ECHO "*** automatically added whenever a program is linked with this library"
-           $ECHO "*** or is declared to -dlopen it."
+           echo "*** The inter-library dependencies that have been dropped here will be"
+           echo "*** automatically added whenever a program is linked with this library"
+           echo "*** or is declared to -dlopen it."
 
            if test "$allow_undefined" = no; then
-             $ECHO
-             $ECHO "*** Since this library must not contain undefined symbols,"
-             $ECHO "*** because either the platform does not support them or"
-             $ECHO "*** it was explicitly requested with -no-undefined,"
-             $ECHO "*** libtool will only create a static version of it."
+             echo
+             echo "*** Since this library must not contain undefined symbols,"
+             echo "*** because either the platform does not support them or"
+             echo "*** it was explicitly requested with -no-undefined,"
+             echo "*** libtool will only create a static version of it."
              if test "$build_old_libs" = no; then
                oldlibs="$output_objdir/$libname.$libext"
                build_libtool_libs=module
@@ -6846,9 +8001,9 @@ EOF
       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
       case $host in
        *-*-darwin*)
-         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-         new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-         deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
          ;;
       esac
 
@@ -6861,7 +8016,7 @@ EOF
        *)
          case " $deplibs " in
          *" -L$path/$objdir "*)
-           new_libs="$new_libs -L$path/$objdir" ;;
+           func_append new_libs " -L$path/$objdir" ;;
          esac
          ;;
        esac
@@ -6871,10 +8026,10 @@ EOF
        -L*)
          case " $new_libs " in
          *" $deplib "*) ;;
-         *) new_libs="$new_libs $deplib" ;;
+         *) func_append new_libs " $deplib" ;;
          esac
          ;;
-       *) new_libs="$new_libs $deplib" ;;
+       *) func_append new_libs " $deplib" ;;
        esac
       done
       deplibs="$new_libs"
@@ -6886,15 +8041,22 @@ EOF
 
       # Test again, we may have decided not to build it any more
       if test "$build_libtool_libs" = yes; then
+       # Remove ${wl} instances when linking with ld.
+       # FIXME: should test the right _cmds variable.
+       case $archive_cmds in
+         *\$LD\ *) wl= ;;
+        esac
        if test "$hardcode_into_libs" = yes; then
          # Hardcode the library paths
          hardcode_libdirs=
          dep_rpath=
          rpath="$finalize_rpath"
-         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
          for libdir in $rpath; do
            if test -n "$hardcode_libdir_flag_spec"; then
              if test -n "$hardcode_libdir_separator"; then
+               func_replace_sysroot "$libdir"
+               libdir=$func_replace_sysroot_result
                if test -z "$hardcode_libdirs"; then
                  hardcode_libdirs="$libdir"
                else
@@ -6903,18 +8065,18 @@ EOF
                  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
                    ;;
                  *)
-                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
                    ;;
                  esac
                fi
              else
                eval flag=\"$hardcode_libdir_flag_spec\"
-               dep_rpath="$dep_rpath $flag"
+               func_append dep_rpath " $flag"
              fi
            elif test -n "$runpath_var"; then
              case "$perm_rpath " in
              *" $libdir "*) ;;
-             *) perm_rpath="$perm_rpath $libdir" ;;
+             *) func_append perm_rpath " $libdir" ;;
              esac
            fi
          done
@@ -6922,17 +8084,13 @@ EOF
          if test -n "$hardcode_libdir_separator" &&
             test -n "$hardcode_libdirs"; then
            libdir="$hardcode_libdirs"
-           if test -n "$hardcode_libdir_flag_spec_ld"; then
-             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-           else
-             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-           fi
+           eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
          fi
          if test -n "$runpath_var" && test -n "$perm_rpath"; then
            # We should set the runpath_var.
            rpath=
            for dir in $perm_rpath; do
-             rpath="$rpath$dir:"
+             func_append rpath "$dir:"
            done
            eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
          fi
@@ -6940,7 +8098,7 @@ EOF
        fi
 
        shlibpath="$finalize_shlibpath"
-       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
        if test -n "$shlibpath"; then
          eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
        fi
@@ -6966,18 +8124,18 @@ EOF
        linknames=
        for link
        do
-         linknames="$linknames $link"
+         func_append linknames " $link"
        done
 
        # Use standard objects if they are pic
-       test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
        test "X$libobjs" = "X " && libobjs=
 
        delfiles=
        if test -n "$export_symbols" && test -n "$include_expsyms"; then
          $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
          export_symbols="$output_objdir/$libname.uexp"
-         delfiles="$delfiles $export_symbols"
+         func_append delfiles " $export_symbols"
        fi
 
        orig_export_symbols=
@@ -7008,13 +8166,45 @@ EOF
            $opt_dry_run || $RM $export_symbols
            cmds=$export_symbols_cmds
            save_ifs="$IFS"; IFS='~'
-           for cmd in $cmds; do
+           for cmd1 in $cmds; do
              IFS="$save_ifs"
-             eval cmd=\"$cmd\"
-             func_len " $cmd"
-             len=$func_len_result
-             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+             # Take the normal branch if the nm_file_list_spec branch
+             # doesn't work or if tool conversion is not needed.
+             case $nm_file_list_spec~$to_tool_file_cmd in
+               *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+                 try_normal_branch=yes
+                 eval cmd=\"$cmd1\"
+                 func_len " $cmd"
+                 len=$func_len_result
+                 ;;
+               *)
+                 try_normal_branch=no
+                 ;;
+             esac
+             if test "$try_normal_branch" = yes \
+                && { test "$len" -lt "$max_cmd_len" \
+                     || test "$max_cmd_len" -le -1; }
+             then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             elif test -n "$nm_file_list_spec"; then
+               func_basename "$output"
+               output_la=$func_basename_result
+               save_libobjs=$libobjs
+               save_output=$output
+               output=${output_objdir}/${output_la}.nm
+               func_to_tool_file "$output"
+               libobjs=$nm_file_list_spec$func_to_tool_file_result
+               func_append delfiles " $output"
+               func_verbose "creating $NM input file list: $output"
+               for obj in $save_libobjs; do
+                 func_to_tool_file "$obj"
+                 $ECHO "$func_to_tool_file_result"
+               done > "$output"
+               eval cmd=\"$cmd1\"
                func_show_eval "$cmd" 'exit $?'
+               output=$save_output
+               libobjs=$save_libobjs
                skipped_export=false
              else
                # The command line is too long to execute in one step.
@@ -7036,7 +8226,7 @@ EOF
        if test -n "$export_symbols" && test -n "$include_expsyms"; then
          tmp_export_symbols="$export_symbols"
          test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-         $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+         $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
        fi
 
        if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
@@ -7048,7 +8238,7 @@ EOF
          # global variables. join(1) would be nice here, but unfortunately
          # isn't a blessed tool.
          $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-         delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+         func_append delfiles " $export_symbols $output_objdir/$libname.filter"
          export_symbols=$output_objdir/$libname.def
          $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
        fi
@@ -7058,7 +8248,7 @@ EOF
          case " $convenience " in
          *" $test_deplib "*) ;;
          *)
-           tmp_deplibs="$tmp_deplibs $test_deplib"
+           func_append tmp_deplibs " $test_deplib"
            ;;
          esac
        done
@@ -7078,21 +8268,21 @@ EOF
            test "X$libobjs" = "X " && libobjs=
          else
            gentop="$output_objdir/${outputname}x"
-           generated="$generated $gentop"
+           func_append generated " $gentop"
 
            func_extract_archives $gentop $convenience
-           libobjs="$libobjs $func_extract_archives_result"
+           func_append libobjs " $func_extract_archives_result"
            test "X$libobjs" = "X " && libobjs=
          fi
        fi
 
        if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
          eval flag=\"$thread_safe_flag_spec\"
-         linker_flags="$linker_flags $flag"
+         func_append linker_flags " $flag"
        fi
 
        # Make a backup of the uninstalled library when relinking
-       if test "$mode" = relink; then
+       if test "$opt_mode" = relink; then
          $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
        fi
 
@@ -7137,7 +8327,8 @@ EOF
            save_libobjs=$libobjs
          fi
          save_output=$output
-         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+         func_basename "$output"
+         output_la=$func_basename_result
 
          # Clear the reloadable object creation command queue and
          # initialize k to one.
@@ -7150,13 +8341,16 @@ EOF
          if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
            output=${output_objdir}/${output_la}.lnkscript
            func_verbose "creating GNU ld script: $output"
-           $ECHO 'INPUT (' > $output
+           echo 'INPUT (' > $output
            for obj in $save_libobjs
            do
-             $ECHO "$obj" >> $output
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
            done
-           $ECHO ')' >> $output
-           delfiles="$delfiles $output"
+           echo ')' >> $output
+           func_append delfiles " $output"
+           func_to_tool_file "$output"
+           output=$func_to_tool_file_result
          elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
            output=${output_objdir}/${output_la}.lnk
            func_verbose "creating linker input file list: $output"
@@ -7170,10 +8364,12 @@ EOF
            fi
            for obj
            do
-             $ECHO "$obj" >> $output
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
            done
-           delfiles="$delfiles $output"
-           output=$firstobj\"$file_list_spec$output\"
+           func_append delfiles " $output"
+           func_to_tool_file "$output"
+           output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
          else
            if test -n "$save_libobjs"; then
              func_verbose "creating reloadable object files..."
@@ -7197,17 +8393,19 @@ EOF
                  # command to the queue.
                  if test "$k" -eq 1 ; then
                    # The first file doesn't have a previous command to add.
-                   eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+                   reload_objs=$objlist
+                   eval concat_cmds=\"$reload_cmds\"
                  else
                    # All subsequent reloadable object files will link in
                    # the last one created.
-                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+                   reload_objs="$objlist $last_robj"
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
                  fi
                  last_robj=$output_objdir/$output_la-${k}.$objext
                  func_arith $k + 1
                  k=$func_arith_result
                  output=$output_objdir/$output_la-${k}.$objext
-                 objlist=$obj
+                 objlist=" $obj"
                  func_len " $last_robj"
                  func_arith $len0 + $func_len_result
                  len=$func_arith_result
@@ -7217,11 +8415,12 @@ EOF
              # reloadable object file.  All subsequent reloadable object
              # files will link in the last one created.
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+             reload_objs="$objlist $last_robj"
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
              if test -n "$last_robj"; then
                eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
              fi
-             delfiles="$delfiles $output"
+             func_append delfiles " $output"
 
            else
              output=
@@ -7255,7 +8454,7 @@ EOF
                lt_exit=$?
 
                # Restore the uninstalled library and exit
-               if test "$mode" = relink; then
+               if test "$opt_mode" = relink; then
                  ( cd "$output_objdir" && \
                    $RM "${realname}T" && \
                    $MV "${realname}U" "$realname" )
@@ -7276,7 +8475,7 @@ EOF
            if test -n "$export_symbols" && test -n "$include_expsyms"; then
              tmp_export_symbols="$export_symbols"
              test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-             $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+             $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
            fi
 
            if test -n "$orig_export_symbols"; then
@@ -7288,7 +8487,7 @@ EOF
              # global variables. join(1) would be nice here, but unfortunately
              # isn't a blessed tool.
              $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-             delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+             func_append delfiles " $export_symbols $output_objdir/$libname.filter"
              export_symbols=$output_objdir/$libname.def
              $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
            fi
@@ -7329,10 +8528,10 @@ EOF
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
          gentop="$output_objdir/${outputname}x"
-         generated="$generated $gentop"
+         func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
-         libobjs="$libobjs $func_extract_archives_result"
+         func_append libobjs " $func_extract_archives_result"
          test "X$libobjs" = "X " && libobjs=
        fi
 
@@ -7348,7 +8547,7 @@ EOF
            lt_exit=$?
 
            # Restore the uninstalled library and exit
-           if test "$mode" = relink; then
+           if test "$opt_mode" = relink; then
              ( cd "$output_objdir" && \
                $RM "${realname}T" && \
                $MV "${realname}U" "$realname" )
@@ -7360,7 +8559,7 @@ EOF
        IFS="$save_ifs"
 
        # Restore the uninstalled library and exit
-       if test "$mode" = relink; then
+       if test "$opt_mode" = relink; then
          $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
 
          if test -n "$convenience"; then
@@ -7441,18 +8640,21 @@ EOF
       if test -n "$convenience"; then
        if test -n "$whole_archive_flag_spec"; then
          eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-         reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+         reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
        else
          gentop="$output_objdir/${obj}x"
-         generated="$generated $gentop"
+         func_append generated " $gentop"
 
          func_extract_archives $gentop $convenience
          reload_conv_objs="$reload_objs $func_extract_archives_result"
        fi
       fi
 
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
       # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
 
       output="$obj"
       func_execute_cmds "$reload_cmds" 'exit $?'
@@ -7512,8 +8714,8 @@ EOF
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
        # On Rhapsody replace the C library is the System framework
-       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
-       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
        ;;
       esac
 
@@ -7524,14 +8726,14 @@ EOF
        if test "$tagname" = CXX ; then
          case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
            10.[0123])
-             compile_command="$compile_command ${wl}-bind_at_load"
-             finalize_command="$finalize_command ${wl}-bind_at_load"
+             func_append compile_command " ${wl}-bind_at_load"
+             func_append finalize_command " ${wl}-bind_at_load"
            ;;
          esac
        fi
        # Time to change all our "foo.ltframework" stuff back to "-framework foo"
-       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
        ;;
       esac
 
@@ -7545,7 +8747,7 @@ EOF
        *)
          case " $compile_deplibs " in
          *" -L$path/$objdir "*)
-           new_libs="$new_libs -L$path/$objdir" ;;
+           func_append new_libs " -L$path/$objdir" ;;
          esac
          ;;
        esac
@@ -7555,17 +8757,17 @@ EOF
        -L*)
          case " $new_libs " in
          *" $deplib "*) ;;
-         *) new_libs="$new_libs $deplib" ;;
+         *) func_append new_libs " $deplib" ;;
          esac
          ;;
-       *) new_libs="$new_libs $deplib" ;;
+       *) func_append new_libs " $deplib" ;;
        esac
       done
       compile_deplibs="$new_libs"
 
 
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
 
       if test -n "$rpath$xrpath"; then
        # If the user specified any rpath flags, then add them.
@@ -7573,7 +8775,7 @@ EOF
          # This is the magic to use -rpath.
          case "$finalize_rpath " in
          *" $libdir "*) ;;
-         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         *) func_append finalize_rpath " $libdir" ;;
          esac
        done
       fi
@@ -7592,18 +8794,18 @@ EOF
              *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
                ;;
              *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
                ;;
              esac
            fi
          else
            eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
+           func_append rpath " $flag"
          fi
        elif test -n "$runpath_var"; then
          case "$perm_rpath " in
          *" $libdir "*) ;;
-         *) perm_rpath="$perm_rpath $libdir" ;;
+         *) func_append perm_rpath " $libdir" ;;
          esac
        fi
        case $host in
@@ -7612,12 +8814,12 @@ EOF
          case :$dllsearchpath: in
          *":$libdir:"*) ;;
          ::) dllsearchpath=$libdir;;
-         *) dllsearchpath="$dllsearchpath:$libdir";;
+         *) func_append dllsearchpath ":$libdir";;
          esac
          case :$dllsearchpath: in
          *":$testbindir:"*) ;;
          ::) dllsearchpath=$testbindir;;
-         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         *) func_append dllsearchpath ":$testbindir";;
          esac
          ;;
        esac
@@ -7643,18 +8845,18 @@ EOF
              *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
                ;;
              *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
                ;;
              esac
            fi
          else
            eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
+           func_append rpath " $flag"
          fi
        elif test -n "$runpath_var"; then
          case "$finalize_perm_rpath " in
          *" $libdir "*) ;;
-         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         *) func_append finalize_perm_rpath " $libdir" ;;
          esac
        fi
       done
@@ -7668,8 +8870,8 @@ EOF
 
       if test -n "$libobjs" && test "$build_old_libs" = yes; then
        # Transform all the library objects into standard objects.
-       compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-       finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
       func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
@@ -7681,15 +8883,15 @@ EOF
 
       wrappers_required=yes
       case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
       *cygwin* | *mingw* )
         if test "$build_libtool_libs" != yes; then
           wrappers_required=no
         fi
         ;;
-      *cegcc)
-        # Disable wrappers for cegcc, we are cross compiling anyway.
-        wrappers_required=no
-        ;;
       *)
         if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
           wrappers_required=no
@@ -7698,13 +8900,19 @@ EOF
       esac
       if test "$wrappers_required" = no; then
        # Replace the output file specification.
-       compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
        link_command="$compile_command$compile_rpath"
 
        # We have no uninstalled library dependencies, so finalize right now.
        exit_status=0
        func_show_eval "$link_command" 'exit_status=$?'
 
+       if test -n "$postlink_cmds"; then
+         func_to_tool_file "$output"
+         postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+         func_execute_cmds "$postlink_cmds" 'exit $?'
+       fi
+
        # Delete the generated files.
        if test -f "$output_objdir/${outputname}S.${objext}"; then
          func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
@@ -7727,7 +8935,7 @@ EOF
          # We should set the runpath_var.
          rpath=
          for dir in $perm_rpath; do
-           rpath="$rpath$dir:"
+           func_append rpath "$dir:"
          done
          compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
        fi
@@ -7735,7 +8943,7 @@ EOF
          # We should set the runpath_var.
          rpath=
          for dir in $finalize_perm_rpath; do
-           rpath="$rpath$dir:"
+           func_append rpath "$dir:"
          done
          finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
        fi
@@ -7745,11 +8953,18 @@ EOF
        # We don't need to create a wrapper script.
        link_command="$compile_var$compile_command$compile_rpath"
        # Replace the output file specification.
-       link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
        # Delete the old output file.
        $opt_dry_run || $RM $output
        # Link the executable and exit
        func_show_eval "$link_command" 'exit $?'
+
+       if test -n "$postlink_cmds"; then
+         func_to_tool_file "$output"
+         postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+         func_execute_cmds "$postlink_cmds" 'exit $?'
+       fi
+
        exit $EXIT_SUCCESS
       fi
 
@@ -7764,7 +8979,7 @@ EOF
        if test "$fast_install" != no; then
          link_command="$finalize_var$compile_command$finalize_rpath"
          if test "$fast_install" = yes; then
-           relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+           relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
          else
            # fast_install is set to needless
            relink_command=
@@ -7776,13 +8991,19 @@ EOF
       fi
 
       # Replace the output file specification.
-      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
 
       # Delete the old output files.
       $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
 
       func_show_eval "$link_command" 'exit $?'
 
+      if test -n "$postlink_cmds"; then
+       func_to_tool_file "$output_objdir/$outputname"
+       postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+       func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
       # Now create the wrapper script.
       func_verbose "creating $output"
 
@@ -7800,18 +9021,7 @@ EOF
          fi
        done
        relink_command="(cd `pwd`; $relink_command)"
-       relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Quote $ECHO for shipping.
-      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
-       case $progpath in
-       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
-       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
-       esac
-       qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-       qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+       relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       fi
 
       # Only actually do things if not in dry run mode.
@@ -7891,7 +9101,7 @@ EOF
        else
          oldobjs="$old_deplibs $non_pic_objects"
          if test "$preload" = yes && test -f "$symfileobj"; then
-           oldobjs="$oldobjs $symfileobj"
+           func_append oldobjs " $symfileobj"
          fi
        fi
        addlibs="$old_convenience"
@@ -7899,10 +9109,10 @@ EOF
 
       if test -n "$addlibs"; then
        gentop="$output_objdir/${outputname}x"
-       generated="$generated $gentop"
+       func_append generated " $gentop"
 
        func_extract_archives $gentop $addlibs
-       oldobjs="$oldobjs $func_extract_archives_result"
+       func_append oldobjs " $func_extract_archives_result"
       fi
 
       # Do each command in the archive commands.
@@ -7913,10 +9123,10 @@ EOF
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
          gentop="$output_objdir/${outputname}x"
-         generated="$generated $gentop"
+         func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
-         oldobjs="$oldobjs $func_extract_archives_result"
+         func_append oldobjs " $func_extract_archives_result"
        fi
 
        # POSIX demands no paths to be encoded in archives.  We have
@@ -7932,9 +9142,9 @@ EOF
            done | sort | sort -uc >/dev/null 2>&1); then
          :
        else
-         $ECHO "copying selected object files to avoid basename conflicts..."
+         echo "copying selected object files to avoid basename conflicts..."
          gentop="$output_objdir/${outputname}x"
-         generated="$generated $gentop"
+         func_append generated " $gentop"
          func_mkdir_p "$gentop"
          save_oldobjs=$oldobjs
          oldobjs=
@@ -7958,18 +9168,30 @@ EOF
                esac
              done
              func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-             oldobjs="$oldobjs $gentop/$newobj"
+             func_append oldobjs " $gentop/$newobj"
              ;;
-           *) oldobjs="$oldobjs $obj" ;;
+           *) func_append oldobjs " $obj" ;;
            esac
          done
        fi
+       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+       tool_oldlib=$func_to_tool_file_result
        eval cmds=\"$old_archive_cmds\"
 
        func_len " $cmds"
        len=$func_len_result
        if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
          cmds=$old_archive_cmds
+       elif test -n "$archiver_list_spec"; then
+         func_verbose "using command file archive linking..."
+         for obj in $oldobjs
+         do
+           func_to_tool_file "$obj"
+           $ECHO "$func_to_tool_file_result"
+         done > $output_objdir/$libname.libcmd
+         func_to_tool_file "$output_objdir/$libname.libcmd"
+         oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+         cmds=$old_archive_cmds
        else
          # the command line is too long to link in one step, link in parts
          func_verbose "using piecewise archive linking..."
@@ -8043,7 +9265,7 @@ EOF
       done
       # Quote the link command for shipping.
       relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       if test "$hardcode_automatic" = yes ; then
        relink_command=
       fi
@@ -8063,12 +9285,23 @@ EOF
              *.la)
                func_basename "$deplib"
                name="$func_basename_result"
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               func_resolve_sysroot "$deplib"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
                test -z "$libdir" && \
                  func_fatal_error "\`$deplib' is not a valid libtool archive"
-               newdependency_libs="$newdependency_libs $libdir/$name"
+               func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+               ;;
+             -L*)
+               func_stripname -L '' "$deplib"
+               func_replace_sysroot "$func_stripname_result"
+               func_append newdependency_libs " -L$func_replace_sysroot_result"
                ;;
-             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             -R*)
+               func_stripname -R '' "$deplib"
+               func_replace_sysroot "$func_stripname_result"
+               func_append newdependency_libs " -R$func_replace_sysroot_result"
+               ;;
+             *) func_append newdependency_libs " $deplib" ;;
              esac
            done
            dependency_libs="$newdependency_libs"
@@ -8082,9 +9315,9 @@ EOF
                eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
                test -z "$libdir" && \
                  func_fatal_error "\`$lib' is not a valid libtool archive"
-               newdlfiles="$newdlfiles $libdir/$name"
+               func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
-             *) newdlfiles="$newdlfiles $lib" ;;
+             *) func_append newdlfiles " $lib" ;;
              esac
            done
            dlfiles="$newdlfiles"
@@ -8101,7 +9334,7 @@ EOF
                eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
                test -z "$libdir" && \
                  func_fatal_error "\`$lib' is not a valid libtool archive"
-               newdlprefiles="$newdlprefiles $libdir/$name"
+               func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
              esac
            done
@@ -8113,7 +9346,7 @@ EOF
                [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
                *) abs=`pwd`"/$lib" ;;
              esac
-             newdlfiles="$newdlfiles $abs"
+             func_append newdlfiles " $abs"
            done
            dlfiles="$newdlfiles"
            newdlprefiles=
@@ -8122,15 +9355,33 @@ EOF
                [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
                *) abs=`pwd`"/$lib" ;;
              esac
-             newdlprefiles="$newdlprefiles $abs"
+             func_append newdlprefiles " $abs"
            done
            dlprefiles="$newdlprefiles"
          fi
          $RM $output
          # place dlname in correct position for cygwin
+         # In fact, it would be nice if we could use this code for all target
+         # systems that can't hard-code library paths into their executables
+         # and that have no shared library path variable independent of PATH,
+         # but it turns out we can't easily determine that from inspecting
+         # libtool variables, so we have to hard-code the OSs to which it
+         # applies here; at the moment, that means platforms that use the PE
+         # object format with DLL files.  See the long comment at the top of
+         # tests/bindir.at for full details.
          tdlname=$dlname
          case $host,$output,$installed,$module,$dlname in
-           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+             # If a -bindir argument was supplied, place the dll there.
+             if test "x$bindir" != x ;
+             then
+               func_relative_path "$install_libdir" "$bindir"
+               tdlname=$func_relative_path_result$dlname
+             else
+               # Otherwise fall back on heuristic.
+               tdlname=../bin/$dlname
+             fi
+             ;;
          esac
          $ECHO > $output "\
 # $outputname - a libtool library file
@@ -8189,7 +9440,7 @@ relink_command=\"$relink_command\""
     exit $EXIT_SUCCESS
 }
 
-{ test "$mode" = link || test "$mode" = relink; } &&
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
     func_mode_link ${1+"$@"}
 
 
@@ -8209,9 +9460,9 @@ func_mode_uninstall ()
     for arg
     do
       case $arg in
-      -f) RM="$RM $arg"; rmforce=yes ;;
-      -*) RM="$RM $arg" ;;
-      *) files="$files $arg" ;;
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
       esac
     done
 
@@ -8220,24 +9471,23 @@ func_mode_uninstall ()
 
     rmdirs=
 
-    origobjdir="$objdir"
     for file in $files; do
       func_dirname "$file" "" "."
       dir="$func_dirname_result"
       if test "X$dir" = X.; then
-       objdir="$origobjdir"
+       odir="$objdir"
       else
-       objdir="$dir/$origobjdir"
+       odir="$dir/$objdir"
       fi
       func_basename "$file"
       name="$func_basename_result"
-      test "$mode" = uninstall && objdir="$dir"
+      test "$opt_mode" = uninstall && odir="$dir"
 
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
        case " $rmdirs " in
-         *" $objdir "*) ;;
-         *) rmdirs="$rmdirs $objdir" ;;
+         *" $odir "*) ;;
+         *) func_append rmdirs " $odir" ;;
        esac
       fi
 
@@ -8263,18 +9513,17 @@ func_mode_uninstall ()
 
          # Delete the libtool libraries and symlinks.
          for n in $library_names; do
-           rmfiles="$rmfiles $objdir/$n"
+           func_append rmfiles " $odir/$n"
          done
-         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+         test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-         case "$mode" in
+         case "$opt_mode" in
          clean)
-           case "  $library_names " in
-           # "  " in the beginning catches empty $dlname
+           case " $library_names " in
            *" $dlname "*) ;;
-           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
            esac
-           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
            ;;
          uninstall)
            if test -n "$library_names"; then
@@ -8302,19 +9551,19 @@ func_mode_uninstall ()
          # Add PIC object to the list of files to remove.
          if test -n "$pic_object" &&
             test "$pic_object" != none; then
-           rmfiles="$rmfiles $dir/$pic_object"
+           func_append rmfiles " $dir/$pic_object"
          fi
 
          # Add non-PIC object to the list of files to remove.
          if test -n "$non_pic_object" &&
             test "$non_pic_object" != none; then
-           rmfiles="$rmfiles $dir/$non_pic_object"
+           func_append rmfiles " $dir/$non_pic_object"
          fi
        fi
        ;;
 
       *)
-       if test "$mode" = clean ; then
+       if test "$opt_mode" = clean ; then
          noexename=$name
          case $file in
          *.exe)
@@ -8324,7 +9573,7 @@ func_mode_uninstall ()
            noexename=$func_stripname_result
            # $file with .exe has already been added to rmfiles,
            # add $file without .exe
-           rmfiles="$rmfiles $file"
+           func_append rmfiles " $file"
            ;;
          esac
          # Do a test to see if this is a libtool program.
@@ -8333,7 +9582,7 @@ func_mode_uninstall ()
              func_ltwrapper_scriptname "$file"
              relink_command=
              func_source $func_ltwrapper_scriptname_result
-             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+             func_append rmfiles " $func_ltwrapper_scriptname_result"
            else
              relink_command=
              func_source $dir/$noexename
@@ -8341,12 +9590,12 @@ func_mode_uninstall ()
 
            # note $name still contains .exe if it was in $file originally
            # as does the version of $file that was added into $rmfiles
-           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
            if test "$fast_install" = yes && test -n "$relink_command"; then
-             rmfiles="$rmfiles $objdir/lt-$name"
+             func_append rmfiles " $odir/lt-$name"
            fi
            if test "X$noexename" != "X$name" ; then
-             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+             func_append rmfiles " $odir/lt-${noexename}.c"
            fi
          fi
        fi
@@ -8354,7 +9603,6 @@ func_mode_uninstall ()
       esac
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
-    objdir="$origobjdir"
 
     # Try to remove the ${objdir}s in the directories where we deleted files
     for dir in $rmdirs; do
@@ -8366,16 +9614,16 @@ func_mode_uninstall ()
     exit $exit_status
 }
 
-{ test "$mode" = uninstall || test "$mode" = clean; } &&
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
     func_mode_uninstall ${1+"$@"}
 
-test -z "$mode" && {
+test -z "$opt_mode" && {
   help="$generic_help"
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$mode'"
+  func_fatal_help "invalid operation mode \`$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
new file mode 100644 (file)
index 0000000..d90de34
--- /dev/null
@@ -0,0 +1,309 @@
+# ===========================================================================
+#        http://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro figures out how to build C programs using POSIX threads. It
+#   sets the PTHREAD_LIBS output variable to the threads library and linker
+#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+#   flags that are needed. (The user can also force certain compiler
+#   flags/libs to be tested by setting these environment variables.)
+#
+#   Also sets PTHREAD_CC to any special C compiler that is needed for
+#   multi-threaded programs (defaults to the value of CC otherwise). (This
+#   is necessary on AIX to use the special cc_r compiler alias.)
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also link it with them as well. e.g. you should link with
+#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+#
+#   If you are only building threads programs, you may wish to use these
+#   variables in your default LIBS, CFLAGS, and CC:
+#
+#     LIBS="$PTHREAD_LIBS $LIBS"
+#     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+#     CC="$PTHREAD_CC"
+#
+#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+#   has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
+#   (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#
+#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
+#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with
+#   PTHREAD_CFLAGS.
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if a threads library
+#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+#   is not found. If ACTION-IF-FOUND is not specified, the default action
+#   will define HAVE_PTHREAD.
+#
+#   Please let the authors know if this macro fails on any platform, or if
+#   you have any other suggestions or comments. This macro was based on work
+#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+#   Alejandro Forero Cuervo to the autoconf macro repository. We are also
+#   grateful for the helpful feedback of numerous users.
+#
+#   Updated for Autoconf 2.68 by Daniel Richard G.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 18
+
+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
+AC_DEFUN([AX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PUSH([C])
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
+        AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
+        AC_MSG_RESULT($ax_pthread_ok)
+        if test x"$ax_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+#      ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case ${host_os} in
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+        ;;
+
+        darwin*)
+        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ;;
+esac
+
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
+
+        case $flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
+
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $flag])
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+                pthread-config)
+                AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
+                if test x"$ax_pthread_config" = xno; then continue; fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
+
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$flag])
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }],
+                       [pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */])],
+                [ax_pthread_ok=yes],
+                [])
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        AC_MSG_RESULT($ax_pthread_ok)
+        if test "x$ax_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        AC_MSG_CHECKING([for joinable pthread attribute])
+        attr_name=unknown
+        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+            AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                           [int attr = $attr; return attr /* ; */])],
+                [attr_name=$attr; break],
+                [])
+        done
+        AC_MSG_RESULT($attr_name)
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
+                               [Define to necessary symbol if this constant
+                                uses a non-standard name on your system.])
+        fi
+
+        AC_MSG_CHECKING([if more special flags are required for pthreads])
+        flag=no
+        case ${host_os} in
+            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+            osf* | hpux*) flag="-D_REENTRANT";;
+            solaris*)
+            if test "$GCC" = "yes"; then
+                flag="-D_REENTRANT"
+            else
+                flag="-mt -D_REENTRANT"
+            fi
+            ;;
+        esac
+        AC_MSG_RESULT(${flag})
+        if test "x$flag" != xno; then
+            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
+
+        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
+            ax_cv_PTHREAD_PRIO_INHERIT, [
+                AC_LINK_IFELSE([
+                    AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])],
+                    [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+                    [ax_cv_PTHREAD_PRIO_INHERIT=no])
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
+            AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]))
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        # More AIX lossage: must compile with xlc_r or cc_r
+        if test x"$GCC" != xyes; then
+          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
+        else
+          PTHREAD_CC=$CC
+        fi
+else
+        PTHREAD_CC="$CC"
+fi
+
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_CC)
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
+        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
+        :
+else
+        ax_pthread_ok=no
+        $2
+fi
+AC_LANG_POP
+])dnl AX_PTHREAD
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644 (file)
index 0000000..828104c
--- /dev/null
@@ -0,0 +1,8001 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_REPLACE_SHELLFNS
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Go],                        [_LT_LANG(GO)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       # If there is a non-empty error log, and "single_module"
+       # appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       # Otherwise, if the output was created with a 0 exit code from
+       # the compiler, it worked.
+       elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS="$save_LDFLAGS"
+    ])
+
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+       cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+       lt_cv_ld_force_load=yes
+      else
+       cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
+
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+       # Ensure the archiver fails upon bogus file names.
+       rm -f conftest.$ac_objext libconftest.a
+       AC_TRY_EVAL([lt_ar_try])
+       if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+                = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen="dlopen"],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[23]].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux # correct to gnu/linux during the next big refactor
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+        LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+        [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t@_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t@_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_globsym_save_LIBS=$LIBS
+         lt_globsym_save_CFLAGS=$CFLAGS
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS=$lt_globsym_save_LIBS
+         CFLAGS=$lt_globsym_save_CFLAGS
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       m4_if([$1], [GCJ], [],
+         [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64 which still supported -KPIC.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+           # IBM XL 8.0, 9.0 on PPC and BlueGene
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd* | netbsdelf*-gnu)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+       ;;
+      nagfor*)
+       # NAG Fortran compiler
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+       # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       *Sun\ F* | *Sun*Fortran*)
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+         ;;
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+        *Intel*\ [[CF]]*Compiler*)
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+         ;;
+       *Portland\ Group*)
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+       # The AIX port of GNU ld has always aspired to compatibility
+       # with the native linker.  However, as the warning in the GNU ld
+       # block says, versions before 2.19.5* couldn't really create working
+       # shared libraries, regardless of the interface used.
+       case `$LD -v 2>&1` in
+         *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+         *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+         *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+         *)
+           lt_use_gnu_ld_interface=yes
+           ;;
+       esac
+       ;;
+      *)
+       lt_use_gnu_ld_interface=yes
+       ;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=' $pic_flag'
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95* | pgfortran*)
+                                       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         _LT_TAGVAR(whole_archive_flag_spec, $1)=
+         tmp_sharedflag='--shared' ;;
+       xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       nvcc*)  # Cuda Compiler Driver 2.2
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf* | bgf* | bgxlf* | mpixlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       # Also, AIX nm treats weak defined symbols like other global
+       # defined symbols, whereas GNU nm marks them as "W".
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+       _LT_TAGVAR(link_all_deplibs, $1)=no
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+         if test "$with_gnu_ld" = yes; then
+           # We only use this code for GNU lds that support --whole-archive.
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+         else
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         fi
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+       # Native MSVC
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       _LT_TAGVAR(always_export_symbols, $1)=yes
+       _LT_TAGVAR(file_list_spec, $1)='@'
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=".dll"
+       # FIXME: Setting linknames here is a bad hack.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+         else
+           sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+         fi~
+         $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+         linknames='
+       # The linker will not automatically build a static lib if we build a DLL.
+       # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+       _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+       _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+       # Don't use ranlib
+       _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+       _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+         lt_tool_outputfile="@TOOL_OUTPUT@"~
+         case $lt_outputfile in
+           *.exe|*.EXE) ;;
+           *)
+             lt_outputfile="$lt_outputfile.exe"
+             lt_tool_outputfile="$lt_tool_outputfile.exe"
+             ;;
+         esac~
+         if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+           $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+           $RM "$lt_outputfile.manifest";
+         fi'
+       ;;
+      *)
+       # Assume MSVC wrapper
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=".dll"
+       # FIXME: Setting linknames here is a bad hack.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+       # The linker will automatically build a .lib file if we build a DLL.
+       _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+       # FIXME: Should let the user specify the lib program.
+       _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+       m4_if($1, [], [
+         # Older versions of the 11.00 compiler do not understand -b yet
+         # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+         _LT_LINKER_OPTION([if $CC understands -b],
+           _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+           [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+           [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+         [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+       # This should be the same for all languages, so no per-tag cache variable.
+       AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+         [lt_cv_irix_exported_symbol],
+         [save_LDFLAGS="$LDFLAGS"
+          LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+          AC_LINK_IFELSE(
+            [AC_LANG_SOURCE(
+               [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+                             [C++], [[int foo (void) { return 0; }]],
+                             [Fortran 77], [[
+      subroutine foo
+      end]],
+                             [Fortran], [[
+      subroutine foo
+      end]])])],
+             [lt_cv_irix_exported_symbol=yes],
+             [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+       if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+       fi
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       else
+         case $host_os in
+          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+            ;;
+          *)
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+       [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+       [$RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+       if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+         pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+         _LT_TAGVAR(allow_undefined_flag, $1)=
+         if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+         then
+           lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+         else
+           lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         fi
+         _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+       ])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX([$1])
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX([$1])
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+           if test "$with_gnu_ld" = yes; then
+             # We only use this code for GNU lds that support --whole-archive.
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           else
+             # Exported symbols can be pulled into shared objects from archives
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           fi
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+       case $GXX,$cc_basename in
+       ,cl* | no,cl*)
+         # Native MSVC
+         # hardcode_libdir_flag_spec is actually meaningless, as there is
+         # no search path for DLLs.
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         _LT_TAGVAR(always_export_symbols, $1)=yes
+         _LT_TAGVAR(file_list_spec, $1)='@'
+         # Tell ltmain to make .lib files, not .a files.
+         libext=lib
+         # Tell ltmain to make .dll files, not .so files.
+         shrext_cmds=".dll"
+         # FIXME: Setting linknames here is a bad hack.
+         _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+         _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+             $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+           else
+             $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+           fi~
+           $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+           linknames='
+         # The linker will not automatically build a static lib if we build a DLL.
+         # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+         _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+         # Don't use ranlib
+         _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+         _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+           lt_tool_outputfile="@TOOL_OUTPUT@"~
+           case $lt_outputfile in
+             *.exe|*.EXE) ;;
+             *)
+               lt_outputfile="$lt_outputfile.exe"
+               lt_tool_outputfile="$lt_tool_outputfile.exe"
+               ;;
+           esac~
+           func_to_tool_file "$lt_outputfile"~
+           if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+             $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+             $RM "$lt_outputfile.manifest";
+           fi'
+         ;;
+       *)
+         # g++
+         # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+         # as there is no search path for DLLs.
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         _LT_TAGVAR(always_export_symbols, $1)=no
+         _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+         if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           # If the export-symbols file already is a .def file (1st line
+           # is EXPORTS), use it as is; otherwise, prepend...
+           _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+             cp $export_symbols $output_objdir/$soname.def;
+           else
+             echo EXPORTS > $output_objdir/$soname.def;
+             cat $export_symbols >> $output_objdir/$soname.def;
+           fi~
+           $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+         ;;
+       esac
+       ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+               $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 and above use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+           ;;
+         xl* | mpixl* | bgxl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='func_echo_all'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=func_echo_all
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='func_echo_all'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+             '"$_LT_TAGVAR(old_archive_cmds, $1)"
+           _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+             '"$_LT_TAGVAR(reload_cmds, $1)"
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case ${prev}${p} in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test "$pre_test_object_deps_done" = no; then
+        case ${prev} in
+        -L | -R)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+        fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC* | sunCC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([    ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
+
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
+
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644 (file)
index 0000000..5d9acd8
--- /dev/null
@@ -0,0 +1,384 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+       IFS="$lt_save_ifs"
+       if test "X$lt_pkg" = "X$lt_p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644 (file)
index 0000000..9000a05
--- /dev/null
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+            [m4_foreach([_Lt_suffix],
+               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644 (file)
index 0000000..07a8602
--- /dev/null
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3337 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.2'
+macro_revision='1.3337'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644 (file)
index 0000000..c573da9
--- /dev/null
@@ -0,0 +1,98 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],        [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],                [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],        [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],   [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],              [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],               [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],              [AC_DEFUN([_LT_PROG_CXX])])
diff --git a/m4/pkg.m4 b/m4/pkg.m4
new file mode 100644 (file)
index 0000000..0048a3f
--- /dev/null
+++ b/m4/pkg.m4
@@ -0,0 +1,157 @@
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+               
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+    if test -n "$$1"; then
+        pkg_cv_[]$1="$$1"
+    else
+        PKG_CHECK_EXISTS([$3],
+                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+                        [pkg_failed=yes])
+    fi
+else
+       pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+               [AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+       ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+               [$4])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
diff --git a/missing b/missing
index 28055d2..86a8fc3 100755 (executable)
--- a/missing
+++ b/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-01-06.13; # UTC
 
 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
+# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -84,7 +84,6 @@ Supported PROGRAM values:
   help2man     touch the output file
   lex          create \`lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
 
 Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
@@ -122,15 +121,6 @@ case $1 in
     # Not GNU programs, they don't have --version.
     ;;
 
-  tar*)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
   *)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
@@ -226,7 +216,7 @@ WARNING: \`$1' $msg.  You should only need it if
          \`Bison' from any GNU archive site."
     rm -f y.tab.c y.tab.h
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
        case $LASTARG in
        *.y)
            SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
@@ -256,7 +246,7 @@ WARNING: \`$1' is $msg.  You should only need it if
          \`Flex' from any GNU archive site."
     rm -f lex.yy.c
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
        case $LASTARG in
        *.l)
            SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
@@ -318,41 +308,6 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch $file
     ;;
 
-  tar*)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-       case $firstarg in
-       *o*)
-           firstarg=`echo "$firstarg" | sed s/o//`
-           tar "$firstarg" "$@" && exit 0
-           ;;
-       esac
-       case $firstarg in
-       *h*)
-           firstarg=`echo "$firstarg" | sed s/h//`
-           tar "$firstarg" "$@" && exit 0
-           ;;
-       esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
   *)
     echo 1>&2 "\
 WARNING: \`$1' is needed, and is $msg.
index 5894b20..d72aa07 100644 (file)
@@ -43,7 +43,6 @@ HBSOURCES =  \
        hb-shape.cc \
        hb-shape-plan-private.hh \
        hb-shape-plan.cc \
-       hb-shape-plan.h \
        hb-shaper-list.hh \
        hb-shaper-impl-private.hh \
        hb-shaper-private.hh \
@@ -51,6 +50,7 @@ HBSOURCES =  \
        hb-tt-font.cc \
        hb-unicode-private.hh \
        hb-unicode.cc \
+       hb-utf-private.hh \
        hb-warning.cc \
        $(NULL)
 HBHEADERS = \
@@ -61,6 +61,7 @@ HBHEADERS = \
        hb-font.h \
        hb-set.h \
        hb-shape.h \
+       hb-shape-plan.h \
        hb-unicode.h \
        hb-version.h \
        $(NULL)
@@ -78,12 +79,14 @@ HBSOURCES += \
        hb-ot-map-private.hh \
        hb-ot-shape.cc \
        hb-ot-shape-complex-arabic.cc \
+       hb-ot-shape-complex-arabic-fallback.hh \
        hb-ot-shape-complex-arabic-table.hh \
+       hb-ot-shape-complex-default.cc \
        hb-ot-shape-complex-indic.cc \
        hb-ot-shape-complex-indic-machine.hh \
        hb-ot-shape-complex-indic-private.hh \
        hb-ot-shape-complex-indic-table.hh \
-       hb-ot-shape-complex-misc.cc \
+       hb-ot-shape-complex-thai.cc \
        hb-ot-shape-complex-private.hh \
        hb-ot-shape-normalize-private.hh \
        hb-ot-shape-normalize.cc \
@@ -98,6 +101,11 @@ HBHEADERS += \
        $(NULL)
 endif
 
+if HAVE_PTHREAD
+HBCFLAGS += $(PTHREAD_CFLAGS)
+HBLIBS   += $(PTHREAD_LIBS)
+endif
+
 if HAVE_GLIB
 HBCFLAGS += $(GLIB_CFLAGS)
 HBLIBS   += $(GLIB_LIBS)
@@ -163,6 +171,21 @@ HBSOURCES += hb-old.cc
 endif
 DIST_SUBDIRS += hb-old
 
+if HAVE_ICU_LE
+SUBDIRS += hb-icu-le
+HBCFLAGS += -I$(srcdir)/hb-icu-le
+HBLIBS   += hb-icu-le/libhb-icu-le.la
+HBSOURCES += hb-icu-le.cc
+endif
+DIST_SUBDIRS += hb-icu-le
+
+if HAVE_UCDN
+SUBDIRS += hb-ucdn
+HBCFLAGS += -I$(srcdir)/hb-ucdn
+HBLIBS   += hb-ucdn/libhb-ucdn.la
+HBSOURCES += hb-ucdn.cc
+endif
+DIST_SUBDIRS += hb-ucdn
 
 
 # Put the library together
@@ -170,16 +193,26 @@ DIST_SUBDIRS += hb-old
 if OS_WIN32
 export_symbols = -export-symbols harfbuzz.def
 harfbuzz_def_dependency = harfbuzz.def
+libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+else
+if HAVE_ICU
+libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+else
+# Use a C linker for GCC, not C++; Don't link to libstdc++
+if HAVE_GCC
+libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
+else
+libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+endif
+endif
 endif
 
-# Use a C linker, not C++; Don't link to libstdc++
-libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
 libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS)
 nodist_libharfbuzz_la_SOURCES = $(nodist_HBSOURCES)
 libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
 libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
 libharfbuzz_la_LIBADD = $(HBLIBS)
-libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
+EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
 pkginclude_HEADERS = $(HBHEADERS)
 nodist_pkginclude_HEADERS = hb-version.h
 
@@ -217,34 +250,36 @@ arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt
 
 .PHONY: unicode-tables arabic-table indic-table
 
-BUILT_SOURCES += hb-ot-shape-complex-indic-machine.hh
 EXTRA_DIST += hb-ot-shape-complex-indic-machine.rl
-hb-ot-shape-complex-indic-machine.hh: hb-ot-shape-complex-indic-machine.rl
+$(srcdir)/hb-ot-shape-complex-indic-machine.hh: hb-ot-shape-complex-indic-machine.rl
        $(AM_V_GEN)$(top_srcdir)/missing --run ragel -e -F1 -o "$@.tmp" "$<" && \
        mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
 
-noinst_PROGRAMS = main indic test-would-substitute
+noinst_PROGRAMS = main test test-would-substitute test-size-params
 bin_PROGRAMS =
 
 main_SOURCES = main.cc
 main_CPPFLAGS = $(HBCFLAGS)
 main_LDADD = libharfbuzz.la $(HBLIBS)
 
-indic_SOURCES = indic.cc
-indic_CPPFLAGS = $(HBCFLAGS)
-indic_LDADD = libharfbuzz.la $(HBLIBS)
+test_SOURCES = test.cc
+test_CPPFLAGS = $(HBCFLAGS) $(FREETYPE_CFLAGS)
+test_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS)
 
 test_would_substitute_SOURCES = test-would-substitute.cc
 test_would_substitute_CPPFLAGS = $(HBCFLAGS) $(FREETYPE_CFLAGS)
 test_would_substitute_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS)
 
+test_size_params_SOURCES = test-size-params.cc
+test_size_params_CPPFLAGS = $(HBCFLAGS)
+test_size_params_LDADD = libharfbuzz.la $(HBLIBS)
+
 dist_check_SCRIPTS = \
        check-c-linkage-decls.sh \
        check-header-guards.sh \
        check-exported-symbols.sh \
        check-includes.sh \
        check-internal-symbols.sh \
-       check-static-inits.sh \
        $(NULL)
 
 if HAVE_ICU
@@ -252,6 +287,11 @@ else
 dist_check_SCRIPTS += check-libstdc++.sh
 endif
 
+if HAVE_ICU_LE
+else
+dist_check_SCRIPTS += check-static-inits.sh
+endif
+
 TESTS = $(dist_check_SCRIPTS)
 TESTS_ENVIRONMENT = \
        srcdir="$(srcdir)" \
index fb755d6..b52630a 100644 (file)
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -50,12 +50,14 @@ host_triplet = @host@
 @HAVE_OT_TRUE@ hb-ot-map-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-arabic.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-arabic-fallback.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-arabic-table.hh \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-default.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic-machine.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic-table.hh \
-@HAVE_OT_TRUE@ hb-ot-shape-complex-misc.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-thai.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-normalize-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-normalize.cc \
@@ -70,52 +72,67 @@ host_triplet = @host@
 @HAVE_OT_TRUE@ hb-ot-tag.h \
 @HAVE_OT_TRUE@ $(NULL)
 
-@HAVE_GLIB_TRUE@am__append_3 = $(GLIB_CFLAGS)
-@HAVE_GLIB_TRUE@am__append_4 = $(GLIB_LIBS)
-@HAVE_GLIB_TRUE@am__append_5 = hb-glib.cc
-@HAVE_GLIB_TRUE@am__append_6 = hb-glib.h
-@HAVE_GOBJECT_TRUE@am__append_7 = $(GOBJECT_CFLAGS)
-@HAVE_GOBJECT_TRUE@am__append_8 = $(GOBJECT_LIBS)
-@HAVE_GOBJECT_TRUE@am__append_9 = hb-gobject-structs.cc
-@HAVE_GOBJECT_TRUE@am__append_10 = hb-gobject.h
-@HAVE_GOBJECT_TRUE@am__append_11 = hb-gobject-enums.cc
-@HAVE_GOBJECT_TRUE@am__append_12 = hb-gobject-enums.cc.tmpl
+@HAVE_PTHREAD_TRUE@am__append_3 = $(PTHREAD_CFLAGS)
+@HAVE_PTHREAD_TRUE@am__append_4 = $(PTHREAD_LIBS)
+@HAVE_GLIB_TRUE@am__append_5 = $(GLIB_CFLAGS)
+@HAVE_GLIB_TRUE@am__append_6 = $(GLIB_LIBS)
+@HAVE_GLIB_TRUE@am__append_7 = hb-glib.cc
+@HAVE_GLIB_TRUE@am__append_8 = hb-glib.h
+@HAVE_GOBJECT_TRUE@am__append_9 = $(GOBJECT_CFLAGS)
+@HAVE_GOBJECT_TRUE@am__append_10 = $(GOBJECT_LIBS)
+@HAVE_GOBJECT_TRUE@am__append_11 = hb-gobject-structs.cc
+@HAVE_GOBJECT_TRUE@am__append_12 = hb-gobject.h
 @HAVE_GOBJECT_TRUE@am__append_13 = hb-gobject-enums.cc
-@HAVE_ICU_TRUE@am__append_14 = $(ICU_CFLAGS)
-@HAVE_ICU_TRUE@am__append_15 = $(ICU_LIBS)
-@HAVE_ICU_TRUE@am__append_16 = hb-icu.cc
-@HAVE_ICU_TRUE@am__append_17 = hb-icu.h
-@HAVE_FREETYPE_TRUE@am__append_18 = $(FREETYPE_CFLAGS)
-@HAVE_FREETYPE_TRUE@am__append_19 = $(FREETYPE_LIBS)
-@HAVE_FREETYPE_TRUE@am__append_20 = hb-ft.cc
-@HAVE_FREETYPE_TRUE@am__append_21 = hb-ft.h
-@HAVE_GRAPHITE2_TRUE@am__append_22 = $(GRAPHITE2_CFLAGS)
-@HAVE_GRAPHITE2_TRUE@am__append_23 = $(GRAPHITE2_LIBS)
-@HAVE_GRAPHITE2_TRUE@am__append_24 = hb-graphite2.cc
-@HAVE_GRAPHITE2_TRUE@am__append_25 = hb-graphite2.h
-@HAVE_UNISCRIBE_TRUE@am__append_26 = $(UNISCRIBE_CFLAGS)
-@HAVE_UNISCRIBE_TRUE@am__append_27 = $(UNISCRIBE_LIBS)
-@HAVE_UNISCRIBE_TRUE@am__append_28 = hb-uniscribe.cc
-@HAVE_UNISCRIBE_TRUE@am__append_29 = hb-uniscribe.h
-@HAVE_CORETEXT_TRUE@am__append_30 = $(CORETEXT_CFLAGS)
-@HAVE_CORETEXT_TRUE@am__append_31 = $(CORETEXT_LIBS)
-@HAVE_CORETEXT_TRUE@am__append_32 = hb-coretext.cc
-@HAVE_CORETEXT_TRUE@am__append_33 = hb-coretext.h
-@HAVE_HB_OLD_TRUE@am__append_34 = hb-old
-@HAVE_HB_OLD_TRUE@am__append_35 = -I$(srcdir)/hb-old
-@HAVE_HB_OLD_TRUE@am__append_36 = hb-old/libhb-old.la
-@HAVE_HB_OLD_TRUE@am__append_37 = hb-old.cc
-noinst_PROGRAMS = main$(EXEEXT) indic$(EXEEXT) \
-       test-would-substitute$(EXEEXT)
+@HAVE_GOBJECT_TRUE@am__append_14 = hb-gobject-enums.cc.tmpl
+@HAVE_GOBJECT_TRUE@am__append_15 = hb-gobject-enums.cc
+@HAVE_ICU_TRUE@am__append_16 = $(ICU_CFLAGS)
+@HAVE_ICU_TRUE@am__append_17 = $(ICU_LIBS)
+@HAVE_ICU_TRUE@am__append_18 = hb-icu.cc
+@HAVE_ICU_TRUE@am__append_19 = hb-icu.h
+@HAVE_FREETYPE_TRUE@am__append_20 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@am__append_21 = $(FREETYPE_LIBS)
+@HAVE_FREETYPE_TRUE@am__append_22 = hb-ft.cc
+@HAVE_FREETYPE_TRUE@am__append_23 = hb-ft.h
+@HAVE_GRAPHITE2_TRUE@am__append_24 = $(GRAPHITE2_CFLAGS)
+@HAVE_GRAPHITE2_TRUE@am__append_25 = $(GRAPHITE2_LIBS)
+@HAVE_GRAPHITE2_TRUE@am__append_26 = hb-graphite2.cc
+@HAVE_GRAPHITE2_TRUE@am__append_27 = hb-graphite2.h
+@HAVE_UNISCRIBE_TRUE@am__append_28 = $(UNISCRIBE_CFLAGS)
+@HAVE_UNISCRIBE_TRUE@am__append_29 = $(UNISCRIBE_LIBS)
+@HAVE_UNISCRIBE_TRUE@am__append_30 = hb-uniscribe.cc
+@HAVE_UNISCRIBE_TRUE@am__append_31 = hb-uniscribe.h
+@HAVE_CORETEXT_TRUE@am__append_32 = $(CORETEXT_CFLAGS)
+@HAVE_CORETEXT_TRUE@am__append_33 = $(CORETEXT_LIBS)
+@HAVE_CORETEXT_TRUE@am__append_34 = hb-coretext.cc
+@HAVE_CORETEXT_TRUE@am__append_35 = hb-coretext.h
+@HAVE_HB_OLD_TRUE@am__append_36 = hb-old
+@HAVE_HB_OLD_TRUE@am__append_37 = -I$(srcdir)/hb-old
+@HAVE_HB_OLD_TRUE@am__append_38 = hb-old/libhb-old.la
+@HAVE_HB_OLD_TRUE@am__append_39 = hb-old.cc
+@HAVE_ICU_LE_TRUE@am__append_40 = hb-icu-le
+@HAVE_ICU_LE_TRUE@am__append_41 = -I$(srcdir)/hb-icu-le
+@HAVE_ICU_LE_TRUE@am__append_42 = hb-icu-le/libhb-icu-le.la
+@HAVE_ICU_LE_TRUE@am__append_43 = hb-icu-le.cc
+@HAVE_UCDN_TRUE@am__append_44 = hb-ucdn
+@HAVE_UCDN_TRUE@am__append_45 = -I$(srcdir)/hb-ucdn
+@HAVE_UCDN_TRUE@am__append_46 = hb-ucdn/libhb-ucdn.la
+@HAVE_UCDN_TRUE@am__append_47 = hb-ucdn.cc
+noinst_PROGRAMS = main$(EXEEXT) test$(EXEEXT) \
+       test-would-substitute$(EXEEXT) test-size-params$(EXEEXT)
 bin_PROGRAMS =
-@HAVE_ICU_FALSE@am__append_38 = check-libstdc++.sh
+@HAVE_ICU_FALSE@am__append_48 = check-libstdc++.sh
+@HAVE_ICU_LE_FALSE@am__append_49 = check-static-inits.sh
 TESTS = $(am__EXEEXT_2)
 subdir = src
 DIST_COMMON = $(am__dist_check_SCRIPTS_DIST) \
        $(am__pkginclude_HEADERS_DIST) $(srcdir)/Makefile.am \
        $(srcdir)/Makefile.in $(srcdir)/hb-version.h.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -143,21 +160,30 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
        "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-@HAVE_GLIB_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-@HAVE_GOBJECT_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
-@HAVE_ICU_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
-@HAVE_FREETYPE_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
-@HAVE_GRAPHITE2_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
-@HAVE_UNISCRIBE_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1)
-@HAVE_CORETEXT_TRUE@am__DEPENDENCIES_8 = $(am__DEPENDENCIES_1)
-am__DEPENDENCIES_9 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+@HAVE_PTHREAD_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+@HAVE_GOBJECT_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+@HAVE_ICU_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
+@HAVE_FREETYPE_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
+@HAVE_GRAPHITE2_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1)
+@HAVE_UNISCRIBE_TRUE@am__DEPENDENCIES_8 = $(am__DEPENDENCIES_1)
+@HAVE_CORETEXT_TRUE@am__DEPENDENCIES_9 = $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_10 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
        $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) \
        $(am__DEPENDENCIES_6) $(am__DEPENDENCIES_7) \
-       $(am__DEPENDENCIES_8) $(am__append_36)
+       $(am__DEPENDENCIES_8) $(am__DEPENDENCIES_9) $(am__append_38) \
+       $(am__append_42) $(am__append_46)
+libharfbuzz_la_DEPENDENCIES = $(am__DEPENDENCIES_10)
 am__libharfbuzz_la_SOURCES_DIST = hb-atomic-private.hh hb-blob.cc \
        hb-buffer-private.hh hb-buffer.cc hb-cache-private.hh \
        hb-common.cc hb-fallback-shape.cc hb-font-private.hh \
@@ -166,37 +192,39 @@ am__libharfbuzz_la_SOURCES_DIST = hb-atomic-private.hh hb-blob.cc \
        hb-ot-head-table.hh hb-ot-hhea-table.hh hb-ot-hmtx-table.hh \
        hb-ot-maxp-table.hh hb-ot-name-table.hh hb-ot-tag.cc \
        hb-private.hh hb-set-private.hh hb-set.cc hb-shape.cc \
-       hb-shape-plan-private.hh hb-shape-plan.cc hb-shape-plan.h \
-       hb-shaper-list.hh hb-shaper-impl-private.hh \
-       hb-shaper-private.hh hb-shaper.cc hb-tt-font.cc \
-       hb-unicode-private.hh hb-unicode.cc hb-warning.cc \
-       hb-ot-layout.cc hb-ot-layout-common-private.hh \
-       hb-ot-layout-gdef-table.hh hb-ot-layout-gpos-table.hh \
-       hb-ot-layout-gsubgpos-private.hh hb-ot-layout-gsub-table.hh \
-       hb-ot-layout-private.hh hb-ot-map.cc hb-ot-map-private.hh \
-       hb-ot-shape.cc hb-ot-shape-complex-arabic.cc \
+       hb-shape-plan-private.hh hb-shape-plan.cc hb-shaper-list.hh \
+       hb-shaper-impl-private.hh hb-shaper-private.hh hb-shaper.cc \
+       hb-tt-font.cc hb-unicode-private.hh hb-unicode.cc \
+       hb-utf-private.hh hb-warning.cc hb-ot-layout.cc \
+       hb-ot-layout-common-private.hh hb-ot-layout-gdef-table.hh \
+       hb-ot-layout-gpos-table.hh hb-ot-layout-gsubgpos-private.hh \
+       hb-ot-layout-gsub-table.hh hb-ot-layout-private.hh \
+       hb-ot-map.cc hb-ot-map-private.hh hb-ot-shape.cc \
+       hb-ot-shape-complex-arabic.cc \
+       hb-ot-shape-complex-arabic-fallback.hh \
        hb-ot-shape-complex-arabic-table.hh \
-       hb-ot-shape-complex-indic.cc \
+       hb-ot-shape-complex-default.cc hb-ot-shape-complex-indic.cc \
        hb-ot-shape-complex-indic-machine.hh \
        hb-ot-shape-complex-indic-private.hh \
-       hb-ot-shape-complex-indic-table.hh hb-ot-shape-complex-misc.cc \
+       hb-ot-shape-complex-indic-table.hh hb-ot-shape-complex-thai.cc \
        hb-ot-shape-complex-private.hh \
        hb-ot-shape-normalize-private.hh hb-ot-shape-normalize.cc \
        hb-ot-shape-fallback-private.hh hb-ot-shape-fallback.cc \
        hb-ot-shape-private.hh hb-glib.cc hb-gobject-structs.cc \
        hb-icu.cc hb-ft.cc hb-graphite2.cc hb-uniscribe.cc \
-       hb-coretext.cc hb-old.cc hb.h hb-blob.h hb-buffer.h \
-       hb-common.h hb-font.h hb-set.h hb-shape.h hb-unicode.h \
-       hb-version.h hb-ot.h hb-ot-layout.h hb-ot-tag.h hb-glib.h \
-       hb-gobject.h hb-icu.h hb-ft.h hb-graphite2.h hb-uniscribe.h \
-       hb-coretext.h
+       hb-coretext.cc hb-old.cc hb-icu-le.cc hb-ucdn.cc hb.h \
+       hb-blob.h hb-buffer.h hb-common.h hb-font.h hb-set.h \
+       hb-shape.h hb-shape-plan.h hb-unicode.h hb-version.h hb-ot.h \
+       hb-ot-layout.h hb-ot-tag.h hb-glib.h hb-gobject.h hb-icu.h \
+       hb-ft.h hb-graphite2.h hb-uniscribe.h hb-coretext.h
 am__objects_1 =
 @HAVE_OT_TRUE@am__objects_2 = libharfbuzz_la-hb-ot-layout.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-map.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-arabic.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-default.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-indic.lo \
-@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-misc.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-thai.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-normalize.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-fallback.lo \
 @HAVE_OT_TRUE@ $(am__objects_1)
@@ -209,7 +237,9 @@ am__objects_1 =
 @HAVE_UNISCRIBE_TRUE@am__objects_8 = libharfbuzz_la-hb-uniscribe.lo
 @HAVE_CORETEXT_TRUE@am__objects_9 = libharfbuzz_la-hb-coretext.lo
 @HAVE_HB_OLD_TRUE@am__objects_10 = libharfbuzz_la-hb-old.lo
-am__objects_11 = libharfbuzz_la-hb-blob.lo libharfbuzz_la-hb-buffer.lo \
+@HAVE_ICU_LE_TRUE@am__objects_11 = libharfbuzz_la-hb-icu-le.lo
+@HAVE_UCDN_TRUE@am__objects_12 = libharfbuzz_la-hb-ucdn.lo
+am__objects_13 = libharfbuzz_la-hb-blob.lo libharfbuzz_la-hb-buffer.lo \
        libharfbuzz_la-hb-common.lo \
        libharfbuzz_la-hb-fallback-shape.lo libharfbuzz_la-hb-font.lo \
        libharfbuzz_la-hb-ot-tag.lo libharfbuzz_la-hb-set.lo \
@@ -219,36 +249,41 @@ am__objects_11 = libharfbuzz_la-hb-blob.lo libharfbuzz_la-hb-buffer.lo \
        $(am__objects_1) $(am__objects_2) $(am__objects_3) \
        $(am__objects_4) $(am__objects_5) $(am__objects_6) \
        $(am__objects_7) $(am__objects_8) $(am__objects_9) \
-       $(am__objects_10)
-@HAVE_OT_TRUE@am__objects_12 = $(am__objects_1)
-am__objects_13 = $(am__objects_1) $(am__objects_12) $(am__objects_1) \
+       $(am__objects_10) $(am__objects_11) $(am__objects_12)
+@HAVE_OT_TRUE@am__objects_14 = $(am__objects_1)
+am__objects_15 = $(am__objects_1) $(am__objects_14) $(am__objects_1) \
        $(am__objects_1) $(am__objects_1) $(am__objects_1) \
        $(am__objects_1) $(am__objects_1) $(am__objects_1)
-am_libharfbuzz_la_OBJECTS = $(am__objects_11) $(am__objects_13)
-@HAVE_GOBJECT_TRUE@am__objects_14 =  \
+am_libharfbuzz_la_OBJECTS = $(am__objects_13) $(am__objects_15)
+@HAVE_GOBJECT_TRUE@am__objects_16 =  \
 @HAVE_GOBJECT_TRUE@    libharfbuzz_la-hb-gobject-enums.lo
-nodist_libharfbuzz_la_OBJECTS = $(am__objects_14)
+nodist_libharfbuzz_la_OBJECTS = $(am__objects_16)
 libharfbuzz_la_OBJECTS = $(am_libharfbuzz_la_OBJECTS) \
        $(nodist_libharfbuzz_la_OBJECTS)
 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
-am_indic_OBJECTS = indic-indic.$(OBJEXT)
-indic_OBJECTS = $(am_indic_OBJECTS)
-indic_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_9)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
-am__v_lt_0 = --silent
 am_main_OBJECTS = main-main.$(OBJEXT)
 main_OBJECTS = $(am_main_OBJECTS)
-main_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_9)
+main_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_10)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am_test_OBJECTS = test-test.$(OBJEXT)
+test_OBJECTS = $(am_test_OBJECTS)
+test_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_10) \
+       $(am__DEPENDENCIES_1)
+am_test_size_params_OBJECTS =  \
+       test_size_params-test-size-params.$(OBJEXT)
+test_size_params_OBJECTS = $(am_test_size_params_OBJECTS)
+test_size_params_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_10)
 am_test_would_substitute_OBJECTS =  \
        test_would_substitute-test-would-substitute.$(OBJEXT)
 test_would_substitute_OBJECTS = $(am_test_would_substitute_OBJECTS)
 test_would_substitute_DEPENDENCIES = libharfbuzz.la \
-       $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_1)
+       $(am__DEPENDENCIES_10) $(am__DEPENDENCIES_1)
 am__dist_check_SCRIPTS_DIST = check-c-linkage-decls.sh \
        check-header-guards.sh check-exported-symbols.sh \
-       check-includes.sh check-internal-symbols.sh \
-       check-static-inits.sh check-libstdc++.sh
+       check-includes.sh check-internal-symbols.sh check-libstdc++.sh \
+       check-static-inits.sh
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -259,18 +294,18 @@ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_$(V))
-am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
 am__v_CXX_0 = @echo "  CXX   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_$(V))
-am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 am__v_CXXLD_0 = @echo "  CXXLD " $@;
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -278,24 +313,25 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
 am__v_CC_0 = @echo "  CC    " $@;
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(libharfbuzz_la_SOURCES) $(nodist_libharfbuzz_la_SOURCES) \
-       $(indic_SOURCES) $(main_SOURCES) \
+       $(main_SOURCES) $(test_SOURCES) $(test_size_params_SOURCES) \
+       $(test_would_substitute_SOURCES)
+DIST_SOURCES = $(am__libharfbuzz_la_SOURCES_DIST) $(main_SOURCES) \
+       $(test_SOURCES) $(test_size_params_SOURCES) \
        $(test_would_substitute_SOURCES)
-DIST_SOURCES = $(am__libharfbuzz_la_SOURCES_DIST) $(indic_SOURCES) \
-       $(main_SOURCES) $(test_would_substitute_SOURCES)
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
        html-recursive info-recursive install-data-recursive \
        install-dvi-recursive install-exec-recursive \
@@ -304,9 +340,10 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
        installcheck-recursive installdirs-recursive pdf-recursive \
        ps-recursive uninstall-recursive
 am__pkginclude_HEADERS_DIST = hb.h hb-blob.h hb-buffer.h hb-common.h \
-       hb-font.h hb-set.h hb-shape.h hb-unicode.h hb-version.h \
-       hb-ot.h hb-ot-layout.h hb-ot-tag.h hb-glib.h hb-gobject.h \
-       hb-icu.h hb-ft.h hb-graphite2.h hb-uniscribe.h hb-coretext.h
+       hb-font.h hb-set.h hb-shape.h hb-shape-plan.h hb-unicode.h \
+       hb-version.h hb-ot.h hb-ot-layout.h hb-ot-tag.h hb-glib.h \
+       hb-gobject.h hb-icu.h hb-ft.h hb-graphite2.h hb-uniscribe.h \
+       hb-coretext.h
 HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
@@ -320,8 +357,8 @@ red=; grn=; lgn=; blu=; std=
 am__EXEEXT_1 =
 am__EXEEXT_2 = check-c-linkage-decls.sh check-header-guards.sh \
        check-exported-symbols.sh check-includes.sh \
-       check-internal-symbols.sh check-static-inits.sh \
-       $(am__EXEEXT_1) $(am__append_38)
+       check-internal-symbols.sh $(am__EXEEXT_1) $(am__append_48) \
+       $(am__append_49)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -374,6 +411,7 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -400,6 +438,8 @@ HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -415,6 +455,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -431,6 +472,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -443,6 +487,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -451,6 +496,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -476,7 +522,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -493,25 +538,27 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
-SUBDIRS = $(am__append_34)
-DIST_SUBDIRS = hb-old
-BUILT_SOURCES = $(am__append_11) hb-ot-shape-complex-indic-machine.hh
-EXTRA_DIST = $(am__append_12) $(GENERATORS) \
+SUBDIRS = $(am__append_36) $(am__append_40) $(am__append_44)
+DIST_SUBDIRS = hb-old hb-icu-le hb-ucdn
+BUILT_SOURCES = $(am__append_13)
+EXTRA_DIST = $(am__append_14) $(GENERATORS) \
        hb-ot-shape-complex-indic-machine.rl
 CLEANFILES = harfbuzz.def
-DISTCLEANFILES = $(am__append_13)
+DISTCLEANFILES = $(am__append_15)
 MAINTAINERCLEANFILES = 
 DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
 
 # The following warning options are useful for debugging: -Wpadded
 #AM_CXXFLAGS =
 lib_LTLIBRARIES = libharfbuzz.la
-HBCFLAGS = $(am__append_3) $(am__append_7) $(am__append_14) \
-       $(am__append_18) $(am__append_22) $(am__append_26) \
-       $(am__append_30) $(am__append_35)
-HBLIBS = $(am__append_4) $(am__append_8) $(am__append_15) \
-       $(am__append_19) $(am__append_23) $(am__append_27) \
-       $(am__append_31) $(am__append_36)
+HBCFLAGS = $(am__append_3) $(am__append_5) $(am__append_9) \
+       $(am__append_16) $(am__append_20) $(am__append_24) \
+       $(am__append_28) $(am__append_32) $(am__append_37) \
+       $(am__append_41) $(am__append_45)
+HBLIBS = $(am__append_4) $(am__append_6) $(am__append_10) \
+       $(am__append_17) $(am__append_21) $(am__append_25) \
+       $(am__append_29) $(am__append_33) $(am__append_38) \
+       $(am__append_42) $(am__append_46)
 HBSOURCES = hb-atomic-private.hh hb-blob.cc hb-buffer-private.hh \
        hb-buffer.cc hb-cache-private.hh hb-common.cc \
        hb-fallback-shape.cc hb-font-private.hh hb-font.cc \
@@ -520,32 +567,35 @@ HBSOURCES = hb-atomic-private.hh hb-blob.cc hb-buffer-private.hh \
        hb-ot-head-table.hh hb-ot-hhea-table.hh hb-ot-hmtx-table.hh \
        hb-ot-maxp-table.hh hb-ot-name-table.hh hb-ot-tag.cc \
        hb-private.hh hb-set-private.hh hb-set.cc hb-shape.cc \
-       hb-shape-plan-private.hh hb-shape-plan.cc hb-shape-plan.h \
-       hb-shaper-list.hh hb-shaper-impl-private.hh \
-       hb-shaper-private.hh hb-shaper.cc hb-tt-font.cc \
-       hb-unicode-private.hh hb-unicode.cc hb-warning.cc $(NULL) \
-       $(am__append_1) $(am__append_5) $(am__append_9) \
-       $(am__append_16) $(am__append_20) $(am__append_24) \
-       $(am__append_28) $(am__append_32) $(am__append_37)
+       hb-shape-plan-private.hh hb-shape-plan.cc hb-shaper-list.hh \
+       hb-shaper-impl-private.hh hb-shaper-private.hh hb-shaper.cc \
+       hb-tt-font.cc hb-unicode-private.hh hb-unicode.cc \
+       hb-utf-private.hh hb-warning.cc $(NULL) $(am__append_1) \
+       $(am__append_7) $(am__append_11) $(am__append_18) \
+       $(am__append_22) $(am__append_26) $(am__append_30) \
+       $(am__append_34) $(am__append_39) $(am__append_43) \
+       $(am__append_47)
 HBHEADERS = hb.h hb-blob.h hb-buffer.h hb-common.h hb-font.h hb-set.h \
-       hb-shape.h hb-unicode.h hb-version.h $(NULL) $(am__append_2) \
-       $(am__append_6) $(am__append_10) $(am__append_17) \
-       $(am__append_21) $(am__append_25) $(am__append_29) \
-       $(am__append_33)
+       hb-shape.h hb-shape-plan.h hb-unicode.h hb-version.h $(NULL) \
+       $(am__append_2) $(am__append_8) $(am__append_12) \
+       $(am__append_19) $(am__append_23) $(am__append_27) \
+       $(am__append_31) $(am__append_35)
 @HAVE_GOBJECT_TRUE@nodist_HBSOURCES = hb-gobject-enums.cc
 
 # Put the library together
 @OS_WIN32_TRUE@export_symbols = -export-symbols harfbuzz.def
 @OS_WIN32_TRUE@harfbuzz_def_dependency = harfbuzz.def
-
-# Use a C linker, not C++; Don't link to libstdc++
-libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
+@HAVE_GCC_FALSE@@HAVE_ICU_FALSE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+# Use a C linker for GCC, not C++; Don't link to libstdc++
+@HAVE_GCC_TRUE@@HAVE_ICU_FALSE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
+@HAVE_ICU_TRUE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+@OS_WIN32_TRUE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
 libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS)
 nodist_libharfbuzz_la_SOURCES = $(nodist_HBSOURCES)
 libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
 libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
 libharfbuzz_la_LIBADD = $(HBLIBS)
-libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
+EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
 pkginclude_HEADERS = $(HBHEADERS)
 nodist_pkginclude_HEADERS = hb-version.h
 GENERATORS = \
@@ -556,16 +606,19 @@ GENERATORS = \
 main_SOURCES = main.cc
 main_CPPFLAGS = $(HBCFLAGS)
 main_LDADD = libharfbuzz.la $(HBLIBS)
-indic_SOURCES = indic.cc
-indic_CPPFLAGS = $(HBCFLAGS)
-indic_LDADD = libharfbuzz.la $(HBLIBS)
+test_SOURCES = test.cc
+test_CPPFLAGS = $(HBCFLAGS) $(FREETYPE_CFLAGS)
+test_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS)
 test_would_substitute_SOURCES = test-would-substitute.cc
 test_would_substitute_CPPFLAGS = $(HBCFLAGS) $(FREETYPE_CFLAGS)
 test_would_substitute_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS)
+test_size_params_SOURCES = test-size-params.cc
+test_size_params_CPPFLAGS = $(HBCFLAGS)
+test_size_params_LDADD = libharfbuzz.la $(HBLIBS)
 dist_check_SCRIPTS = check-c-linkage-decls.sh check-header-guards.sh \
        check-exported-symbols.sh check-includes.sh \
-       check-internal-symbols.sh check-static-inits.sh $(NULL) \
-       $(am__append_38)
+       check-internal-symbols.sh $(NULL) $(am__append_48) \
+       $(am__append_49)
 TESTS_ENVIRONMENT = \
        srcdir="$(srcdir)" \
        MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
@@ -641,7 +694,7 @@ clean-libLTLIBRARIES:
          echo "rm -f \"$${dir}/so_locations\""; \
          rm -f "$${dir}/so_locations"; \
        done
-libharfbuzz.la: $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_DEPENDENCIES) 
+libharfbuzz.la: $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_DEPENDENCIES) $(EXTRA_libharfbuzz_la_DEPENDENCIES) 
        $(AM_V_GEN)$(libharfbuzz_la_LINK) -rpath $(libdir) $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_LIBADD) $(LIBS)
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
@@ -711,13 +764,16 @@ clean-noinstPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
-indic$(EXEEXT): $(indic_OBJECTS) $(indic_DEPENDENCIES) 
-       @rm -f indic$(EXEEXT)
-       $(AM_V_CXXLD)$(CXXLINK) $(indic_OBJECTS) $(indic_LDADD) $(LIBS)
-main$(EXEEXT): $(main_OBJECTS) $(main_DEPENDENCIES) 
+main$(EXEEXT): $(main_OBJECTS) $(main_DEPENDENCIES) $(EXTRA_main_DEPENDENCIES) 
        @rm -f main$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(main_OBJECTS) $(main_LDADD) $(LIBS)
-test-would-substitute$(EXEEXT): $(test_would_substitute_OBJECTS) $(test_would_substitute_DEPENDENCIES) 
+test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) 
+       @rm -f test$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
+test-size-params$(EXEEXT): $(test_size_params_OBJECTS) $(test_size_params_DEPENDENCIES) $(EXTRA_test_size_params_DEPENDENCIES) 
+       @rm -f test-size-params$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(test_size_params_OBJECTS) $(test_size_params_LDADD) $(LIBS)
+test-would-substitute$(EXEEXT): $(test_would_substitute_OBJECTS) $(test_would_substitute_DEPENDENCIES) $(EXTRA_test_would_substitute_DEPENDENCIES) 
        @rm -f test-would-substitute$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_would_substitute_OBJECTS) $(test_would_substitute_LDADD) $(LIBS)
 
@@ -727,7 +783,6 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indic-indic.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-blob.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-buffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-common.Plo@am__quote@
@@ -739,13 +794,15 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-gobject-structs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-graphite2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-icu-le.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-icu.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-old.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-layout.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-map.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-arabic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-default.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-misc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-fallback.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape.Plo@am__quote@
@@ -755,323 +812,322 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shape.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shaper.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-tt-font.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ucdn.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-unicode.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-uniscribe.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-warning.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_size_params-test-size-params.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_would_substitute-test-would-substitute.Po@am__quote@
 
 .cc.o:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cc.obj:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cc.lo:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 libharfbuzz_la-hb-blob.lo: hb-blob.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-blob.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-blob.Tpo -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-blob.Tpo $(DEPDIR)/libharfbuzz_la-hb-blob.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-blob.cc' object='libharfbuzz_la-hb-blob.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-blob.cc' object='libharfbuzz_la-hb-blob.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
 
 libharfbuzz_la-hb-buffer.lo: hb-buffer.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-buffer.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo -c -o libharfbuzz_la-hb-buffer.lo `test -f 'hb-buffer.cc' || echo '$(srcdir)/'`hb-buffer.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo $(DEPDIR)/libharfbuzz_la-hb-buffer.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-buffer.cc' object='libharfbuzz_la-hb-buffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-buffer.cc' object='libharfbuzz_la-hb-buffer.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-buffer.lo `test -f 'hb-buffer.cc' || echo '$(srcdir)/'`hb-buffer.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-buffer.lo `test -f 'hb-buffer.cc' || echo '$(srcdir)/'`hb-buffer.cc
 
 libharfbuzz_la-hb-common.lo: hb-common.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-common.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-common.Tpo -c -o libharfbuzz_la-hb-common.lo `test -f 'hb-common.cc' || echo '$(srcdir)/'`hb-common.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-common.Tpo $(DEPDIR)/libharfbuzz_la-hb-common.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-common.cc' object='libharfbuzz_la-hb-common.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-common.cc' object='libharfbuzz_la-hb-common.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-common.lo `test -f 'hb-common.cc' || echo '$(srcdir)/'`hb-common.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-common.lo `test -f 'hb-common.cc' || echo '$(srcdir)/'`hb-common.cc
 
 libharfbuzz_la-hb-fallback-shape.lo: hb-fallback-shape.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-fallback-shape.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Tpo -c -o libharfbuzz_la-hb-fallback-shape.lo `test -f 'hb-fallback-shape.cc' || echo '$(srcdir)/'`hb-fallback-shape.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Tpo $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-fallback-shape.cc' object='libharfbuzz_la-hb-fallback-shape.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-fallback-shape.cc' object='libharfbuzz_la-hb-fallback-shape.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-fallback-shape.lo `test -f 'hb-fallback-shape.cc' || echo '$(srcdir)/'`hb-fallback-shape.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-fallback-shape.lo `test -f 'hb-fallback-shape.cc' || echo '$(srcdir)/'`hb-fallback-shape.cc
 
 libharfbuzz_la-hb-font.lo: hb-font.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-font.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-font.Tpo -c -o libharfbuzz_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-font.Tpo $(DEPDIR)/libharfbuzz_la-hb-font.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-font.cc' object='libharfbuzz_la-hb-font.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-font.cc' object='libharfbuzz_la-hb-font.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc
 
 libharfbuzz_la-hb-ot-tag.lo: hb-ot-tag.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-tag.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-tag.Tpo -c -o libharfbuzz_la-hb-ot-tag.lo `test -f 'hb-ot-tag.cc' || echo '$(srcdir)/'`hb-ot-tag.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-tag.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-tag.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-tag.cc' object='libharfbuzz_la-hb-ot-tag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-tag.cc' object='libharfbuzz_la-hb-ot-tag.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-tag.lo `test -f 'hb-ot-tag.cc' || echo '$(srcdir)/'`hb-ot-tag.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-tag.lo `test -f 'hb-ot-tag.cc' || echo '$(srcdir)/'`hb-ot-tag.cc
 
 libharfbuzz_la-hb-set.lo: hb-set.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-set.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-set.Tpo -c -o libharfbuzz_la-hb-set.lo `test -f 'hb-set.cc' || echo '$(srcdir)/'`hb-set.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-set.Tpo $(DEPDIR)/libharfbuzz_la-hb-set.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-set.cc' object='libharfbuzz_la-hb-set.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-set.cc' object='libharfbuzz_la-hb-set.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-set.lo `test -f 'hb-set.cc' || echo '$(srcdir)/'`hb-set.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-set.lo `test -f 'hb-set.cc' || echo '$(srcdir)/'`hb-set.cc
 
 libharfbuzz_la-hb-shape.lo: hb-shape.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-shape.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-shape.Tpo -c -o libharfbuzz_la-hb-shape.lo `test -f 'hb-shape.cc' || echo '$(srcdir)/'`hb-shape.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-shape.Tpo $(DEPDIR)/libharfbuzz_la-hb-shape.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-shape.cc' object='libharfbuzz_la-hb-shape.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-shape.cc' object='libharfbuzz_la-hb-shape.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-shape.lo `test -f 'hb-shape.cc' || echo '$(srcdir)/'`hb-shape.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-shape.lo `test -f 'hb-shape.cc' || echo '$(srcdir)/'`hb-shape.cc
 
 libharfbuzz_la-hb-shape-plan.lo: hb-shape-plan.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-shape-plan.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-shape-plan.Tpo -c -o libharfbuzz_la-hb-shape-plan.lo `test -f 'hb-shape-plan.cc' || echo '$(srcdir)/'`hb-shape-plan.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-shape-plan.Tpo $(DEPDIR)/libharfbuzz_la-hb-shape-plan.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-shape-plan.cc' object='libharfbuzz_la-hb-shape-plan.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-shape-plan.cc' object='libharfbuzz_la-hb-shape-plan.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-shape-plan.lo `test -f 'hb-shape-plan.cc' || echo '$(srcdir)/'`hb-shape-plan.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-shape-plan.lo `test -f 'hb-shape-plan.cc' || echo '$(srcdir)/'`hb-shape-plan.cc
 
 libharfbuzz_la-hb-shaper.lo: hb-shaper.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-shaper.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-shaper.Tpo -c -o libharfbuzz_la-hb-shaper.lo `test -f 'hb-shaper.cc' || echo '$(srcdir)/'`hb-shaper.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-shaper.Tpo $(DEPDIR)/libharfbuzz_la-hb-shaper.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-shaper.cc' object='libharfbuzz_la-hb-shaper.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-shaper.cc' object='libharfbuzz_la-hb-shaper.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-shaper.lo `test -f 'hb-shaper.cc' || echo '$(srcdir)/'`hb-shaper.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-shaper.lo `test -f 'hb-shaper.cc' || echo '$(srcdir)/'`hb-shaper.cc
 
 libharfbuzz_la-hb-tt-font.lo: hb-tt-font.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-tt-font.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-tt-font.Tpo -c -o libharfbuzz_la-hb-tt-font.lo `test -f 'hb-tt-font.cc' || echo '$(srcdir)/'`hb-tt-font.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-tt-font.Tpo $(DEPDIR)/libharfbuzz_la-hb-tt-font.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-tt-font.cc' object='libharfbuzz_la-hb-tt-font.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-tt-font.cc' object='libharfbuzz_la-hb-tt-font.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-tt-font.lo `test -f 'hb-tt-font.cc' || echo '$(srcdir)/'`hb-tt-font.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-tt-font.lo `test -f 'hb-tt-font.cc' || echo '$(srcdir)/'`hb-tt-font.cc
 
 libharfbuzz_la-hb-unicode.lo: hb-unicode.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-unicode.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo -c -o libharfbuzz_la-hb-unicode.lo `test -f 'hb-unicode.cc' || echo '$(srcdir)/'`hb-unicode.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo $(DEPDIR)/libharfbuzz_la-hb-unicode.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-unicode.cc' object='libharfbuzz_la-hb-unicode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-unicode.cc' object='libharfbuzz_la-hb-unicode.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-unicode.lo `test -f 'hb-unicode.cc' || echo '$(srcdir)/'`hb-unicode.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-unicode.lo `test -f 'hb-unicode.cc' || echo '$(srcdir)/'`hb-unicode.cc
 
 libharfbuzz_la-hb-warning.lo: hb-warning.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-warning.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-warning.Tpo -c -o libharfbuzz_la-hb-warning.lo `test -f 'hb-warning.cc' || echo '$(srcdir)/'`hb-warning.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-warning.Tpo $(DEPDIR)/libharfbuzz_la-hb-warning.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-warning.cc' object='libharfbuzz_la-hb-warning.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-warning.cc' object='libharfbuzz_la-hb-warning.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-warning.lo `test -f 'hb-warning.cc' || echo '$(srcdir)/'`hb-warning.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-warning.lo `test -f 'hb-warning.cc' || echo '$(srcdir)/'`hb-warning.cc
 
 libharfbuzz_la-hb-ot-layout.lo: hb-ot-layout.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-layout.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo -c -o libharfbuzz_la-hb-ot-layout.lo `test -f 'hb-ot-layout.cc' || echo '$(srcdir)/'`hb-ot-layout.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-layout.cc' object='libharfbuzz_la-hb-ot-layout.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-layout.cc' object='libharfbuzz_la-hb-ot-layout.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-layout.lo `test -f 'hb-ot-layout.cc' || echo '$(srcdir)/'`hb-ot-layout.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-layout.lo `test -f 'hb-ot-layout.cc' || echo '$(srcdir)/'`hb-ot-layout.cc
 
 libharfbuzz_la-hb-ot-map.lo: hb-ot-map.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-map.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-map.Tpo -c -o libharfbuzz_la-hb-ot-map.lo `test -f 'hb-ot-map.cc' || echo '$(srcdir)/'`hb-ot-map.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-map.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-map.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-map.cc' object='libharfbuzz_la-hb-ot-map.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-map.cc' object='libharfbuzz_la-hb-ot-map.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-map.lo `test -f 'hb-ot-map.cc' || echo '$(srcdir)/'`hb-ot-map.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-map.lo `test -f 'hb-ot-map.cc' || echo '$(srcdir)/'`hb-ot-map.cc
 
 libharfbuzz_la-hb-ot-shape.lo: hb-ot-shape.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape.Tpo -c -o libharfbuzz_la-hb-ot-shape.lo `test -f 'hb-ot-shape.cc' || echo '$(srcdir)/'`hb-ot-shape.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-shape.cc' object='libharfbuzz_la-hb-ot-shape.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape.cc' object='libharfbuzz_la-hb-ot-shape.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape.lo `test -f 'hb-ot-shape.cc' || echo '$(srcdir)/'`hb-ot-shape.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape.lo `test -f 'hb-ot-shape.cc' || echo '$(srcdir)/'`hb-ot-shape.cc
 
 libharfbuzz_la-hb-ot-shape-complex-arabic.lo: hb-ot-shape-complex-arabic.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-arabic.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-arabic.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-arabic.lo `test -f 'hb-ot-shape-complex-arabic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-arabic.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-arabic.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-arabic.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-shape-complex-arabic.cc' object='libharfbuzz_la-hb-ot-shape-complex-arabic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-arabic.cc' object='libharfbuzz_la-hb-ot-shape-complex-arabic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-arabic.lo `test -f 'hb-ot-shape-complex-arabic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-arabic.cc
+
+libharfbuzz_la-hb-ot-shape-complex-default.lo: hb-ot-shape-complex-default.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-default.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-default.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-default.lo `test -f 'hb-ot-shape-complex-default.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-default.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-default.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-default.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-default.cc' object='libharfbuzz_la-hb-ot-shape-complex-default.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-arabic.lo `test -f 'hb-ot-shape-complex-arabic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-arabic.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-default.lo `test -f 'hb-ot-shape-complex-default.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-default.cc
 
 libharfbuzz_la-hb-ot-shape-complex-indic.lo: hb-ot-shape-complex-indic.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-indic.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-indic.lo `test -f 'hb-ot-shape-complex-indic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-shape-complex-indic.cc' object='libharfbuzz_la-hb-ot-shape-complex-indic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-indic.cc' object='libharfbuzz_la-hb-ot-shape-complex-indic.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-indic.lo `test -f 'hb-ot-shape-complex-indic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-indic.lo `test -f 'hb-ot-shape-complex-indic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic.cc
 
-libharfbuzz_la-hb-ot-shape-complex-misc.lo: hb-ot-shape-complex-misc.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-misc.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-misc.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-misc.lo `test -f 'hb-ot-shape-complex-misc.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-misc.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-misc.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-misc.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-shape-complex-misc.cc' object='libharfbuzz_la-hb-ot-shape-complex-misc.lo' libtool=yes @AMDEPBACKSLASH@
+libharfbuzz_la-hb-ot-shape-complex-thai.lo: hb-ot-shape-complex-thai.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-thai.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-thai.lo `test -f 'hb-ot-shape-complex-thai.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-thai.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-thai.cc' object='libharfbuzz_la-hb-ot-shape-complex-thai.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-misc.lo `test -f 'hb-ot-shape-complex-misc.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-misc.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-thai.lo `test -f 'hb-ot-shape-complex-thai.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-thai.cc
 
 libharfbuzz_la-hb-ot-shape-normalize.lo: hb-ot-shape-normalize.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-normalize.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Tpo -c -o libharfbuzz_la-hb-ot-shape-normalize.lo `test -f 'hb-ot-shape-normalize.cc' || echo '$(srcdir)/'`hb-ot-shape-normalize.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-shape-normalize.cc' object='libharfbuzz_la-hb-ot-shape-normalize.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-normalize.cc' object='libharfbuzz_la-hb-ot-shape-normalize.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-normalize.lo `test -f 'hb-ot-shape-normalize.cc' || echo '$(srcdir)/'`hb-ot-shape-normalize.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-normalize.lo `test -f 'hb-ot-shape-normalize.cc' || echo '$(srcdir)/'`hb-ot-shape-normalize.cc
 
 libharfbuzz_la-hb-ot-shape-fallback.lo: hb-ot-shape-fallback.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-fallback.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-fallback.Tpo -c -o libharfbuzz_la-hb-ot-shape-fallback.lo `test -f 'hb-ot-shape-fallback.cc' || echo '$(srcdir)/'`hb-ot-shape-fallback.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-fallback.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-fallback.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-shape-fallback.cc' object='libharfbuzz_la-hb-ot-shape-fallback.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-fallback.cc' object='libharfbuzz_la-hb-ot-shape-fallback.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-fallback.lo `test -f 'hb-ot-shape-fallback.cc' || echo '$(srcdir)/'`hb-ot-shape-fallback.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-fallback.lo `test -f 'hb-ot-shape-fallback.cc' || echo '$(srcdir)/'`hb-ot-shape-fallback.cc
 
 libharfbuzz_la-hb-glib.lo: hb-glib.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-glib.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-glib.Tpo -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-glib.Tpo $(DEPDIR)/libharfbuzz_la-hb-glib.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-glib.cc' object='libharfbuzz_la-hb-glib.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-glib.cc' object='libharfbuzz_la-hb-glib.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
 
 libharfbuzz_la-hb-gobject-structs.lo: hb-gobject-structs.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-gobject-structs.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-gobject-structs.Tpo -c -o libharfbuzz_la-hb-gobject-structs.lo `test -f 'hb-gobject-structs.cc' || echo '$(srcdir)/'`hb-gobject-structs.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-gobject-structs.Tpo $(DEPDIR)/libharfbuzz_la-hb-gobject-structs.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-gobject-structs.cc' object='libharfbuzz_la-hb-gobject-structs.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-gobject-structs.cc' object='libharfbuzz_la-hb-gobject-structs.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-gobject-structs.lo `test -f 'hb-gobject-structs.cc' || echo '$(srcdir)/'`hb-gobject-structs.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-gobject-structs.lo `test -f 'hb-gobject-structs.cc' || echo '$(srcdir)/'`hb-gobject-structs.cc
 
 libharfbuzz_la-hb-icu.lo: hb-icu.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-icu.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-icu.Tpo -c -o libharfbuzz_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-icu.Tpo $(DEPDIR)/libharfbuzz_la-hb-icu.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-icu.cc' object='libharfbuzz_la-hb-icu.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-icu.cc' object='libharfbuzz_la-hb-icu.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
 
 libharfbuzz_la-hb-ft.lo: hb-ft.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ft.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ft.Tpo -c -o libharfbuzz_la-hb-ft.lo `test -f 'hb-ft.cc' || echo '$(srcdir)/'`hb-ft.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ft.Tpo $(DEPDIR)/libharfbuzz_la-hb-ft.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ft.cc' object='libharfbuzz_la-hb-ft.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ft.cc' object='libharfbuzz_la-hb-ft.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ft.lo `test -f 'hb-ft.cc' || echo '$(srcdir)/'`hb-ft.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ft.lo `test -f 'hb-ft.cc' || echo '$(srcdir)/'`hb-ft.cc
 
 libharfbuzz_la-hb-graphite2.lo: hb-graphite2.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-graphite2.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-graphite2.Tpo -c -o libharfbuzz_la-hb-graphite2.lo `test -f 'hb-graphite2.cc' || echo '$(srcdir)/'`hb-graphite2.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-graphite2.Tpo $(DEPDIR)/libharfbuzz_la-hb-graphite2.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-graphite2.cc' object='libharfbuzz_la-hb-graphite2.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-graphite2.cc' object='libharfbuzz_la-hb-graphite2.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-graphite2.lo `test -f 'hb-graphite2.cc' || echo '$(srcdir)/'`hb-graphite2.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-graphite2.lo `test -f 'hb-graphite2.cc' || echo '$(srcdir)/'`hb-graphite2.cc
 
 libharfbuzz_la-hb-uniscribe.lo: hb-uniscribe.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-uniscribe.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-uniscribe.Tpo -c -o libharfbuzz_la-hb-uniscribe.lo `test -f 'hb-uniscribe.cc' || echo '$(srcdir)/'`hb-uniscribe.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-uniscribe.Tpo $(DEPDIR)/libharfbuzz_la-hb-uniscribe.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-uniscribe.cc' object='libharfbuzz_la-hb-uniscribe.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-uniscribe.cc' object='libharfbuzz_la-hb-uniscribe.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-uniscribe.lo `test -f 'hb-uniscribe.cc' || echo '$(srcdir)/'`hb-uniscribe.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-uniscribe.lo `test -f 'hb-uniscribe.cc' || echo '$(srcdir)/'`hb-uniscribe.cc
 
 libharfbuzz_la-hb-coretext.lo: hb-coretext.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-coretext.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-coretext.Tpo -c -o libharfbuzz_la-hb-coretext.lo `test -f 'hb-coretext.cc' || echo '$(srcdir)/'`hb-coretext.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-coretext.Tpo $(DEPDIR)/libharfbuzz_la-hb-coretext.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-coretext.cc' object='libharfbuzz_la-hb-coretext.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-coretext.cc' object='libharfbuzz_la-hb-coretext.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-coretext.lo `test -f 'hb-coretext.cc' || echo '$(srcdir)/'`hb-coretext.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-coretext.lo `test -f 'hb-coretext.cc' || echo '$(srcdir)/'`hb-coretext.cc
 
 libharfbuzz_la-hb-old.lo: hb-old.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-old.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-old.Tpo -c -o libharfbuzz_la-hb-old.lo `test -f 'hb-old.cc' || echo '$(srcdir)/'`hb-old.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-old.Tpo $(DEPDIR)/libharfbuzz_la-hb-old.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-old.cc' object='libharfbuzz_la-hb-old.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-old.cc' object='libharfbuzz_la-hb-old.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-old.lo `test -f 'hb-old.cc' || echo '$(srcdir)/'`hb-old.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-old.lo `test -f 'hb-old.cc' || echo '$(srcdir)/'`hb-old.cc
 
-libharfbuzz_la-hb-gobject-enums.lo: hb-gobject-enums.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-gobject-enums.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Tpo -c -o libharfbuzz_la-hb-gobject-enums.lo `test -f 'hb-gobject-enums.cc' || echo '$(srcdir)/'`hb-gobject-enums.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Tpo $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-gobject-enums.cc' object='libharfbuzz_la-hb-gobject-enums.lo' libtool=yes @AMDEPBACKSLASH@
+libharfbuzz_la-hb-icu-le.lo: hb-icu-le.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-icu-le.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-icu-le.Tpo -c -o libharfbuzz_la-hb-icu-le.lo `test -f 'hb-icu-le.cc' || echo '$(srcdir)/'`hb-icu-le.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-icu-le.Tpo $(DEPDIR)/libharfbuzz_la-hb-icu-le.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-icu-le.cc' object='libharfbuzz_la-hb-icu-le.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-gobject-enums.lo `test -f 'hb-gobject-enums.cc' || echo '$(srcdir)/'`hb-gobject-enums.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-icu-le.lo `test -f 'hb-icu-le.cc' || echo '$(srcdir)/'`hb-icu-le.cc
 
-indic-indic.o: indic.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(indic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT indic-indic.o -MD -MP -MF $(DEPDIR)/indic-indic.Tpo -c -o indic-indic.o `test -f 'indic.cc' || echo '$(srcdir)/'`indic.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/indic-indic.Tpo $(DEPDIR)/indic-indic.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='indic.cc' object='indic-indic.o' libtool=no @AMDEPBACKSLASH@
+libharfbuzz_la-hb-ucdn.lo: hb-ucdn.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ucdn.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ucdn.Tpo -c -o libharfbuzz_la-hb-ucdn.lo `test -f 'hb-ucdn.cc' || echo '$(srcdir)/'`hb-ucdn.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ucdn.Tpo $(DEPDIR)/libharfbuzz_la-hb-ucdn.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ucdn.cc' object='libharfbuzz_la-hb-ucdn.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(indic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o indic-indic.o `test -f 'indic.cc' || echo '$(srcdir)/'`indic.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ucdn.lo `test -f 'hb-ucdn.cc' || echo '$(srcdir)/'`hb-ucdn.cc
 
-indic-indic.obj: indic.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(indic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT indic-indic.obj -MD -MP -MF $(DEPDIR)/indic-indic.Tpo -c -o indic-indic.obj `if test -f 'indic.cc'; then $(CYGPATH_W) 'indic.cc'; else $(CYGPATH_W) '$(srcdir)/indic.cc'; fi`
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/indic-indic.Tpo $(DEPDIR)/indic-indic.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='indic.cc' object='indic-indic.obj' libtool=no @AMDEPBACKSLASH@
+libharfbuzz_la-hb-gobject-enums.lo: hb-gobject-enums.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-gobject-enums.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Tpo -c -o libharfbuzz_la-hb-gobject-enums.lo `test -f 'hb-gobject-enums.cc' || echo '$(srcdir)/'`hb-gobject-enums.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Tpo $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-gobject-enums.cc' object='libharfbuzz_la-hb-gobject-enums.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(indic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o indic-indic.obj `if test -f 'indic.cc'; then $(CYGPATH_W) 'indic.cc'; else $(CYGPATH_W) '$(srcdir)/indic.cc'; fi`
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-gobject-enums.lo `test -f 'hb-gobject-enums.cc' || echo '$(srcdir)/'`hb-gobject-enums.cc
 
 main-main.o: main.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT main-main.o -MD -MP -MF $(DEPDIR)/main-main.Tpo -c -o main-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/main-main.Tpo $(DEPDIR)/main-main.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='main.cc' object='main-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='main.cc' object='main-main.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o main-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o main-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc
 
 main-main.obj: main.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT main-main.obj -MD -MP -MF $(DEPDIR)/main-main.Tpo -c -o main-main.obj `if test -f 'main.cc'; then $(CYGPATH_W) 'main.cc'; else $(CYGPATH_W) '$(srcdir)/main.cc'; fi`
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/main-main.Tpo $(DEPDIR)/main-main.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='main.cc' object='main-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='main.cc' object='main-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o main-main.obj `if test -f 'main.cc'; then $(CYGPATH_W) 'main.cc'; else $(CYGPATH_W) '$(srcdir)/main.cc'; fi`
+
+test-test.o: test.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test-test.o -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.o `test -f 'test.cc' || echo '$(srcdir)/'`test.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test.cc' object='test-test.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o main-main.obj `if test -f 'main.cc'; then $(CYGPATH_W) 'main.cc'; else $(CYGPATH_W) '$(srcdir)/main.cc'; fi`
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test-test.o `test -f 'test.cc' || echo '$(srcdir)/'`test.cc
+
+test-test.obj: test.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test-test.obj -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.obj `if test -f 'test.cc'; then $(CYGPATH_W) 'test.cc'; else $(CYGPATH_W) '$(srcdir)/test.cc'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test.cc' object='test-test.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test-test.obj `if test -f 'test.cc'; then $(CYGPATH_W) 'test.cc'; else $(CYGPATH_W) '$(srcdir)/test.cc'; fi`
+
+test_size_params-test-size-params.o: test-size-params.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_size_params_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_size_params-test-size-params.o -MD -MP -MF $(DEPDIR)/test_size_params-test-size-params.Tpo -c -o test_size_params-test-size-params.o `test -f 'test-size-params.cc' || echo '$(srcdir)/'`test-size-params.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_size_params-test-size-params.Tpo $(DEPDIR)/test_size_params-test-size-params.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test-size-params.cc' object='test_size_params-test-size-params.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_size_params_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_size_params-test-size-params.o `test -f 'test-size-params.cc' || echo '$(srcdir)/'`test-size-params.cc
+
+test_size_params-test-size-params.obj: test-size-params.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_size_params_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_size_params-test-size-params.obj -MD -MP -MF $(DEPDIR)/test_size_params-test-size-params.Tpo -c -o test_size_params-test-size-params.obj `if test -f 'test-size-params.cc'; then $(CYGPATH_W) 'test-size-params.cc'; else $(CYGPATH_W) '$(srcdir)/test-size-params.cc'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_size_params-test-size-params.Tpo $(DEPDIR)/test_size_params-test-size-params.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test-size-params.cc' object='test_size_params-test-size-params.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_size_params_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_size_params-test-size-params.obj `if test -f 'test-size-params.cc'; then $(CYGPATH_W) 'test-size-params.cc'; else $(CYGPATH_W) '$(srcdir)/test-size-params.cc'; fi`
 
 test_would_substitute-test-would-substitute.o: test-would-substitute.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_would_substitute_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_would_substitute-test-would-substitute.o -MD -MP -MF $(DEPDIR)/test_would_substitute-test-would-substitute.Tpo -c -o test_would_substitute-test-would-substitute.o `test -f 'test-would-substitute.cc' || echo '$(srcdir)/'`test-would-substitute.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_would_substitute-test-would-substitute.Tpo $(DEPDIR)/test_would_substitute-test-would-substitute.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='test-would-substitute.cc' object='test_would_substitute-test-would-substitute.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test-would-substitute.cc' object='test_would_substitute-test-would-substitute.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_would_substitute_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_would_substitute-test-would-substitute.o `test -f 'test-would-substitute.cc' || echo '$(srcdir)/'`test-would-substitute.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_would_substitute_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_would_substitute-test-would-substitute.o `test -f 'test-would-substitute.cc' || echo '$(srcdir)/'`test-would-substitute.cc
 
 test_would_substitute-test-would-substitute.obj: test-would-substitute.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_would_substitute_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_would_substitute-test-would-substitute.obj -MD -MP -MF $(DEPDIR)/test_would_substitute-test-would-substitute.Tpo -c -o test_would_substitute-test-would-substitute.obj `if test -f 'test-would-substitute.cc'; then $(CYGPATH_W) 'test-would-substitute.cc'; else $(CYGPATH_W) '$(srcdir)/test-would-substitute.cc'; fi`
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_would_substitute-test-would-substitute.Tpo $(DEPDIR)/test_would_substitute-test-would-substitute.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='test-would-substitute.cc' object='test_would_substitute-test-would-substitute.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test-would-substitute.cc' object='test_would_substitute-test-would-substitute.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_would_substitute_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_would_substitute-test-would-substitute.obj `if test -f 'test-would-substitute.cc'; then $(CYGPATH_W) 'test-would-substitute.cc'; else $(CYGPATH_W) '$(srcdir)/test-would-substitute.cc'; fi`
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_would_substitute_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_would_substitute-test-would-substitute.obj `if test -f 'test-would-substitute.cc'; then $(CYGPATH_W) 'test-would-substitute.cc'; else $(CYGPATH_W) '$(srcdir)/test-would-substitute.cc'; fi`
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -1095,9 +1151,7 @@ uninstall-nodist_pkgincludeHEADERS:
        @$(NORMAL_UNINSTALL)
        @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+       dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 install-pkgincludeHEADERS: $(pkginclude_HEADERS)
        @$(NORMAL_INSTALL)
        test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
@@ -1115,9 +1169,7 @@ uninstall-pkgincludeHEADERS:
        @$(NORMAL_UNINSTALL)
        @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+       dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -1335,14 +1387,15 @@ check-TESTS: $(TESTS)
          fi; \
          dashes=`echo "$$dashes" | sed s/./=/g`; \
          if test "$$failed" -eq 0; then \
-           echo "$$grn$$dashes"; \
+           col="$$grn"; \
          else \
-           echo "$$red$$dashes"; \
+           col="$$red"; \
          fi; \
-         echo "$$banner"; \
-         test -z "$$skipped" || echo "$$skipped"; \
-         test -z "$$report" || echo "$$report"; \
-         echo "$$dashes$$std"; \
+         echo "$${col}$$dashes$${std}"; \
+         echo "$${col}$$banner$${std}"; \
+         test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+         test -z "$$report" || echo "$${col}$$report$${std}"; \
+         echo "$${col}$$dashes$${std}"; \
          test "$$failed" -eq 0; \
        else :; fi
 
@@ -1428,10 +1481,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -1571,7 +1629,7 @@ arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt
        ($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
 
 .PHONY: unicode-tables arabic-table indic-table
-hb-ot-shape-complex-indic-machine.hh: hb-ot-shape-complex-indic-machine.rl
+$(srcdir)/hb-ot-shape-complex-indic-machine.hh: hb-ot-shape-complex-indic-machine.rl
        $(AM_V_GEN)$(top_srcdir)/missing --run ragel -e -F1 -o "$@.tmp" "$<" && \
        mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
 
index a7d6f9b..6f0bf7f 100755 (executable)
@@ -24,7 +24,7 @@ for def in $defs; do
                echo "Checking that $so has the same symbol list as $def"
                {
                        echo EXPORTS
-                       nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' T _fini\>\| T _init\>' | cut -d' ' -f3
+                       nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' T _fini\>\| T _init\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>' | cut -d' ' -f3
                        stat=1
                        # cheat: copy the last line from the def file!
                        tail -n1 "$def"
index f48d144..a8fdc53 100755 (executable)
@@ -19,7 +19,7 @@ for suffix in .so; do
        so=`echo .libs/libharfbuzz$suffix`
        if test -f "$so"; then
                echo "Checking that we are not exposing internal symbols"
-               if nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' T _fini\>\| T _init\>\| T hb_'; then
+               if nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' T _fini\>\| T _init\>\| T hb_\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>'; then
                        echo "Ouch, internal symbols exposed"
                        stat=1
                fi
index 0521532..e7e0e29 100755 (executable)
@@ -27,7 +27,7 @@ for suffix in so dylib; do
        fi
 done
 if ! $tested; then
-       echo "check-internal-symbols.sh: libharfbuzz shared library not found; skipping test"
+       echo "check-libstdc++.sh: libharfbuzz shared library not found; skipping test"
        exit 77
 fi
 
index 1eceb1b..bb0a7ff 100755 (executable)
@@ -28,10 +28,10 @@ for obj in $OBJS; do
        fi
 done
 
-echo "Checking that no object file has lazy static C++ constructors/destructors"
+echo "Checking that no object file has lazy static C++ constructors/destructors or other such stuff"
 for obj in $OBJS; do
        if objdump -t "$obj" | grep '__c'; then
-               echo "Ouch, $obj has lazy static C++ constructors/destructors"
+               echo "Ouch, $obj has lazy static C++ constructors/destructors or other such stuff"
                stat=1
        fi
 done
index 2d3c881..da5a4fc 100755 (executable)
@@ -122,7 +122,7 @@ def print_shaping_table(f):
        keys = shapes.keys ()
        min_u, max_u = min (keys), max (keys)
        for u in range (min_u, max_u + 1):
-               s = [shapes[u][shape] if u in shapes and shape in shapes[u] else u
+               s = [shapes[u][shape] if u in shapes and shape in shapes[u] else 0
                     for shape in  ['initial', 'medial', 'final', 'isolated']]
                value = ', '.join ("0x%04X" % c for c in s)
                print "  {%s}, /* U+%04X %s */" % (value, u, names[u] if u in names else "")
@@ -148,9 +148,9 @@ def print_shaping_table(f):
                        ligas[liga[0]].append ((liga[1], c))
        max_i = max (len (ligas[l]) for l in ligas)
        print
-       print "static const struct {"
+       print "static const struct ligature_set_t {"
        print " uint16_t first;"
-       print " struct {"
+       print " struct ligature_pairs_t {"
        print "   uint16_t second;"
        print "   uint16_t ligature;"
        print " } ligatures[%d];" % max_i
index 0f70641..b909bc8 100644 (file)
 #if 0
 
 
-#elif !defined(HB_NO_MT) && defined(_MSC_VER) && _MSC_VER >= 1600
+#elif !defined(HB_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__)
 
-#include <intrin.h>
-/* On x86, _InterlockedCompareExchangePointer is a macro defined in concrt.h */
-#include <concrt.h>
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
 
-typedef long hb_atomic_int_t;
-#define hb_atomic_int_add(AI, V)       _InterlockedExchangeAdd (&(AI), (V))
+/* mingw32 does not have MemoryBarrier.
+ * MemoryBarrier may be defined as a macro or a function.
+ * Just make a failsafe version for ourselves. */
+#ifdef MemoryBarrier
+#define HBMemoryBarrier MemoryBarrier
+#else
+static inline void HBMemoryBarrier (void) {
+  long dummy = 0;
+  InterlockedExchange (&dummy, 1);
+}
+#endif
 
-#define hb_atomic_ptr_get(P)           (MemoryBarrier (), (void *) *(P))
-#define hb_atomic_ptr_cmpexch(P,O,N)   (_InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
+typedef LONG hb_atomic_int_t;
+#define hb_atomic_int_add(AI, V)       InterlockedExchangeAdd (&(AI), (V))
+
+#define hb_atomic_ptr_get(P)           (HBMemoryBarrier (), (void *) *(P))
+#define hb_atomic_ptr_cmpexch(P,O,N)   (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
 
 
 #elif !defined(HB_NO_MT) && defined(__APPLE__)
 
 #include <libkern/OSAtomic.h>
+#ifdef __MAC_OS_X_MIN_REQUIRED
+#include <AvailabilityMacros.h>
+#elif defined(__IPHONE_OS_MIN_REQUIRED)
+#include <Availability.h>
+#endif
 
 typedef int32_t hb_atomic_int_t;
 #define hb_atomic_int_add(AI, V)       (OSAtomicAdd32Barrier ((V), &(AI)) - (V))
 
 #define hb_atomic_ptr_get(P)           (OSMemoryBarrier (), (void *) *(P))
+#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 || __IPHONE_VERSION_MIN_REQUIRED >= 20100)
 #define hb_atomic_ptr_cmpexch(P,O,N)   OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P))
+#else
+#if __ppc64__ || __x86_64__
+#define hb_atomic_ptr_cmpexch(P,O,N)    OSAtomicCompareAndSwap64Barrier ((int64_t) (O), (int64_t) (N), (int64_t*) (P))
+#else
+#define hb_atomic_ptr_cmpexch(P,O,N)    OSAtomicCompareAndSwap32Barrier ((int32_t) (O), (int32_t) (N), (int32_t*) (P))
+#endif
+#endif
 
 
 #elif !defined(HB_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES)
@@ -74,18 +98,17 @@ typedef int hb_atomic_int_t;
 #define hb_atomic_ptr_get(P)           (void *) (__sync_synchronize (), *(P))
 #define hb_atomic_ptr_cmpexch(P,O,N)   __sync_bool_compare_and_swap ((P), (O), (N))
 
-#elif !defined(HB_NO_MT) && defined(HAVE_GLIB)
 
-#include <glib.h>
-typedef int hb_atomic_int_t;
-#if GLIB_CHECK_VERSION(2,29,5)
-#define hb_atomic_int_add(AI, V)       g_atomic_int_add (&(AI), (V))
-#else
-#define hb_atomic_int_add(AI, V)       g_atomic_int_exchange_and_add (&(AI), (V))
-#endif
+#elif !defined(HB_NO_MT) && defined(HAVE_SOLARIS_ATOMIC_OPS)
+
+#include <atomic.h>
+#include <mbarrier.h>
+
+typedef unsigned int hb_atomic_int_t;
+#define hb_atomic_int_add(AI, V)       ( ({__machine_rw_barrier ();}), atomic_add_int_nv (&(AI), (V)) - (V))
 
-#define hb_atomic_ptr_get(P)           g_atomic_pointer_get (P)
-#define hb_atomic_ptr_cmpexch(P,O,N)   g_atomic_pointer_compare_and_exchange ((void **) (P), (void *) (O), (void *) (N))
+#define hb_atomic_ptr_get(P)           ( ({__machine_rw_barrier ();}), (void *) *(P))
+#define hb_atomic_ptr_cmpexch(P,O,N)   ( ({__machine_rw_barrier ();}), atomic_cas_ptr ((void **) (P), (void *) (O), (void *) (N)) == (void *) (O) ? true : false)
 
 
 #elif !defined(HB_NO_MT)
index b6e696b..3ca50fb 100644 (file)
@@ -24,6 +24,9 @@
  * Red Hat Author(s): Behdad Esfahbod
  */
 
+/* http://www.oracle.com/technetwork/articles/servers-storage-dev/standardheaderfiles-453865.html */
+#define _POSIX_C_SOURCE 199309L
+
 #include "hb-private.hh"
 
 #include "hb-blob.h"
index 9864ca2..13cf4bb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright © 1998-2004  David Turner and Werner Lemberg
  * Copyright © 2004,2007,2009,2010  Red Hat, Inc.
- * Copyright © 2011  Google, Inc.
+ * Copyright © 2011,2012  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
 #include "hb-unicode-private.hh"
 
 
-
 ASSERT_STATIC (sizeof (hb_glyph_info_t) == 20);
 ASSERT_STATIC (sizeof (hb_glyph_info_t) == sizeof (hb_glyph_position_t));
 
 
 /*
- * hb_segment_properties_t
- */
-
-typedef struct hb_segment_properties_t {
-    hb_direction_t      direction;
-    hb_script_t         script;
-    hb_language_t       language;
-    ASSERT_POD ();
-} hb_segment_properties_t;
-
-#define _HB_BUFFER_PROPS_DEFAULT { HB_DIRECTION_INVALID, HB_SCRIPT_INVALID, HB_LANGUAGE_INVALID }
-
-static inline hb_bool_t
-hb_segment_properties_equal (const hb_segment_properties_t *a,
-                            const hb_segment_properties_t *b)
-{
-  return a->direction == b->direction &&
-        a->script    == b->script    &&
-        a->language  == b->language;
-}
-
-
-#if 0
-static inline unsigned int
-hb_segment_properties_hash (const hb_segment_properties_t *p)
-{
-  /* TODO improve */
-  return (unsigned int) p->direction +
-        (unsigned int) p->script +
-        (intptr_t) (p->language);
-}
-#endif
-
-
-
-/*
  * hb_buffer_t
  */
 
@@ -89,9 +52,12 @@ struct hb_buffer_t {
 
   hb_unicode_funcs_t *unicode; /* Unicode functions */
   hb_segment_properties_t props; /* Script, language, direction */
+  hb_buffer_flags_t flags; /* BOT / EOT / etc. */
 
   /* Buffer contents */
 
+  hb_buffer_content_type_t content_type;
+
   bool in_error; /* Allocation failed */
   bool have_output; /* Whether we have an output buffer going on */
   bool have_positions; /* Whether we have positions */
@@ -115,13 +81,23 @@ struct hb_buffer_t {
   inline hb_glyph_info_t prev (void) const { return info[out_len - 1]; }
 
   unsigned int serial;
+
+  /* These reflect current allocations of the bytes in glyph_info_t's var1 and var2. */
   uint8_t allocated_var_bytes[8];
   const char *allocated_var_owner[8];
 
+  /* Text before / after the main buffer contents.
+   * Always in Unicode, and ordered outward.
+   * Index 0 is for "pre-context", 1 for "post-context". */
+  static const unsigned int CONTEXT_LENGTH = 5;
+  hb_codepoint_t context[2][CONTEXT_LENGTH];
+  unsigned int context_len[2];
+
 
   /* Methods */
 
   HB_INTERNAL void reset (void);
+  HB_INTERNAL void clear (void);
 
   inline unsigned int backtrack_len (void) const
   { return have_output? out_len : idx; }
@@ -129,18 +105,19 @@ struct hb_buffer_t {
 
   HB_INTERNAL void allocate_var (unsigned int byte_i, unsigned int count, const char *owner);
   HB_INTERNAL void deallocate_var (unsigned int byte_i, unsigned int count, const char *owner);
+  HB_INTERNAL void assert_var (unsigned int byte_i, unsigned int count, const char *owner);
   HB_INTERNAL void deallocate_var_all (void);
 
   HB_INTERNAL void add (hb_codepoint_t  codepoint,
-                       hb_mask_t       mask,
                        unsigned int    cluster);
 
   HB_INTERNAL void reverse_range (unsigned int start, unsigned int end);
   HB_INTERNAL void reverse (void);
   HB_INTERNAL void reverse_clusters (void);
-  HB_INTERNAL void guess_properties (void);
+  HB_INTERNAL void guess_segment_properties (void);
 
   HB_INTERNAL void swap_buffers (void);
+  HB_INTERNAL void remove_output (void);
   HB_INTERNAL void clear_output (void);
   HB_INTERNAL void clear_positions (void);
 
@@ -151,11 +128,26 @@ struct hb_buffer_t {
   HB_INTERNAL void replace_glyph (hb_codepoint_t glyph_index);
   /* Makes a copy of the glyph at idx to output and replace glyph_index */
   HB_INTERNAL void output_glyph (hb_codepoint_t glyph_index);
+  HB_INTERNAL void output_info (hb_glyph_info_t &glyph_info);
   /* Copies glyph at idx to output but doesn't advance idx */
   HB_INTERNAL void copy_glyph (void);
   /* Copies glyph at idx to output and advance idx.
    * If there's no output, just advance idx. */
-  HB_INTERNAL void next_glyph (void);
+  inline void
+  next_glyph (void)
+  {
+    if (have_output)
+    {
+      if (unlikely (out_info != info || out_len != idx)) {
+       if (unlikely (!make_room_for (1, 1))) return;
+       out_info[out_len] = info[idx];
+      }
+      out_len++;
+    }
+
+    idx++;
+  }
+
   /* Advance idx without copying to output. */
   inline void skip_glyph (void) { idx++; }
 
@@ -188,6 +180,8 @@ struct hb_buffer_t {
   HB_INTERNAL bool make_room_for (unsigned int num_in, unsigned int num_out);
 
   HB_INTERNAL void *get_scratch_buffer (unsigned int *size);
+
+  inline void clear_context (unsigned int side) { context_len[side] = 0; }
 };
 
 
@@ -198,6 +192,8 @@ struct hb_buffer_t {
        HB_BUFFER_XALLOCATE_VAR (b, allocate_var, var (), #var)
 #define HB_BUFFER_DEALLOCATE_VAR(b, var) \
        HB_BUFFER_XALLOCATE_VAR (b, deallocate_var, var (), #var)
+#define HB_BUFFER_ASSERT_VAR(b, var) \
+       HB_BUFFER_XALLOCATE_VAR (b, assert_var, var (), #var)
 
 
 #endif /* HB_BUFFER_PRIVATE_HH */
index eddd5d0..c7860e9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright © 1998-2004  David Turner and Werner Lemberg
  * Copyright © 2004,2007,2009,2010  Red Hat, Inc.
- * Copyright © 2011  Google, Inc.
+ * Copyright © 2011,2012  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  */
 
 #include "hb-buffer-private.hh"
-
-#include <string.h>
-
+#include "hb-utf-private.hh"
 
 
 #ifndef HB_DEBUG_BUFFER
 #define HB_DEBUG_BUFFER (HB_DEBUG+0)
 #endif
 
+
+hb_bool_t
+hb_segment_properties_equal (const hb_segment_properties_t *a,
+                            const hb_segment_properties_t *b)
+{
+  return a->direction == b->direction &&
+        a->script    == b->script    &&
+        a->language  == b->language  &&
+        a->reserved1 == b->reserved1 &&
+        a->reserved2 == b->reserved2;
+
+}
+
+unsigned int
+hb_segment_properties_hash (const hb_segment_properties_t *p)
+{
+  return (unsigned int) p->direction ^
+        (unsigned int) p->script ^
+        (intptr_t) (p->language);
+}
+
+
+
 /* Here is how the buffer works internally:
  *
  * There are two info pointers: info and out_info.  They always have
@@ -73,7 +94,7 @@ hb_buffer_t::enlarge (unsigned int size)
   if (unlikely (_hb_unsigned_int_mul_overflows (size, sizeof (info[0]))))
     goto done;
 
-  while (size > new_allocated)
+  while (size >= new_allocated)
     new_allocated += (new_allocated >> 1) + 32;
 
   ASSERT_STATIC (sizeof (info[0]) == sizeof (pos[0]));
@@ -144,9 +165,20 @@ hb_buffer_t::reset (void)
   hb_unicode_funcs_destroy (unicode);
   unicode = hb_unicode_funcs_get_default ();
 
-  hb_segment_properties_t default_props = _HB_BUFFER_PROPS_DEFAULT;
+  clear ();
+}
+
+void
+hb_buffer_t::clear (void)
+{
+  if (unlikely (hb_object_is_inert (this)))
+    return;
+
+  hb_segment_properties_t default_props = HB_SEGMENT_PROPERTIES_DEFAULT;
   props = default_props;
+  flags = HB_BUFFER_FLAGS_DEFAULT;
 
+  content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
   in_error = false;
   have_output = false;
   have_positions = false;
@@ -159,11 +191,13 @@ hb_buffer_t::reset (void)
   serial = 0;
   memset (allocated_var_bytes, 0, sizeof allocated_var_bytes);
   memset (allocated_var_owner, 0, sizeof allocated_var_owner);
+
+  memset (context, 0, sizeof context);
+  memset (context_len, 0, sizeof context_len);
 }
 
 void
 hb_buffer_t::add (hb_codepoint_t  codepoint,
-                 hb_mask_t       mask,
                  unsigned int    cluster)
 {
   hb_glyph_info_t *glyph;
@@ -174,13 +208,26 @@ hb_buffer_t::add (hb_codepoint_t  codepoint,
 
   memset (glyph, 0, sizeof (*glyph));
   glyph->codepoint = codepoint;
-  glyph->mask = mask;
+  glyph->mask = 1;
   glyph->cluster = cluster;
 
   len++;
 }
 
 void
+hb_buffer_t::remove_output (void)
+{
+  if (unlikely (hb_object_is_inert (this)))
+    return;
+
+  have_output = false;
+  have_positions = false;
+
+  out_len = 0;
+  out_info = info;
+}
+
+void
 hb_buffer_t::clear_output (void)
 {
   if (unlikely (hb_object_is_inert (this)))
@@ -268,6 +315,16 @@ hb_buffer_t::output_glyph (hb_codepoint_t glyph_index)
 }
 
 void
+hb_buffer_t::output_info (hb_glyph_info_t &glyph_info)
+{
+  if (unlikely (!make_room_for (0, 1))) return;
+
+  out_info[out_len] = glyph_info;
+
+  out_len++;
+}
+
+void
 hb_buffer_t::copy_glyph (void)
 {
   if (unlikely (!make_room_for (0, 1))) return;
@@ -290,21 +347,6 @@ hb_buffer_t::replace_glyph (hb_codepoint_t glyph_index)
   out_len++;
 }
 
-void
-hb_buffer_t::next_glyph (void)
-{
-  if (have_output)
-  {
-    if (unlikely (out_info != info || out_len != idx)) {
-      if (unlikely (!make_room_for (1, 1))) return;
-      out_info[out_len] = info[idx];
-    }
-    out_len++;
-  }
-
-  idx++;
-}
-
 
 void
 hb_buffer_t::set_masks (hb_mask_t    value,
@@ -449,8 +491,11 @@ hb_buffer_t::merge_out_clusters (unsigned int start,
 }
 
 void
-hb_buffer_t::guess_properties (void)
+hb_buffer_t::guess_segment_properties (void)
 {
+  assert (content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
+         (!len && content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
+
   /* If script is set to INVALID, guess from buffer contents */
   if (props.script == HB_SCRIPT_INVALID) {
     for (unsigned int i = 0; i < len; i++) {
@@ -523,6 +568,22 @@ void hb_buffer_t::deallocate_var (unsigned int byte_i, unsigned int count, const
   }
 }
 
+void hb_buffer_t::assert_var (unsigned int byte_i, unsigned int count, const char *owner)
+{
+  if (DEBUG (BUFFER))
+    dump_var_allocation (this);
+
+  DEBUG_MSG (BUFFER, this,
+            "Asserting var bytes %d..%d for %s",
+            byte_i, byte_i + count - 1, owner);
+
+  assert (byte_i < 8 && byte_i + count <= 8);
+  for (unsigned int i = byte_i; i < byte_i + count; i++) {
+    assert (allocated_var_bytes[i]);
+    assert (0 == strcmp (allocated_var_owner[i], owner));
+  }
+}
+
 void hb_buffer_t::deallocate_var_all (void)
 {
   memset (allocated_var_bytes, 0, sizeof (allocated_var_bytes));
@@ -532,7 +593,7 @@ void hb_buffer_t::deallocate_var_all (void)
 /* Public API */
 
 hb_buffer_t *
-hb_buffer_create ()
+hb_buffer_create (void)
 {
   hb_buffer_t *buffer;
 
@@ -551,11 +612,15 @@ hb_buffer_get_empty (void)
     HB_OBJECT_HEADER_STATIC,
 
     const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil),
-    _HB_BUFFER_PROPS_DEFAULT,
+    HB_SEGMENT_PROPERTIES_DEFAULT,
+    HB_BUFFER_FLAGS_DEFAULT,
 
+    HB_BUFFER_CONTENT_TYPE_INVALID,
     true, /* in_error */
     true, /* have_output */
     true  /* have_positions */
+
+    /* Zero is good enough for everything else. */
   };
 
   return const_cast<hb_buffer_t *> (&_hb_buffer_nil);
@@ -599,6 +664,20 @@ hb_buffer_get_user_data (hb_buffer_t        *buffer,
 
 
 void
+hb_buffer_set_content_type (hb_buffer_t              *buffer,
+                           hb_buffer_content_type_t  content_type)
+{
+  buffer->content_type = content_type;
+}
+
+hb_buffer_content_type_t
+hb_buffer_get_content_type (hb_buffer_t *buffer)
+{
+  return buffer->content_type;
+}
+
+
+void
 hb_buffer_set_unicode_funcs (hb_buffer_t        *buffer,
                             hb_unicode_funcs_t *unicode)
 {
@@ -669,6 +748,40 @@ hb_buffer_get_language (hb_buffer_t *buffer)
   return buffer->props.language;
 }
 
+void
+hb_buffer_set_segment_properties (hb_buffer_t *buffer,
+                                 const hb_segment_properties_t *props)
+{
+  if (unlikely (hb_object_is_inert (buffer)))
+    return;
+
+  buffer->props = *props;
+}
+
+void
+hb_buffer_get_segment_properties (hb_buffer_t *buffer,
+                                 hb_segment_properties_t *props)
+{
+  *props = buffer->props;
+}
+
+
+void
+hb_buffer_set_flags (hb_buffer_t       *buffer,
+                    hb_buffer_flags_t  flags)
+{
+  if (unlikely (hb_object_is_inert (buffer)))
+    return;
+
+  buffer->flags = flags;
+}
+
+hb_buffer_flags_t
+hb_buffer_get_flags (hb_buffer_t *buffer)
+{
+  return buffer->flags;
+}
+
 
 void
 hb_buffer_reset (hb_buffer_t *buffer)
@@ -676,6 +789,12 @@ hb_buffer_reset (hb_buffer_t *buffer)
   buffer->reset ();
 }
 
+void
+hb_buffer_clear_contents (hb_buffer_t *buffer)
+{
+  buffer->clear ();
+}
+
 hb_bool_t
 hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size)
 {
@@ -691,10 +810,10 @@ hb_buffer_allocation_successful (hb_buffer_t  *buffer)
 void
 hb_buffer_add (hb_buffer_t    *buffer,
               hb_codepoint_t  codepoint,
-              hb_mask_t       mask,
               unsigned int    cluster)
 {
-  buffer->add (codepoint, mask, cluster);
+  buffer->add (codepoint, cluster);
+  buffer->clear_context (1);
 }
 
 hb_bool_t
@@ -715,6 +834,11 @@ hb_buffer_set_length (hb_buffer_t  *buffer,
   }
 
   buffer->len = length;
+
+  if (!length)
+    buffer->clear_context (0);
+  buffer->clear_context (1);
+
   return true;
 }
 
@@ -762,73 +886,75 @@ hb_buffer_reverse_clusters (hb_buffer_t *buffer)
 }
 
 void
-hb_buffer_guess_properties (hb_buffer_t *buffer)
-{
-  buffer->guess_properties ();
-}
-
-#define ADD_UTF(T) \
-       HB_STMT_START { \
-         if (text_length == -1) { \
-           text_length = 0; \
-           const T *p = (const T *) text; \
-           while (*p) { \
-             text_length++; \
-             p++; \
-           } \
-         } \
-         if (item_length == -1) \
-           item_length = text_length - item_offset; \
-         buffer->ensure (buffer->len + item_length * sizeof (T) / 4); \
-         const T *next = (const T *) text + item_offset; \
-         const T *end = next + item_length; \
-         while (next < end) { \
-           hb_codepoint_t u; \
-           const T *old_next = next; \
-           next = UTF_NEXT (next, end, u); \
-           hb_buffer_add (buffer, u, 1,  old_next - (const T *) text); \
-         } \
-       } HB_STMT_END
-
-
-#define UTF8_COMPUTE(Char, Mask, Len) \
-  if (Char < 128) { Len = 1; Mask = 0x7f; } \
-  else if ((Char & 0xe0) == 0xc0) { Len = 2; Mask = 0x1f; } \
-  else if ((Char & 0xf0) == 0xe0) { Len = 3; Mask = 0x0f; } \
-  else if ((Char & 0xf8) == 0xf0) { Len = 4; Mask = 0x07; } \
-  else Len = 0;
-
-static inline const uint8_t *
-hb_utf8_next (const uint8_t *text,
-             const uint8_t *end,
-             hb_codepoint_t *unicode)
-{
-  uint8_t c = *text;
-  unsigned int mask, len;
-
-  /* TODO check for overlong sequences? */
-
-  UTF8_COMPUTE (c, mask, len);
-  if (unlikely (!len || (unsigned int) (end - text) < len)) {
-    *unicode = -1;
-    return text + 1;
-  } else {
-    hb_codepoint_t result;
-    unsigned int i;
-    result = c & mask;
-    for (i = 1; i < len; i++)
-      {
-       if (unlikely ((text[i] & 0xc0) != 0x80))
-         {
-           *unicode = -1;
-           return text + 1;
-         }
-       result <<= 6;
-       result |= (text[i] & 0x3f);
-      }
-    *unicode = result;
-    return text + len;
+hb_buffer_guess_segment_properties (hb_buffer_t *buffer)
+{
+  buffer->guess_segment_properties ();
+}
+
+template <typename T>
+static inline void
+hb_buffer_add_utf (hb_buffer_t  *buffer,
+                  const T      *text,
+                  int           text_length,
+                  unsigned int  item_offset,
+                  int           item_length)
+{
+  assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
+         (!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
+
+  if (unlikely (hb_object_is_inert (buffer)))
+    return;
+
+  if (text_length == -1)
+    text_length = hb_utf_strlen (text);
+
+  if (item_length == -1)
+    item_length = text_length - item_offset;
+
+  buffer->ensure (buffer->len + item_length * sizeof (T) / 4);
+
+  /* If buffer is empty and pre-context provided, install it.
+   * This check is written this way, to make sure people can
+   * provide pre-context in one add_utf() call, then provide
+   * text in a follow-up call.  See:
+   *
+   * https://bugzilla.mozilla.org/show_bug.cgi?id=801410#c13
+   */
+  if (!buffer->len && item_offset > 0)
+  {
+    /* Add pre-context */
+    buffer->clear_context (0);
+    const T *prev = text + item_offset;
+    const T *start = text;
+    while (start < prev && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
+    {
+      hb_codepoint_t u;
+      prev = hb_utf_prev (prev, start, &u);
+      buffer->context[0][buffer->context_len[0]++] = u;
+    }
   }
+
+  const T *next = text + item_offset;
+  const T *end = next + item_length;
+  while (next < end)
+  {
+    hb_codepoint_t u;
+    const T *old_next = next;
+    next = hb_utf_next (next, end, &u);
+    buffer->add (u, old_next - (const T *) text);
+  }
+
+  /* Add post-context */
+  buffer->clear_context (1);
+  end = text + text_length;
+  while (next < end && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
+  {
+    hb_codepoint_t u;
+    next = hb_utf_next (next, end, &u);
+    buffer->context[1][buffer->context_len[1]++] = u;
+  }
+
+  buffer->content_type = HB_BUFFER_CONTENT_TYPE_UNICODE;
 }
 
 void
@@ -838,31 +964,7 @@ hb_buffer_add_utf8 (hb_buffer_t  *buffer,
                    unsigned int  item_offset,
                    int           item_length)
 {
-#define UTF_NEXT(S, E, U)      hb_utf8_next (S, E, &(U))
-  ADD_UTF (uint8_t);
-#undef UTF_NEXT
-}
-
-static inline const uint16_t *
-hb_utf16_next (const uint16_t *text,
-              const uint16_t *end,
-              hb_codepoint_t *unicode)
-{
-  uint16_t c = *text++;
-
-  if (unlikely (c >= 0xd800 && c < 0xdc00)) {
-    /* high surrogate */
-    uint16_t l;
-    if (text < end && ((l = *text), likely (l >= 0xdc00 && l < 0xe000))) {
-      /* low surrogate */
-      *unicode = ((hb_codepoint_t) ((c) - 0xd800) * 0x400 + (l) - 0xdc00 + 0x10000);
-       text++;
-    } else
-      *unicode = -1;
-  } else
-    *unicode = c;
-
-  return text;
+  hb_buffer_add_utf (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
 }
 
 void
@@ -872,9 +974,7 @@ hb_buffer_add_utf16 (hb_buffer_t    *buffer,
                     unsigned int    item_offset,
                     int            item_length)
 {
-#define UTF_NEXT(S, E, U)      hb_utf16_next (S, E, &(U))
-  ADD_UTF (uint16_t);
-#undef UTF_NEXT
+  hb_buffer_add_utf (buffer, text, text_length, item_offset, item_length);
 }
 
 void
@@ -884,9 +984,7 @@ hb_buffer_add_utf32 (hb_buffer_t    *buffer,
                     unsigned int    item_offset,
                     int             item_length)
 {
-#define UTF_NEXT(S, E, U)      ((U) = *(S), (S)+1)
-  ADD_UTF (uint32_t);
-#undef UTF_NEXT
+  hb_buffer_add_utf (buffer, text, text_length, item_offset, item_length);
 }
 
 
@@ -949,7 +1047,7 @@ void
 hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
 {
   assert (buffer->have_positions);
-  /* XXX assert (buffer->have_glyphs); */
+  assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
 
   bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
 
@@ -966,3 +1064,231 @@ hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
     }
   normalize_glyphs_cluster (buffer, start, end, backward);
 }
+
+
+/*
+ * Serialize
+ */
+
+static const char *serialize_formats[] = {
+  "text",
+  "json",
+  NULL
+};
+
+const char **
+hb_buffer_serialize_list_formats (void)
+{
+  return serialize_formats;
+}
+
+hb_buffer_serialize_format_t
+hb_buffer_serialize_format_from_string (const char *str, int len)
+{
+  /* Upper-case it. */
+  return (hb_buffer_serialize_format_t) (hb_tag_from_string (str, len) & ~0x20202020);
+}
+
+const char *
+hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format)
+{
+  switch (format)
+  {
+    case HB_BUFFER_SERIALIZE_FORMAT_TEXT:      return serialize_formats[0];
+    case HB_BUFFER_SERIALIZE_FORMAT_JSON:      return serialize_formats[1];
+    default:
+    case HB_BUFFER_SERIALIZE_FORMAT_INVALID:   return NULL;
+  }
+}
+
+static unsigned int
+_hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
+                                 unsigned int start,
+                                 unsigned int end,
+                                 char *buf,
+                                 unsigned int buf_size,
+                                 unsigned int *buf_consumed,
+                                 hb_font_t *font,
+                                 hb_buffer_serialize_flags_t flags)
+{
+  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
+  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
+
+  *buf_consumed = 0;
+  for (unsigned int i = start; i < end; i++)
+  {
+    char b[1024];
+    char *p = b;
+
+    /* In the following code, we know b is large enough that no overflow can happen. */
+
+#define APPEND(s) HB_STMT_START { strcpy (p, s); p += strlen (s); } HB_STMT_END
+
+    if (i)
+      *p++ = ',';
+
+    *p++ = '{';
+
+    APPEND ("\"g\":");
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
+    {
+      char g[128];
+      hb_font_glyph_to_string (font, info[i].codepoint, g, sizeof (g));
+      *p++ = '"';
+      for (char *q = g; *q; q++) {
+        if (*q == '"')
+         *p++ = '\\';
+       *p++ = *q;
+      }
+      *p++ = '"';
+    }
+    else
+      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint);
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
+      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"cl\":%u", info[i].cluster);
+    }
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
+    {
+      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"dx\":%d,\"dy\":%d",
+                    pos[i].x_offset, pos[i].y_offset);
+      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
+                    pos[i].x_advance, pos[i].y_advance);
+    }
+
+    *p++ = '}';
+
+    if (buf_size > (p - b))
+    {
+      unsigned int l = p - b;
+      memcpy (buf, b, l);
+      buf += l;
+      buf_size -= l;
+      *buf_consumed += l;
+      *buf = '\0';
+    } else
+      return i - start;
+  }
+
+  return end - start;
+}
+
+static unsigned int
+_hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
+                                 unsigned int start,
+                                 unsigned int end,
+                                 char *buf,
+                                 unsigned int buf_size,
+                                 unsigned int *buf_consumed,
+                                 hb_font_t *font,
+                                 hb_buffer_serialize_flags_t flags)
+{
+  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
+  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
+  hb_direction_t direction = hb_buffer_get_direction (buffer);
+
+  *buf_consumed = 0;
+  for (unsigned int i = start; i < end; i++)
+  {
+    char b[1024];
+    char *p = b;
+
+    /* In the following code, we know b is large enough that no overflow can happen. */
+
+    if (i)
+      *p++ = '|';
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
+    {
+      hb_font_glyph_to_string (font, info[i].codepoint, p, 128);
+      p += strlen (p);
+    }
+    else
+      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint);
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
+      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "=%u", info[i].cluster);
+    }
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
+    {
+      if (pos[i].x_offset || pos[i].y_offset)
+       p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "@%d,%d", pos[i].x_offset, pos[i].y_offset);
+
+      *p++ = '+';
+      if (HB_DIRECTION_IS_HORIZONTAL (direction) || pos[i].x_advance)
+       p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%d", pos[i].x_advance);
+      if (HB_DIRECTION_IS_VERTICAL (direction) || pos->y_advance)
+       p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance);
+    }
+
+    if (buf_size > (p - b))
+    {
+      unsigned int l = p - b;
+      memcpy (buf, b, l);
+      buf += l;
+      buf_size -= l;
+      *buf_consumed += l;
+      *buf = '\0';
+    } else
+      return i - start;
+  }
+
+  return end - start;
+}
+
+/* Returns number of items, starting at start, that were serialized. */
+unsigned int
+hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
+                           unsigned int start,
+                           unsigned int end,
+                           char *buf,
+                           unsigned int buf_size,
+                           unsigned int *buf_consumed,
+                           hb_font_t *font, /* May be NULL */
+                           hb_buffer_serialize_format_t format,
+                           hb_buffer_serialize_flags_t flags)
+{
+  assert (start <= end && end <= buffer->len);
+
+  *buf_consumed = 0;
+
+  assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
+         buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
+
+  if (unlikely (start == end))
+    return 0;
+
+  if (!font)
+    font = hb_font_get_empty ();
+
+  switch (format)
+  {
+    case HB_BUFFER_SERIALIZE_FORMAT_TEXT:
+      return _hb_buffer_serialize_glyphs_text (buffer, start, end,
+                                              buf, buf_size, buf_consumed,
+                                              font, flags);
+
+    case HB_BUFFER_SERIALIZE_FORMAT_JSON:
+      return _hb_buffer_serialize_glyphs_json (buffer, start, end,
+                                              buf, buf_size, buf_consumed,
+                                              font, flags);
+
+    default:
+    case HB_BUFFER_SERIALIZE_FORMAT_INVALID:
+      return 0;
+
+  }
+}
+
+hb_bool_t
+hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
+                             const char *buf,
+                             unsigned int buf_len,
+                             unsigned int *buf_consumed,
+                             hb_font_t *font, /* May be NULL */
+                             hb_buffer_serialize_format_t format)
+{
+  return false;
+}
index aebf482..5386e36 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright © 1998-2004  David Turner and Werner Lemberg
  * Copyright © 2004,2007,2009  Red Hat, Inc.
- * Copyright © 2011  Google, Inc.
+ * Copyright © 2011,2012  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
 
 #include "hb-common.h"
 #include "hb-unicode.h"
+#include "hb-font.h"
 
 HB_BEGIN_DECLS
 
 
-typedef struct hb_buffer_t hb_buffer_t;
-
 typedef struct hb_glyph_info_t {
   hb_codepoint_t codepoint;
   hb_mask_t      mask;
@@ -63,6 +62,36 @@ typedef struct hb_glyph_position_t {
 } hb_glyph_position_t;
 
 
+typedef struct hb_segment_properties_t {
+  hb_direction_t  direction;
+  hb_script_t     script;
+  hb_language_t   language;
+  /*< private >*/
+  void           *reserved1;
+  void           *reserved2;
+} hb_segment_properties_t;
+
+#define HB_SEGMENT_PROPERTIES_DEFAULT {HB_DIRECTION_INVALID, \
+                                      HB_SCRIPT_INVALID, \
+                                      HB_LANGUAGE_INVALID, \
+                                      NULL, \
+                                      NULL}
+
+hb_bool_t
+hb_segment_properties_equal (const hb_segment_properties_t *a,
+                            const hb_segment_properties_t *b);
+
+unsigned int
+hb_segment_properties_hash (const hb_segment_properties_t *p);
+
+
+
+/*
+ * hb_buffer_t
+ */
+
+typedef struct hb_buffer_t hb_buffer_t;
+
 hb_buffer_t *
 hb_buffer_create (void);
 
@@ -87,6 +116,20 @@ hb_buffer_get_user_data (hb_buffer_t        *buffer,
                         hb_user_data_key_t *key);
 
 
+typedef enum {
+  HB_BUFFER_CONTENT_TYPE_INVALID = 0,
+  HB_BUFFER_CONTENT_TYPE_UNICODE,
+  HB_BUFFER_CONTENT_TYPE_GLYPHS
+} hb_buffer_content_type_t;
+
+void
+hb_buffer_set_content_type (hb_buffer_t              *buffer,
+                           hb_buffer_content_type_t  content_type);
+
+hb_buffer_content_type_t
+hb_buffer_get_content_type (hb_buffer_t *buffer);
+
+
 void
 hb_buffer_set_unicode_funcs (hb_buffer_t        *buffer,
                             hb_unicode_funcs_t *unicode_funcs);
@@ -112,15 +155,46 @@ void
 hb_buffer_set_language (hb_buffer_t   *buffer,
                        hb_language_t  language);
 
+
 hb_language_t
 hb_buffer_get_language (hb_buffer_t *buffer);
 
+void
+hb_buffer_set_segment_properties (hb_buffer_t *buffer,
+                                 const hb_segment_properties_t *props);
+
+void
+hb_buffer_get_segment_properties (hb_buffer_t *buffer,
+                                 hb_segment_properties_t *props);
+
+void
+hb_buffer_guess_segment_properties (hb_buffer_t *buffer);
+
+
+typedef enum {
+  HB_BUFFER_FLAGS_DEFAULT                      = 0x00000000,
+  HB_BUFFER_FLAG_BOT                           = 0x00000001, /* Beginning-of-text */
+  HB_BUFFER_FLAG_EOT                           = 0x00000002, /* End-of-text */
+  HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES   = 0x00000004
+} hb_buffer_flags_t;
+
+void
+hb_buffer_set_flags (hb_buffer_t       *buffer,
+                    hb_buffer_flags_t  flags);
+
+hb_buffer_flags_t
+hb_buffer_get_flags (hb_buffer_t *buffer);
+
 
 /* Resets the buffer.  Afterwards it's as if it was just created,
  * except that it has a larger buffer allocated perhaps... */
 void
 hb_buffer_reset (hb_buffer_t *buffer);
 
+/* Like reset, but does NOT clear unicode_funcs. */
+void
+hb_buffer_clear_contents (hb_buffer_t *buffer);
+
 /* Returns false if allocation failed */
 hb_bool_t
 hb_buffer_pre_allocate (hb_buffer_t  *buffer,
@@ -137,16 +211,12 @@ hb_buffer_reverse (hb_buffer_t *buffer);
 void
 hb_buffer_reverse_clusters (hb_buffer_t *buffer);
 
-void
-hb_buffer_guess_properties (hb_buffer_t *buffer);
-
 
 /* Filling the buffer in */
 
 void
 hb_buffer_add (hb_buffer_t    *buffer,
               hb_codepoint_t  codepoint,
-              hb_mask_t       mask,
               unsigned int    cluster);
 
 void
@@ -199,11 +269,53 @@ hb_buffer_get_glyph_positions (hb_buffer_t  *buffer,
 void
 hb_buffer_normalize_glyphs (hb_buffer_t *buffer);
 
+
 /*
- * NOT IMPLEMENTED
- void
- hb_buffer_normalize_characters (hb_buffer_t *buffer);
-*/
+ * Serialize
+ */
+
+typedef enum {
+  HB_BUFFER_SERIALIZE_FLAGS_DEFAULT            = 0x00000000,
+  HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS         = 0x00000001,
+  HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS                = 0x00000002,
+  HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES      = 0x00000004
+} hb_buffer_serialize_flags_t;
+
+typedef enum {
+  HB_BUFFER_SERIALIZE_FORMAT_TEXT      = HB_TAG('T','E','X','T'),
+  HB_BUFFER_SERIALIZE_FORMAT_JSON      = HB_TAG('J','S','O','N'),
+  HB_BUFFER_SERIALIZE_FORMAT_INVALID   = HB_TAG_NONE
+} hb_buffer_serialize_format_t;
+
+/* len=-1 means str is NUL-terminated. */
+hb_buffer_serialize_format_t
+hb_buffer_serialize_format_from_string (const char *str, int len);
+
+const char *
+hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format);
+
+const char **
+hb_buffer_serialize_list_formats (void);
+
+/* Returns number of items, starting at start, that were serialized. */
+unsigned int
+hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
+                           unsigned int start,
+                           unsigned int end,
+                           char *buf,
+                           unsigned int buf_size,
+                           unsigned int *buf_consumed,
+                           hb_font_t *font, /* May be NULL */
+                           hb_buffer_serialize_format_t format,
+                           hb_buffer_serialize_flags_t flags);
+
+hb_bool_t
+hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
+                             const char *buf,
+                             unsigned int buf_len,
+                             unsigned int *buf_consumed,
+                             hb_font_t *font, /* May be NULL */
+                             hb_buffer_serialize_format_t format);
 
 
 HB_END_DECLS
index 1301ab2..9422555 100644 (file)
@@ -58,6 +58,15 @@ hb_tag_from_string (const char *s, int len)
   return HB_TAG_CHAR4 (tag);
 }
 
+void
+hb_tag_to_string (hb_tag_t tag, char *buf)
+{
+  buf[0] = (char) (uint8_t) (tag >> 24);
+  buf[1] = (char) (uint8_t) (tag >> 16);
+  buf[2] = (char) (uint8_t) (tag >>  8);
+  buf[3] = (char) (uint8_t) (tag >>  0);
+}
+
 
 /* hb_direction_t */
 
@@ -354,8 +363,7 @@ bool
 hb_user_data_array_t::set (hb_user_data_key_t *key,
                           void *              data,
                           hb_destroy_func_t   destroy,
-                          hb_bool_t           replace,
-                          hb_mutex_t         &lock)
+                          hb_bool_t           replace)
 {
   if (!key)
     return false;
@@ -373,20 +381,13 @@ hb_user_data_array_t::set (hb_user_data_key_t *key,
 }
 
 void *
-hb_user_data_array_t::get (hb_user_data_key_t *key,
-                          hb_mutex_t         &lock)
+hb_user_data_array_t::get (hb_user_data_key_t *key)
 {
   hb_user_data_item_t item = {NULL };
 
   return items.find (key, &item, lock) ? item.data : NULL;
 }
 
-void
-hb_user_data_array_t::finish (hb_mutex_t &lock)
-{
-  items.finish (lock);
-}
-
 
 /* hb_version */
 
index 920bd32..cc221d3 100644 (file)
@@ -95,10 +95,14 @@ typedef uint32_t hb_tag_t;
 
 #define HB_TAG_NONE HB_TAG(0,0,0,0)
 
-/* len=-1 means str is NUL-terminated */
+/* len=-1 means str is NUL-terminated. */
 hb_tag_t
 hb_tag_from_string (const char *str, int len);
 
+/* buf should have 4 bytes. */
+void
+hb_tag_to_string (hb_tag_t tag, char *buf);
+
 
 /* hb_direction_t */
 
index 4152a39..8f94795 100644 (file)
 #define HB_SHAPER coretext
 #include "hb-shaper-impl-private.hh"
 
-#define GlyphID GlyphID_mac
-#include <ApplicationServices/ApplicationServices.h>
-#undef GlyphID
-
 #include "hb-coretext.h"
 
 
@@ -95,6 +91,14 @@ _hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data)
   free (data);
 }
 
+CGFontRef
+hb_coretext_face_get_cg_font (hb_face_t *face)
+{
+  if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL;
+  hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
+  return face_data->cg_font;
+}
+
 
 /*
  * shaper font data
@@ -153,19 +157,19 @@ _hb_coretext_shaper_shape_plan_data_destroy (hb_coretext_shaper_shape_plan_data_
 {
 }
 
-
-/*
- * shaper
- */
-
 CTFontRef
 hb_coretext_font_get_ct_font (hb_font_t *font)
 {
-  if (unlikely (!hb_coretext_shaper_font_data_ensure (font))) return 0;
+  if (unlikely (!hb_coretext_shaper_font_data_ensure (font))) return NULL;
   hb_coretext_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
   return font_data->ct_font;
 }
 
+
+/*
+ * shaper
+ */
+
 hb_bool_t
 _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
                    hb_font_t          *font,
@@ -212,26 +216,22 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
   CFDictionaryRef attrs = CFDictionaryCreate (kCFAllocatorDefault,
                                               (const void**) &kCTFontAttributeName,
                                               (const void**) &font_data->ct_font,
-                                              1, // count of attributes
+                                              1, /* count of attributes */
                                               &kCFTypeDictionaryKeyCallBacks,
                                               &kCFTypeDictionaryValueCallBacks);
 
-  // TODO: support features
+  /* TODO: support features */
 
-  // Now we can create an attributed string
   CFAttributedStringRef attr_string = CFAttributedStringCreate (kCFAllocatorDefault, string_ref, attrs);
   CFRelease (string_ref);
   CFRelease (attrs);
 
-  // Create the CoreText line from our string, then we're done with it
   CTLineRef line = CTLineCreateWithAttributedString (attr_string);
   CFRelease (attr_string);
 
-  // and finally retrieve the glyph data and store into the gfxTextRun
   CFArrayRef glyph_runs = CTLineGetGlyphRuns (line);
   unsigned int num_runs = CFArrayGetCount (glyph_runs);
 
-  // Iterate through the glyph runs.
   bool success = true;
   buffer->len = 0;
 
@@ -246,11 +246,9 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
 
     buffer->ensure (buffer->len + num_glyphs);
 
-    // retrieve the laid-out glyph data from the CTRun
-
-    // Testing indicates that CTRunGetGlyphsPtr (almost?) always succeeds,
-    // and so copying data to our own buffer with CTRunGetGlyphs will be
-    // extremely rare.
+    /* Testing indicates that CTRunGetGlyphsPtr (almost?) always succeeds,
+     * and so copying data to our own buffer with CTRunGetGlyphs will be
+     * extremely rare. */
 
     unsigned int scratch_size;
     char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
@@ -294,7 +292,7 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
       info->codepoint = glyphs[j];
       info->cluster = string_indices[j];
 
-      // currently, we do all x-positioning by setting the advance, we never use x-offset
+      /* Currently, we do all x-positioning by setting the advance, we never use x-offset. */
       info->mask = advance;
       info->var1.u32 = 0;
       info->var2.u32 = positions[j].y;
@@ -316,12 +314,13 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
     pos->y_offset = info->var2.u32;
   }
 
-  // Fix up clusters so that we never return out-of-order indices;
-  // if core text has reordered glyphs, we'll merge them to the
-  // beginning of the reordered cluster.
-  // This does *not* mean we'll form the same clusters as Uniscribe
-  // or the native OT backend, only that the cluster indices will be
-  // non-decreasing in the output buffer.
+  /* Fix up clusters so that we never return out-of-order indices;
+   * if core text has reordered glyphs, we'll merge them to the
+   * beginning of the reordered cluster.
+   *
+   * This does *not* mean we'll form the same clusters as Uniscribe
+   * or the native OT backend, only that the cluster indices will be
+   * monotonic in the output buffer. */
   if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
     unsigned int prev_cluster = 0;
     for (unsigned int i = 0; i < count; i++) {
@@ -337,7 +336,6 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
       prev_cluster = curr_cluster;
     }
   } else {
-    // For RTL runs, we make them non-increasing instead.
     unsigned int prev_cluster = (unsigned int)-1;
     for (unsigned int i = 0; i < count; i++) {
       unsigned int curr_cluster = buffer->info[i].cluster;
index 0b34203..c4954fa 100644 (file)
@@ -34,6 +34,9 @@
 HB_BEGIN_DECLS
 
 
+CGFontRef
+hb_coretext_face_get_cg_font (hb_face_t *face);
+
 CTFontRef
 hb_coretext_font_get_ct_font (hb_font_t *font);
 
index d7bde09..bdc8a80 100644 (file)
 struct hb_fallback_shaper_face_data_t {};
 
 hb_fallback_shaper_face_data_t *
-_hb_fallback_shaper_face_data_create (hb_face_t *face)
+_hb_fallback_shaper_face_data_create (hb_face_t *face HB_UNUSED)
 {
   return (hb_fallback_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED;
 }
 
 void
-_hb_fallback_shaper_face_data_destroy (hb_fallback_shaper_face_data_t *data)
+_hb_fallback_shaper_face_data_destroy (hb_fallback_shaper_face_data_t *data HB_UNUSED)
 {
 }
 
@@ -53,13 +53,13 @@ _hb_fallback_shaper_face_data_destroy (hb_fallback_shaper_face_data_t *data)
 struct hb_fallback_shaper_font_data_t {};
 
 hb_fallback_shaper_font_data_t *
-_hb_fallback_shaper_font_data_create (hb_font_t *font)
+_hb_fallback_shaper_font_data_create (hb_font_t *font HB_UNUSED)
 {
   return (hb_fallback_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED;
 }
 
 void
-_hb_fallback_shaper_font_data_destroy (hb_fallback_shaper_font_data_t *data)
+_hb_fallback_shaper_font_data_destroy (hb_fallback_shaper_font_data_t *data HB_UNUSED)
 {
 }
 
@@ -89,7 +89,7 @@ _hb_fallback_shaper_shape_plan_data_destroy (hb_fallback_shaper_shape_plan_data_
  */
 
 hb_bool_t
-_hb_fallback_shape (hb_shape_plan_t    *shape_plan,
+_hb_fallback_shape (hb_shape_plan_t    *shape_plan HB_UNUSED,
                    hb_font_t          *font,
                    hb_buffer_t        *buffer,
                    const hb_feature_t *features HB_UNUSED,
@@ -98,14 +98,14 @@ _hb_fallback_shape (hb_shape_plan_t    *shape_plan,
   hb_codepoint_t space;
   font->get_glyph (' ', 0, &space);
 
-  buffer->guess_properties ();
+  buffer->guess_segment_properties ();
   buffer->clear_positions ();
 
   unsigned int count = buffer->len;
 
   for (unsigned int i = 0; i < count; i++)
   {
-    if (buffer->unicode->is_zero_width (buffer->info[i].codepoint)) {
+    if (buffer->unicode->is_default_ignorable (buffer->info[i].codepoint)) {
       buffer->info[i].codepoint = space;
       buffer->pos[i].x_advance = 0;
       buffer->pos[i].y_advance = 0;
index b6dafbf..48fbb0e 100644 (file)
@@ -100,6 +100,7 @@ struct hb_face_t {
 
   unsigned int index;
   mutable unsigned int upem;
+  mutable unsigned int num_glyphs;
 
   struct hb_shaper_data_t shaper_data;
 
@@ -130,8 +131,16 @@ struct hb_face_t {
     return upem;
   }
 
+  inline unsigned int get_num_glyphs (void) const
+  {
+    if (unlikely (num_glyphs == (unsigned int) -1))
+      load_num_glyphs ();
+    return num_glyphs;
+  }
+
   private:
   HB_INTERNAL void load_upem (void) const;
+  HB_INTERNAL void load_num_glyphs (void) const;
 };
 
 #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
index 922dee3..b59fdeb 100644 (file)
@@ -34,6 +34,7 @@
 #include "hb-blob.h"
 #include "hb-open-file-private.hh"
 #include "hb-ot-head-table.hh"
+#include "hb-ot-maxp-table.hh"
 
 #include "hb-cache-private.hh"
 
@@ -520,6 +521,7 @@ static const hb_face_t _hb_face_nil = {
 
   0,    /* index */
   1000, /* upem */
+  0,    /* num_glyphs */
 
   {
 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
@@ -549,6 +551,7 @@ hb_face_create_for_tables (hb_reference_table_func_t  reference_table_func,
   face->destroy = destroy;
 
   face->upem = 0;
+  face->num_glyphs = (unsigned int) -1;
 
   return face;
 }
@@ -589,10 +592,10 @@ _hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void
   if (tag == HB_TAG_NONE)
     return hb_blob_reference (data->blob);
 
-  const OpenTypeFontFile &ot_file = *Sanitizer<OpenTypeFontFile>::lock_instance (data->blob);
-  const OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
+  const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob);
+  const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
 
-  const OpenTypeTable &table = ot_face.get_table_by_tag (tag);
+  const OT::OpenTypeTable &table = ot_face.get_table_by_tag (tag);
 
   hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, table.offset, table.length);
 
@@ -608,7 +611,7 @@ hb_face_create (hb_blob_t    *blob,
   if (unlikely (!blob || !hb_blob_get_length (blob)))
     return hb_face_get_empty ();
 
-  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (Sanitizer<OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
+  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
 
   if (unlikely (!closure))
     return hb_face_get_empty ();
@@ -736,16 +739,40 @@ hb_face_get_upem (hb_face_t *face)
   return face->get_upem ();
 }
 
-
 void
 hb_face_t::load_upem (void) const
 {
-  hb_blob_t *head_blob = Sanitizer<head>::sanitize (reference_table (HB_OT_TAG_head));
-  const head *head_table = Sanitizer<head>::lock_instance (head_blob);
+  hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (reference_table (HB_OT_TAG_head));
+  const OT::head *head_table = OT::Sanitizer<OT::head>::lock_instance (head_blob);
   upem = head_table->get_upem ();
   hb_blob_destroy (head_blob);
 }
 
+void
+hb_face_set_glyph_count (hb_face_t    *face,
+                        unsigned int  glyph_count)
+{
+  if (hb_object_is_inert (face))
+    return;
+
+  face->num_glyphs = glyph_count;
+}
+
+unsigned int
+hb_face_get_glyph_count (hb_face_t *face)
+{
+  return face->get_num_glyphs ();
+}
+
+void
+hb_face_t::load_num_glyphs (void) const
+{
+  hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>::sanitize (reference_table (HB_OT_TAG_maxp));
+  const OT::maxp *maxp_table = OT::Sanitizer<OT::maxp>::lock_instance (maxp_blob);
+  num_glyphs = maxp_table->get_num_glyphs ();
+  hb_blob_destroy (maxp_blob);
+}
+
 
 /*
  * hb_font_t
index d796856..88d4895 100644 (file)
@@ -105,6 +105,13 @@ hb_face_set_upem (hb_face_t    *face,
 unsigned int
 hb_face_get_upem (hb_face_t *face);
 
+void
+hb_face_set_glyph_count (hb_face_t    *face,
+                        unsigned int  glyph_count);
+
+unsigned int
+hb_face_get_glyph_count (hb_face_t *face);
+
 
 /*
  * hb_font_funcs_t
index 9ac556e..6198185 100644 (file)
@@ -242,7 +242,7 @@ hb_ft_get_glyph_name (hb_font_t *font HB_UNUSED,
   FT_Face ft_face = (FT_Face) font_data;
 
   hb_bool_t ret = !FT_Get_Glyph_Name (ft_face, glyph, name, size);
-  if (!ret)
+  if (!ret || (size && !*name))
     snprintf (name, size, "gid%u", glyph);
 
   return ret;
index 0462758..676e660 100644 (file)
@@ -334,7 +334,7 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
 }
 
 static unsigned int
-hb_glib_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs,
+hb_glib_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs HB_UNUSED,
                                         hb_codepoint_t      u,
                                         hb_codepoint_t     *decomposed,
                                         void               *user_data HB_UNUSED)
index a30c42e..16ef9a4 100644 (file)
@@ -113,7 +113,7 @@ _hb_graphite2_shaper_face_data_create (hb_face_t *face)
     hb_blob_destroy (silf_blob);
 
   data->face = face;
-  data->grface = gr_make_face (data, &hb_graphite2_get_table, gr_face_default);
+  data->grface = gr_make_face (data, &hb_graphite2_get_table, gr_face_preloadAll);
 
   if (unlikely (!data->grface)) {
     free (data);
@@ -141,6 +141,13 @@ _hb_graphite2_shaper_face_data_destroy (hb_graphite2_shaper_face_data_t *data)
   free (data);
 }
 
+gr_face *
+hb_graphite2_face_get_gr_face (hb_face_t *face)
+{
+  if (unlikely (!hb_graphite2_shaper_face_data_ensure (face))) return NULL;
+  return HB_SHAPER_DATA_GET (face)->grface;
+}
+
 
 /*
  * shaper font data
@@ -168,6 +175,13 @@ _hb_graphite2_shaper_font_data_destroy (hb_graphite2_shaper_font_data_t *data)
   gr_font_destroy (data);
 }
 
+gr_font *
+hb_graphite2_font_get_gr_font (hb_font_t *font)
+{
+  if (unlikely (!hb_graphite2_shaper_font_data_ensure (font))) return NULL;
+  return HB_SHAPER_DATA_GET (font);
+}
+
 
 /*
  * shaper shape_plan data
@@ -211,11 +225,6 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   gr_face *grface = HB_SHAPER_DATA_GET (face)->grface;
   gr_font *grfont = HB_SHAPER_DATA_GET (font);
 
-  unsigned int charlen;
-  hb_glyph_info_t *bufferi = hb_buffer_get_glyph_infos (buffer, &charlen);
-
-  int success = 0;
-
   const char *lang = hb_language_to_string (hb_buffer_get_language (buffer));
   const char *lang_end = strchr (lang, '-');
   int lang_len = lang_end ? lang_end - lang : -1;
@@ -229,24 +238,23 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
     features++;
   }
 
-  /* TODO Use scratch buffer for these. */
-  hb_codepoint_t *gids = NULL, *pg;
-  hb_graphite2_cluster_t *clusters = NULL;
   gr_segment *seg = NULL;
-  uint32_t *text = NULL;
   const gr_slot *is;
   unsigned int ci = 0, ic = 0;
   float curradvx = 0., curradvy = 0.;
-  unsigned int glyphlen = 0;
-  unsigned int *p;
 
-  text = (uint32_t *) malloc ((charlen + 1) * sizeof (uint32_t));
-  if (!text) goto dieout;
+  unsigned int scratch_size;
+  char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
+
+#define ALLOCATE_ARRAY(Type, name, len) \
+  Type *name = (Type *) scratch; \
+  scratch += (len) * sizeof ((name)[0]); \
+  scratch_size -= (len) * sizeof ((name)[0]);
 
-  p = text;
-  for (unsigned int i = 0; i < charlen; ++i)
-    *p++ = bufferi++->codepoint;
-  *p = 0;
+  ALLOCATE_ARRAY (uint32_t, chars, buffer->len);
+
+  for (unsigned int i = 0; i < buffer->len; ++i)
+    chars[i] = buffer->info[i].codepoint;
 
   hb_tag_t script_tag[2];
   hb_ot_tags_from_script (hb_buffer_get_script (buffer), &script_tag[0], &script_tag[1]);
@@ -254,18 +262,40 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   seg = gr_make_seg (grfont, grface,
                     script_tag[1] == HB_TAG_NONE ? script_tag[0] : script_tag[1],
                     feats,
-                    gr_utf32, text, charlen,
+                    gr_utf32, chars, buffer->len,
                     2 | (hb_buffer_get_direction (buffer) == HB_DIRECTION_RTL ? 1 : 0));
-  if (!seg) goto dieout;
 
-  glyphlen = gr_seg_n_slots (seg);
-  clusters = (hb_graphite2_cluster_t *) calloc (charlen, sizeof (hb_graphite2_cluster_t));
-  if (!glyphlen || !clusters) goto dieout;
+  if (unlikely (!seg)) {
+    if (feats) gr_featureval_destroy (feats);
+    return false;
+  }
+
+  unsigned int glyph_count = gr_seg_n_slots (seg);
+  if (unlikely (!glyph_count)) {
+    if (feats) gr_featureval_destroy (feats);
+    gr_seg_destroy (seg);
+    return false;
+  }
+
+  scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
+  while ((sizeof (hb_graphite2_cluster_t) * buffer->len +
+         sizeof (hb_codepoint_t) * glyph_count) > scratch_size)
+  {
+    buffer->ensure (buffer->allocated * 2);
+    if (unlikely (buffer->in_error)) {
+      if (feats) gr_featureval_destroy (feats);
+      gr_seg_destroy (seg);
+      return false;
+    }
+    scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
+  }
+
+  ALLOCATE_ARRAY (hb_graphite2_cluster_t, clusters, buffer->len);
+  ALLOCATE_ARRAY (hb_codepoint_t, gids, glyph_count);
 
-  gids = (hb_codepoint_t *) malloc (glyphlen * sizeof (hb_codepoint_t));
-  if (!gids) goto dieout;
+  memset (clusters, 0, sizeof (clusters[0]) * buffer->len);
 
-  pg = gids;
+  hb_codepoint_t *pg = gids;
   for (is = gr_seg_first_slot (seg), ic = 0; is; is = gr_slot_next_in_segment (is), ic++)
   {
     unsigned int before = gr_slot_before (is);
@@ -295,10 +325,18 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   }
   ci++;
 
-  buffer->clear_output ();
+  //buffer->clear_output ();
   for (unsigned int i = 0; i < ci; ++i)
-    buffer->replace_glyphs (clusters[i].num_chars, clusters[i].num_glyphs, gids + clusters[i].base_glyph);
-  buffer->swap_buffers ();
+  {
+    for (unsigned int j = 0; j < clusters[i].num_glyphs; ++j)
+    {
+      hb_glyph_info_t *info = &buffer->info[clusters[i].base_glyph + j];
+      info->codepoint = gids[clusters[i].base_glyph + j];
+      info->cluster = gr_cinfo_base(gr_seg_cinfo(seg, clusters[i].base_char));
+    }
+  }
+  buffer->len = glyph_count;
+  //buffer->swap_buffers ();
 
   if (HB_DIRECTION_IS_BACKWARD(buffer->props.direction))
     curradvx = gr_seg_advance_X(seg);
@@ -325,13 +363,8 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
     hb_buffer_reverse_clusters (buffer);
 
-  success = 1;
-
-dieout:
   if (feats) gr_featureval_destroy (feats);
-  if (gids) free (gids);
-  if (clusters) free (clusters);
-  if (seg) gr_seg_destroy (seg);
-  if (text) free (text);
-  return success;
+  gr_seg_destroy (seg);
+
+  return true;
 }
index 8122495..bea68f9 100644 (file)
@@ -33,7 +33,13 @@ HB_BEGIN_DECLS
 
 #define HB_GRAPHITE2_TAG_SILF HB_TAG('S','i','l','f')
 
-/* TODO add gr_font/face etc getters and other glue API */
+
+gr_face *
+hb_graphite2_face_get_gr_face (hb_face_t *face);
+
+gr_font *
+hb_graphite2_font_get_gr_font (hb_font_t *font);
+
 
 HB_END_DECLS
 
diff --git a/src/hb-icu-le.cc b/src/hb-icu-le.cc
new file mode 100644 (file)
index 0000000..c05d330
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Copyright © 2012  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#define HB_SHAPER icu_le
+#define hb_icu_le_shaper_font_data_t PortableFontInstance
+#include "hb-shaper-impl-private.hh"
+
+#include "hb-icu-le/PortableFontInstance.h"
+
+#include "layout/loengine.h"
+#include "unicode/unistr.h"
+
+#include "hb-icu.h"
+
+
+/*
+ * shaper face data
+ */
+
+struct hb_icu_le_shaper_face_data_t {};
+
+hb_icu_le_shaper_face_data_t *
+_hb_icu_le_shaper_face_data_create (hb_face_t *face HB_UNUSED)
+{
+  return (hb_icu_le_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED;
+}
+
+void
+_hb_icu_le_shaper_face_data_destroy (hb_icu_le_shaper_face_data_t *data HB_UNUSED)
+{
+}
+
+
+/*
+ * shaper font data
+ */
+
+hb_icu_le_shaper_font_data_t *
+_hb_icu_le_shaper_font_data_create (hb_font_t *font)
+{
+  LEErrorCode status = LE_NO_ERROR;
+  hb_icu_le_shaper_font_data_t *data = new PortableFontInstance (font->face,
+                                                                font->x_scale,
+                                                                font->y_scale,
+                                                                status);
+  if (status != LE_NO_ERROR) {
+    delete (data);
+    return NULL;
+  }
+
+  return data;
+}
+
+void
+_hb_icu_le_shaper_font_data_destroy (hb_icu_le_shaper_font_data_t *data)
+{
+  delete (data);
+}
+
+
+/*
+ * shaper shape_plan data
+ */
+
+struct hb_icu_le_shaper_shape_plan_data_t {};
+
+hb_icu_le_shaper_shape_plan_data_t *
+_hb_icu_le_shaper_shape_plan_data_create (hb_shape_plan_t    *shape_plan HB_UNUSED,
+                                         const hb_feature_t *user_features,
+                                         unsigned int        num_user_features)
+{
+  return (hb_icu_le_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
+}
+
+void
+_hb_icu_le_shaper_shape_plan_data_destroy (hb_icu_le_shaper_shape_plan_data_t *data)
+{
+}
+
+
+/*
+ * shaper
+ */
+
+hb_bool_t
+_hb_icu_le_shape (hb_shape_plan_t    *shape_plan,
+                 hb_font_t          *font,
+                 hb_buffer_t        *buffer,
+                 const hb_feature_t *features,
+                 unsigned int        num_features)
+{
+  LEFontInstance *font_instance = HB_SHAPER_DATA_GET (font);
+  le_int32 script_code = hb_icu_script_from_script (shape_plan->props.script);
+  le_int32 language_code = -1 /* TODO */;
+  le_int32 typography_flags = 3; /* Needed for ligatures and kerning */
+  LEErrorCode status = LE_NO_ERROR;
+  le_engine *le = le_create ((const le_font *) font_instance,
+                            script_code,
+                            language_code,
+                            typography_flags,
+                            &status);
+  if (status != LE_NO_ERROR)
+  { le_close (le); return false; }
+
+retry:
+
+  unsigned int scratch_size;
+  char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
+
+#define ALLOCATE_ARRAY(Type, name, len) \
+  Type *name = (Type *) scratch; \
+  scratch += (len) * sizeof ((name)[0]); \
+  scratch_size -= (len) * sizeof ((name)[0]);
+
+  ALLOCATE_ARRAY (LEUnicode, chars, buffer->len);
+  ALLOCATE_ARRAY (unsigned int, clusters, buffer->len);
+
+  /* XXX Use UTF-16 decoder! */
+  for (unsigned int i = 0; i < buffer->len; i++) {
+    chars[i] = buffer->info[i].codepoint;
+    clusters[i] = buffer->info[i].cluster;
+  }
+
+  unsigned int glyph_count = le_layoutChars (le,
+                                            chars,
+                                            0,
+                                            buffer->len,
+                                            buffer->len,
+                                            HB_DIRECTION_IS_BACKWARD (buffer->props.direction),
+                                            0., 0.,
+                                            &status);
+  if (status != LE_NO_ERROR)
+  { le_close (le); return false; }
+
+  unsigned int num_glyphs = scratch_size / (sizeof (LEGlyphID) +
+                                           sizeof (le_int32) +
+                                           sizeof (float) * 2);
+
+  if (unlikely (glyph_count >= num_glyphs || glyph_count > buffer->allocated)) {
+    buffer->ensure (buffer->allocated * 2);
+    if (buffer->in_error)
+    { le_close (le); return false; }
+    goto retry;
+  }
+
+  ALLOCATE_ARRAY (LEGlyphID, glyphs, glyph_count);
+  ALLOCATE_ARRAY (le_int32, indices, glyph_count);
+  ALLOCATE_ARRAY (float, positions, glyph_count * 2 + 2);
+
+  le_getGlyphs (le, glyphs, &status);
+  le_getCharIndices (le, indices, &status);
+  le_getGlyphPositions (le, positions, &status);
+
+#undef ALLOCATE_ARRAY
+
+  /* Ok, we've got everything we need, now compose output buffer,
+   * very, *very*, carefully! */
+
+  unsigned int j = 0;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < glyph_count; i++)
+  {
+    if (glyphs[i] >= 0xFFFE)
+       continue;
+
+    info[j].codepoint = glyphs[i];
+    info[j].cluster = clusters[indices[i]];
+
+    /* icu-le doesn't seem to have separate advance values. */
+    info[j].mask = positions[2 * i + 2] - positions[2 * i];
+    info[j].var1.u32 = 0;
+    info[j].var2.u32 = -positions[2 * i + 1];
+
+    j++;
+  }
+  buffer->len = j;
+
+  buffer->clear_positions ();
+
+  for (unsigned int i = 0; i < buffer->len; i++) {
+    hb_glyph_info_t *info = &buffer->info[i];
+    hb_glyph_position_t *pos = &buffer->pos[i];
+
+    /* TODO vertical */
+    pos->x_advance = info->mask;
+    pos->x_offset = info->var1.u32;
+    pos->y_offset = info->var2.u32;
+  }
+
+  le_close (le);
+  return true;
+}
diff --git a/src/hb-icu-le/COPYING b/src/hb-icu-le/COPYING
new file mode 100644 (file)
index 0000000..8080968
--- /dev/null
@@ -0,0 +1,2 @@
+The contents of this directory are licensed under the ICU license.
+See file license.html.
diff --git a/src/hb-icu-le/FontTableCache.cpp b/src/hb-icu-le/FontTableCache.cpp
new file mode 100644 (file)
index 0000000..93db6cc
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ **********************************************************************
+ *   Copyright (C) 2003-2008, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ **********************************************************************
+ */
+
+#include "layout/LETypes.h"
+
+#include "letest.h"
+#include "FontTableCache.h"
+
+#define TABLE_CACHE_INIT 5
+#define TABLE_CACHE_GROW 5
+
+struct FontTableCacheEntry
+{
+    LETag tag;
+    hb_blob_t *blob;
+};
+
+FontTableCache::FontTableCache()
+    : fTableCacheCurr(0), fTableCacheSize(TABLE_CACHE_INIT)
+{
+    fTableCache = NEW_ARRAY(FontTableCacheEntry, fTableCacheSize);
+
+    if (fTableCache == NULL) {
+        fTableCacheSize = 0;
+        return;
+    }
+
+    for (int i = 0; i < fTableCacheSize; i += 1) {
+        fTableCache[i].tag  = 0;
+        fTableCache[i].blob = NULL;
+    }
+}
+
+FontTableCache::~FontTableCache()
+{
+    for (int i = fTableCacheCurr - 1; i >= 0; i -= 1) {
+        hb_blob_destroy(fTableCache[i].blob);
+
+        fTableCache[i].tag  = 0;
+        fTableCache[i].blob = NULL;
+    }
+
+    fTableCacheCurr = 0;
+
+    DELETE_ARRAY(fTableCache);
+}
+
+void FontTableCache::freeFontTable(hb_blob_t *blob) const
+{
+    hb_blob_destroy(blob);
+}
+
+const void *FontTableCache::find(LETag tableTag) const
+{
+    for (int i = 0; i < fTableCacheCurr; i += 1) {
+        if (fTableCache[i].tag == tableTag) {
+            return hb_blob_get_data(fTableCache[i].blob, NULL);
+        }
+    }
+
+    hb_blob_t *blob = readFontTable(tableTag);
+
+    ((FontTableCache *) this)->add(tableTag, blob);
+
+    return hb_blob_get_data (blob, NULL);
+}
+
+void FontTableCache::add(LETag tableTag, hb_blob_t *blob)
+{
+    if (fTableCacheCurr >= fTableCacheSize) {
+        le_int32 newSize = fTableCacheSize + TABLE_CACHE_GROW;
+
+        fTableCache = (FontTableCacheEntry *) GROW_ARRAY(fTableCache, newSize);
+
+        for (le_int32 i = fTableCacheSize; i < newSize; i += 1) {
+            fTableCache[i].tag  = 0;
+            fTableCache[i].blob = NULL;
+        }
+
+        fTableCacheSize = newSize;
+    }
+
+    fTableCache[fTableCacheCurr].tag  = tableTag;
+    fTableCache[fTableCacheCurr].blob = blob;
+
+    fTableCacheCurr += 1;
+}
diff --git a/src/hb-icu-le/FontTableCache.h b/src/hb-icu-le/FontTableCache.h
new file mode 100644 (file)
index 0000000..f956f88
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ **********************************************************************
+ *   Copyright (C) 2003-2008, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ **********************************************************************
+ */
+
+#ifndef __FONTTABLECACHE_H
+
+#define __FONTTABLECACHE_H
+
+#define HB_H_IN
+#include <hb-blob.h>
+
+#include "layout/LETypes.h"
+#include "letest.h"
+
+HB_BEGIN_VISIBILITY
+
+U_NAMESPACE_USE
+
+struct FontTableCacheEntry;
+
+class FontTableCache
+{
+public:
+    FontTableCache();
+
+    virtual ~FontTableCache();
+
+    const void *find(LETag tableTag) const;
+
+protected:
+    virtual hb_blob_t *readFontTable(LETag tableTag) const = 0;
+    virtual void freeFontTable(hb_blob_t *blob) const;
+
+private:
+
+    void add(LETag tableTag, hb_blob_t *blob);
+
+    FontTableCacheEntry *fTableCache;
+    le_int32 fTableCacheCurr;
+    le_int32 fTableCacheSize;
+};
+
+HB_END_VISIBILITY
+
+#endif
diff --git a/src/hb-icu-le/Makefile.am b/src/hb-icu-le/Makefile.am
new file mode 100644 (file)
index 0000000..e3b103c
--- /dev/null
@@ -0,0 +1,25 @@
+## Process this file with automake to produce Makefile.in
+
+noinst_LTLIBRARIES = libhb-icu-le.la
+
+
+libhb_icu_le_la_SOURCES = \
+       FontTableCache.cpp \
+       FontTableCache.h \
+       PortableFontInstance.cpp \
+       PortableFontInstance.h \
+       cmaps.cpp \
+       cmaps.h \
+       letest.h \
+       sfnt.h
+libhb_icu_le_la_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/src \
+       -I$(top_builddir)/src \
+       $(ICU_LE_CFLAGS)
+libhb_icu_le_la_LIBADD = \
+       $(ICU_LE_LIBS)
+
+EXTRA_DIST = README license.html COPYING
+
+-include $(top_srcdir)/git.mk
diff --git a/src/hb-icu-le/Makefile.in b/src/hb-icu-le/Makefile.in
new file mode 100644 (file)
index 0000000..0f59f13
--- /dev/null
@@ -0,0 +1,593 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/hb-icu-le
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       COPYING
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libhb_icu_le_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libhb_icu_le_la_OBJECTS = libhb_icu_le_la-FontTableCache.lo \
+       libhb_icu_le_la-PortableFontInstance.lo \
+       libhb_icu_le_la-cmaps.lo
+libhb_icu_le_la_OBJECTS = $(am_libhb_icu_le_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX   " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD " $@;
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC    " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libhb_icu_le_la_SOURCES)
+DIST_SOURCES = $(libhb_icu_le_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_FT_CFLAGS = @CAIRO_FT_CFLAGS@
+CAIRO_FT_LIBS = @CAIRO_FT_LIBS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CORETEXT_CFLAGS = @CORETEXT_CFLAGS@
+CORETEXT_LIBS = @CORETEXT_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
+GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
+GREP = @GREP@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
+HB_VERSION = @HB_VERSION@
+HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
+HB_VERSION_MICRO = @HB_VERSION_MICRO@
+HB_VERSION_MINOR = @HB_VERSION_MINOR@
+ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_LIBS = @ICU_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UNISCRIBE_CFLAGS = @UNISCRIBE_CFLAGS@
+UNISCRIBE_LIBS = @UNISCRIBE_LIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libhb-icu-le.la
+libhb_icu_le_la_SOURCES = \
+       FontTableCache.cpp \
+       FontTableCache.h \
+       PortableFontInstance.cpp \
+       PortableFontInstance.h \
+       cmaps.cpp \
+       cmaps.h \
+       letest.h \
+       sfnt.h
+
+libhb_icu_le_la_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/src \
+       -I$(top_builddir)/src \
+       $(ICU_LE_CFLAGS)
+
+libhb_icu_le_la_LIBADD = \
+       $(ICU_LE_LIBS)
+
+EXTRA_DIST = README license.html COPYING
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/hb-icu-le/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits src/hb-icu-le/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libhb-icu-le.la: $(libhb_icu_le_la_OBJECTS) $(libhb_icu_le_la_DEPENDENCIES) $(EXTRA_libhb_icu_le_la_DEPENDENCIES) 
+       $(AM_V_CXXLD)$(CXXLINK)  $(libhb_icu_le_la_OBJECTS) $(libhb_icu_le_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_icu_le_la-FontTableCache.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_icu_le_la-PortableFontInstance.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_icu_le_la-cmaps.Plo@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+libhb_icu_le_la-FontTableCache.lo: FontTableCache.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_icu_le_la-FontTableCache.lo -MD -MP -MF $(DEPDIR)/libhb_icu_le_la-FontTableCache.Tpo -c -o libhb_icu_le_la-FontTableCache.lo `test -f 'FontTableCache.cpp' || echo '$(srcdir)/'`FontTableCache.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_icu_le_la-FontTableCache.Tpo $(DEPDIR)/libhb_icu_le_la-FontTableCache.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='FontTableCache.cpp' object='libhb_icu_le_la-FontTableCache.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_icu_le_la-FontTableCache.lo `test -f 'FontTableCache.cpp' || echo '$(srcdir)/'`FontTableCache.cpp
+
+libhb_icu_le_la-PortableFontInstance.lo: PortableFontInstance.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_icu_le_la-PortableFontInstance.lo -MD -MP -MF $(DEPDIR)/libhb_icu_le_la-PortableFontInstance.Tpo -c -o libhb_icu_le_la-PortableFontInstance.lo `test -f 'PortableFontInstance.cpp' || echo '$(srcdir)/'`PortableFontInstance.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_icu_le_la-PortableFontInstance.Tpo $(DEPDIR)/libhb_icu_le_la-PortableFontInstance.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='PortableFontInstance.cpp' object='libhb_icu_le_la-PortableFontInstance.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_icu_le_la-PortableFontInstance.lo `test -f 'PortableFontInstance.cpp' || echo '$(srcdir)/'`PortableFontInstance.cpp
+
+libhb_icu_le_la-cmaps.lo: cmaps.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_icu_le_la-cmaps.lo -MD -MP -MF $(DEPDIR)/libhb_icu_le_la-cmaps.Tpo -c -o libhb_icu_le_la-cmaps.lo `test -f 'cmaps.cpp' || echo '$(srcdir)/'`cmaps.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_icu_le_la-cmaps.Tpo $(DEPDIR)/libhb_icu_le_la-cmaps.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='cmaps.cpp' object='libhb_icu_le_la-cmaps.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_icu_le_la-cmaps.lo `test -f 'cmaps.cpp' || echo '$(srcdir)/'`cmaps.cpp
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/hb-icu-le/PortableFontInstance.cpp b/src/hb-icu-le/PortableFontInstance.cpp
new file mode 100644 (file)
index 0000000..c38e2b1
--- /dev/null
@@ -0,0 +1,268 @@
+/*
+ *******************************************************************************
+ *
+ *   Copyright (C) 1999-2008, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *
+ *******************************************************************************
+ *   file name:  PortableFontInstance.cpp
+ *
+ *   created on: 11/22/1999
+ *   created by: Eric R. Mader
+ */
+
+#include <stdio.h>
+
+#include "layout/LETypes.h"
+#include "layout/LEFontInstance.h"
+#include "layout/LESwaps.h"
+
+#include "PortableFontInstance.h"
+
+#include "letest.h"
+#include "sfnt.h"
+
+#include <string.h>
+
+
+PortableFontInstance::PortableFontInstance(hb_face_t *face, float xScale, float yScale, LEErrorCode &status)
+    : fFace(face), fXScale(xScale), fYScale(yScale), fUnitsPerEM(0), fAscent(0), fDescent(0), fLeading(0),
+      fNAMETable(NULL), fNameCount(0), fNameStringOffset(0), fCMAPMapper(NULL), fHMTXTable(NULL), fNumGlyphs(0), fNumLongHorMetrics(0)
+{
+    if (LE_FAILURE(status)) {
+        return;
+    }
+
+    const LETag hheaTag = LE_HHEA_TABLE_TAG;
+    const HHEATable *hheaTable = NULL;
+
+    fUnitsPerEM = hb_face_get_upem (face);
+
+    hheaTable = (HHEATable *) getFontTable(hheaTag);
+
+    if (hheaTable == NULL) {
+        status = LE_MISSING_FONT_TABLE_ERROR;
+       return;
+    }
+
+    fAscent  = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->ascent));
+    fDescent = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->descent));
+    fLeading = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->lineGap));
+
+    fNumLongHorMetrics = SWAPW(hheaTable->numOfLongHorMetrics);
+
+    fCMAPMapper = findUnicodeMapper();
+
+    if (fCMAPMapper == NULL) {
+        status = LE_MISSING_FONT_TABLE_ERROR;
+       return;
+    }
+}
+
+PortableFontInstance::~PortableFontInstance()
+{
+    if (fCMAPMapper)
+        delete fCMAPMapper;
+}
+
+const void *PortableFontInstance::getFontTable(LETag tableTag) const
+{
+    return FontTableCache::find(tableTag);
+}
+
+hb_blob_t *PortableFontInstance::readFontTable(LETag tableTag) const
+{
+  return hb_face_reference_table(fFace, tableTag);
+}
+
+CMAPMapper *PortableFontInstance::findUnicodeMapper()
+{
+    LETag cmapTag = LE_CMAP_TABLE_TAG;
+    const CMAPTable *cmap = (CMAPTable *) getFontTable(cmapTag);
+
+    if (cmap == NULL) {
+        return NULL;
+    }
+
+    return CMAPMapper::createUnicodeMapper(cmap);
+}
+
+const char *PortableFontInstance::getNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const
+{
+    if (fNAMETable == NULL) {
+        LETag nameTag = LE_NAME_TABLE_TAG;
+        PortableFontInstance *realThis = (PortableFontInstance *) this;
+
+        realThis->fNAMETable = (const NAMETable *) getFontTable(nameTag);
+
+        if (realThis->fNAMETable != NULL) {
+            realThis->fNameCount        = SWAPW(realThis->fNAMETable->count);
+            realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset);
+        }
+    }
+
+    for(le_int32 i = 0; i < fNameCount; i += 1) {
+        const NameRecord *nameRecord = &fNAMETable->nameRecords[i];
+        
+        if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID) == encodingID &&
+            SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) {
+            char *name = ((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset);
+            le_uint16 length = SWAPW(nameRecord->length);
+            char *result = NEW_ARRAY(char, length + 2);
+
+            ARRAY_COPY(result, name, length);
+            result[length] = result[length + 1] = 0;
+
+            return result;
+        }
+    }
+
+    return NULL;
+}
+
+const LEUnicode16 *PortableFontInstance::getUnicodeNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const
+{
+    if (fNAMETable == NULL) {
+        LETag nameTag = LE_NAME_TABLE_TAG;
+        PortableFontInstance *realThis = (PortableFontInstance *) this;
+
+        realThis->fNAMETable = (const NAMETable *) getFontTable(nameTag);
+
+        if (realThis->fNAMETable != NULL) {
+            realThis->fNameCount        = SWAPW(realThis->fNAMETable->count);
+            realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset);
+        }
+    }
+
+    for(le_int32 i = 0; i < fNameCount; i += 1) {
+        const NameRecord *nameRecord = &fNAMETable->nameRecords[i];
+        
+        if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID) == encodingID &&
+            SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) {
+            LEUnicode16 *name = (LEUnicode16 *) (((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset));
+            le_uint16 length = SWAPW(nameRecord->length) / 2;
+            LEUnicode16 *result = NEW_ARRAY(LEUnicode16, length + 2);
+
+            for (le_int32 c = 0; c < length; c += 1) {
+                result[c] = SWAPW(name[c]);
+            }
+
+            result[length] = 0;
+
+            return result;
+        }
+    }
+
+    return NULL;
+}
+
+void PortableFontInstance::deleteNameString(const char *name) const
+{
+    DELETE_ARRAY(name);
+}
+
+void PortableFontInstance::deleteNameString(const LEUnicode16 *name) const
+{
+    DELETE_ARRAY(name);
+}
+
+void PortableFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const
+{
+    TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph);
+
+    if (fHMTXTable == NULL) {
+        LETag maxpTag = LE_MAXP_TABLE_TAG;
+        LETag hmtxTag = LE_HMTX_TABLE_TAG;
+        const MAXPTable *maxpTable = (MAXPTable *) getFontTable(maxpTag);
+        PortableFontInstance *realThis = (PortableFontInstance *) this;
+
+        if (maxpTable != NULL) {
+            realThis->fNumGlyphs = SWAPW(maxpTable->numGlyphs);
+        }
+
+        realThis->fHMTXTable = (const HMTXTable *) getFontTable(hmtxTag);
+    }
+
+    le_uint16 index = ttGlyph;
+
+    if (ttGlyph >= fNumGlyphs || fHMTXTable == NULL) {
+        advance.fX = advance.fY = 0;
+        return;
+    }
+
+    if (ttGlyph >= fNumLongHorMetrics) {
+        index = fNumLongHorMetrics - 1;
+    }
+
+    advance.fX = xUnitsToPoints(SWAPW(fHMTXTable->hMetrics[index].advanceWidth));
+    advance.fY = 0;
+}
+
+le_bool PortableFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const
+{
+    return FALSE;
+}
+
+le_int32 PortableFontInstance::getUnitsPerEM() const
+{
+    return fUnitsPerEM;
+}
+
+le_uint32 PortableFontInstance::getFontChecksum() const
+{
+    return 0;
+}
+
+le_int32 PortableFontInstance::getAscent() const
+{
+    return fAscent;
+}
+
+le_int32 PortableFontInstance::getDescent() const
+{
+    return fDescent;
+}
+
+le_int32 PortableFontInstance::getLeading() const
+{
+    return fLeading;
+}
+
+// We really want to inherit this method from the superclass, but some compilers
+// issue a warning if we don't implement it...
+LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const
+{
+    return LEFontInstance::mapCharToGlyph(ch, mapper, filterZeroWidth);
+}
+
+// We really want to inherit this method from the superclass, but some compilers
+// issue a warning if we don't implement it...
+LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
+{
+    return LEFontInstance::mapCharToGlyph(ch, mapper);
+}
+
+LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch) const
+{
+    return fCMAPMapper->unicodeToGlyph(ch);
+}
+
+float PortableFontInstance::getXPixelsPerEm() const
+{
+    return fXScale;
+}
+
+float PortableFontInstance::getYPixelsPerEm() const
+{
+    return fYScale;
+}
+
+float PortableFontInstance::getScaleFactorX() const
+{
+    return 1.0;
+}
+
+float PortableFontInstance::getScaleFactorY() const
+{
+    return 1.0;
+}
diff --git a/src/hb-icu-le/PortableFontInstance.h b/src/hb-icu-le/PortableFontInstance.h
new file mode 100644 (file)
index 0000000..0794560
--- /dev/null
@@ -0,0 +1,112 @@
+
+/*
+ *******************************************************************************
+ *
+ *   Copyright (C) 1999-2008, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *
+ *******************************************************************************
+ *   file name:  PortableFontInstance.h
+ *
+ *   created on: 11/12/1999
+ *   created by: Eric R. Mader
+ */
+
+#ifndef __PORTABLEFONTINSTANCE_H
+#define __PORTABLEFONTINSTANCE_H
+
+#define HB_H_IN
+#include <hb-font.h>
+#include <hb-blob.h>
+
+#include "layout/LETypes.h"
+#include "layout/LEFontInstance.h"
+#include "letest.h"
+
+#include "FontTableCache.h"
+
+#include "cmaps.h"
+
+HB_BEGIN_VISIBILITY
+
+class PortableFontInstance : public LEFontInstance, protected FontTableCache
+{
+private:
+    hb_face_t *fFace;
+
+    float     fXScale;
+    float     fYScale;
+    le_int32  fUnitsPerEM;
+    le_int32  fAscent;
+    le_int32  fDescent;
+    le_int32  fLeading;
+
+    const NAMETable *fNAMETable;
+    le_uint16 fNameCount;
+    le_uint16 fNameStringOffset;
+
+    CMAPMapper *fCMAPMapper;
+
+    const HMTXTable *fHMTXTable;
+    le_uint16 fNumGlyphs;
+    le_uint16 fNumLongHorMetrics;
+
+    void getMetrics();
+
+    CMAPMapper *findUnicodeMapper();
+
+protected:
+    hb_blob_t *readFontTable(LETag tableTag) const;
+
+public:
+    PortableFontInstance(hb_face_t *face, float xScale, float yScale, LEErrorCode &status);
+
+    virtual ~PortableFontInstance();
+
+    virtual const void *getFontTable(LETag tableTag) const;
+
+    virtual const char *getNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const;
+
+    virtual const LEUnicode16 *getUnicodeNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const;
+
+    virtual void deleteNameString(const char *name) const;
+
+    virtual void deleteNameString(const LEUnicode16 *name) const;
+
+    virtual le_int32 getUnitsPerEM() const;
+
+    virtual le_uint32 getFontChecksum() const;
+
+    virtual le_int32 getAscent() const;
+
+    virtual le_int32 getDescent() const;
+
+    virtual le_int32 getLeading() const;
+
+    // We really want to inherit this method from the superclass, but some compilers
+    // issue a warning if we don't implement it...
+    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const;
+    
+    // We really want to inherit this method from the superclass, but some compilers
+    // issue a warning if we don't implement it...
+    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const;
+
+    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
+
+    virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
+
+    virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
+
+    virtual float getXPixelsPerEm() const;
+
+    virtual float getYPixelsPerEm() const;
+
+    virtual float getScaleFactorX() const;
+
+    virtual float getScaleFactorY() const;
+
+};
+
+HB_END_VISIBILITY
+
+#endif
diff --git a/src/hb-icu-le/README b/src/hb-icu-le/README
new file mode 100644 (file)
index 0000000..329a218
--- /dev/null
@@ -0,0 +1,3 @@
+This is PortableFontInstance from icu/test/testle of ICU50.
+Modified to use a hb_face_t.
+For license information, see the file license.html.
diff --git a/src/hb-icu-le/cmaps.cpp b/src/hb-icu-le/cmaps.cpp
new file mode 100644 (file)
index 0000000..d03ee71
--- /dev/null
@@ -0,0 +1,200 @@
+/***************************************************************************
+*
+*   Copyright (C) 1998-2003, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+************************************************************************/
+
+#include "layout/LETypes.h"
+#include "layout/LESwaps.h"
+
+#include "sfnt.h"
+#include "cmaps.h"
+
+#define SWAPU16(code) ((LEUnicode16) SWAPW(code))
+#define SWAPU32(code) ((LEUnicode32) SWAPL(code))
+
+//
+// Finds the high bit by binary searching
+// through the bits in value.
+//
+static inline le_int8 highBit(le_uint32 value)
+{
+    le_uint8 bit = 0;
+
+    if (value >= 1 << 16) {
+        value >>= 16;
+        bit += 16;
+    }
+
+    if (value >= 1 << 8) {
+        value >>= 8;
+        bit += 8;
+    }
+
+    if (value >= 1 << 4) {
+        value >>= 4;
+        bit += 4;
+    }
+
+    if (value >= 1 << 2) {
+        value >>= 2;
+        bit += 2;
+    }
+
+    if (value >= 1 << 1) {
+        value >>= 1;
+        bit += 1;
+    }
+
+    return bit;
+}
+
+CMAPMapper *CMAPMapper::createUnicodeMapper(const CMAPTable *cmap)
+{
+    le_uint16 i;
+    le_uint16 nSubtables = SWAPW(cmap->numberSubtables);
+    const CMAPEncodingSubtable *subtable = NULL;
+    le_uint32 offset1 = 0, offset10 = 0;
+
+    for (i = 0; i < nSubtables; i += 1) {
+        const CMAPEncodingSubtableHeader *esh = &cmap->encodingSubtableHeaders[i];
+
+        if (SWAPW(esh->platformID) == 3) {
+            switch (SWAPW(esh->platformSpecificID)) {
+            case 1:
+                offset1 = SWAPL(esh->encodingOffset);
+                break;
+
+            case 10:
+                offset10 = SWAPL(esh->encodingOffset);
+                break;
+            }
+        }
+    }
+
+
+    if (offset10 != 0)
+    {
+        subtable = (const CMAPEncodingSubtable *) ((const char *) cmap + offset10);
+    } else if (offset1 != 0) {
+        subtable = (const CMAPEncodingSubtable *) ((const char *) cmap + offset1);
+    } else {
+        return NULL;
+    }
+
+    switch (SWAPW(subtable->format)) {
+    case 4:
+        return new CMAPFormat4Mapper(cmap, (const CMAPFormat4Encoding *) subtable);
+
+    case 12:
+    {
+        const CMAPFormat12Encoding *encoding = (const CMAPFormat12Encoding *) subtable;
+
+        return new CMAPGroupMapper(cmap, encoding->groups, SWAPL(encoding->nGroups));
+    }
+
+    default:
+        break;
+    }
+
+    return NULL;
+}
+
+CMAPFormat4Mapper::CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header)
+    : CMAPMapper(cmap)
+{
+    le_uint16 segCount = SWAPW(header->segCountX2) / 2;
+
+    fEntrySelector = SWAPW(header->entrySelector);
+    fRangeShift = SWAPW(header->rangeShift) / 2;
+    fEndCodes = &header->endCodes[0];
+    fStartCodes = &header->endCodes[segCount + 1]; // + 1 for reservedPad...
+    fIdDelta = &fStartCodes[segCount];
+    fIdRangeOffset = &fIdDelta[segCount];
+}
+
+LEGlyphID CMAPFormat4Mapper::unicodeToGlyph(LEUnicode32 unicode32) const
+{
+    if (unicode32 >= 0x10000) {
+        return 0;
+    }
+
+    LEUnicode16 unicode = (LEUnicode16) unicode32;
+    le_uint16 index = 0;
+    le_uint16 probe = 1 << fEntrySelector;
+    TTGlyphID result = 0;
+
+    if (SWAPU16(fStartCodes[fRangeShift]) <= unicode) {
+        index = fRangeShift;
+    }
+
+    while (probe > (1 << 0)) {
+        probe >>= 1;
+
+        if (SWAPU16(fStartCodes[index + probe]) <= unicode) {
+            index += probe;
+        }
+    }
+
+    if (unicode >= SWAPU16(fStartCodes[index]) && unicode <= SWAPU16(fEndCodes[index])) {
+        if (fIdRangeOffset[index] == 0) {
+            result = (TTGlyphID) unicode;
+        } else {
+            le_uint16 offset = unicode - SWAPU16(fStartCodes[index]);
+            le_uint16 rangeOffset = SWAPW(fIdRangeOffset[index]);
+            le_uint16 *glyphIndexTable = (le_uint16 *) ((char *) &fIdRangeOffset[index] + rangeOffset);
+
+            result = SWAPW(glyphIndexTable[offset]);
+        }
+
+        result += SWAPW(fIdDelta[index]);
+    } else {
+        result = 0;
+    }
+
+    return LE_SET_GLYPH(0, result);
+}
+
+CMAPFormat4Mapper::~CMAPFormat4Mapper()
+{
+    // parent destructor does it all
+}
+
+CMAPGroupMapper::CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups)
+    : CMAPMapper(cmap), fGroups(groups)
+{
+    le_uint8 bit = highBit(nGroups);
+    fPower = 1 << bit;
+    fRangeOffset = nGroups - fPower;
+}
+
+LEGlyphID CMAPGroupMapper::unicodeToGlyph(LEUnicode32 unicode32) const
+{
+    le_int32 probe = fPower;
+    le_int32 range = 0;
+
+    if (SWAPU32(fGroups[fRangeOffset].startCharCode) <= unicode32) {
+        range = fRangeOffset;
+    }
+
+    while (probe > (1 << 0)) {
+        probe >>= 1;
+
+        if (SWAPU32(fGroups[range + probe].startCharCode) <= unicode32) {
+            range += probe;
+        }
+    }
+
+    if (SWAPU32(fGroups[range].startCharCode) <= unicode32 && SWAPU32(fGroups[range].endCharCode) >= unicode32) {
+        return (LEGlyphID) (SWAPU32(fGroups[range].startGlyphCode) + unicode32 - SWAPU32(fGroups[range].startCharCode));
+    }
+
+    return 0;
+}
+
+CMAPGroupMapper::~CMAPGroupMapper()
+{
+    // parent destructor does it all
+}
+
diff --git a/src/hb-icu-le/cmaps.h b/src/hb-icu-le/cmaps.h
new file mode 100644 (file)
index 0000000..cf73f3a
--- /dev/null
@@ -0,0 +1,87 @@
+/***************************************************************************
+*
+*   Copyright (C) 1998-2006, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+************************************************************************/
+
+
+#ifndef __CMAPS_H
+#define __CMAPS_H
+
+#include "layout/LETypes.h"
+#include "letest.h"
+#include "sfnt.h"
+
+HB_BEGIN_VISIBILITY
+
+class CMAPMapper
+{
+public:
+    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0;
+
+    virtual ~CMAPMapper();
+
+    static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap);
+
+protected:
+    CMAPMapper(const CMAPTable *cmap);
+
+    CMAPMapper() {};
+
+private:
+    const CMAPTable *fcmap;
+};
+
+class CMAPFormat4Mapper : public CMAPMapper
+{
+public:
+    CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header);
+
+    virtual ~CMAPFormat4Mapper();
+
+    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
+
+protected:
+    CMAPFormat4Mapper() {};
+
+private:
+    le_uint16       fEntrySelector;
+    le_uint16       fRangeShift;
+    const le_uint16 *fEndCodes;
+    const le_uint16 *fStartCodes;
+    const le_uint16 *fIdDelta;
+    const le_uint16 *fIdRangeOffset;
+};
+
+class CMAPGroupMapper : public CMAPMapper
+{
+public:
+    CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups);
+
+    virtual ~CMAPGroupMapper();
+
+    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
+
+protected:
+    CMAPGroupMapper() {};
+
+private:
+    le_int32 fPower;
+    le_int32 fRangeOffset;
+    const CMAPGroup *fGroups;
+};
+
+inline CMAPMapper::CMAPMapper(const CMAPTable *cmap)
+    : fcmap(cmap)
+{
+    // nothing else to do
+}
+
+inline CMAPMapper::~CMAPMapper()
+{
+}
+
+HB_END_VISIBILITY
+
+#endif
diff --git a/src/hb-icu-le/letest.h b/src/hb-icu-le/letest.h
new file mode 100644 (file)
index 0000000..ff564ba
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ *******************************************************************************
+ *
+ *   Copyright (C) 1999-2011, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *
+ *******************************************************************************
+ *   file name:  letest.h
+ *
+ *   created on: 11/06/2000
+ *   created by: Eric R. Mader
+ */
+
+#ifndef __LETEST_H
+#define __LETEST_H
+
+
+#if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
+# define HB_BEGIN_VISIBILITY _Pragma ("GCC visibility push(hidden)")
+# define HB_END_VISIBILITY _Pragma ("GCC visibility pop")
+#else
+# define HB_BEGIN_VISIBILITY
+# define HB_END_VISIBILITY
+#endif
+
+
+#include "layout/LETypes.h"
+/*#include "unicode/ctest.h"*/
+
+#include <stdlib.h>
+#include <string.h>
+
+HB_BEGIN_VISIBILITY
+
+U_NAMESPACE_USE
+
+#define ARRAY_SIZE(array) (sizeof array / sizeof array[0])
+
+#define ARRAY_COPY(dst, src, count) memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
+
+#define NEW_ARRAY(type,count) (type *) malloc((count) * sizeof(type))
+
+#define DELETE_ARRAY(array) free((void *) (array))
+
+#define GROW_ARRAY(array,newSize) realloc((void *) (array), (newSize) * sizeof (array)[0])
+
+struct TestResult
+{
+    le_int32   glyphCount;
+    LEGlyphID *glyphs;
+    le_int32  *indices;
+    float     *positions;
+};
+
+#ifndef __cplusplus
+typedef struct TestResult TestResult;
+#endif
+
+//U_CFUNC void addCTests(TestNode **root);
+
+HB_END_VISIBILITY
+
+#endif
diff --git a/src/hb-icu-le/license.html b/src/hb-icu-le/license.html
new file mode 100644 (file)
index 0000000..d078d05
--- /dev/null
@@ -0,0 +1,51 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></meta>
+<title>ICU License - ICU 1.8.1 and later</title>
+</head>
+
+<body BGCOLOR="#ffffff">
+<h2>ICU License - ICU 1.8.1 and later</h2>
+
+<p>COPYRIGHT AND PERMISSION NOTICE</p>
+
+<p>
+Copyright (c) 1995-2012 International Business Machines Corporation and others
+</p>
+<p>
+All rights reserved.
+</p>
+<p>
+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, and/or sell
+copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies
+of the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+</p>
+<p>
+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 OF THIRD PARTY RIGHTS. IN NO EVENT SHALL
+THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM,
+OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
+</p>
+<p>
+Except as contained in this notice, the name of a copyright holder shall not be
+used in advertising or otherwise to promote the sale, use or other dealings in
+this Software without prior written authorization of the copyright holder.
+</p>
+
+<hr>
+<p><small>
+All trademarks and registered trademarks mentioned herein are the property of their respective owners.
+</small></p>
+</body>
+</html>
diff --git a/src/hb-icu-le/sfnt.h b/src/hb-icu-le/sfnt.h
new file mode 100644 (file)
index 0000000..feec0ad
--- /dev/null
@@ -0,0 +1,453 @@
+/***************************************************************************
+*
+*   Copyright (C) 1998-2011, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+************************************************************************/
+
+#ifndef __SFNT_H
+#define __SFNT_H
+
+#include "layout/LETypes.h"
+#include "letest.h"
+
+HB_BEGIN_VISIBILITY
+
+U_NAMESPACE_USE
+
+#ifndef ANY_NUMBER
+#define ANY_NUMBER 1
+#endif
+
+struct DirectoryEntry
+{
+    le_uint32   tag;
+    le_uint32   checksum;
+    le_uint32   offset;
+    le_uint32   length;
+};
+
+#ifndef __cplusplus
+typedef struct DirectoryEntry DirectoryEntry;
+#endif
+
+struct SFNTDirectory
+{
+    le_uint32       scalerType;
+    le_uint16       numTables;
+    le_uint16       searchRange;
+    le_uint16       entrySelector;
+    le_uint16       rangeShift;
+    DirectoryEntry  tableDirectory[ANY_NUMBER];
+};
+
+#ifndef __cplusplus
+typedef struct SFNTDirectory SFNTDirectory;
+#endif
+
+
+struct CMAPEncodingSubtableHeader
+{
+    le_uint16   platformID;
+    le_uint16   platformSpecificID;
+    le_uint32   encodingOffset;
+};
+
+#ifndef __cplusplus
+typedef struct CMAPEncodingSubtableHeader CMAPEncodingSubtableHeader;
+#endif
+
+struct CMAPTable
+{
+    le_uint16   version;
+    le_uint16   numberSubtables;
+    CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
+};
+
+#ifndef __cplusplus
+typedef struct CMAPTable CMAPTable;
+#endif
+
+struct CMAPEncodingSubtable
+{
+    le_uint16   format;
+    le_uint16   length;
+    le_uint16   language;
+};
+
+#ifndef __cplusplus
+typedef struct CMAPEncodingSubtable CMAPEncodingSubtable;
+#endif
+
+#ifdef __cplusplus
+struct CMAPFormat0Encoding : CMAPEncodingSubtable
+{
+    le_uint8    glyphIndexArray[256];
+};
+#else
+struct CMAPFormat0Encoding
+{
+       CMAPEncodingSubtable base;
+
+       le_uint8 glyphIndexArray[256];
+};
+
+typedef struct CMAPFormat0Encoding CMAPFormat0Encoding;
+#endif
+
+struct CMAPFormat2Subheader
+{
+    le_uint16   firstCode;
+    le_uint16   entryCount;
+    le_int16    idDelta;
+    le_uint16   idRangeOffset;
+};
+
+#ifndef __cplusplus
+typedef struct CMAPFormat2Subheader CMAPFormat2Subheader;
+#endif
+
+#ifdef __cplusplus
+struct CMAPFormat2Encoding : CMAPEncodingSubtable
+{
+    le_uint16  subHeadKeys[256];
+    CMAPFormat2Subheader subheaders[ANY_NUMBER];
+};
+#else
+struct CMAPFormat2Encoding
+{
+       CMAPEncodingSubtable base;
+
+    le_uint16  subHeadKeys[256];
+    CMAPFormat2Subheader subheaders[ANY_NUMBER];
+};
+
+typedef struct CMAPFormat2Encoding CMAPFormat2Encoding;
+#endif
+
+#ifdef __cplusplus
+struct CMAPFormat4Encoding : CMAPEncodingSubtable
+{
+    le_uint16   segCountX2;
+    le_uint16   searchRange;
+    le_uint16   entrySelector;
+    le_uint16   rangeShift;
+    le_uint16   endCodes[ANY_NUMBER];
+/*
+    le_uint16   reservedPad;
+    le_uint16   startCodes[ANY_NUMBER];
+    le_uint16   idDelta[ANY_NUMBER];
+    le_uint16   idRangeOffset[ANY_NUMBER];
+    le_uint16   glyphIndexArray[ANY_NUMBER];
+*/
+};
+#else
+struct CMAPFormat4Encoding
+{
+       CMAPEncodingSubtable base;
+
+    le_uint16   segCountX2;
+    le_uint16   searchRange;
+    le_uint16   entrySelector;
+    le_uint16   rangeShift;
+    le_uint16   endCodes[ANY_NUMBER];
+/*
+//  le_uint16   reservedPad;
+//  le_uint16   startCodes[ANY_NUMBER];
+//  le_uint16   idDelta[ANY_NUMBER];
+//  le_uint16   idRangeOffset[ANY_NUMBER];
+//  le_uint16   glyphIndexArray[ANY_NUMBER];
+*/
+};
+
+typedef struct CMAPFormat4Encoding CMAPFormat4Encoding;
+#endif
+
+#ifdef __cplusplus
+struct CMAPFormat6Encoding : CMAPEncodingSubtable
+{
+    le_uint16   firstCode;
+    le_uint16   entryCount;
+    le_uint16   glyphIndexArray[ANY_NUMBER];
+};
+#else
+struct CMAPFormat6Encoding
+{
+       CMAPEncodingSubtable base;
+
+    le_uint16   firstCode;
+    le_uint16   entryCount;
+    le_uint16   glyphIndexArray[ANY_NUMBER];
+};
+
+typedef struct CMAPFormat6Encoding CMAPFormat6Encoding;
+#endif
+
+struct CMAPEncodingSubtable32
+{
+    le_uint32   format;
+    le_uint32   length;
+    le_uint32   language;
+};
+
+#ifndef __cplusplus
+typedef struct CMAPEncodingSubtable32 CMAPEncodingSubtable32;
+#endif
+
+struct CMAPGroup
+{
+    le_uint32   startCharCode;
+    le_uint32   endCharCode;
+    le_uint32   startGlyphCode;
+};
+
+#ifndef __cplusplus
+typedef struct CMAPGroup CMAPGroup;
+#endif
+
+#ifdef __cplusplus
+struct CMAPFormat8Encoding : CMAPEncodingSubtable32
+{
+    le_uint32   is32[65536/32];
+    le_uint32   nGroups;
+    CMAPGroup   groups[ANY_NUMBER];
+};
+#else
+struct CMAPFormat8Encoding
+{
+       CMAPEncodingSubtable32 base;
+
+    le_uint32   is32[65536/32];
+    le_uint32   nGroups;
+    CMAPGroup   groups[ANY_NUMBER];
+};
+
+typedef struct CMAPFormat8Encoding CMAPFormat8Encoding;
+#endif
+
+#ifdef __cplusplus
+struct CMAPFormat10Encoding : CMAPEncodingSubtable32
+{
+    le_uint32   startCharCode;
+    le_uint32   numCharCodes;
+    le_uint16   glyphs[ANY_NUMBER];
+};
+#else
+struct CMAPFormat10Encoding
+{
+       CMAPEncodingSubtable32 base;
+
+    le_uint32   startCharCode;
+    le_uint32   numCharCodes;
+    le_uint16   glyphs[ANY_NUMBER];
+};
+
+typedef struct CMAPFormat10Encoding CMAPFormat10Encoding;
+#endif
+
+#ifdef __cplusplus
+struct CMAPFormat12Encoding : CMAPEncodingSubtable32
+{
+    le_uint32   nGroups;
+    CMAPGroup   groups[ANY_NUMBER];
+};
+#else
+struct CMAPFormat12Encoding
+{
+       CMAPEncodingSubtable32 base;
+
+    le_uint32   nGroups;
+    CMAPGroup   groups[ANY_NUMBER];
+};
+
+typedef struct CMAPFormat12Encoding CMAPFormat12Encoding;
+#endif
+
+typedef le_int32 fixed;
+
+struct BigDate
+{
+    le_uint32   bc;
+    le_uint32   ad;
+};
+
+#ifndef __cplusplus
+typedef struct BigDate BigDate;
+#endif
+
+struct HEADTable
+{
+    fixed       version;
+    fixed       fontRevision;
+    le_uint32   checksumAdjustment;
+    le_uint32   magicNumber;
+    le_uint16   flags;
+    le_uint16   unitsPerEm;
+    BigDate     created;
+    BigDate     modified;
+    le_int16    xMin;
+    le_int16    yMin;
+    le_int16    xMax;
+    le_int16    yMax;
+    le_int16    lowestRecPPEM;
+    le_int16    fontDirectionHint;
+    le_int16    indexToLocFormat;
+    le_int16    glyphDataFormat;
+};
+
+#ifndef __cplusplus
+typedef struct HEADTable HEADTable;
+#endif
+
+struct MAXPTable
+{
+    fixed       version;
+    le_uint16   numGlyphs;
+    le_uint16   maxPoints;
+    le_uint16   maxContours;
+    le_uint16   maxComponentPoints;
+    le_uint16   maxComponentContours;
+    le_uint16   maxZones;
+    le_uint16   maxTwilightPoints;
+    le_uint16   maxStorage;
+    le_uint16   maxFunctionDefs;
+    le_uint16   maxInstructionDefs;
+    le_uint16   maxStackElements;
+    le_uint16   maxSizeOfInstructions;
+    le_uint16   maxComponentElements;
+    le_uint16   maxComponentDepth;
+};
+
+#ifndef __cplusplus
+typedef struct MAXPTable MAXPTable;
+#endif
+
+struct HHEATable
+{
+    fixed       version;
+    le_int16    ascent;
+    le_int16    descent;
+    le_int16    lineGap;
+    le_uint16   advanceWidthMax;
+    le_int16    minLeftSideBearing;
+    le_int16    minRightSideBearing;
+    le_int16    xMaxExtent;
+    le_int16    caretSlopeRise;
+    le_int16    caretSlopeRun;
+    le_int16    caretOffset;
+    le_int16    reserved1;
+    le_int16    reserved2;
+    le_int16    reserved3;
+    le_int16    reserved4;
+    le_int16    metricDataFormat;
+    le_uint16   numOfLongHorMetrics;
+};
+
+#ifndef __cplusplus
+typedef struct HHEATable HHEATable;
+#endif
+
+struct LongHorMetric
+{
+    le_uint16   advanceWidth;
+    le_int16    leftSideBearing;
+};
+
+#ifndef __cplusplus
+typedef struct LongHorMetric LongHorMetric;
+#endif
+
+struct HMTXTable
+{
+    LongHorMetric hMetrics[ANY_NUMBER];       /* ANY_NUMBER = numOfLongHorMetrics from hhea table */
+/* le_int16        leftSideBearing[ANY_NUMBER];  ANY_NUMBER = numGlyphs - numOfLongHorMetrics     */
+};
+
+#ifndef __cplusplus
+typedef struct HMTXTable HMTXTable;
+#endif
+
+enum PlatformID
+{
+    PLATFORM_UNICODE = 0,
+    PLATFORM_MACINTOSH = 1,
+    PLATFORM_ISO       = 2,
+    PLATFORM_MICROSOFT = 3,
+    PLATFORM_CUSTOM    = 4
+};
+
+enum MacintoshEncodingID
+{
+    MACINTOSH_ROMAN = 0
+};
+
+enum MacintoshLanguageID
+{
+    MACINTOSH_ENGLISH = 0
+};
+
+enum MicrosoftEncodingID
+{
+    MICROSOFT_UNICODE_BMP  =  1,
+    MICROSOFT_UNICODE_FULL = 10
+};
+
+enum MicrosoftLanguageID
+{
+    MICROSOFT_ENGLISH = 0x409
+};
+
+enum NameID
+{
+    NAME_COPYRIGHT_NOTICE     = 0,
+    NAME_FONT_FAMILY          = 1,
+    NAME_FONT_SUB_FAMILY      = 2,
+    NAME_UNIQUE_FONT_ID       = 3,
+    NAME_FULL_FONT_NAME       = 4,
+    NAME_VERSION_STRING       = 5,
+    NAME_POSTSCRIPT_NAME      = 6,
+    NAME_TRADEMARK            = 7,
+    NAME_MANUFACTURER         = 8,
+    NAME_DESIGNER             = 9,
+    NAME_DESCRIPTION          = 10,
+    NAME_VENDOR_URL           = 11,
+    NAME_DESIGNER_URL         = 12,
+    NAME_LICENSE_DESCRIPTION  = 13,
+    NAME_LICENSE_URL          = 14,
+    NAME_RESERVED             = 15,
+    NAME_PREFERRED_FAMILY     = 16,
+    NAME_PREFERRED_SUB_FAMILY = 17,
+    NAME_COMPATIBLE_FULL      = 18,
+    NAME_SAMPLE_TEXT          = 19,
+    NAME_POSTSCRIPT_CID       = 20
+};
+
+struct NameRecord
+{
+    le_uint16 platformID;
+    le_uint16 encodingID;
+    le_uint16 languageID;
+    le_uint16 nameID;
+    le_uint16 length;
+    le_uint16 offset;
+};
+
+#ifndef __cplusplus
+typedef struct NameRecord NameRecord;
+#endif
+
+struct NAMETable
+{
+    le_uint16 version;
+    le_uint16 count;
+    le_uint16 stringOffset;
+    NameRecord nameRecords[ANY_NUMBER];
+};
+
+#ifndef __cplusplus
+typedef struct NAMETable NAMETable;
+#endif
+
+HB_END_VISIBILITY
+
+#endif
index fc8ef49..5b3a17e 100644 (file)
@@ -65,26 +65,6 @@ typedef pthread_mutex_t hb_mutex_impl_t;
 #define hb_mutex_impl_finish(M)        pthread_mutex_destroy (M)
 
 
-#elif !defined(HB_NO_MT) && defined(HAVE_GLIB)
-
-#include <glib.h>
-#if !GLIB_CHECK_VERSION(2,32,0)
-typedef GStaticMutex hb_mutex_impl_t;
-#define HB_MUTEX_IMPL_INIT     G_STATIC_MUTEX_INIT
-#define hb_mutex_impl_init(M)  g_static_mutex_init (M)
-#define hb_mutex_impl_lock(M)  g_static_mutex_lock (M)
-#define hb_mutex_impl_unlock(M)        g_static_mutex_unlock (M)
-#define hb_mutex_impl_finish(M)        g_static_mutex_free (M)
-#else
-typedef GMutex hb_mutex_impl_t;
-#define HB_MUTEX_IMPL_INIT     {0}
-#define hb_mutex_impl_init(M)  g_mutex_init (M)
-#define hb_mutex_impl_lock(M)  g_mutex_lock (M)
-#define hb_mutex_impl_unlock(M)        g_mutex_unlock (M)
-#define hb_mutex_impl_finish(M)        g_mutex_clear (M)
-#endif
-
-
 #elif !defined(HB_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES)
 
 #if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_YIELD)
index c48f242..8a9ae34 100644 (file)
@@ -65,7 +65,7 @@ struct hb_reference_count_t
 
 /* user_data */
 
-#define HB_USER_DATA_ARRAY_INIT {HB_LOCKABLE_SET_INIT}
+#define HB_USER_DATA_ARRAY_INIT {HB_MUTEX_INIT, HB_LOCKABLE_SET_INIT}
 struct hb_user_data_array_t
 {
   /* TODO Add tracing. */
@@ -81,20 +81,19 @@ struct hb_user_data_array_t
     void finish (void) { if (destroy) destroy (data); }
   };
 
+  hb_mutex_t lock;
   hb_lockable_set_t<hb_user_data_item_t, hb_mutex_t> items;
 
-  inline void init (void) { items.init (); }
+  inline void init (void) { lock.init (); items.init (); }
 
   HB_INTERNAL bool set (hb_user_data_key_t *key,
                        void *              data,
                        hb_destroy_func_t   destroy,
-                       hb_bool_t           replace,
-                       hb_mutex_t         &lock);
+                       hb_bool_t           replace);
 
-  HB_INTERNAL void *get (hb_user_data_key_t *key,
-                       hb_mutex_t          &lock);
+  HB_INTERNAL void *get (hb_user_data_key_t *key);
 
-  HB_INTERNAL void finish (hb_mutex_t &lock);
+  inline void finish (void) { items.finish (lock); lock.finish (); }
 };
 
 
@@ -103,10 +102,9 @@ struct hb_user_data_array_t
 struct hb_object_header_t
 {
   hb_reference_count_t ref_count;
-  hb_mutex_t mutex;
   hb_user_data_array_t user_data;
 
-#define HB_OBJECT_HEADER_STATIC {HB_REFERENCE_COUNT_INVALID, HB_MUTEX_INIT, HB_USER_DATA_ARRAY_INIT}
+#define HB_OBJECT_HEADER_STATIC {HB_REFERENCE_COUNT_INVALID, HB_USER_DATA_ARRAY_INIT}
 
   static inline void *create (unsigned int size) {
     hb_object_header_t *obj = (hb_object_header_t *) calloc (1, size);
@@ -119,7 +117,6 @@ struct hb_object_header_t
 
   inline void init (void) {
     ref_count.init (1);
-    mutex.init ();
     user_data.init ();
   }
 
@@ -140,20 +137,11 @@ struct hb_object_header_t
       return false;
 
     ref_count.finish (); /* Do this before user_data */
-    user_data.finish (mutex);
-    mutex.finish ();
+    user_data.finish ();
 
     return true;
   }
 
-  inline void lock (void) {
-    mutex.lock ();
-  }
-
-  inline void unlock (void) {
-    mutex.unlock ();
-  }
-
   inline bool set_user_data (hb_user_data_key_t *key,
                             void *              data,
                             hb_destroy_func_t   destroy_func,
@@ -161,14 +149,14 @@ struct hb_object_header_t
     if (unlikely (!this || this->is_inert ()))
       return false;
 
-    return user_data.set (key, data, destroy_func, replace, mutex);
+    return user_data.set (key, data, destroy_func, replace);
   }
 
   inline void *get_user_data (hb_user_data_key_t *key) {
     if (unlikely (!this || this->is_inert ()))
       return NULL;
 
-    return user_data.get (key, mutex);
+    return user_data.get (key);
   }
 
   inline void trace (const char *function) const {
@@ -219,18 +207,6 @@ static inline bool hb_object_destroy (Type *obj)
   return obj->header.destroy ();
 }
 template <typename Type>
-static inline void hb_object_lock (Type *obj)
-{
-  hb_object_trace (obj, HB_FUNC);
-  return obj->header.lock ();
-}
-template <typename Type>
-static inline void hb_object_unlock (Type *obj)
-{
-  hb_object_trace (obj, HB_FUNC);
-  return obj->header.unlock ();
-}
-template <typename Type>
 static inline bool hb_object_set_user_data (Type               *obj,
                                            hb_user_data_key_t *key,
                                            void *              data,
index 197e620..a7ea8ed 100644 (file)
@@ -100,7 +100,7 @@ hb_old_convertStringToGlyphIndices (HB_Font old_font,
 
     glyphs[i] = u;
   }
-  *numGlyphs = length; // XXX
+  *numGlyphs = length; /* XXX */
 
   return true;
 }
@@ -110,7 +110,7 @@ hb_old_getGlyphAdvances (HB_Font old_font,
                         const HB_Glyph *glyphs,
                         hb_uint32 numGlyphs,
                         HB_Fixed *advances,
-                        int flags /*HB_ShaperFlag*/)
+                        int flags /*HB_ShaperFlag*/ HB_UNUSED)
 {
   hb_font_t *font = (hb_font_t *) old_font->userData;
 
@@ -123,7 +123,7 @@ hb_old_canRender (HB_Font old_font,
                  const HB_UChar16 *string,
                  hb_uint32 length)
 {
-  return true; // TODO
+  return true; /* TODO */
 }
 
 static HB_Error
@@ -135,7 +135,7 @@ hb_old_getPointInOutline (HB_Font old_font,
                          HB_Fixed *ypos,
                          hb_uint32 *nPoints)
 {
-  return HB_Err_Ok; // TODO
+  return HB_Err_Ok; /* TODO */
 }
 
 static void
@@ -230,8 +230,8 @@ _hb_old_shaper_font_data_create (hb_font_t *font)
   data->klass = &hb_old_font_class;
   data->x_ppem = font->x_ppem;
   data->y_ppem = font->y_ppem;
-  data->x_scale = font->x_scale; // XXX
-  data->y_scale = font->y_scale; // XXX
+  data->x_scale = font->x_scale; /* XXX */
+  data->y_scale = font->y_scale; /* XXX */
   data->userData = font;
 
   return data;
@@ -251,15 +251,15 @@ _hb_old_shaper_font_data_destroy (hb_old_shaper_font_data_t *data)
 struct hb_old_shaper_shape_plan_data_t {};
 
 hb_old_shaper_shape_plan_data_t *
-_hb_old_shaper_shape_plan_data_create (hb_shape_plan_t    *shape_plan,
-                                      const hb_feature_t *user_features,
-                                      unsigned int        num_user_features)
+_hb_old_shaper_shape_plan_data_create (hb_shape_plan_t    *shape_plan HB_UNUSED,
+                                      const hb_feature_t *user_features HB_UNUSED,
+                                      unsigned int        num_user_features HB_UNUSED)
 {
   return (hb_old_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
 }
 
 void
-_hb_old_shaper_shape_plan_data_destroy (hb_old_shaper_shape_plan_data_t *data)
+_hb_old_shaper_shape_plan_data_destroy (hb_old_shaper_shape_plan_data_t *data HB_UNUSED)
 {
 }
 
@@ -269,7 +269,7 @@ _hb_old_shaper_shape_plan_data_destroy (hb_old_shaper_shape_plan_data_t *data)
  */
 
 hb_bool_t
-_hb_old_shape (hb_shape_plan_t    *shape_plan,
+_hb_old_shape (hb_shape_plan_t    *shape_plan HB_UNUSED,
               hb_font_t          *font,
               hb_buffer_t        *buffer,
               const hb_feature_t *features,
@@ -337,6 +337,9 @@ retry:
   ALLOCATE_ARRAY (HB_GlyphAttributes, item.attributes, num_glyphs);
   ALLOCATE_ARRAY (HB_Fixed, item.advances, num_glyphs);
   ALLOCATE_ARRAY (HB_FixedPoint, item.offsets, num_glyphs);
+  /* Apparently in some cases the offsets array will not be fully assigned to.
+   * Clear it. */
+  memset (item.offsets, 0, num_glyphs * sizeof (item.offsets[0]));
   uint32_t *vis_clusters;
   ALLOCATE_ARRAY (uint32_t, vis_clusters, num_glyphs);
 
@@ -366,7 +369,7 @@ retry:
     *p = MIN (*p, buffer->info[i].cluster);
   }
   for (unsigned int i = 1; i < num_glyphs; i++)
-    if (vis_clusters[i] == -1)
+    if (vis_clusters[i] == (uint32_t) -1)
       vis_clusters[i] = vis_clusters[i - 1];
 
 #undef utf16_index
index 8cc0ff7..01e1a67 100644 (file)
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -38,7 +38,11 @@ subdir = src/hb-old
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
        COPYING
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -62,8 +66,8 @@ am__objects_2 =
 am_libhb_old_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
        $(am__objects_2)
 libhb_old_la_OBJECTS = $(am_libhb_old_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -75,18 +79,18 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
 am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD  " $@;
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -94,18 +98,18 @@ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_$(V))
-am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
 am__v_CXX_0 = @echo "  CXX   " $@;
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_$(V))
-am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 am__v_CXXLD_0 = @echo "  CXXLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(libhb_old_la_SOURCES)
 DIST_SOURCES = $(libhb_old_la_SOURCES)
@@ -138,6 +142,7 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -164,6 +169,8 @@ HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -179,6 +186,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -195,6 +203,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -207,6 +218,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -215,6 +227,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -240,7 +253,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -351,7 +363,7 @@ clean-noinstLTLIBRARIES:
          echo "rm -f \"$${dir}/so_locations\""; \
          rm -f "$${dir}/so_locations"; \
        done
-libhb-old.la: $(libhb_old_la_OBJECTS) $(libhb_old_la_DEPENDENCIES) 
+libhb-old.la: $(libhb_old_la_OBJECTS) $(libhb_old_la_DEPENDENCIES) $(EXTRA_libhb_old_la_DEPENDENCIES) 
        $(AM_V_CXXLD)$(CXXLINK)  $(libhb_old_la_OBJECTS) $(libhb_old_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -380,178 +392,156 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@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@  $(COMPILE) -c $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@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@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 libhb_old_la-harfbuzz-buffer.lo: harfbuzz-buffer.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-buffer.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-buffer.Tpo -c -o libhb_old_la-harfbuzz-buffer.lo `test -f 'harfbuzz-buffer.c' || echo '$(srcdir)/'`harfbuzz-buffer.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-buffer.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-buffer.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-buffer.c' object='libhb_old_la-harfbuzz-buffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-buffer.c' object='libhb_old_la-harfbuzz-buffer.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-buffer.lo `test -f 'harfbuzz-buffer.c' || echo '$(srcdir)/'`harfbuzz-buffer.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-buffer.lo `test -f 'harfbuzz-buffer.c' || echo '$(srcdir)/'`harfbuzz-buffer.c
 
 libhb_old_la-harfbuzz-stream.lo: harfbuzz-stream.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-stream.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-stream.Tpo -c -o libhb_old_la-harfbuzz-stream.lo `test -f 'harfbuzz-stream.c' || echo '$(srcdir)/'`harfbuzz-stream.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-stream.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-stream.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-stream.c' object='libhb_old_la-harfbuzz-stream.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-stream.c' object='libhb_old_la-harfbuzz-stream.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-stream.lo `test -f 'harfbuzz-stream.c' || echo '$(srcdir)/'`harfbuzz-stream.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-stream.lo `test -f 'harfbuzz-stream.c' || echo '$(srcdir)/'`harfbuzz-stream.c
 
 libhb_old_la-harfbuzz-gdef.lo: harfbuzz-gdef.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-gdef.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-gdef.Tpo -c -o libhb_old_la-harfbuzz-gdef.lo `test -f 'harfbuzz-gdef.c' || echo '$(srcdir)/'`harfbuzz-gdef.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-gdef.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-gdef.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-gdef.c' object='libhb_old_la-harfbuzz-gdef.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-gdef.c' object='libhb_old_la-harfbuzz-gdef.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gdef.lo `test -f 'harfbuzz-gdef.c' || echo '$(srcdir)/'`harfbuzz-gdef.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gdef.lo `test -f 'harfbuzz-gdef.c' || echo '$(srcdir)/'`harfbuzz-gdef.c
 
 libhb_old_la-harfbuzz-gpos.lo: harfbuzz-gpos.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-gpos.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-gpos.Tpo -c -o libhb_old_la-harfbuzz-gpos.lo `test -f 'harfbuzz-gpos.c' || echo '$(srcdir)/'`harfbuzz-gpos.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-gpos.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-gpos.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-gpos.c' object='libhb_old_la-harfbuzz-gpos.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-gpos.c' object='libhb_old_la-harfbuzz-gpos.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gpos.lo `test -f 'harfbuzz-gpos.c' || echo '$(srcdir)/'`harfbuzz-gpos.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gpos.lo `test -f 'harfbuzz-gpos.c' || echo '$(srcdir)/'`harfbuzz-gpos.c
 
 libhb_old_la-harfbuzz-gsub.lo: harfbuzz-gsub.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-gsub.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-gsub.Tpo -c -o libhb_old_la-harfbuzz-gsub.lo `test -f 'harfbuzz-gsub.c' || echo '$(srcdir)/'`harfbuzz-gsub.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-gsub.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-gsub.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-gsub.c' object='libhb_old_la-harfbuzz-gsub.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-gsub.c' object='libhb_old_la-harfbuzz-gsub.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gsub.lo `test -f 'harfbuzz-gsub.c' || echo '$(srcdir)/'`harfbuzz-gsub.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gsub.lo `test -f 'harfbuzz-gsub.c' || echo '$(srcdir)/'`harfbuzz-gsub.c
 
 libhb_old_la-harfbuzz-impl.lo: harfbuzz-impl.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-impl.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-impl.Tpo -c -o libhb_old_la-harfbuzz-impl.lo `test -f 'harfbuzz-impl.c' || echo '$(srcdir)/'`harfbuzz-impl.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-impl.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-impl.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-impl.c' object='libhb_old_la-harfbuzz-impl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-impl.c' object='libhb_old_la-harfbuzz-impl.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-impl.lo `test -f 'harfbuzz-impl.c' || echo '$(srcdir)/'`harfbuzz-impl.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-impl.lo `test -f 'harfbuzz-impl.c' || echo '$(srcdir)/'`harfbuzz-impl.c
 
 libhb_old_la-harfbuzz-open.lo: harfbuzz-open.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-open.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-open.Tpo -c -o libhb_old_la-harfbuzz-open.lo `test -f 'harfbuzz-open.c' || echo '$(srcdir)/'`harfbuzz-open.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-open.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-open.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-open.c' object='libhb_old_la-harfbuzz-open.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-open.c' object='libhb_old_la-harfbuzz-open.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-open.lo `test -f 'harfbuzz-open.c' || echo '$(srcdir)/'`harfbuzz-open.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-open.lo `test -f 'harfbuzz-open.c' || echo '$(srcdir)/'`harfbuzz-open.c
 
 libhb_old_la-harfbuzz-greek.lo: harfbuzz-greek.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-greek.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-greek.Tpo -c -o libhb_old_la-harfbuzz-greek.lo `test -f 'harfbuzz-greek.c' || echo '$(srcdir)/'`harfbuzz-greek.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-greek.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-greek.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-greek.c' object='libhb_old_la-harfbuzz-greek.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-greek.c' object='libhb_old_la-harfbuzz-greek.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-greek.lo `test -f 'harfbuzz-greek.c' || echo '$(srcdir)/'`harfbuzz-greek.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-greek.lo `test -f 'harfbuzz-greek.c' || echo '$(srcdir)/'`harfbuzz-greek.c
 
 libhb_old_la-harfbuzz-tibetan.lo: harfbuzz-tibetan.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-tibetan.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-tibetan.Tpo -c -o libhb_old_la-harfbuzz-tibetan.lo `test -f 'harfbuzz-tibetan.c' || echo '$(srcdir)/'`harfbuzz-tibetan.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-tibetan.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-tibetan.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-tibetan.c' object='libhb_old_la-harfbuzz-tibetan.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-tibetan.c' object='libhb_old_la-harfbuzz-tibetan.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-tibetan.lo `test -f 'harfbuzz-tibetan.c' || echo '$(srcdir)/'`harfbuzz-tibetan.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-tibetan.lo `test -f 'harfbuzz-tibetan.c' || echo '$(srcdir)/'`harfbuzz-tibetan.c
 
 libhb_old_la-harfbuzz-khmer.lo: harfbuzz-khmer.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-khmer.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-khmer.Tpo -c -o libhb_old_la-harfbuzz-khmer.lo `test -f 'harfbuzz-khmer.c' || echo '$(srcdir)/'`harfbuzz-khmer.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-khmer.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-khmer.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-khmer.c' object='libhb_old_la-harfbuzz-khmer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-khmer.c' object='libhb_old_la-harfbuzz-khmer.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-khmer.lo `test -f 'harfbuzz-khmer.c' || echo '$(srcdir)/'`harfbuzz-khmer.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-khmer.lo `test -f 'harfbuzz-khmer.c' || echo '$(srcdir)/'`harfbuzz-khmer.c
 
 libhb_old_la-harfbuzz-hebrew.lo: harfbuzz-hebrew.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-hebrew.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-hebrew.Tpo -c -o libhb_old_la-harfbuzz-hebrew.lo `test -f 'harfbuzz-hebrew.c' || echo '$(srcdir)/'`harfbuzz-hebrew.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-hebrew.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-hebrew.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-hebrew.c' object='libhb_old_la-harfbuzz-hebrew.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-hebrew.c' object='libhb_old_la-harfbuzz-hebrew.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-hebrew.lo `test -f 'harfbuzz-hebrew.c' || echo '$(srcdir)/'`harfbuzz-hebrew.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-hebrew.lo `test -f 'harfbuzz-hebrew.c' || echo '$(srcdir)/'`harfbuzz-hebrew.c
 
 libhb_old_la-harfbuzz-arabic.lo: harfbuzz-arabic.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-arabic.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-arabic.Tpo -c -o libhb_old_la-harfbuzz-arabic.lo `test -f 'harfbuzz-arabic.c' || echo '$(srcdir)/'`harfbuzz-arabic.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-arabic.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-arabic.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-arabic.c' object='libhb_old_la-harfbuzz-arabic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-arabic.c' object='libhb_old_la-harfbuzz-arabic.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-arabic.lo `test -f 'harfbuzz-arabic.c' || echo '$(srcdir)/'`harfbuzz-arabic.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-arabic.lo `test -f 'harfbuzz-arabic.c' || echo '$(srcdir)/'`harfbuzz-arabic.c
 
 libhb_old_la-harfbuzz-hangul.lo: harfbuzz-hangul.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-hangul.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-hangul.Tpo -c -o libhb_old_la-harfbuzz-hangul.lo `test -f 'harfbuzz-hangul.c' || echo '$(srcdir)/'`harfbuzz-hangul.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-hangul.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-hangul.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-hangul.c' object='libhb_old_la-harfbuzz-hangul.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-hangul.c' object='libhb_old_la-harfbuzz-hangul.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-hangul.lo `test -f 'harfbuzz-hangul.c' || echo '$(srcdir)/'`harfbuzz-hangul.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-hangul.lo `test -f 'harfbuzz-hangul.c' || echo '$(srcdir)/'`harfbuzz-hangul.c
 
 libhb_old_la-harfbuzz-myanmar.lo: harfbuzz-myanmar.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-myanmar.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-myanmar.Tpo -c -o libhb_old_la-harfbuzz-myanmar.lo `test -f 'harfbuzz-myanmar.c' || echo '$(srcdir)/'`harfbuzz-myanmar.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-myanmar.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-myanmar.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='harfbuzz-myanmar.c' object='libhb_old_la-harfbuzz-myanmar.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-myanmar.c' object='libhb_old_la-harfbuzz-myanmar.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-myanmar.lo `test -f 'harfbuzz-myanmar.c' || echo '$(srcdir)/'`harfbuzz-myanmar.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-myanmar.lo `test -f 'harfbuzz-myanmar.c' || echo '$(srcdir)/'`harfbuzz-myanmar.c
 
 .cpp.o:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cpp.obj:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cpp.lo:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 libhb_old_la-harfbuzz-shaper.lo: harfbuzz-shaper.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_old_la-harfbuzz-shaper.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-shaper.Tpo -c -o libhb_old_la-harfbuzz-shaper.lo `test -f 'harfbuzz-shaper.cpp' || echo '$(srcdir)/'`harfbuzz-shaper.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-shaper.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-shaper.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='harfbuzz-shaper.cpp' object='libhb_old_la-harfbuzz-shaper.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='harfbuzz-shaper.cpp' object='libhb_old_la-harfbuzz-shaper.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_old_la-harfbuzz-shaper.lo `test -f 'harfbuzz-shaper.cpp' || echo '$(srcdir)/'`harfbuzz-shaper.cpp
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_old_la-harfbuzz-shaper.lo `test -f 'harfbuzz-shaper.cpp' || echo '$(srcdir)/'`harfbuzz-shaper.cpp
 
 libhb_old_la-harfbuzz-indic.lo: harfbuzz-indic.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_old_la-harfbuzz-indic.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-indic.Tpo -c -o libhb_old_la-harfbuzz-indic.lo `test -f 'harfbuzz-indic.cpp' || echo '$(srcdir)/'`harfbuzz-indic.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-indic.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-indic.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='harfbuzz-indic.cpp' object='libhb_old_la-harfbuzz-indic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='harfbuzz-indic.cpp' object='libhb_old_la-harfbuzz-indic.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_old_la-harfbuzz-indic.lo `test -f 'harfbuzz-indic.cpp' || echo '$(srcdir)/'`harfbuzz-indic.cpp
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_old_la-harfbuzz-indic.lo `test -f 'harfbuzz-indic.cpp' || echo '$(srcdir)/'`harfbuzz-indic.cpp
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -655,10 +645,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
index e2d4a2c..250504a 100644 (file)
@@ -32,6 +32,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  *
@@ -52,7 +54,7 @@ struct TTCHeader;
 typedef struct TableRecord
 {
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -101,7 +103,7 @@ typedef struct OffsetTable
 
   public:
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && c->check_array (tables, TableRecord::static_size, numTables));
   }
 
@@ -129,7 +131,7 @@ struct TTCHeaderVersion1
   inline const OpenTypeFontFace& get_face (unsigned int i) const { return this+table[i]; }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (table.sanitize (c, this));
   }
 
@@ -168,7 +170,7 @@ struct TTCHeader
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!u.header.version.sanitize (c))) return TRACE_RETURN (false);
     switch (u.header.version.major) {
     case 2: /* version 2 is compatible with version 1 */
@@ -230,7 +232,7 @@ struct OpenTypeFontFile
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!u.tag.sanitize (c))) return TRACE_RETURN (false);
     switch (u.tag) {
     case CFFTag:       /* All the non-collection tags */
@@ -253,5 +255,7 @@ struct OpenTypeFontFile
 };
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OPEN_FILE_PRIVATE_HH */
index 4d8c507..90f2836 100644 (file)
@@ -34,6 +34,9 @@
 #include "hb-blob.h"
 
 
+namespace OT {
+
+
 
 /*
  * Casts
@@ -136,13 +139,13 @@ static const void *_NullPool[64 / sizeof (void *)];
 /* Generic nul-content Null objects. */
 template <typename Type>
 static inline const Type& Null (void) {
-  ASSERT_STATIC (Type::min_size <= sizeof (_NullPool));
+  ASSERT_STATIC (sizeof (Type) <= sizeof (_NullPool));
   return *CastP<Type> (_NullPool);
 }
 
 /* Specializaiton for arbitrary-content arbitrary-sized Null objects. */
 #define DEFINE_NULL_DATA(Type, data) \
-static const char _Null##Type[Type::min_size + 1] = data; /* +1 is for nul-termination in data */ \
+static const char _Null##Type[sizeof (Type) + 1] = data; /* +1 is for nul-termination in data */ \
 template <> \
 inline const Type& Null<Type> (void) { \
   return *CastP<Type> (_Null##Type); \
@@ -163,12 +166,22 @@ ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
 #endif
 
 
-#define TRACE_SANITIZE() \
-       hb_auto_trace_t<HB_DEBUG_SANITIZE> trace (&c->debug_depth, "SANITIZE", this, HB_FUNC, "");
+#define TRACE_SANITIZE(this) \
+       hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace \
+       (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+        "");
 
 
 struct hb_sanitize_context_t
 {
+  inline const char *get_name (void) { return "SANITIZE"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_SANITIZE;
+  typedef bool return_t;
+  template <typename T>
+  inline return_t process (const T &obj) { return obj.sanitize (this); }
+  static return_t default_return_value (void) { return true; }
+  bool stop_sublookup_iteration (const return_t r HB_UNUSED) const { return false; }
+
   inline void init (hb_blob_t *b)
   {
     this->blob = hb_blob_reference (b);
@@ -203,10 +216,11 @@ struct hb_sanitize_context_t
   {
     const char *p = (const char *) base;
 
-    hb_auto_trace_t<HB_DEBUG_SANITIZE> trace (&this->debug_depth, "SANITIZE", this->blob, NULL,
-                                             "check_range [%p..%p] (%d bytes) in [%p..%p]",
-                                             p, p + len, len,
-                                             this->start, this->end);
+    hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace
+      (&this->debug_depth, "SANITIZE", this->blob, NULL,
+       "check_range [%p..%p] (%d bytes) in [%p..%p]",
+       p, p + len, len,
+       this->start, this->end);
 
     return TRACE_RETURN (likely (this->start <= p && p <= this->end && (unsigned int) (this->end - p) >= len));
   }
@@ -216,10 +230,11 @@ struct hb_sanitize_context_t
     const char *p = (const char *) base;
     bool overflows = _hb_unsigned_int_mul_overflows (len, record_size);
 
-    hb_auto_trace_t<HB_DEBUG_SANITIZE> trace (&this->debug_depth, "SANITIZE", this->blob, NULL,
-                                             "check_array [%p..%p] (%d*%d=%ld bytes) in [%p..%p]",
-                                             p, p + (record_size * len), record_size, len, (unsigned long) record_size * len,
-                                             this->start, this->end);
+    hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace
+      (&this->debug_depth, "SANITIZE", this->blob, NULL,
+       "check_array [%p..%p] (%d*%d=%ld bytes) in [%p..%p]",
+       p, p + (record_size * len), record_size, len, (unsigned long) record_size * len,
+       this->start, this->end);
 
     return TRACE_RETURN (likely (!overflows && this->check_range (base, record_size * len)));
   }
@@ -235,11 +250,13 @@ struct hb_sanitize_context_t
     const char *p = (const char *) base;
     this->edit_count++;
 
-    hb_auto_trace_t<HB_DEBUG_SANITIZE> trace (&this->debug_depth, "SANITIZE", this->blob, NULL,
-                                             "may_edit(%u) [%p..%p] (%d bytes) in [%p..%p] -> %s",
-                                             this->edit_count,
-                                             p, p + len, len,
-                                             this->start, this->end);
+    hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace
+      (&this->debug_depth, "SANITIZE", this->blob, NULL,
+       "may_edit(%u) [%p..%p] (%d bytes) in [%p..%p] -> %s",
+       this->edit_count,
+       p, p + len, len,
+       this->start, this->end,
+       this->writable ? "GRANTED" : "DENIED");
 
     return TRACE_RETURN (this->writable);
   }
@@ -325,6 +342,162 @@ struct Sanitizer
 
 
 
+/*
+ * Serialize
+ */
+
+#ifndef HB_DEBUG_SERIALIZE
+#define HB_DEBUG_SERIALIZE (HB_DEBUG+0)
+#endif
+
+
+#define TRACE_SERIALIZE(this) \
+       hb_auto_trace_t<HB_DEBUG_SERIALIZE, bool> trace \
+       (&c->debug_depth, "SERIALIZE", c, HB_FUNC, \
+        "");
+
+
+struct hb_serialize_context_t
+{
+  inline hb_serialize_context_t (void *start, unsigned int size)
+  {
+    this->start = (char *) start;
+    this->end = this->start + size;
+
+    this->ran_out_of_room = false;
+    this->head = this->start;
+    this->debug_depth = 0;
+  }
+
+  template <typename Type>
+  inline Type *start_serialize (void)
+  {
+    DEBUG_MSG_LEVEL (SERIALIZE, this->start, 0, +1,
+                    "start [%p..%p] (%lu bytes)",
+                    this->start, this->end,
+                    (unsigned long) (this->end - this->start));
+
+    return start_embed<Type> ();
+  }
+
+  inline void end_serialize (void)
+  {
+    DEBUG_MSG_LEVEL (SERIALIZE, this->start, 0, -1,
+                    "end [%p..%p] serialized %d bytes; %s",
+                    this->start, this->end,
+                    (int) (this->head - this->start),
+                    this->ran_out_of_room ? "RAN OUT OF ROOM" : "did not ran out of room");
+
+  }
+
+  template <typename Type>
+  inline Type *copy (void)
+  {
+    assert (!this->ran_out_of_room);
+    unsigned int len = this->head - this->start;
+    void *p = malloc (len);
+    if (p)
+      memcpy (p, this->start, len);
+    return reinterpret_cast<Type *> (p);
+  }
+
+  template <typename Type>
+  inline Type *allocate_size (unsigned int size)
+  {
+    if (unlikely (this->ran_out_of_room || this->end - this->head < size)) {
+      this->ran_out_of_room = true;
+      return NULL;
+    }
+    memset (this->head, 0, size);
+    char *ret = this->head;
+    this->head += size;
+    return reinterpret_cast<Type *> (ret);
+  }
+
+  template <typename Type>
+  inline Type *allocate_min (void)
+  {
+    return this->allocate_size<Type> (Type::min_size);
+  }
+
+  template <typename Type>
+  inline Type *start_embed (void)
+  {
+    Type *ret = reinterpret_cast<Type *> (this->head);
+    return ret;
+  }
+
+  template <typename Type>
+  inline Type *embed (const Type &obj)
+  {
+    unsigned int size = obj.get_size ();
+    Type *ret = this->allocate_size<Type> (size);
+    if (unlikely (!ret)) return NULL;
+    memcpy (ret, obj, size);
+    return ret;
+  }
+
+  template <typename Type>
+  inline Type *extend_min (Type &obj)
+  {
+    unsigned int size = obj.min_size;
+    assert (this->start <= (char *) &obj && (char *) &obj <= this->head && (char *) &obj + size >= this->head);
+    if (unlikely (!this->allocate_size<Type> (((char *) &obj) + size - this->head))) return NULL;
+    return reinterpret_cast<Type *> (&obj);
+  }
+
+  template <typename Type>
+  inline Type *extend (Type &obj)
+  {
+    unsigned int size = obj.get_size ();
+    assert (this->start < (char *) &obj && (char *) &obj <= this->head && (char *) &obj + size >= this->head);
+    if (unlikely (!this->allocate_size<Type> (((char *) &obj) + size - this->head))) return NULL;
+    return reinterpret_cast<Type *> (&obj);
+  }
+
+  inline void truncate (void *head)
+  {
+    assert (this->start < head && head <= this->head);
+    this->head = (char *) head;
+  }
+
+  unsigned int debug_depth;
+  char *start, *end, *head;
+  bool ran_out_of_room;
+};
+
+template <typename Type>
+struct Supplier
+{
+  inline Supplier (const Type *array, unsigned int len_)
+  {
+    head = array;
+    len = len_;
+  }
+  inline const Type operator [] (unsigned int i) const
+  {
+    if (unlikely (i >= len)) return Type ();
+    return head[i];
+  }
+
+  inline void advance (unsigned int count)
+  {
+    if (unlikely (count > len))
+      count = len;
+    len -= count;
+    head += count;
+  }
+
+  private:
+  inline Supplier (const Supplier<Type> &); /* Disallow copy */
+  inline Supplier<Type>& operator= (const Supplier<Type> &); /* Disallow copy */
+
+  unsigned int len;
+  const Type *head;
+};
+
+
+
 
 /*
  *
@@ -362,35 +535,43 @@ struct BEInt<Type, 4>
   inline bool operator != (const BEInt<Type, 4>& o) const { return !(*this == o); }
   private: uint8_t v[4];
 };
+template <typename Type>
+struct BEInt<Type, 3>
+{
+  public:
+  inline void set (Type i) { hb_be_uint24_put (v,i); }
+  inline operator Type (void) const { return hb_be_uint24_get (v); }
+  inline bool operator == (const BEInt<Type, 3>& o) const { return hb_be_uint24_eq (v, o.v); }
+  inline bool operator != (const BEInt<Type, 3>& o) const { return !(*this == o); }
+  private: uint8_t v[3];
+};
 
 /* Integer types in big-endian order and no alignment requirement */
-template <typename Type>
+template <typename Type, unsigned int Size>
 struct IntType
 {
   inline void set (Type i) { v.set (i); }
   inline operator Type(void) const { return v; }
-  inline bool operator == (const IntType<Type> &o) const { return v == o.v; }
-  inline bool operator != (const IntType<Type> &o) const { return v != o.v; }
+  inline bool operator == (const IntType<Type,Size> &o) const { return v == o.v; }
+  inline bool operator != (const IntType<Type,Size> &o) const { return v != o.v; }
+  static inline int cmp (const IntType<Type,Size> *a, const IntType<Type,Size> *b) { return b->cmp (*a); }
+  inline int cmp (IntType<Type,Size> va) const { Type a = va; Type b = v; return a < b ? -1 : a == b ? 0 : +1; }
   inline int cmp (Type a) const { Type b = v; return a < b ? -1 : a == b ? 0 : +1; }
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (likely (c->check_struct (this)));
   }
   protected:
-  BEInt<Type, sizeof (Type)> v;
+  BEInt<Type, Size> v;
   public:
-  DEFINE_SIZE_STATIC (sizeof (Type));
+  DEFINE_SIZE_STATIC (Size);
 };
 
-/* Typedef these to avoid clash with windows.h */
-#define USHORT HB_USHORT
-#define SHORT  HB_SHORT
-#define ULONG  HB_ULONG
-#define LONG   HB_LONG
-typedef IntType<uint16_t> USHORT;      /* 16-bit unsigned integer. */
-typedef IntType<int16_t>  SHORT;       /* 16-bit signed integer. */
-typedef IntType<uint32_t> ULONG;       /* 32-bit unsigned integer. */
-typedef IntType<int32_t>  LONG;                /* 32-bit signed integer. */
+typedef IntType<uint16_t, 2> USHORT;   /* 16-bit unsigned integer. */
+typedef IntType<int16_t,  2> SHORT;    /* 16-bit signed integer. */
+typedef IntType<uint32_t, 4> ULONG;    /* 32-bit unsigned integer. */
+typedef IntType<int32_t,  4> LONG;     /* 32-bit signed integer. */
+typedef IntType<uint32_t, 3> UINT24;   /* 24-bit unsigned integer. */
 
 /* 16-bit signed integer (SHORT) that describes a quantity in FUnits. */
 typedef SHORT FWORD;
@@ -403,7 +584,7 @@ typedef USHORT UFWORD;
 struct LONGDATETIME
 {
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (likely (c->check_struct (this)));
   }
   private:
@@ -435,10 +616,20 @@ struct Index : USHORT {
 DEFINE_NULL_DATA (Index, "\xff\xff");
 
 /* Offset to a table, same as uint16 (length = 16 bits), Null offset = 0x0000 */
-typedef USHORT Offset;
+struct Offset : USHORT
+{
+  inline bool is_null (void) const { return 0 == *this; }
+  public:
+  DEFINE_SIZE_STATIC (2);
+};
 
 /* LongOffset to a table, same as uint32 (length = 32 bits), Null offset = 0x00000000 */
-typedef ULONG LongOffset;
+struct LongOffset : ULONG
+{
+  inline bool is_null (void) const { return 0 == *this; }
+  public:
+  DEFINE_SIZE_STATIC (4);
+};
 
 
 /* CheckSum */
@@ -467,7 +658,7 @@ struct FixedVersion
   inline uint32_t to_int (void) const { return (major << 16) + minor; }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -493,9 +684,21 @@ struct GenericOffsetTo : OffsetType
     if (unlikely (!offset)) return Null(Type);
     return StructAtOffset<Type> (base, offset);
   }
+  inline Type& operator () (void *base)
+  {
+    unsigned int offset = *this;
+    return StructAtOffset<Type> (base, offset);
+  }
+
+  inline Type& serialize (hb_serialize_context_t *c, void *base)
+  {
+    Type *t = c->start_embed<Type> ();
+    this->set ((char *) t - (char *) base); /* TODO(serialize) Overflow? */
+    return *t;
+  }
 
   inline bool sanitize (hb_sanitize_context_t *c, void *base) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!c->check_struct (this))) return TRACE_RETURN (false);
     unsigned int offset = *this;
     if (unlikely (!offset)) return TRACE_RETURN (true);
@@ -504,7 +707,7 @@ struct GenericOffsetTo : OffsetType
   }
   template <typename T>
   inline bool sanitize (hb_sanitize_context_t *c, void *base, T user_data) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!c->check_struct (this))) return TRACE_RETURN (false);
     unsigned int offset = *this;
     if (unlikely (!offset)) return TRACE_RETURN (true);
@@ -512,7 +715,13 @@ struct GenericOffsetTo : OffsetType
     return TRACE_RETURN (likely (obj.sanitize (c, user_data)) || neuter (c));
   }
 
-  private:
+  inline bool try_set (hb_sanitize_context_t *c, const OffsetType &v) {
+    if (c->may_edit (this, this->static_size)) {
+      this->set (v);
+      return true;
+    }
+    return false;
+  }
   /* Set the offset to Null */
   inline bool neuter (hb_sanitize_context_t *c) {
     if (c->may_edit (this, this->static_size)) {
@@ -523,7 +732,9 @@ struct GenericOffsetTo : OffsetType
   }
 };
 template <typename Base, typename OffsetType, typename Type>
-inline const Type& operator + (const Base &base, GenericOffsetTo<OffsetType, Type> offset) { return offset (base); }
+inline const Type& operator + (const Base &base, const GenericOffsetTo<OffsetType, Type> &offset) { return offset (base); }
+template <typename Base, typename OffsetType, typename Type>
+inline Type& operator + (Base &base, GenericOffsetTo<OffsetType, Type> &offset) { return offset (base); }
 
 template <typename Type>
 struct OffsetTo : GenericOffsetTo<Offset, Type> {};
@@ -556,11 +767,37 @@ struct GenericArrayOf
     if (unlikely (i >= len)) return Null(Type);
     return array[i];
   }
+  inline Type& operator [] (unsigned int i)
+  {
+    return array[i];
+  }
   inline unsigned int get_size (void) const
   { return len.static_size + len * Type::static_size; }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        unsigned int items_len)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    len.set (items_len); /* TODO(serialize) Overflow? */
+    if (unlikely (!c->extend (*this))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
+  }
+
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<Type> &items,
+                        unsigned int items_len)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!serialize (c, items_len))) return TRACE_RETURN (false);
+    for (unsigned int i = 0; i < items_len; i++)
+      array[i] = items[i];
+    items.advance (items_len);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
 
     /* Note: for structs that do not reference other structs,
@@ -575,7 +812,7 @@ struct GenericArrayOf
     return TRACE_RETURN (true);
   }
   inline bool sanitize (hb_sanitize_context_t *c, void *base) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
     unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
@@ -585,7 +822,7 @@ struct GenericArrayOf
   }
   template <typename T>
   inline bool sanitize (hb_sanitize_context_t *c, void *base, T user_data) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
     unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
@@ -596,7 +833,7 @@ struct GenericArrayOf
 
   private:
   inline bool sanitize_shallow (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && c->check_array (this, Type::static_size, len));
   }
 
@@ -638,12 +875,12 @@ struct OffsetListOf : OffsetArrayOf<Type>
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (OffsetArrayOf<Type>::sanitize (c, this));
   }
   template <typename T>
   inline bool sanitize (hb_sanitize_context_t *c, T user_data) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (OffsetArrayOf<Type>::sanitize (c, this, user_data));
   }
 };
@@ -662,13 +899,28 @@ struct HeadlessArrayOf
   inline unsigned int get_size (void) const
   { return len.static_size + (len ? len - 1 : 0) * Type::static_size; }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<Type> &items,
+                        unsigned int items_len)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    len.set (items_len); /* TODO(serialize) Overflow? */
+    if (unlikely (!items_len)) return TRACE_RETURN (true);
+    if (unlikely (!c->extend (*this))) return TRACE_RETURN (false);
+    for (unsigned int i = 0; i < items_len - 1; i++)
+      array[i] = items[i];
+    items.advance (items_len - 1);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize_shallow (hb_sanitize_context_t *c) {
     return c->check_struct (this)
        && c->check_array (this, Type::static_size, len);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
 
     /* Note: for structs that do not reference other structs,
@@ -714,5 +966,7 @@ struct SortedArrayOf : ArrayOf<Type> {
 };
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OPEN_TYPE_PRIVATE_HH */
index bf2d245..3a94512 100644 (file)
@@ -32,6 +32,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * head -- Font Header
@@ -45,12 +47,12 @@ struct head
 
   inline unsigned int get_upem (void) const {
     unsigned int upem = unitsPerEm;
-    /* If no valid head table found, assume 1000, which matches typicaly Type1 usage. */
+    /* If no valid head table found, assume 1000, which matches typical Type1 usage. */
     return 16 <= upem && upem <= 16384 ? upem : 1000;
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
   }
 
@@ -141,5 +143,7 @@ struct head
 };
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OT_HEAD_TABLE_HH */
index 24f8bdc..2b89c4e 100644 (file)
@@ -30,6 +30,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * hhea -- The Horizontal Header Table
@@ -43,7 +45,7 @@ struct hhea
   static const hb_tag_t Tag    = HB_OT_TAG_hhea;
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
   }
 
@@ -89,4 +91,7 @@ struct hhea
 };
 
 
+} /* namespace OT */
+
+
 #endif /* HB_OT_HHEA_TABLE_HH */
index cc7cfbb..b94337d 100644 (file)
@@ -30,6 +30,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * hmtx -- The Horizontal Metrics Table
@@ -51,7 +53,7 @@ struct hmtx
   static const hb_tag_t Tag    = HB_OT_TAG_hmtx;
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     /* We don't check for anything specific here.  The users of the
      * struct do all the hard work... */
     return TRACE_RETURN (true);
@@ -83,4 +85,8 @@ struct hmtx
   DEFINE_SIZE_ARRAY2 (0, longHorMetric, leftSideBearingX);
 };
 
+
+} /* namespace OT */
+
+
 #endif /* HB_OT_HMTX_TABLE_HH */
index cea5b75..e6018db 100644 (file)
@@ -34,6 +34,9 @@
 #include "hb-set-private.hh"
 
 
+namespace OT {
+
+
 #define NOT_COVERED            ((unsigned int) -1)
 #define MAX_NESTING_LEVEL      8
 
@@ -57,9 +60,14 @@ struct Record
     return tag.cmp (a);
   }
 
+  struct sanitize_closure_t {
+    hb_tag_t tag;
+    void *list_base;
+  };
   inline bool sanitize (hb_sanitize_context_t *c, void *base) {
-    TRACE_SANITIZE ();
-    return TRACE_RETURN (c->check_struct (this) && offset.sanitize (c, base));
+    TRACE_SANITIZE (this);
+    const sanitize_closure_t closure = {tag, base};
+    return TRACE_RETURN (c->check_struct (this) && offset.sanitize (c, base, &closure));
   }
 
   Tag          tag;            /* 4-byte Tag identifier */
@@ -112,7 +120,7 @@ struct RecordListOf : RecordArrayOf<Type>
   { return this+RecordArrayOf<Type>::operator [](i).offset; }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (RecordArrayOf<Type>::sanitize (c, this));
   }
 };
@@ -126,7 +134,7 @@ struct RangeRecord
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -189,8 +197,9 @@ struct LangSys
    return reqFeatureIndex;;
   }
 
-  inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+  inline bool sanitize (hb_sanitize_context_t *c,
+                       const Record<LangSys>::sanitize_closure_t * = NULL) {
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && featureIndex.sanitize (c));
   }
 
@@ -227,8 +236,9 @@ struct Script
   inline bool has_default_lang_sys (void) const { return defaultLangSys != 0; }
   inline const LangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
 
-  inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+  inline bool sanitize (hb_sanitize_context_t *c,
+                       const Record<Script>::sanitize_closure_t * = NULL) {
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
   }
 
@@ -246,6 +256,219 @@ struct Script
 typedef RecordListOf<Script> ScriptList;
 
 
+/* http://www.microsoft.com/typography/otspec/features_pt.htm#size */
+struct FeatureParamsSize
+{
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    if (unlikely (!c->check_struct (this))) return TRACE_RETURN (false);
+
+    /* This subtable has some "history", if you will.  Some earlier versions of
+     * Adobe tools calculated the offset of the FeatureParams sutable from the
+     * beginning of the FeatureList table!  Now, that is dealt with in the
+     * Feature implementation.  But we still need to be able to tell junk from
+     * real data.  Note: We don't check that the nameID actually exists.
+     *
+     * Read Roberts wrote on 9/15/06 on opentype-list@indx.co.uk :
+     *
+     * Yes, it is correct that a new version of the AFDKO (version 2.0) will be
+     * coming out soon, and that the makeotf program will build a font with a
+     * 'size' feature that is correct by the specification.
+     *
+     * The specification for this feature tag is in the "OpenType Layout Tag
+     * Registry". You can see a copy of this at:
+     * http://partners.adobe.com/public/developer/opentype/index_tag8.html#size
+     *
+     * Here is one set of rules to determine if the 'size' feature is built
+     * correctly, or as by the older versions of MakeOTF. You may be able to do
+     * better.
+     *
+     * Assume that the offset to the size feature is according to specification,
+     * and make the following value checks. If it fails, assume the the size
+     * feature is calculated as versions of MakeOTF before the AFDKO 2.0 built it.
+     * If this fails, reject the 'size' feature. The older makeOTF's calculated the
+     * offset from the beginning of the FeatureList table, rather than from the
+     * beginning of the 'size' Feature table.
+     *
+     * If "design size" == 0:
+     *     fails check
+     *
+     * Else if ("subfamily identifier" == 0 and
+     *     "range start" == 0 and
+     *     "range end" == 0 and
+     *     "range start" == 0 and
+     *     "menu name ID" == 0)
+     *     passes check: this is the format used when there is a design size
+     * specified, but there is no recommended size range.
+     *
+     * Else if ("design size" <  "range start" or
+     *     "design size" >   "range end" or
+     *     "range end" <= "range start" or
+     *     "menu name ID"  < 256 or
+     *     "menu name ID"  > 32767 or
+     *     menu name ID is not a name ID which is actually in the name table)
+     *     fails test
+     * Else
+     *     passes test.
+     */
+
+    if (!designSize)
+      return TRACE_RETURN (false);
+    else if (subfamilyID == 0 &&
+            subfamilyNameID == 0 &&
+            rangeStart == 0 &&
+            rangeEnd == 0)
+      return TRACE_RETURN (true);
+    else if (designSize < rangeStart ||
+            designSize > rangeEnd ||
+            subfamilyNameID < 256 ||
+            subfamilyNameID > 32767)
+      return TRACE_RETURN (false);
+    else
+      return TRACE_RETURN (true);
+  }
+
+  USHORT       designSize;     /* Represents the design size in 720/inch
+                                * units (decipoints).  The design size entry
+                                * must be non-zero.  When there is a design
+                                * size but no recommended size range, the
+                                * rest of the array will consist of zeros. */
+  USHORT       subfamilyID;    /* Has no independent meaning, but serves
+                                * as an identifier that associates fonts
+                                * in a subfamily. All fonts which share a
+                                * Preferred or Font Family name and which
+                                * differ only by size range shall have the
+                                * same subfamily value, and no fonts which
+                                * differ in weight or style shall have the
+                                * same subfamily value. If this value is
+                                * zero, the remaining fields in the array
+                                * will be ignored. */
+  USHORT       subfamilyNameID;/* If the preceding value is non-zero, this
+                                * value must be set in the range 256 - 32767
+                                * (inclusive). It records the value of a
+                                * field in the name table, which must
+                                * contain English-language strings encoded
+                                * in Windows Unicode and Macintosh Roman,
+                                * and may contain additional strings
+                                * localized to other scripts and languages.
+                                * Each of these strings is the name an
+                                * application should use, in combination
+                                * with the family name, to represent the
+                                * subfamily in a menu.  Applications will
+                                * choose the appropriate version based on
+                                * their selection criteria. */
+  USHORT       rangeStart;     /* Large end of the recommended usage range
+                                * (inclusive), stored in 720/inch units
+                                * (decipoints). */
+  USHORT       rangeEnd;       /* Small end of the recommended usage range
+                                  (exclusive), stored in 720/inch units
+                                * (decipoints). */
+  public:
+  DEFINE_SIZE_STATIC (10);
+};
+
+/* http://www.microsoft.com/typography/otspec/features_pt.htm#ssxx */
+struct FeatureParamsStylisticSet
+{
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    /* Right now minorVersion is at zero.  Which means, any table supports
+     * the uiNameID field. */
+    return TRACE_RETURN (c->check_struct (this));
+  }
+
+  USHORT       minorVersion;   /* (set to 0): This corresponds to a “minor”
+                                * version number. Additional data may be
+                                * added to the end of this Feature Parameters
+                                * table in the future. */
+
+  USHORT       uiNameID;       /* The 'name' table name ID that specifies a
+                                * string (or strings, for multiple languages)
+                                * for a user-interface label for this
+                                * feature.  The values of uiLabelNameId and
+                                * sampleTextNameId are expected to be in the
+                                * font-specific name ID range (256-32767),
+                                * though that is not a requirement in this
+                                * Feature Parameters specification. The
+                                * user-interface label for the feature can
+                                * be provided in multiple languages. An
+                                * English string should be included as a
+                                * fallback. The string should be kept to a
+                                * minimal length to fit comfortably with
+                                * different application interfaces. */
+  public:
+  DEFINE_SIZE_STATIC (4);
+};
+
+struct FeatureParamsCharacterVariants
+{
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) &&
+                        characters.sanitize (c));
+  }
+
+  USHORT       format;                 /* Format number is set to 0. */
+  USHORT       featUILableNameID;      /* The ‘name’ table name ID that
+                                        * specifies a string (or strings,
+                                        * for multiple languages) for a
+                                        * user-interface label for this
+                                        * feature. (May be NULL.) */
+  USHORT       featUITooltipTextNameID;/* The ‘name’ table name ID that
+                                        * specifies a string (or strings,
+                                        * for multiple languages) that an
+                                        * application can use for tooltip
+                                        * text for this feature. (May be
+                                        * NULL.) */
+  USHORT       sampleTextNameID;       /* The ‘name’ table name ID that
+                                        * specifies sample text that
+                                        * illustrates the effect of this
+                                        * feature. (May be NULL.) */
+  USHORT       numNamedParameters;     /* Number of named parameters. (May
+                                        * be zero.) */
+  USHORT       firstParamUILabelNameID;/* The first ‘name’ table name ID
+                                        * used to specify strings for
+                                        * user-interface labels for the
+                                        * feature parameters. (Must be zero
+                                        * if numParameters is zero.) */
+  ArrayOf<UINT24>
+               characters;             /* Array of the Unicode Scalar Value
+                                        * of the characters for which this
+                                        * feature provides glyph variants.
+                                        * (May be zero.) */
+  public:
+  DEFINE_SIZE_ARRAY (14, characters);
+};
+
+struct FeatureParams
+{
+  inline bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) {
+    TRACE_SANITIZE (this);
+    if (tag == HB_TAG ('s','i','z','e'))
+      return TRACE_RETURN (u.size.sanitize (c));
+    if ((tag & 0xFFFF0000) == HB_TAG ('s','s','\0','\0')) /* ssXX */
+      return TRACE_RETURN (u.stylisticSet.sanitize (c));
+    if ((tag & 0xFFFF0000) == HB_TAG ('c','v','\0','\0')) /* cvXX */
+      return TRACE_RETURN (u.characterVariants.sanitize (c));
+    return TRACE_RETURN (true);
+  }
+
+  inline const FeatureParamsSize& get_size_params (hb_tag_t tag) const
+  {
+    if (tag == HB_TAG ('s','i','z','e'))
+      return u.size;
+    return Null(FeatureParamsSize);
+  }
+
+  private:
+  union {
+  FeatureParamsSize                    size;
+  FeatureParamsStylisticSet            stylisticSet;
+  FeatureParamsCharacterVariants       characterVariants;
+  } u;
+  DEFINE_SIZE_STATIC (17);
+};
+
 struct Feature
 {
   inline unsigned int get_lookup_count (void) const
@@ -257,12 +480,54 @@ struct Feature
                                          unsigned int *lookup_tags /* OUT */) const
   { return lookupIndex.get_indexes (start_index, lookup_count, lookup_tags); }
 
-  inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
-    return TRACE_RETURN (c->check_struct (this) && lookupIndex.sanitize (c));
+  inline const FeatureParams &get_feature_params (void) const
+  { return this+featureParams; }
+
+  inline bool sanitize (hb_sanitize_context_t *c,
+                       const Record<Feature>::sanitize_closure_t *closure) {
+    TRACE_SANITIZE (this);
+    if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c))))
+      return TRACE_RETURN (false);
+
+    /* Some earlier versions of Adobe tools calculated the offset of the
+     * FeatureParams subtable from the beginning of the FeatureList table!
+     *
+     * If sanitizing "failed" for the FeatureParams subtable, try it with the
+     * alternative location.  We would know sanitize "failed" if old value
+     * of the offset was non-zero, but it's zeroed now.
+     *
+     * Only do this for the 'size' feature, since at the time of the faulty
+     * Adobe tools, only the 'size' feature had FeatureParams defined.
+     */
+
+    Offset orig_offset = featureParams;
+    if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
+      return TRACE_RETURN (false);
+
+    if (likely (!orig_offset))
+      return TRACE_RETURN (true);
+
+    if (featureParams == 0 && closure &&
+       closure->tag == HB_TAG ('s','i','z','e') &&
+       closure->list_base && closure->list_base < this)
+    {
+      unsigned int new_offset_int = (unsigned int) orig_offset -
+                                   ((char *) this - (char *) closure->list_base);
+
+      Offset new_offset;
+      /* Check that it did not overflow. */
+      new_offset.set (new_offset_int);
+      if (new_offset == new_offset_int &&
+         featureParams.try_set (c, new_offset) &&
+         !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
+       return TRACE_RETURN (false);
+    }
+
+    return TRACE_RETURN (true);
   }
 
-  Offset       featureParams;  /* Offset to Feature Parameters table (if one
+  OffsetTo<FeatureParams>
+                featureParams; /* Offset to Feature Parameters table (if one
                                 * has been defined for the feature), relative
                                 * to the beginning of the Feature Table; = Null
                                 * if not required */
@@ -310,11 +575,29 @@ struct Lookup
     return flag;
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        unsigned int lookup_type,
+                        uint32_t lookup_props,
+                        unsigned int num_subtables)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    lookupType.set (lookup_type);
+    lookupFlag.set (lookup_props & 0xFFFF);
+    if (unlikely (!subTable.serialize (c, num_subtables))) return TRACE_RETURN (false);
+    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
+    {
+      USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
+      markFilteringSet.set (lookup_props >> 16);
+    }
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     /* Real sanitize of the subtables is done by GSUB/GPOS/... */
     if (!(c->check_struct (this) && subTable.sanitize (c))) return TRACE_RETURN (false);
-    if (unlikely (lookupFlag & LookupFlag::UseMarkFilteringSet))
+    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
     {
       USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
       if (!markFilteringSet.sanitize (c)) return TRACE_RETURN (false);
@@ -352,8 +635,22 @@ struct CoverageFormat1
     return i;
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        unsigned int num_glyphs)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    glyphArray.len.set (num_glyphs);
+    if (unlikely (!c->extend (glyphArray))) return TRACE_RETURN (false);
+    for (unsigned int i = 0; i < num_glyphs; i++)
+      glyphArray[i] = glyphs[i];
+    glyphs.advance (num_glyphs);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (glyphArray.sanitize (c));
   }
 
@@ -368,6 +665,8 @@ struct CoverageFormat1
       glyphs->add (glyphArray[i]);
   }
 
+  public:
+  /* Older compilers need this to be public. */
   struct Iter {
     inline void init (const struct CoverageFormat1 &c_) { c = &c_; i = 0; };
     inline bool more (void) { return i < c->glyphArray.len; }
@@ -379,6 +678,7 @@ struct CoverageFormat1
     const struct CoverageFormat1 *c;
     unsigned int i;
   };
+  private:
 
   protected:
   USHORT       coverageFormat; /* Format identifier--format = 1 */
@@ -403,8 +703,40 @@ struct CoverageFormat2
     return NOT_COVERED;
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        unsigned int num_glyphs)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+
+    if (unlikely (!num_glyphs)) return TRACE_RETURN (true);
+
+    unsigned int num_ranges = 1;
+    for (unsigned int i = 1; i < num_glyphs; i++)
+      if (glyphs[i - 1] + 1 != glyphs[i])
+        num_ranges++;
+    rangeRecord.len.set (num_ranges);
+    if (unlikely (!c->extend (rangeRecord))) return TRACE_RETURN (false);
+
+    unsigned int range = 0;
+    rangeRecord[range].start = glyphs[0];
+    rangeRecord[range].value.set (0);
+    for (unsigned int i = 1; i < num_glyphs; i++)
+      if (glyphs[i - 1] + 1 != glyphs[i]) {
+       range++;
+       rangeRecord[range].start = glyphs[i];
+       rangeRecord[range].value.set (i);
+        rangeRecord[range].end = glyphs[i];
+      } else {
+        rangeRecord[range].end = glyphs[i];
+      }
+    glyphs.advance (num_glyphs);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (rangeRecord.sanitize (c));
   }
 
@@ -430,6 +762,8 @@ struct CoverageFormat2
       rangeRecord[i].add_coverage (glyphs);
   }
 
+  public:
+  /* Older compilers need this to be public. */
   struct Iter {
     inline void init (const CoverageFormat2 &c_) {
       c = &c_;
@@ -455,6 +789,7 @@ struct CoverageFormat2
     const struct CoverageFormat2 *c;
     unsigned int i, j, coverage;
   };
+  private:
 
   protected:
   USHORT       coverageFormat; /* Format identifier--format = 2 */
@@ -468,8 +803,6 @@ struct CoverageFormat2
 
 struct Coverage
 {
-  inline unsigned int operator () (hb_codepoint_t glyph_id) const { return get_coverage (glyph_id); }
-
   inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
   {
     switch (u.format) {
@@ -479,8 +812,26 @@ struct Coverage
     }
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        unsigned int num_glyphs)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    unsigned int num_ranges = 1;
+    for (unsigned int i = 1; i < num_glyphs; i++)
+      if (glyphs[i - 1] + 1 != glyphs[i])
+        num_ranges++;
+    u.format.set (num_glyphs * 2 < num_ranges * 3 ? 1 : 2);
+    switch (u.format) {
+    case 1: return TRACE_RETURN (u.format1.serialize (c, glyphs, num_glyphs));
+    case 2: return TRACE_RETURN (u.format2.serialize (c, glyphs, num_glyphs));
+    default:return TRACE_RETURN (false);
+    }
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -591,10 +942,18 @@ struct ClassDefFormat1
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && classValue.sanitize (c));
   }
 
+  template <typename set_t>
+  inline void add_class (set_t *glyphs, unsigned int klass) const {
+    unsigned int count = classValue.len;
+    for (unsigned int i = 0; i < count; i++)
+      if (classValue[i] == klass)
+        glyphs->add (startGlyph + i);
+  }
+
   inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
     unsigned int count = classValue.len;
     for (unsigned int i = 0; i < count; i++)
@@ -626,10 +985,18 @@ struct ClassDefFormat2
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (rangeRecord.sanitize (c));
   }
 
+  template <typename set_t>
+  inline void add_class (set_t *glyphs, unsigned int klass) const {
+    unsigned int count = rangeRecord.len;
+    for (unsigned int i = 0; i < count; i++)
+      if (rangeRecord[i].value == klass)
+        rangeRecord[i].add_coverage (glyphs);
+  }
+
   inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
     unsigned int count = rangeRecord.len;
     for (unsigned int i = 0; i < count; i++)
@@ -649,8 +1016,6 @@ struct ClassDefFormat2
 
 struct ClassDef
 {
-  inline unsigned int operator () (hb_codepoint_t glyph_id) const { return get_class (glyph_id); }
-
   inline unsigned int get_class (hb_codepoint_t glyph_id) const
   {
     switch (u.format) {
@@ -661,7 +1026,7 @@ struct ClassDef
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -670,6 +1035,14 @@ struct ClassDef
     }
   }
 
+  inline void add_class (hb_set_t *glyphs, unsigned int klass) const {
+    switch (u.format) {
+    case 1: u.format1.add_class (glyphs, klass); return;
+    case 2: u.format2.add_class (glyphs, klass); return;
+    default:return;
+    }
+  }
+
   inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
     switch (u.format) {
     case 1: return u.format1.intersects_class (glyphs, klass);
@@ -745,7 +1118,7 @@ struct Device
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && c->check_range (this, this->get_size ()));
   }
 
@@ -763,5 +1136,7 @@ struct Device
 };
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OT_LAYOUT_COMMON_PRIVATE_HH */
index cebbe68..ff2d09c 100644 (file)
@@ -34,6 +34,8 @@
 #include "hb-font-private.hh"
 
 
+namespace OT {
+
 
 /*
  * Attachment List Table
@@ -49,7 +51,7 @@ struct AttachList
                                         unsigned int *point_count /* IN/OUT */,
                                         unsigned int *point_array /* OUT */) const
   {
-    unsigned int index = (this+coverage) (glyph_id);
+    unsigned int index = (this+coverage).get_coverage (glyph_id);
     if (index == NOT_COVERED)
     {
       if (point_count)
@@ -70,7 +72,7 @@ struct AttachList
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && attachPoint.sanitize (c, this));
   }
 
@@ -100,7 +102,7 @@ struct CaretValueFormat1
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -126,7 +128,7 @@ struct CaretValueFormat2
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -149,7 +151,7 @@ struct CaretValueFormat3
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && deviceTable.sanitize (c, this));
   }
 
@@ -177,7 +179,7 @@ struct CaretValue
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -218,7 +220,7 @@ struct LigGlyph
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (carets.sanitize (c, this));
   }
 
@@ -240,7 +242,7 @@ struct LigCaretList
                                      unsigned int *caret_count /* IN/OUT */,
                                      hb_position_t *caret_array /* OUT */) const
   {
-    unsigned int index = (this+coverage) (glyph_id);
+    unsigned int index = (this+coverage).get_coverage (glyph_id);
     if (index == NOT_COVERED)
     {
       if (caret_count)
@@ -252,7 +254,7 @@ struct LigCaretList
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && ligGlyph.sanitize (c, this));
   }
 
@@ -274,7 +276,7 @@ struct MarkGlyphSetsFormat1
   { return (this+coverage[set_index]).get_coverage (glyph_id) != NOT_COVERED; }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this));
   }
 
@@ -298,7 +300,7 @@ struct MarkGlyphSets
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -335,6 +337,8 @@ struct GDEF
   inline bool has_glyph_classes (void) const { return glyphClassDef != 0; }
   inline unsigned int get_glyph_class (hb_codepoint_t glyph) const
   { return (this+glyphClassDef).get_class (glyph); }
+  inline void get_glyphs_in_class (unsigned int klass, hb_set_t *glyphs) const
+  { (this+glyphClassDef).add_class (glyphs, klass); }
 
   inline bool has_mark_attachment_types (void) const { return markAttachClassDef != 0; }
   inline unsigned int get_mark_attachment_type (hb_codepoint_t glyph) const
@@ -361,7 +365,7 @@ struct GDEF
   { return version.to_int () >= 0x00010002 && (this+markGlyphSetsDef[0]).covers (set_index, glyph_id); }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (version.sanitize (c) &&
                         likely (version.major == 1) &&
                         glyphClassDef.sanitize (c, this) &&
@@ -381,13 +385,13 @@ struct GDEF
 
     switch (klass) {
     default:
-    case UnclassifiedGlyph:    return HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED;
-    case BaseGlyph:            return HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH;
-    case LigatureGlyph:                return HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE;
-    case ComponentGlyph:       return HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT;
+    case UnclassifiedGlyph:    return HB_OT_LAYOUT_GLYPH_PROPS_UNCLASSIFIED;
+    case BaseGlyph:            return HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH;
+    case LigatureGlyph:                return HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE;
+    case ComponentGlyph:       return HB_OT_LAYOUT_GLYPH_PROPS_COMPONENT;
     case MarkGlyph:
          klass = get_mark_attachment_type (glyph);
-         return HB_OT_LAYOUT_GLYPH_CLASS_MARK | (klass << 8);
+         return HB_OT_LAYOUT_GLYPH_PROPS_MARK | (klass << 8);
     }
   }
 
@@ -421,5 +425,7 @@ struct GDEF
 };
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OT_LAYOUT_GDEF_TABLE_HH */
index 41168b2..3e43694 100644 (file)
@@ -32,6 +32,8 @@
 #include "hb-ot-layout-gsubgpos-private.hh"
 
 
+namespace OT {
+
 
 /* buffer **position** var allocations */
 #define attach_lookback() var.u16[0] /* number of glyphs to go back to attach this glyph to its base */
@@ -170,12 +172,12 @@ struct ValueFormat : USHORT
   }
 
   inline bool sanitize_value (hb_sanitize_context_t *c, void *base, Value *values) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_range (values, get_size ()) && (!has_device () || sanitize_value_devices (c, base, values)));
   }
 
   inline bool sanitize_values (hb_sanitize_context_t *c, void *base, Value *values, unsigned int count) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     unsigned int len = get_len ();
 
     if (!c->check_array (values, get_size (), count)) return TRACE_RETURN (false);
@@ -193,7 +195,7 @@ struct ValueFormat : USHORT
 
   /* Just sanitize referenced Device tables.  Doesn't check the values themselves. */
   inline bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, void *base, Value *values, unsigned int count, unsigned int stride) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
 
     if (!has_device ()) return TRACE_RETURN (true);
 
@@ -210,9 +212,6 @@ struct ValueFormat : USHORT
 
 struct AnchorFormat1
 {
-  friend struct Anchor;
-
-  private:
   inline void get_anchor (hb_font_t *font, hb_codepoint_t glyph_id HB_UNUSED,
                          hb_position_t *x, hb_position_t *y) const
   {
@@ -221,7 +220,7 @@ struct AnchorFormat1
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -235,9 +234,6 @@ struct AnchorFormat1
 
 struct AnchorFormat2
 {
-  friend struct Anchor;
-
-  private:
   inline void get_anchor (hb_font_t *font, hb_codepoint_t glyph_id,
                          hb_position_t *x, hb_position_t *y) const
   {
@@ -253,7 +249,7 @@ struct AnchorFormat2
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -268,9 +264,6 @@ struct AnchorFormat2
 
 struct AnchorFormat3
 {
-  friend struct Anchor;
-
-  private:
   inline void get_anchor (hb_font_t *font, hb_codepoint_t glyph_id HB_UNUSED,
                          hb_position_t *x, hb_position_t *y) const
   {
@@ -284,7 +277,7 @@ struct AnchorFormat3
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && xDeviceTable.sanitize (c, this) && yDeviceTable.sanitize (c, this));
   }
 
@@ -319,7 +312,7 @@ struct Anchor
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -343,13 +336,15 @@ struct Anchor
 
 struct AnchorMatrix
 {
-  inline const Anchor& get_anchor (unsigned int row, unsigned int col, unsigned int cols) const {
+  inline const Anchor& get_anchor (unsigned int row, unsigned int col, unsigned int cols, bool *found) const {
+    *found = false;
     if (unlikely (row >= rows || col >= cols)) return Null(Anchor);
+    *found = !matrix[row * cols + col].is_null ();
     return this+matrix[row * cols + col];
   }
 
   inline bool sanitize (hb_sanitize_context_t *c, unsigned int cols) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!c->check_struct (this)) return TRACE_RETURN (false);
     if (unlikely (rows > 0 && cols >= ((unsigned int) -1) / rows)) return TRACE_RETURN (false);
     unsigned int count = rows * cols;
@@ -374,7 +369,7 @@ struct MarkRecord
   friend struct MarkArray;
 
   inline bool sanitize (hb_sanitize_context_t *c, void *base) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && markAnchor.sanitize (c, base));
   }
 
@@ -394,12 +389,16 @@ struct MarkArray : ArrayOf<MarkRecord>    /* Array of MarkRecords--in Coverage orde
                     const AnchorMatrix &anchors, unsigned int class_count,
                     unsigned int glyph_pos) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     const MarkRecord &record = ArrayOf<MarkRecord>::operator[](mark_index);
     unsigned int mark_class = record.klass;
 
     const Anchor& mark_anchor = this + record.markAnchor;
-    const Anchor& glyph_anchor = anchors.get_anchor (glyph_index, mark_class, class_count);
+    bool found;
+    const Anchor& glyph_anchor = anchors.get_anchor (glyph_index, mark_class, class_count, &found);
+    /* If this subtable doesn't have an anchor for this base and this class,
+     * return false such that the subsequent subtables have a chance at it. */
+    if (unlikely (!found)) return TRACE_RETURN (false);
 
     hb_position_t mark_x, mark_y, base_x, base_y;
 
@@ -416,7 +415,7 @@ struct MarkArray : ArrayOf<MarkRecord>      /* Array of MarkRecords--in Coverage orde
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (ArrayOf<MarkRecord>::sanitize (c, this));
   }
 };
@@ -426,9 +425,11 @@ struct MarkArray : ArrayOf<MarkRecord>     /* Array of MarkRecords--in Coverage orde
 
 struct SinglePosFormat1
 {
-  friend struct SinglePos;
-
-  private:
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+  }
 
   inline const Coverage &get_coverage (void) const
   {
@@ -437,8 +438,8 @@ struct SinglePosFormat1
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int index = (this+coverage).get_coverage  (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     valueFormat.apply_value (c->font, c->direction, this,
@@ -449,7 +450,7 @@ struct SinglePosFormat1
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && coverage.sanitize (c, this) && valueFormat.sanitize_value (c, this, values));
   }
 
@@ -469,9 +470,11 @@ struct SinglePosFormat1
 
 struct SinglePosFormat2
 {
-  friend struct SinglePos;
-
-  private:
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+  }
 
   inline const Coverage &get_coverage (void) const
   {
@@ -480,8 +483,8 @@ struct SinglePosFormat2
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int index = (this+coverage).get_coverage  (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     if (likely (index >= valueCount)) return TRACE_RETURN (false);
@@ -495,7 +498,7 @@ struct SinglePosFormat2
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && coverage.sanitize (c, this) && valueFormat.sanitize_values (c, this, values, valueCount));
   }
 
@@ -515,31 +518,19 @@ struct SinglePosFormat2
 
 struct SinglePos
 {
-  friend struct PosLookupSubTable;
-
-  private:
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    case 2: return u.format2.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
-    case 2: return TRACE_RETURN (u.format2.apply (c));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 2: return TRACE_RETURN (c->process (u.format2));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -575,17 +566,34 @@ struct PairSet
 {
   friend struct PairPosFormat1;
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c,
+                             const ValueFormat *valueFormats) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    unsigned int len1 = valueFormats[0].get_len ();
+    unsigned int len2 = valueFormats[1].get_len ();
+    unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
+
+    const PairValueRecord *record = CastP<PairValueRecord> (array);
+    unsigned int count = len;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      c->input->add (record->secondGlyph);
+      record = &StructAtOffset<PairValueRecord> (record, record_size);
+    }
+  }
+
   inline bool apply (hb_apply_context_t *c,
                     const ValueFormat *valueFormats,
                     unsigned int pos) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     unsigned int len1 = valueFormats[0].get_len ();
     unsigned int len2 = valueFormats[1].get_len ();
     unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
 
-    unsigned int count = len;
     const PairValueRecord *record = CastP<PairValueRecord> (array);
+    unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
     {
       if (c->buffer->info[pos].codepoint == record->secondGlyph)
@@ -613,7 +621,7 @@ struct PairSet
   };
 
   inline bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *closure) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!(c->check_struct (this)
        && c->check_array (array, USHORT::static_size * closure->stride, len))) return TRACE_RETURN (false);
 
@@ -633,9 +641,14 @@ struct PairSet
 
 struct PairPosFormat1
 {
-  friend struct PairPos;
-
-  private:
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+    unsigned int count = pairSet.len;
+    for (unsigned int i = 0; i < count; i++)
+      (this+pairSet[i]).collect_glyphs (c, &valueFormat1);
+  }
 
   inline const Coverage &get_coverage (void) const
   {
@@ -644,11 +657,11 @@ struct PairPosFormat1
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     hb_apply_context_t::mark_skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, 1);
     if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
 
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    unsigned int index = (this+coverage).get_coverage  (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     if (!skippy_iter.next ()) return TRACE_RETURN (false);
@@ -657,7 +670,7 @@ struct PairPosFormat1
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
 
     unsigned int len1 = valueFormat1.get_len ();
     unsigned int len2 = valueFormat2.get_len ();
@@ -691,9 +704,23 @@ struct PairPosFormat1
 
 struct PairPosFormat2
 {
-  friend struct PairPos;
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    /* (this+coverage).add_coverage (c->input); // Don't need this. */
 
-  private:
+    /* TODO only add values for pairs that have nonzero adjustments. */
+
+    unsigned int count1 = class1Count;
+    const ClassDef &klass1 = this+classDef1;
+    for (unsigned int i = 0; i < count1; i++)
+      klass1.add_class (c->input, i);
+
+    unsigned int count2 = class2Count;
+    const ClassDef &klass2 = this+classDef2;
+    for (unsigned int i = 0; i < count2; i++)
+      klass2.add_class (c->input, i);
+  }
 
   inline const Coverage &get_coverage (void) const
   {
@@ -702,11 +729,11 @@ struct PairPosFormat2
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     hb_apply_context_t::mark_skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, 1);
     if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
 
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    unsigned int index = (this+coverage).get_coverage  (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     if (!skippy_iter.next ()) return TRACE_RETURN (false);
@@ -715,8 +742,8 @@ struct PairPosFormat2
     unsigned int len2 = valueFormat2.get_len ();
     unsigned int record_len = len1 + len2;
 
-    unsigned int klass1 = (this+classDef1) (c->buffer->cur().codepoint);
-    unsigned int klass2 = (this+classDef2) (c->buffer->info[skippy_iter.idx].codepoint);
+    unsigned int klass1 = (this+classDef1).get_class (c->buffer->cur().codepoint);
+    unsigned int klass2 = (this+classDef2).get_class (c->buffer->info[skippy_iter.idx].codepoint);
     if (unlikely (klass1 >= class1Count || klass2 >= class2Count)) return TRACE_RETURN (false);
 
     const Value *v = &values[record_len * (klass1 * class2Count + klass2)];
@@ -733,7 +760,7 @@ struct PairPosFormat2
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!(c->check_struct (this)
        && coverage.sanitize (c, this)
        && classDef1.sanitize (c, this)
@@ -781,31 +808,19 @@ struct PairPosFormat2
 
 struct PairPos
 {
-  friend struct PosLookupSubTable;
-
-  private:
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    case 2: return u.format2.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
-    case 2: return TRACE_RETURN (u.format2.apply (c));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 2: return TRACE_RETURN (c->process (u.format2));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -828,7 +843,7 @@ struct EntryExitRecord
   friend struct CursivePosFormat1;
 
   inline bool sanitize (hb_sanitize_context_t *c, void *base) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base));
   }
 
@@ -847,9 +862,11 @@ struct EntryExitRecord
 
 struct CursivePosFormat1
 {
-  friend struct CursivePos;
-
-  private:
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+  }
 
   inline const Coverage &get_coverage (void) const
   {
@@ -858,20 +875,20 @@ struct CursivePosFormat1
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
 
     /* We don't handle mark glyphs here. */
-    if (c->property & HB_OT_LAYOUT_GLYPH_CLASS_MARK) return TRACE_RETURN (false);
+    if (c->property & HB_OT_LAYOUT_GLYPH_PROPS_MARK) return TRACE_RETURN (false);
 
     hb_apply_context_t::mark_skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, 1);
     if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
 
-    const EntryExitRecord &this_record = entryExitRecord[(this+coverage) (c->buffer->cur().codepoint)];
+    const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage  (c->buffer->cur().codepoint)];
     if (!this_record.exitAnchor) return TRACE_RETURN (false);
 
     if (!skippy_iter.next ()) return TRACE_RETURN (false);
 
-    const EntryExitRecord &next_record = entryExitRecord[(this+coverage) (c->buffer->info[skippy_iter.idx].codepoint)];
+    const EntryExitRecord &next_record = entryExitRecord[(this+coverage).get_coverage  (c->buffer->info[skippy_iter.idx].codepoint)];
     if (!next_record.entryAnchor) return TRACE_RETURN (false);
 
     unsigned int i = c->buffer->idx;
@@ -939,7 +956,7 @@ struct CursivePosFormat1
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this));
   }
 
@@ -957,29 +974,18 @@ struct CursivePosFormat1
 
 struct CursivePos
 {
-  friend struct PosLookupSubTable;
-
-  private:
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -1002,9 +1008,13 @@ typedef AnchorMatrix BaseArray;          /* base-major--
 
 struct MarkBasePosFormat1
 {
-  friend struct MarkBasePos;
-
-  private:
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+markCoverage).add_coverage (c->input);
+    (this+baseCoverage).add_coverage (c->input);
+    /* TODO only add combinations that have nonzero adjustment. */
+  }
 
   inline const Coverage &get_coverage (void) const
   {
@@ -1013,8 +1023,8 @@ struct MarkBasePosFormat1
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int mark_index = (this+markCoverage) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int mark_index = (this+markCoverage).get_coverage  (c->buffer->cur().codepoint);
     if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* now we search backwards for a non-mark glyph */
@@ -1028,16 +1038,16 @@ struct MarkBasePosFormat1
     } while (1);
 
     /* The following assertion is too strong, so we've disabled it. */
-    if (!(property & HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH)) {/*return TRACE_RETURN (false);*/}
+    if (!(property & HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH)) {/*return TRACE_RETURN (false);*/}
 
-    unsigned int base_index = (this+baseCoverage) (c->buffer->info[skippy_iter.idx].codepoint);
+    unsigned int base_index = (this+baseCoverage).get_coverage  (c->buffer->info[skippy_iter.idx].codepoint);
     if (base_index == NOT_COVERED) return TRACE_RETURN (false);
 
     return TRACE_RETURN ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, skippy_iter.idx));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && markCoverage.sanitize (c, this) && baseCoverage.sanitize (c, this) &&
                         markArray.sanitize (c, this) && baseArray.sanitize (c, this, (unsigned int) classCount));
   }
@@ -1063,29 +1073,18 @@ struct MarkBasePosFormat1
 
 struct MarkBasePos
 {
-  friend struct PosLookupSubTable;
-
-  private:
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -1113,9 +1112,13 @@ typedef OffsetListOf<LigatureAttach> LigatureArray;
 
 struct MarkLigPosFormat1
 {
-  friend struct MarkLigPos;
-
-  private:
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+markCoverage).add_coverage (c->input);
+    (this+ligatureCoverage).add_coverage (c->input);
+    /* TODO only add combinations that have nonzero adjustment. */
+  }
 
   inline const Coverage &get_coverage (void) const
   {
@@ -1124,8 +1127,8 @@ struct MarkLigPosFormat1
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int mark_index = (this+markCoverage) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int mark_index = (this+markCoverage).get_coverage  (c->buffer->cur().codepoint);
     if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* now we search backwards for a non-mark glyph */
@@ -1134,10 +1137,10 @@ struct MarkLigPosFormat1
     if (!skippy_iter.prev (&property, LookupFlag::IgnoreMarks)) return TRACE_RETURN (false);
 
     /* The following assertion is too strong, so we've disabled it. */
-    if (!(property & HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE)) {/*return TRACE_RETURN (false);*/}
+    if (!(property & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE)) {/*return TRACE_RETURN (false);*/}
 
     unsigned int j = skippy_iter.idx;
-    unsigned int lig_index = (this+ligatureCoverage) (c->buffer->info[j].codepoint);
+    unsigned int lig_index = (this+ligatureCoverage).get_coverage  (c->buffer->info[j].codepoint);
     if (lig_index == NOT_COVERED) return TRACE_RETURN (false);
 
     const LigatureArray& lig_array = this+ligatureArray;
@@ -1164,7 +1167,7 @@ struct MarkLigPosFormat1
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && markCoverage.sanitize (c, this) && ligatureCoverage.sanitize (c, this) &&
                         markArray.sanitize (c, this) && ligatureArray.sanitize (c, this, (unsigned int) classCount));
   }
@@ -1191,29 +1194,18 @@ struct MarkLigPosFormat1
 
 struct MarkLigPos
 {
-  friend struct PosLookupSubTable;
-
-  private:
-
-  inline const Coverage &get_coverage (void) const
-  {
-    switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -1236,9 +1228,13 @@ typedef AnchorMatrix Mark2Array; /* mark2-major--
 
 struct MarkMarkPosFormat1
 {
-  friend struct MarkMarkPos;
-
-  private:
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+mark1Coverage).add_coverage (c->input);
+    (this+mark2Coverage).add_coverage (c->input);
+    /* TODO only add combinations that have nonzero adjustment. */
+  }
 
   inline const Coverage &get_coverage (void) const
   {
@@ -1247,8 +1243,8 @@ struct MarkMarkPosFormat1
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int mark1_index = (this+mark1Coverage) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int mark1_index = (this+mark1Coverage).get_coverage  (c->buffer->cur().codepoint);
     if (likely (mark1_index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* now we search backwards for a suitable mark glyph until a non-mark glyph */
@@ -1256,7 +1252,7 @@ struct MarkMarkPosFormat1
     hb_apply_context_t::mark_skipping_backward_iterator_t skippy_iter (c, c->buffer->idx, 1);
     if (!skippy_iter.prev (&property)) return TRACE_RETURN (false);
 
-    if (!(property & HB_OT_LAYOUT_GLYPH_CLASS_MARK)) return TRACE_RETURN (false);
+    if (!(property & HB_OT_LAYOUT_GLYPH_PROPS_MARK)) return TRACE_RETURN (false);
 
     unsigned int j = skippy_iter.idx;
 
@@ -1281,14 +1277,14 @@ struct MarkMarkPosFormat1
     return TRACE_RETURN (false);
 
     good:
-    unsigned int mark2_index = (this+mark2Coverage) (c->buffer->info[j].codepoint);
+    unsigned int mark2_index = (this+mark2Coverage).get_coverage  (c->buffer->info[j].codepoint);
     if (mark2_index == NOT_COVERED) return TRACE_RETURN (false);
 
     return TRACE_RETURN ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && mark1Coverage.sanitize (c, this) &&
                         mark2Coverage.sanitize (c, this) && mark1Array.sanitize (c, this)
                         && mark2Array.sanitize (c, this, (unsigned int) classCount));
@@ -1317,29 +1313,18 @@ struct MarkMarkPosFormat1
 
 struct MarkMarkPos
 {
-  friend struct PosLookupSubTable;
-
-  private:
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -1355,50 +1340,13 @@ struct MarkMarkPos
 };
 
 
-static inline bool position_lookup (hb_apply_context_t *c, unsigned int lookup_index);
-
-struct ContextPos : Context
-{
-  friend struct PosLookupSubTable;
-
-  private:
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    return TRACE_RETURN (Context::apply (c, position_lookup));
-  }
-};
-
-struct ChainContextPos : ChainContext
-{
-  friend struct PosLookupSubTable;
-
-  private:
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    return TRACE_RETURN (ChainContext::apply (c, position_lookup));
-  }
-};
+struct ContextPos : Context {};
 
+struct ChainContextPos : ChainContext {};
 
-struct ExtensionPos : Extension
+struct ExtensionPos : Extension<ExtensionPos>
 {
-  friend struct PosLookupSubTable;
-
-  private:
-  inline const struct PosLookupSubTable& get_subtable (void) const
-  {
-    unsigned int offset = get_offset ();
-    if (unlikely (!offset)) return Null(PosLookupSubTable);
-    return StructAtOffset<PosLookupSubTable> (this, offset);
-  }
-
-  inline const Coverage &get_coverage (void) const;
-
-  inline bool apply (hb_apply_context_t *c) const;
-
-  inline bool sanitize (hb_sanitize_context_t *c);
+  typedef struct PosLookupSubTable LookupSubTable;
 };
 
 
@@ -1424,41 +1372,26 @@ struct PosLookupSubTable
     Extension          = 9
   };
 
-  inline const Coverage &get_coverage (unsigned int lookup_type) const
-  {
-    switch (lookup_type) {
-    case Single:               return u.single.get_coverage ();
-    case Pair:                 return u.pair.get_coverage ();
-    case Cursive:              return u.cursive.get_coverage ();
-    case MarkBase:             return u.markBase.get_coverage ();
-    case MarkLig:              return u.markLig.get_coverage ();
-    case MarkMark:             return u.markMark.get_coverage ();
-    case Context:              return u.context.get_coverage ();
-    case ChainContext:         return u.chainContext.get_coverage ();
-    case Extension:            return u.extension.get_coverage ();
-    default:                   return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c, unsigned int lookup_type) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c, unsigned int lookup_type) const
   {
-    TRACE_APPLY ();
+    TRACE_PROCESS (this);
     switch (lookup_type) {
-    case Single:               return TRACE_RETURN (u.single.apply (c));
-    case Pair:                 return TRACE_RETURN (u.pair.apply (c));
-    case Cursive:              return TRACE_RETURN (u.cursive.apply (c));
-    case MarkBase:             return TRACE_RETURN (u.markBase.apply (c));
-    case MarkLig:              return TRACE_RETURN (u.markLig.apply (c));
-    case MarkMark:             return TRACE_RETURN (u.markMark.apply (c));
-    case Context:              return TRACE_RETURN (u.context.apply (c));
-    case ChainContext:         return TRACE_RETURN (u.chainContext.apply (c));
-    case Extension:            return TRACE_RETURN (u.extension.apply (c));
-    default:                   return TRACE_RETURN (false);
+    case Single:               return TRACE_RETURN (u.single.process (c));
+    case Pair:                 return TRACE_RETURN (u.pair.process (c));
+    case Cursive:              return TRACE_RETURN (u.cursive.process (c));
+    case MarkBase:             return TRACE_RETURN (u.markBase.process (c));
+    case MarkLig:              return TRACE_RETURN (u.markLig.process (c));
+    case MarkMark:             return TRACE_RETURN (u.markMark.process (c));
+    case Context:              return TRACE_RETURN (u.context.process (c));
+    case ChainContext:         return TRACE_RETURN (u.chainContext.process (c));
+    case Extension:            return TRACE_RETURN (u.extension.process (c));
+    default:                   return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c, unsigned int lookup_type) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.header.sub_format.sanitize (c))
       return TRACE_RETURN (false);
     switch (lookup_type) {
@@ -1478,7 +1411,7 @@ struct PosLookupSubTable
   protected:
   union {
   struct {
-    USHORT                     sub_format;
+    USHORT             sub_format;
   } header;
   SinglePos            single;
   PairPos              pair;
@@ -1500,42 +1433,62 @@ struct PosLookup : Lookup
   inline const PosLookupSubTable& get_subtable (unsigned int i) const
   { return this+CastR<OffsetArrayOf<PosLookupSubTable> > (subTable)[i]; }
 
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
+  {
+    TRACE_PROCESS (this);
+    unsigned int lookup_type = get_type ();
+    unsigned int count = get_subtable_count ();
+    for (unsigned int i = 0; i < count; i++) {
+      typename context_t::return_t r = get_subtable (i).process (c, lookup_type);
+      if (c->stop_sublookup_iteration (r))
+        return TRACE_RETURN (r);
+    }
+    return TRACE_RETURN (c->default_return_value ());
+  }
+  template <typename context_t>
+  static inline typename context_t::return_t process_recurse_func (context_t *c, unsigned int lookup_index);
+
+  inline hb_collect_glyphs_context_t::return_t collect_glyphs_lookup (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    c->set_recurse_func (NULL);
+    return TRACE_RETURN (process (c));
+  }
+
   template <typename set_t>
   inline void add_coverage (set_t *glyphs) const
   {
+    hb_get_coverage_context_t c;
     const Coverage *last = NULL;
     unsigned int count = get_subtable_count ();
     for (unsigned int i = 0; i < count; i++) {
-      const Coverage *c = &get_subtable (i).get_coverage (get_type ());
-      if (c != last) {
-        c->add_coverage (glyphs);
-        last = c;
+      const Coverage *coverage = &get_subtable (i).process (&c, get_type ());
+      if (coverage != last) {
+        coverage->add_coverage (glyphs);
+        last = coverage;
       }
     }
   }
 
   inline bool apply_once (hb_apply_context_t *c) const
   {
-    unsigned int lookup_type = get_type ();
-
+    TRACE_APPLY (this);
     if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props, &c->property))
-      return false;
-
-    unsigned int count = get_subtable_count ();
-    for (unsigned int i = 0; i < count; i++)
-      if (get_subtable (i).apply (c, lookup_type))
-       return true;
-
-    return false;
+      return TRACE_RETURN (false);
+    return TRACE_RETURN (process (c));
   }
 
-  inline bool apply_string (hb_apply_context_t *c) const
+  static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
+
+  inline bool apply_string (hb_apply_context_t *c, const hb_set_digest_t *digest) const
   {
     bool ret = false;
 
-    if (unlikely (!c->buffer->len))
+    if (unlikely (!c->buffer->len || !c->lookup_mask))
       return false;
 
+    c->set_recurse_func (apply_recurse_func);
     c->set_lookup (*this);
 
     c->buffer->idx = 0;
@@ -1543,7 +1496,7 @@ struct PosLookup : Lookup
     while (c->buffer->idx < c->buffer->len)
     {
       if ((c->buffer->cur().mask & c->lookup_mask) &&
-         c->digest.may_have (c->buffer->cur().codepoint) &&
+         digest->may_have (c->buffer->cur().codepoint) &&
          apply_once (c))
        ret = true;
       else
@@ -1554,7 +1507,7 @@ struct PosLookup : Lookup
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!Lookup::sanitize (c))) return TRACE_RETURN (false);
     OffsetArrayOf<PosLookupSubTable> &list = CastR<OffsetArrayOf<PosLookupSubTable> > (subTable);
     return TRACE_RETURN (list.sanitize (c, this, get_type ()));
@@ -1574,18 +1527,11 @@ struct GPOS : GSUBGPOS
   inline const PosLookup& get_lookup (unsigned int i) const
   { return CastR<PosLookup> (GSUBGPOS::get_lookup (i)); }
 
-  template <typename set_t>
-  inline void add_coverage (set_t *glyphs, unsigned int lookup_index) const
-  { get_lookup (lookup_index).add_coverage (glyphs); }
-
-  inline bool position_lookup (hb_apply_context_t *c, unsigned int lookup_index) const
-  { return get_lookup (lookup_index).apply_string (c); }
-
   static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
   static inline void position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t zero_width_attahced_marks);
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!GSUBGPOS::sanitize (c))) return TRACE_RETURN (false);
     OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
     return TRACE_RETURN (list.sanitize (c, this));
@@ -1598,20 +1544,20 @@ struct GPOS : GSUBGPOS
 static void
 fix_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction)
 {
-    unsigned int j = pos[i].cursive_chain();
-    if (likely (!j))
-      return;
+  unsigned int j = pos[i].cursive_chain();
+  if (likely (!j))
+    return;
 
-    j += i;
+  j += i;
 
-    pos[i].cursive_chain() = 0;
+  pos[i].cursive_chain() = 0;
 
-    fix_cursive_minor_offset (pos, j, direction);
+  fix_cursive_minor_offset (pos, j, direction);
 
-    if (HB_DIRECTION_IS_HORIZONTAL (direction))
-      pos[i].y_offset += pos[j].y_offset;
-    else
-      pos[i].x_offset += pos[j].x_offset;
+  if (HB_DIRECTION_IS_HORIZONTAL (direction))
+    pos[i].y_offset += pos[j].y_offset;
+  else
+    pos[i].x_offset += pos[j].x_offset;
 }
 
 static void
@@ -1674,38 +1620,25 @@ GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer, hb_bool_t
 
 /* Out-of-class implementation for methods recursing */
 
-inline const Coverage & ExtensionPos::get_coverage (void) const
+template <typename context_t>
+inline typename context_t::return_t PosLookup::process_recurse_func (context_t *c, unsigned int lookup_index)
 {
-  return get_subtable ().get_coverage (get_type ());
-}
-
-inline bool ExtensionPos::apply (hb_apply_context_t *c) const
-{
-  TRACE_APPLY ();
-  return TRACE_RETURN (get_subtable ().apply (c, get_type ()));
-}
-
-inline bool ExtensionPos::sanitize (hb_sanitize_context_t *c)
-{
-  TRACE_SANITIZE ();
-  if (unlikely (!Extension::sanitize (c))) return TRACE_RETURN (false);
-  unsigned int offset = get_offset ();
-  if (unlikely (!offset)) return TRACE_RETURN (true);
-  return TRACE_RETURN (StructAtOffset<PosLookupSubTable> (this, offset).sanitize (c, get_type ()));
+  const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
+  const PosLookup &l = gpos.get_lookup (lookup_index);
+  return l.process (c);
 }
 
-static inline bool position_lookup (hb_apply_context_t *c, unsigned int lookup_index)
+inline bool PosLookup::apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index)
 {
   const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
   const PosLookup &l = gpos.get_lookup (lookup_index);
-
-  if (unlikely (c->nesting_level_left == 0))
-    return false;
-
-  hb_apply_context_t new_c (*c);
-  new_c.nesting_level_left--;
-  new_c.set_lookup (l);
-  return l.apply_once (&new_c);
+  unsigned int saved_lookup_props = c->lookup_props;
+  unsigned int saved_property = c->property;
+  c->set_lookup (l);
+  bool ret = l.apply_once (c);
+  c->lookup_props = saved_lookup_props;
+  c->property = saved_property;
+  return ret;
 }
 
 
@@ -1713,5 +1646,7 @@ static inline bool position_lookup (hb_apply_context_t *c, unsigned int lookup_i
 #undef cursive_chain
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OT_LAYOUT_GPOS_TABLE_HH */
index 1114418..2642acb 100644 (file)
 #include "hb-ot-layout-gsubgpos-private.hh"
 
 
+namespace OT {
+
 
 struct SingleSubstFormat1
 {
-  friend struct SingleSubst;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       hb_codepoint_t glyph_id = iter.get_glyph ();
@@ -50,16 +48,33 @@ struct SingleSubstFormat1
     }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    Coverage::Iter iter;
+    for (iter.init (this+coverage); iter.more (); iter.next ()) {
+      hb_codepoint_t glyph_id = iter.get_glyph ();
+      c->input->add (glyph_id);
+      c->output->add ((glyph_id + deltaGlyphID) & 0xFFFF);
+    }
+  }
+
   inline const Coverage &get_coverage (void) const
   {
     return this+coverage;
   }
 
+  inline bool would_apply (hb_would_apply_context_t *c) const
+  {
+    TRACE_WOULD_APPLY (this);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+  }
+
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
-    unsigned int index = (this+coverage) (glyph_id);
+    unsigned int index = (this+coverage).get_coverage (glyph_id);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* According to the Adobe Annotated OpenType Suite, result is always
@@ -70,8 +85,20 @@ struct SingleSubstFormat1
     return TRACE_RETURN (true);
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        unsigned int num_glyphs,
+                        int delta)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    deltaGlyphID.set (delta); /* TODO(serilaize) overflow? */
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && deltaGlyphID.sanitize (c));
   }
 
@@ -88,13 +115,9 @@ struct SingleSubstFormat1
 
 struct SingleSubstFormat2
 {
-  friend struct SingleSubst;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ()))
@@ -102,16 +125,32 @@ struct SingleSubstFormat2
     }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    Coverage::Iter iter;
+    for (iter.init (this+coverage); iter.more (); iter.next ()) {
+      c->input->add (iter.get_glyph ());
+      c->output->add (substitute[iter.get_coverage ()]);
+    }
+  }
+
   inline const Coverage &get_coverage (void) const
   {
     return this+coverage;
   }
 
+  inline bool would_apply (hb_would_apply_context_t *c) const
+  {
+    TRACE_WOULD_APPLY (this);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+  }
+
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
-    unsigned int index = (this+coverage) (glyph_id);
+    unsigned int index = (this+coverage).get_coverage (glyph_id);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     if (unlikely (index >= substitute.len)) return TRACE_RETURN (false);
@@ -122,8 +161,20 @@ struct SingleSubstFormat2
     return TRACE_RETURN (true);
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        Supplier<GlyphID> &substitutes,
+                        unsigned int num_glyphs)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!substitute.serialize (c, substitutes, num_glyphs))) return TRACE_RETURN (false);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && substitute.sanitize (c));
   }
 
@@ -141,41 +192,46 @@ struct SingleSubstFormat2
 
 struct SingleSubst
 {
-  friend struct SubstLookupSubTable;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: u.format1.closure (c); break;
-    case 2: u.format2.closure (c); break;
-    default:                       break;
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 2: return TRACE_RETURN (c->process (u.format2));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
-  inline const Coverage &get_coverage (void) const
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        Supplier<GlyphID> &substitutes,
+                        unsigned int num_glyphs)
   {
-    switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    case 2: return u.format2.get_coverage ();
-    default:return Null(Coverage);
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
+    unsigned int format = 2;
+    int delta;
+    if (num_glyphs) {
+      format = 1;
+      /* TODO(serialize) check for wrap-around */
+      delta = substitutes[0] - glyphs[0];
+      for (unsigned int i = 1; i < num_glyphs; i++)
+       if (delta != substitutes[i] - glyphs[i]) {
+         format = 2;
+         break;
+       }
     }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
+    u.format.set (format);
     switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
-    case 2: return TRACE_RETURN (u.format2.apply (c));
+    case 1: return TRACE_RETURN (u.format1.serialize (c, glyphs, num_glyphs, delta));
+    case 2: return TRACE_RETURN (u.format2.serialize (c, glyphs, substitutes, num_glyphs));
     default:return TRACE_RETURN (false);
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -195,24 +251,28 @@ struct SingleSubst
 
 struct Sequence
 {
-  friend struct MultipleSubstFormat1;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     unsigned int count = substitute.len;
     for (unsigned int i = 0; i < count; i++)
       c->glyphs->add (substitute[i]);
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    unsigned int count = substitute.len;
+    for (unsigned int i = 0; i < count; i++)
+      c->output->add (substitute[i]);
+  }
+
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     if (unlikely (!substitute.len)) return TRACE_RETURN (false);
 
-    unsigned int klass = c->property & HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE ? HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH : 0;
+    unsigned int klass = c->property & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE ? HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
     unsigned int count = substitute.len;
     for (unsigned int i = 0; i < count; i++) {
       set_lig_props_for_component (c->buffer->cur(), i);
@@ -223,9 +283,18 @@ struct Sequence
     return TRACE_RETURN (true);
   }
 
-  public:
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        unsigned int num_glyphs)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!substitute.serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (substitute.sanitize (c));
   }
 
@@ -238,13 +307,9 @@ struct Sequence
 
 struct MultipleSubstFormat1
 {
-  friend struct MultipleSubst;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ()))
@@ -252,23 +317,56 @@ struct MultipleSubstFormat1
     }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+    unsigned int count = sequence.len;
+    for (unsigned int i = 0; i < count; i++)
+       (this+sequence[i]).collect_glyphs (c);
+  }
+
   inline const Coverage &get_coverage (void) const
   {
     return this+coverage;
   }
 
+  inline bool would_apply (hb_would_apply_context_t *c) const
+  {
+    TRACE_WOULD_APPLY (this);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+  }
+
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
 
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     return TRACE_RETURN ((this+sequence[index]).apply (c));
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        Supplier<unsigned int> &substitute_len_list,
+                        unsigned int num_glyphs,
+                        Supplier<GlyphID> &substitute_glyphs_list)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!sequence.serialize (c, num_glyphs))) return TRACE_RETURN (false);
+    for (unsigned int i = 0; i < num_glyphs; i++)
+      if (unlikely (!sequence[i].serialize (c, this).serialize (c,
+                                                               substitute_glyphs_list,
+                                                               substitute_len_list[i]))) return TRACE_RETURN (false);
+    substitute_len_list.advance (num_glyphs);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && sequence.sanitize (c, this));
   }
 
@@ -286,38 +384,34 @@ struct MultipleSubstFormat1
 
 struct MultipleSubst
 {
-  friend struct SubstLookupSubTable;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: u.format1.closure (c); break;
-    default:                       break;
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
-  inline const Coverage &get_coverage (void) const
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        Supplier<unsigned int> &substitute_len_list,
+                        unsigned int num_glyphs,
+                        Supplier<GlyphID> &substitute_glyphs_list)
   {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
+    unsigned int format = 1;
+    u.format.set (format);
     switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
+    case 1: return TRACE_RETURN (u.format1.serialize (c, glyphs, substitute_len_list, num_glyphs, substitute_glyphs_list));
     default:return TRACE_RETURN (false);
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -338,13 +432,9 @@ typedef ArrayOf<GlyphID> AlternateSet;     /* Array of alternate GlyphIDs--in
 
 struct AlternateSubstFormat1
 {
-  friend struct AlternateSubst;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ())) {
@@ -356,17 +446,36 @@ struct AlternateSubstFormat1
     }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    Coverage::Iter iter;
+    for (iter.init (this+coverage); iter.more (); iter.next ()) {
+      c->input->add (iter.get_glyph ());
+      const AlternateSet &alt_set = this+alternateSet[iter.get_coverage ()];
+      unsigned int count = alt_set.len;
+      for (unsigned int i = 0; i < count; i++)
+       c->output->add (alt_set[i]);
+    }
+  }
+
   inline const Coverage &get_coverage (void) const
   {
     return this+coverage;
   }
 
+  inline bool would_apply (hb_would_apply_context_t *c) const
+  {
+    TRACE_WOULD_APPLY (this);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+  }
+
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
 
-    unsigned int index = (this+coverage) (glyph_id);
+    unsigned int index = (this+coverage).get_coverage (glyph_id);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const AlternateSet &alt_set = this+alternateSet[index];
@@ -389,8 +498,26 @@ struct AlternateSubstFormat1
     return TRACE_RETURN (true);
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        Supplier<unsigned int> &alternate_len_list,
+                        unsigned int num_glyphs,
+                        Supplier<GlyphID> &alternate_glyphs_list)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!alternateSet.serialize (c, num_glyphs))) return TRACE_RETURN (false);
+    for (unsigned int i = 0; i < num_glyphs; i++)
+      if (unlikely (!alternateSet[i].serialize (c, this).serialize (c,
+                                                                   alternate_glyphs_list,
+                                                                   alternate_len_list[i]))) return TRACE_RETURN (false);
+    alternate_len_list.advance (num_glyphs);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && alternateSet.sanitize (c, this));
   }
 
@@ -408,38 +535,34 @@ struct AlternateSubstFormat1
 
 struct AlternateSubst
 {
-  friend struct SubstLookupSubTable;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c) const
-  {
-    TRACE_CLOSURE ();
-    switch (u.format) {
-    case 1: u.format1.closure (c); break;
-    default:                       break;
-    }
-  }
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    default:return Null(Coverage);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
-  inline bool apply (hb_apply_context_t *c) const
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &glyphs,
+                        Supplier<unsigned int> &alternate_len_list,
+                        unsigned int num_glyphs,
+                        Supplier<GlyphID> &alternate_glyphs_list)
   {
-    TRACE_APPLY ();
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
+    unsigned int format = 1;
+    u.format.set (format);
     switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
+    case 1: return TRACE_RETURN (u.format1.serialize (c, glyphs, alternate_len_list, num_glyphs, alternate_glyphs_list));
     default:return TRACE_RETURN (false);
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -457,13 +580,9 @@ struct AlternateSubst
 
 struct Ligature
 {
-  friend struct LigatureSet;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     unsigned int count = component.len;
     for (unsigned int i = 1; i < count; i++)
       if (!c->glyphs->has (component[i]))
@@ -471,159 +590,77 @@ struct Ligature
     c->glyphs->add (ligGlyph);
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    unsigned int count = component.len;
+    for (unsigned int i = 1; i < count; i++)
+      c->input->add (component[i]);
+    c->output->add (ligGlyph);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
+    TRACE_WOULD_APPLY (this);
     if (c->len != component.len)
-      return false;
+      return TRACE_RETURN (false);
 
     for (unsigned int i = 1; i < c->len; i++)
       if (likely (c->glyphs[i] != component[i]))
-       return false;
+       return TRACE_RETURN (false);
 
-    return true;
+    return TRACE_RETURN (true);
   }
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     unsigned int count = component.len;
     if (unlikely (count < 1)) return TRACE_RETURN (false);
 
-    hb_apply_context_t::mark_skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, count - 1);
-    if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
-
-    /*
-     * This is perhaps the trickiest part of GSUB...  Remarks:
-     *
-     * - If all components of the ligature were marks, we call this a mark ligature.
-     *
-     * - If there is no GDEF, and the ligature is NOT a mark ligature, we categorize
-     *   it as a ligature glyph.  Though, really, this will not really be used...
-     *
-     * - If it *is* a mark ligature, we don't allocate a new ligature id, and leave
-     *   the ligature to keep its old ligature id.  This will allow it to attach to
-     *   a base ligature in GPOS.  Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,
-     *   and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA wit a
-     *   ligature id and component value of 2.  Then if SHADDA,FATHA form a ligature
-     *   later, we don't want them to lose their ligature id/component, otherwise
-     *   GPOS will fail to correctly position the mark ligature on top of the
-     *   LAM,LAM,HEH ligature.  See:
-     *     https://bugzilla.gnome.org/show_bug.cgi?id=676343
-     *
-     * - If a ligature is formed of components that some of which are also ligatures
-     *   themselves, and those ligature components had marks attached to *their*
-     *   components, we have to attach the marks to the new ligature component
-     *   positions!  Now *that*'s tricky!  And these marks may be following the
-     *   last component of the whole sequence, so we should loop forward looking
-     *   for them and update them.
-     *
-     *   Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a
-     *   'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature
-     *   id and component == 1.  Now, during 'liga', the LAM and the LAM-HEH ligature
-     *   form a LAM-LAM-HEH ligature.  We need to reassign the SHADDA and FATHA to
-     *   the new ligature with a component value of 2.
-     *
-     *   This in fact happened to a font...  See:
-     *   https://bugzilla.gnome.org/show_bug.cgi?id=437633
-     *
-     * - Ligatures cannot be formed across glyphs attached to different components
-     *   of previous ligatures.  Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
-     *   LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
-     *   However, it would be wrong to ligate that SHADDA,FATHA sequence.o
-     *   There is an exception to this: If a ligature tries ligating with marks that
-     *   belong to it itself, go ahead, assuming that the font designer knows what
-     *   they are doing (otherwise it can break Indic stuff when a matra wants to
-     *   ligate with a conjunct...)
-     */
-
-    bool is_mark_ligature = !!(c->property & HB_OT_LAYOUT_GLYPH_CLASS_MARK);
-
+    unsigned int end_offset = 0;
+    bool is_mark_ligature = false;
     unsigned int total_component_count = 0;
-    total_component_count += get_lig_num_comps (c->buffer->cur());
-
-    unsigned int first_lig_id = get_lig_id (c->buffer->cur());
-    unsigned int first_lig_comp = get_lig_comp (c->buffer->cur());
-
-    for (unsigned int i = 1; i < count; i++)
-    {
-      unsigned int property;
-
-      if (!skippy_iter.next (&property)) return TRACE_RETURN (false);
-
-      if (likely (c->buffer->info[skippy_iter.idx].codepoint != component[i])) return TRACE_RETURN (false);
-
-      unsigned int this_lig_id = get_lig_id (c->buffer->info[skippy_iter.idx]);
-      unsigned int this_lig_comp = get_lig_comp (c->buffer->info[skippy_iter.idx]);
-
-      if (first_lig_id && first_lig_comp) {
-        /* If first component was attached to a previous ligature component,
-        * all subsequent components should be attached to the same ligature
-        * component, otherwise we shouldn't ligate them. */
-        if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
-         return TRACE_RETURN (false);
-      } else {
-        /* If first component was NOT attached to a previous ligature component,
-        * all subsequent components should also NOT be attached to any ligature
-        * component, unless they are attached to the first component itself! */
-        if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
-         return TRACE_RETURN (false);
-      }
 
-      is_mark_ligature = is_mark_ligature && (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK);
-      total_component_count += get_lig_num_comps (c->buffer->info[skippy_iter.idx]);
-    }
+    if (likely (!match_input (c, count,
+                             &component[1],
+                             match_glyph,
+                             NULL,
+                             &end_offset,
+                             &is_mark_ligature,
+                             &total_component_count)))
+      return TRACE_RETURN (false);
 
     /* Deal, we are forming the ligature. */
-    c->buffer->merge_clusters (c->buffer->idx, skippy_iter.idx + 1);
-
-    unsigned int klass = is_mark_ligature ? 0 : HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE;
-    unsigned int lig_id = is_mark_ligature ? 0 : allocate_lig_id (c->buffer);
-    unsigned int last_lig_id = get_lig_id (c->buffer->cur());
-    unsigned int last_num_components = get_lig_num_comps (c->buffer->cur());
-    unsigned int components_so_far = last_num_components;
-
-    if (!is_mark_ligature)
-      set_lig_props_for_ligature (c->buffer->cur(), lig_id, total_component_count);
-    c->replace_glyph (ligGlyph, klass);
-
-    for (unsigned int i = 1; i < count; i++)
-    {
-      while (c->should_mark_skip_current_glyph ())
-      {
-       if (!is_mark_ligature) {
-         unsigned int new_lig_comp = components_so_far - last_num_components +
-                                     MIN (MAX (get_lig_comp (c->buffer->cur()), 1u), last_num_components);
-         set_lig_props_for_mark (c->buffer->cur(), lig_id, new_lig_comp);
-       }
-       c->buffer->next_glyph ();
-      }
+    c->buffer->merge_clusters (c->buffer->idx, c->buffer->idx + end_offset);
 
-      last_lig_id = get_lig_id (c->buffer->cur());
-      last_num_components = get_lig_num_comps (c->buffer->cur());
-      components_so_far += last_num_components;
+    ligate_input (c,
+                 count,
+                 &component[1],
+                 ligGlyph,
+                 match_glyph,
+                 NULL,
+                 is_mark_ligature,
+                 total_component_count);
 
-      /* Skip the base glyph */
-      c->buffer->idx++;
-    }
-
-    if (!is_mark_ligature && last_lig_id) {
-      /* Re-adjust components for any marks following. */
-      for (unsigned int i = c->buffer->idx; i < c->buffer->len; i++) {
-       if (last_lig_id == get_lig_id (c->buffer->info[i])) {
-         unsigned int new_lig_comp = components_so_far - last_num_components +
-                                     MIN (MAX (get_lig_comp (c->buffer->info[i]), 1u), last_num_components);
-         set_lig_props_for_mark (c->buffer->info[i], lig_id, new_lig_comp);
-       } else
-         break;
-      }
-    }
+    return TRACE_RETURN (true);
+  }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        GlyphID ligature,
+                        Supplier<GlyphID> &components, /* Starting from second */
+                        unsigned int num_components /* Including first component */)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    ligGlyph = ligature;
+    if (unlikely (!component.serialize (c, components, num_components))) return TRACE_RETURN (false);
     return TRACE_RETURN (true);
   }
 
   public:
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (ligGlyph.sanitize (c) && component.sanitize (c));
   }
 
@@ -639,33 +676,38 @@ struct Ligature
 
 struct LigatureSet
 {
-  friend struct LigatureSubstFormat1;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     unsigned int num_ligs = ligature.len;
     for (unsigned int i = 0; i < num_ligs; i++)
       (this+ligature[i]).closure (c);
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    unsigned int num_ligs = ligature.len;
+    for (unsigned int i = 0; i < num_ligs; i++)
+      (this+ligature[i]).collect_glyphs (c);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
+    TRACE_WOULD_APPLY (this);
     unsigned int num_ligs = ligature.len;
     for (unsigned int i = 0; i < num_ligs; i++)
     {
       const Ligature &lig = this+ligature[i];
       if (lig.would_apply (c))
-        return true;
+        return TRACE_RETURN (true);
     }
-    return false;
+    return TRACE_RETURN (false);
   }
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     unsigned int num_ligs = ligature.len;
     for (unsigned int i = 0; i < num_ligs; i++)
     {
@@ -676,9 +718,27 @@ struct LigatureSet
     return TRACE_RETURN (false);
   }
 
-  public:
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &ligatures,
+                        Supplier<unsigned int> &component_count_list,
+                        unsigned int num_ligatures,
+                        Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!ligature.serialize (c, num_ligatures))) return TRACE_RETURN (false);
+    for (unsigned int i = 0; i < num_ligatures; i++)
+      if (unlikely (!ligature[i].serialize (c, this).serialize (c,
+                                                               ligatures[i],
+                                                               component_list,
+                                                               component_count_list[i]))) return TRACE_RETURN (false);
+    ligatures.advance (num_ligatures);
+    component_count_list.advance (num_ligatures);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (ligature.sanitize (c, this));
   }
 
@@ -692,13 +752,9 @@ struct LigatureSet
 
 struct LigatureSubstFormat1
 {
-  friend struct LigatureSubst;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ()))
@@ -706,6 +762,16 @@ struct LigatureSubstFormat1
     }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    Coverage::Iter iter;
+    for (iter.init (this+coverage); iter.more (); iter.next ()) {
+      c->input->add (iter.get_glyph ());
+      (this+ligatureSet[iter.get_coverage ()]).collect_glyphs (c);
+    }
+  }
+
   inline const Coverage &get_coverage (void) const
   {
     return this+coverage;
@@ -713,23 +779,50 @@ struct LigatureSubstFormat1
 
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
-    return (this+ligatureSet[(this+coverage) (c->glyphs[0])]).would_apply (c);
+    TRACE_WOULD_APPLY (this);
+    unsigned int index = (this+coverage).get_coverage (c->glyphs[0]);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
+
+    const LigatureSet &lig_set = this+ligatureSet[index];
+    return TRACE_RETURN (lig_set.would_apply (c));
   }
 
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
 
-    unsigned int index = (this+coverage) (glyph_id);
+    unsigned int index = (this+coverage).get_coverage (glyph_id);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const LigatureSet &lig_set = this+ligatureSet[index];
     return TRACE_RETURN (lig_set.apply (c));
   }
 
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &first_glyphs,
+                        Supplier<unsigned int> &ligature_per_first_glyph_count_list,
+                        unsigned int num_first_glyphs,
+                        Supplier<GlyphID> &ligatures_list,
+                        Supplier<unsigned int> &component_count_list,
+                        Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!ligatureSet.serialize (c, num_first_glyphs))) return TRACE_RETURN (false);
+    for (unsigned int i = 0; i < num_first_glyphs; i++)
+      if (unlikely (!ligatureSet[i].serialize (c, this).serialize (c,
+                                                                  ligatures_list,
+                                                                  component_count_list,
+                                                                  ligature_per_first_glyph_count_list[i],
+                                                                  component_list))) return TRACE_RETURN (false);
+    ligature_per_first_glyph_count_list.advance (num_first_glyphs);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, first_glyphs, num_first_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && ligatureSet.sanitize (c, this));
   }
 
@@ -747,46 +840,37 @@ struct LigatureSubstFormat1
 
 struct LigatureSubst
 {
-  friend struct SubstLookupSubTable;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c) const
-  {
-    TRACE_CLOSURE ();
-    switch (u.format) {
-    case 1: u.format1.closure (c); break;
-    default:                       break;
-    }
-  }
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    default:return Null(Coverage);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
-  inline bool would_apply (hb_would_apply_context_t *c) const
+  inline bool serialize (hb_serialize_context_t *c,
+                        Supplier<GlyphID> &first_glyphs,
+                        Supplier<unsigned int> &ligature_per_first_glyph_count_list,
+                        unsigned int num_first_glyphs,
+                        Supplier<GlyphID> &ligatures_list,
+                        Supplier<unsigned int> &component_count_list,
+                        Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
   {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
+    unsigned int format = 1;
+    u.format.set (format);
     switch (u.format) {
-    case 1: return u.format1.would_apply (c);
-    default:return false;
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
+    case 1: return TRACE_RETURN (u.format1.serialize (c, first_glyphs, ligature_per_first_glyph_count_list, num_first_glyphs,
+                                                     ligatures_list, component_count_list, component_list));
     default:return TRACE_RETURN (false);
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -802,70 +886,13 @@ struct LigatureSubst
 };
 
 
-static inline bool substitute_lookup (hb_apply_context_t *c, unsigned int lookup_index);
-static inline void closure_lookup (hb_closure_context_t *c, unsigned int lookup_index);
+struct ContextSubst : Context {};
 
-struct ContextSubst : Context
-{
-  friend struct SubstLookupSubTable;
+struct ChainContextSubst : ChainContext {};
 
-  private:
-
-  inline void closure (hb_closure_context_t *c) const
-  {
-    TRACE_CLOSURE ();
-    return Context::closure (c, closure_lookup);
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    return TRACE_RETURN (Context::apply (c, substitute_lookup));
-  }
-};
-
-struct ChainContextSubst : ChainContext
+struct ExtensionSubst : Extension<ExtensionSubst>
 {
-  friend struct SubstLookupSubTable;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c) const
-  {
-    TRACE_CLOSURE ();
-    return ChainContext::closure (c, closure_lookup);
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    return TRACE_RETURN (ChainContext::apply (c, substitute_lookup));
-  }
-};
-
-
-struct ExtensionSubst : Extension
-{
-  friend struct SubstLookupSubTable;
-  friend struct SubstLookup;
-
-  private:
-  inline const struct SubstLookupSubTable& get_subtable (void) const
-  {
-    unsigned int offset = get_offset ();
-    if (unlikely (!offset)) return Null(SubstLookupSubTable);
-    return StructAtOffset<SubstLookupSubTable> (this, offset);
-  }
-
-  inline void closure (hb_closure_context_t *c) const;
-
-  inline const Coverage &get_coverage (void) const;
-
-  inline bool would_apply (hb_would_apply_context_t *c) const;
-
-  inline bool apply (hb_apply_context_t *c) const;
-
-  inline bool sanitize (hb_sanitize_context_t *c);
+  typedef struct SubstLookupSubTable LookupSubTable;
 
   inline bool is_reverse (void) const;
 };
@@ -873,13 +900,9 @@ struct ExtensionSubst : Extension
 
 struct ReverseChainSingleSubstFormat1
 {
-  friend struct ReverseChainSingleSubst;
-
-  private:
-
   inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
 
     unsigned int count;
@@ -902,18 +925,48 @@ struct ReverseChainSingleSubstFormat1
     }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+
+    const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
+
+    unsigned int count;
+
+    (this+coverage).add_coverage (c->input);
+
+    count = backtrack.len;
+    for (unsigned int i = 0; i < count; i++)
+      (this+backtrack[i]).add_coverage (c->before);
+
+    count = lookahead.len;
+    for (unsigned int i = 0; i < count; i++)
+      (this+lookahead[i]).add_coverage (c->after);
+
+    const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
+    count = substitute.len;
+    for (unsigned int i = 0; i < count; i++)
+      c->output->add (substitute[i]);
+  }
+
   inline const Coverage &get_coverage (void) const
   {
     return this+coverage;
   }
 
+  inline bool would_apply (hb_would_apply_context_t *c) const
+  {
+    TRACE_WOULD_APPLY (this);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+  }
+
   inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     if (unlikely (c->nesting_level_left != MAX_NESTING_LEVEL))
       return TRACE_RETURN (false); /* No chaining to this type */
 
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@@ -936,7 +989,7 @@ struct ReverseChainSingleSubstFormat1
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!(coverage.sanitize (c, this) && backtrack.sanitize (c, this)))
       return TRACE_RETURN (false);
     OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@@ -968,38 +1021,18 @@ struct ReverseChainSingleSubstFormat1
 
 struct ReverseChainSingleSubst
 {
-  friend struct SubstLookupSubTable;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: u.format1.closure (c); break;
-    default:                       break;
-    }
-  }
-
-  inline const Coverage &get_coverage (void) const
-  {
-    switch (u.format) {
-    case 1: return u.format1.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -1035,82 +1068,25 @@ struct SubstLookupSubTable
     ReverseChainSingle = 8
   };
 
-  inline void closure (hb_closure_context_t *c,
-                      unsigned int    lookup_type) const
-  {
-    TRACE_CLOSURE ();
-    switch (lookup_type) {
-    case Single:               u.single.closure (c); break;
-    case Multiple:             u.multiple.closure (c); break;
-    case Alternate:            u.alternate.closure (c); break;
-    case Ligature:             u.ligature.closure (c); break;
-    case Context:              u.context.closure (c); break;
-    case ChainContext:         u.chainContext.closure (c); break;
-    case Extension:            u.extension.closure (c); break;
-    case ReverseChainSingle:   u.reverseChainContextSingle.closure (c); break;
-    default:                    break;
-    }
-  }
-
-  inline const Coverage &get_coverage (unsigned int lookup_type) const
-  {
-    switch (lookup_type) {
-    case Single:               return u.single.get_coverage ();
-    case Multiple:             return u.multiple.get_coverage ();
-    case Alternate:            return u.alternate.get_coverage ();
-    case Ligature:             return u.ligature.get_coverage ();
-    case Context:              return u.context.get_coverage ();
-    case ChainContext:         return u.chainContext.get_coverage ();
-    case Extension:            return u.extension.get_coverage ();
-    case ReverseChainSingle:   return u.reverseChainContextSingle.get_coverage ();
-    default:                   return Null(Coverage);
-    }
-  }
-
-  inline bool would_apply (hb_would_apply_context_t *c,
-                          unsigned int lookup_type) const
-  {
-    TRACE_WOULD_APPLY ();
-    if (get_coverage (lookup_type).get_coverage (c->glyphs[0]) == NOT_COVERED) return false;
-    if (c->len == 1) {
-      switch (lookup_type) {
-      case Single:
-      case Multiple:
-      case Alternate:
-      case ReverseChainSingle:
-        return true;
-      }
-    }
-
-    /* Only need to look further for lookups that support substitutions
-     * of input longer than 1. */
-    switch (lookup_type) {
-    case Ligature:             return u.ligature.would_apply (c);
-    case Context:              return u.context.would_apply (c);
-    case ChainContext:         return u.chainContext.would_apply (c);
-    case Extension:            return u.extension.would_apply (c);
-    default:                   return false;
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c, unsigned int lookup_type) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c, unsigned int lookup_type) const
   {
-    TRACE_APPLY ();
+    TRACE_PROCESS (this);
     switch (lookup_type) {
-    case Single:               return TRACE_RETURN (u.single.apply (c));
-    case Multiple:             return TRACE_RETURN (u.multiple.apply (c));
-    case Alternate:            return TRACE_RETURN (u.alternate.apply (c));
-    case Ligature:             return TRACE_RETURN (u.ligature.apply (c));
-    case Context:              return TRACE_RETURN (u.context.apply (c));
-    case ChainContext:         return TRACE_RETURN (u.chainContext.apply (c));
-    case Extension:            return TRACE_RETURN (u.extension.apply (c));
-    case ReverseChainSingle:   return TRACE_RETURN (u.reverseChainContextSingle.apply (c));
-    default:                   return TRACE_RETURN (false);
+    case Single:               return TRACE_RETURN (u.single.process (c));
+    case Multiple:             return TRACE_RETURN (u.multiple.process (c));
+    case Alternate:            return TRACE_RETURN (u.alternate.process (c));
+    case Ligature:             return TRACE_RETURN (u.ligature.process (c));
+    case Context:              return TRACE_RETURN (u.context.process (c));
+    case ChainContext:         return TRACE_RETURN (u.chainContext.process (c));
+    case Extension:            return TRACE_RETURN (u.extension.process (c));
+    case ReverseChainSingle:   return TRACE_RETURN (u.reverseChainContextSingle.process (c));
+    default:                   return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c, unsigned int lookup_type) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.header.sub_format.sanitize (c))
       return TRACE_RETURN (false);
     switch (lookup_type) {
@@ -1161,62 +1137,76 @@ struct SubstLookup : Lookup
     return lookup_type_is_reverse (type);
   }
 
-  inline void closure (hb_closure_context_t *c) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     unsigned int lookup_type = get_type ();
     unsigned int count = get_subtable_count ();
-    for (unsigned int i = 0; i < count; i++)
-      get_subtable (i).closure (c, lookup_type);
+    for (unsigned int i = 0; i < count; i++) {
+      typename context_t::return_t r = get_subtable (i).process (c, lookup_type);
+      if (c->stop_sublookup_iteration (r))
+        return TRACE_RETURN (r);
+    }
+    return TRACE_RETURN (c->default_return_value ());
+  }
+  template <typename context_t>
+  static inline typename context_t::return_t process_recurse_func (context_t *c, unsigned int lookup_index);
+
+  inline hb_closure_context_t::return_t closure (hb_closure_context_t *c) const
+  {
+    TRACE_CLOSURE (this);
+    c->set_recurse_func (process_recurse_func<hb_closure_context_t>);
+    return TRACE_RETURN (process (c));
+  }
+
+  inline hb_collect_glyphs_context_t::return_t collect_glyphs_lookup (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    c->set_recurse_func (process_recurse_func<hb_collect_glyphs_context_t>);
+    return TRACE_RETURN (process (c));
   }
 
   template <typename set_t>
   inline void add_coverage (set_t *glyphs) const
   {
+    hb_get_coverage_context_t c;
     const Coverage *last = NULL;
     unsigned int count = get_subtable_count ();
     for (unsigned int i = 0; i < count; i++) {
-      const Coverage *c = &get_subtable (i).get_coverage (get_type ());
-      if (c != last) {
-        c->add_coverage (glyphs);
-        last = c;
+      const Coverage *coverage = &get_subtable (i).process (&c, get_type ());
+      if (coverage != last) {
+        coverage->add_coverage (glyphs);
+        last = coverage;
       }
     }
   }
 
-  inline bool would_apply (hb_would_apply_context_t *c) const
+  inline bool would_apply (hb_would_apply_context_t *c, const hb_set_digest_t *digest) const
   {
-    if (unlikely (!c->len)) return false;
-    if (!c->digest.may_have (c->glyphs[0])) return false;
-    unsigned int lookup_type = get_type ();
-    unsigned int count = get_subtable_count ();
-    for (unsigned int i = 0; i < count; i++)
-      if (get_subtable (i).would_apply (c, lookup_type))
-       return true;
-    return false;
+    TRACE_WOULD_APPLY (this);
+    if (unlikely (!c->len))  return TRACE_RETURN (false);
+    if (!digest->may_have (c->glyphs[0]))  return TRACE_RETURN (false);
+      return TRACE_RETURN (process (c));
   }
 
   inline bool apply_once (hb_apply_context_t *c) const
   {
-    unsigned int lookup_type = get_type ();
-
+    TRACE_APPLY (this);
     if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props, &c->property))
-      return false;
-
-    unsigned int count = get_subtable_count ();
-    for (unsigned int i = 0; i < count; i++)
-      if (get_subtable (i).apply (c, lookup_type))
-       return true;
-
-    return false;
+      return TRACE_RETURN (false);
+    return TRACE_RETURN (process (c));
   }
 
-  inline bool apply_string (hb_apply_context_t *c) const
+  static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
+  inline bool apply_string (hb_apply_context_t *c, const hb_set_digest_t *digest) const
   {
     bool ret = false;
 
-    if (unlikely (!c->buffer->len))
+    if (unlikely (!c->buffer->len || !c->lookup_mask))
       return false;
 
+    c->set_recurse_func (apply_recurse_func);
     c->set_lookup (*this);
 
     if (likely (!is_reverse ()))
@@ -1228,7 +1218,7 @@ struct SubstLookup : Lookup
        while (c->buffer->idx < c->buffer->len)
        {
          if ((c->buffer->cur().mask & c->lookup_mask) &&
-             c->digest.may_have (c->buffer->cur().codepoint) &&
+             digest->may_have (c->buffer->cur().codepoint) &&
              apply_once (c))
            ret = true;
          else
@@ -1240,11 +1230,12 @@ struct SubstLookup : Lookup
     else
     {
        /* in-place backward substitution */
+       c->buffer->remove_output ();
        c->buffer->idx = c->buffer->len - 1;
        do
        {
          if ((c->buffer->cur().mask & c->lookup_mask) &&
-             c->digest.may_have (c->buffer->cur().codepoint) &&
+             digest->may_have (c->buffer->cur().codepoint) &&
              apply_once (c))
            ret = true;
          else
@@ -1257,8 +1248,65 @@ struct SubstLookup : Lookup
     return ret;
   }
 
-  inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+  inline SubstLookupSubTable& serialize_subtable (hb_serialize_context_t *c,
+                                                 unsigned int i)
+  { return CastR<OffsetArrayOf<SubstLookupSubTable> > (subTable)[i].serialize (c, this); }
+
+  inline bool serialize_single (hb_serialize_context_t *c,
+                               uint32_t lookup_props,
+                               Supplier<GlyphID> &glyphs,
+                               Supplier<GlyphID> &substitutes,
+                               unsigned int num_glyphs)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Single, lookup_props, 1))) return TRACE_RETURN (false);
+    return TRACE_RETURN (serialize_subtable (c, 0).u.single.serialize (c, glyphs, substitutes, num_glyphs));
+  }
+
+  inline bool serialize_multiple (hb_serialize_context_t *c,
+                                 uint32_t lookup_props,
+                                 Supplier<GlyphID> &glyphs,
+                                 Supplier<unsigned int> &substitute_len_list,
+                                 unsigned int num_glyphs,
+                                 Supplier<GlyphID> &substitute_glyphs_list)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Multiple, lookup_props, 1))) return TRACE_RETURN (false);
+    return TRACE_RETURN (serialize_subtable (c, 0).u.multiple.serialize (c, glyphs, substitute_len_list, num_glyphs,
+                                                                        substitute_glyphs_list));
+  }
+
+  inline bool serialize_alternate (hb_serialize_context_t *c,
+                                  uint32_t lookup_props,
+                                  Supplier<GlyphID> &glyphs,
+                                  Supplier<unsigned int> &alternate_len_list,
+                                  unsigned int num_glyphs,
+                                  Supplier<GlyphID> &alternate_glyphs_list)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Alternate, lookup_props, 1))) return TRACE_RETURN (false);
+    return TRACE_RETURN (serialize_subtable (c, 0).u.alternate.serialize (c, glyphs, alternate_len_list, num_glyphs,
+                                                                         alternate_glyphs_list));
+  }
+
+  inline bool serialize_ligature (hb_serialize_context_t *c,
+                                 uint32_t lookup_props,
+                                 Supplier<GlyphID> &first_glyphs,
+                                 Supplier<unsigned int> &ligature_per_first_glyph_count_list,
+                                 unsigned int num_first_glyphs,
+                                 Supplier<GlyphID> &ligatures_list,
+                                 Supplier<unsigned int> &component_count_list,
+                                 Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
+  {
+    TRACE_SERIALIZE (this);
+    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Ligature, lookup_props, 1))) return TRACE_RETURN (false);
+    return TRACE_RETURN (serialize_subtable (c, 0).u.ligature.serialize (c, first_glyphs, ligature_per_first_glyph_count_list, num_first_glyphs,
+                                                                        ligatures_list, component_count_list, component_list));
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c)
+  {
+    TRACE_SANITIZE (this);
     if (unlikely (!Lookup::sanitize (c))) return TRACE_RETURN (false);
     OffsetArrayOf<SubstLookupSubTable> &list = CastR<OffsetArrayOf<SubstLookupSubTable> > (subTable);
     if (unlikely (!list.sanitize (c, this, get_type ()))) return TRACE_RETURN (false);
@@ -1293,25 +1341,11 @@ struct GSUB : GSUBGPOS
   inline const SubstLookup& get_lookup (unsigned int i) const
   { return CastR<SubstLookup> (GSUBGPOS::get_lookup (i)); }
 
-  template <typename set_t>
-  inline void add_coverage (set_t *glyphs, unsigned int lookup_index) const
-  { get_lookup (lookup_index).add_coverage (glyphs); }
-
-  inline bool would_substitute_lookup (hb_would_apply_context_t *c, unsigned int lookup_index) const
-  { return get_lookup (lookup_index).would_apply (c); }
-
-  inline bool substitute_lookup (hb_apply_context_t *c, unsigned int lookup_index) const
-  { return get_lookup (lookup_index).apply_string (c); }
-
   static inline void substitute_start (hb_font_t *font, hb_buffer_t *buffer);
   static inline void substitute_finish (hb_font_t *font, hb_buffer_t *buffer);
 
-  inline void closure_lookup (hb_closure_context_t *c,
-                             unsigned int          lookup_index) const
-  { return get_lookup (lookup_index).closure (c); }
-
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (unlikely (!GSUBGPOS::sanitize (c))) return TRACE_RETURN (false);
     OffsetTo<SubstLookupList> &list = CastR<OffsetTo<SubstLookupList> > (lookupList);
     return TRACE_RETURN (list.sanitize (c, this));
@@ -1344,71 +1378,37 @@ GSUB::substitute_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer HB_UNUSE
 
 /* Out-of-class implementation for methods recursing */
 
-inline void ExtensionSubst::closure (hb_closure_context_t *c) const
-{
-  get_subtable ().closure (c, get_type ());
-}
-
-inline const Coverage & ExtensionSubst::get_coverage (void) const
-{
-  return get_subtable ().get_coverage (get_type ());
-}
-
-inline bool ExtensionSubst::would_apply (hb_would_apply_context_t *c) const
-{
-  return get_subtable ().would_apply (c, get_type ());
-}
-
-inline bool ExtensionSubst::apply (hb_apply_context_t *c) const
-{
-  TRACE_APPLY ();
-  return TRACE_RETURN (get_subtable ().apply (c, get_type ()));
-}
-
-inline bool ExtensionSubst::sanitize (hb_sanitize_context_t *c)
-{
-  TRACE_SANITIZE ();
-  if (unlikely (!Extension::sanitize (c))) return TRACE_RETURN (false);
-  unsigned int offset = get_offset ();
-  if (unlikely (!offset)) return TRACE_RETURN (true);
-  return TRACE_RETURN (StructAtOffset<SubstLookupSubTable> (this, offset).sanitize (c, get_type ()));
-}
-
 inline bool ExtensionSubst::is_reverse (void) const
 {
   unsigned int type = get_type ();
   if (unlikely (type == SubstLookupSubTable::Extension))
-    return CastR<ExtensionSubst> (get_subtable()).is_reverse ();
+    return CastR<ExtensionSubst> (get_subtable<SubstLookupSubTable>()).is_reverse ();
   return SubstLookup::lookup_type_is_reverse (type);
 }
 
-static inline void closure_lookup (hb_closure_context_t *c, unsigned int lookup_index)
+template <typename context_t>
+inline typename context_t::return_t SubstLookup::process_recurse_func (context_t *c, unsigned int lookup_index)
 {
   const GSUB &gsub = *(hb_ot_layout_from_face (c->face)->gsub);
   const SubstLookup &l = gsub.get_lookup (lookup_index);
-
-  if (unlikely (c->nesting_level_left == 0))
-    return;
-
-  c->nesting_level_left--;
-  l.closure (c);
-  c->nesting_level_left++;
+  return l.process (c);
 }
 
-static inline bool substitute_lookup (hb_apply_context_t *c, unsigned int lookup_index)
+inline bool SubstLookup::apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index)
 {
   const GSUB &gsub = *(hb_ot_layout_from_face (c->face)->gsub);
   const SubstLookup &l = gsub.get_lookup (lookup_index);
-
-  if (unlikely (c->nesting_level_left == 0))
-    return false;
-
-  hb_apply_context_t new_c (*c);
-  new_c.nesting_level_left--;
-  new_c.set_lookup (l);
-  return l.apply_once (&new_c);
+  unsigned int saved_lookup_props = c->lookup_props;
+  unsigned int saved_property = c->property;
+  c->set_lookup (l);
+  bool ret = l.apply_once (c);
+  c->lookup_props = saved_lookup_props;
+  c->property = saved_property;
+  return ret;
 }
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OT_LAYOUT_GSUB_TABLE_HH */
index ba2a7e0..0b00005 100644 (file)
 #include "hb-set-private.hh"
 
 
+namespace OT {
+
+
+
+#define TRACE_PROCESS(this) \
+       hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
+       (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+        "");
+
 
 #ifndef HB_DEBUG_CLOSURE
 #define HB_DEBUG_CLOSURE (HB_DEBUG+0)
 #endif
 
-#define TRACE_CLOSURE() \
-       hb_auto_trace_t<HB_DEBUG_CLOSURE> trace (&c->debug_depth, "CLOSURE", this, HB_FUNC, "");
-
+#define TRACE_CLOSURE(this) \
+       hb_auto_trace_t<HB_DEBUG_CLOSURE, hb_void_t> trace \
+       (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+        "");
 
 struct hb_closure_context_t
 {
+  inline const char *get_name (void) { return "CLOSURE"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_CLOSURE;
+  typedef hb_void_t return_t;
+  typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
+  template <typename T>
+  inline return_t process (const T &obj) { obj.closure (this); return HB_VOID; }
+  static return_t default_return_value (void) { return HB_VOID; }
+  bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
+  return_t recurse (unsigned int lookup_index)
+  {
+    if (unlikely (nesting_level_left == 0 || !recurse_func))
+      return default_return_value ();
+
+    nesting_level_left--;
+    recurse_func (this, lookup_index);
+    nesting_level_left++;
+    return HB_VOID;
+  }
+
   hb_face_t *face;
   hb_set_t *glyphs;
+  recurse_func_t recurse_func;
   unsigned int nesting_level_left;
   unsigned int debug_depth;
 
-
   hb_closure_context_t (hb_face_t *face_,
                        hb_set_t *glyphs_,
                        unsigned int nesting_level_left_ = MAX_NESTING_LEVEL) :
                          face (face_),
                          glyphs (glyphs_),
+                         recurse_func (NULL),
                          nesting_level_left (nesting_level_left_),
                          debug_depth (0) {}
+
+  void set_recurse_func (recurse_func_t func) { recurse_func = func; }
 };
 
 
 
-/* TODO Add TRACE_RETURN annotation to gsub. */
 #ifndef HB_DEBUG_WOULD_APPLY
 #define HB_DEBUG_WOULD_APPLY (HB_DEBUG+0)
 #endif
 
-#define TRACE_WOULD_APPLY() \
-       hb_auto_trace_t<HB_DEBUG_WOULD_APPLY> trace (&c->debug_depth, "WOULD_APPLY", this, HB_FUNC, "%d glyphs", c->len);
-
+#define TRACE_WOULD_APPLY(this) \
+       hb_auto_trace_t<HB_DEBUG_WOULD_APPLY, bool> trace \
+       (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+        "%d glyphs", c->len);
 
 struct hb_would_apply_context_t
 {
+  inline const char *get_name (void) { return "WOULD_APPLY"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_WOULD_APPLY;
+  typedef bool return_t;
+  template <typename T>
+  inline return_t process (const T &obj) { return obj.would_apply (this); }
+  static return_t default_return_value (void) { return false; }
+  bool stop_sublookup_iteration (return_t r) const { return r; }
+
   hb_face_t *face;
   const hb_codepoint_t *glyphs;
   unsigned int len;
-  const hb_set_digest_t digest;
+  bool zero_context;
   unsigned int debug_depth;
 
   hb_would_apply_context_t (hb_face_t *face_,
                            const hb_codepoint_t *glyphs_,
                            unsigned int len_,
-                           const hb_set_digest_t *digest_
-                           ) :
+                           bool zero_context_) :
                              face (face_),
                              glyphs (glyphs_),
                              len (len_),
-                             digest (*digest_),
-                             debug_depth (0) {};
+                             zero_context (zero_context_),
+                             debug_depth (0) {}
+};
+
+
+
+#ifndef HB_DEBUG_COLLECT_GLYPHS
+#define HB_DEBUG_COLLECT_GLYPHS (HB_DEBUG+0)
+#endif
+
+#define TRACE_COLLECT_GLYPHS(this) \
+       hb_auto_trace_t<HB_DEBUG_COLLECT_GLYPHS, hb_void_t> trace \
+       (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+        "");
+
+struct hb_collect_glyphs_context_t
+{
+  inline const char *get_name (void) { return "COLLECT_GLYPHS"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_COLLECT_GLYPHS;
+  typedef hb_void_t return_t;
+  typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index);
+  template <typename T>
+  inline return_t process (const T &obj) { obj.collect_glyphs (this); return HB_VOID; }
+  static return_t default_return_value (void) { return HB_VOID; }
+  bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
+  return_t recurse (unsigned int lookup_index)
+  {
+    if (unlikely (nesting_level_left == 0 || !recurse_func))
+      return default_return_value ();
+
+    /* Note that GPOS sets recurse_func to NULL already, so it doesn't get
+     * past the previous check.  For GSUB, we only want to collect the output
+     * glyphs in the recursion.  If output is not requested, we can go home now. */
+
+    if (output == hb_set_get_empty ())
+      return HB_VOID;
+
+    hb_set_t *old_before = before;
+    hb_set_t *old_input  = input;
+    hb_set_t *old_after  = after;
+    before = input = after = hb_set_get_empty ();
+
+    nesting_level_left--;
+    recurse_func (this, lookup_index);
+    nesting_level_left++;
+
+    before = old_before;
+    input  = old_input;
+    after  = old_after;
+
+    return HB_VOID;
+  }
+
+  hb_face_t *face;
+  hb_set_t *before;
+  hb_set_t *input;
+  hb_set_t *after;
+  hb_set_t *output;
+  recurse_func_t recurse_func;
+  unsigned int nesting_level_left;
+  unsigned int debug_depth;
+
+  hb_collect_glyphs_context_t (hb_face_t *face_,
+                              hb_set_t  *glyphs_before, /* OUT. May be NULL */
+                              hb_set_t  *glyphs_input,  /* OUT. May be NULL */
+                              hb_set_t  *glyphs_after,  /* OUT. May be NULL */
+                              hb_set_t  *glyphs_output, /* OUT. May be NULL */
+                              unsigned int nesting_level_left_ = MAX_NESTING_LEVEL) :
+                             face (face_),
+                             before (glyphs_before ? glyphs_before : hb_set_get_empty ()),
+                             input  (glyphs_input  ? glyphs_input  : hb_set_get_empty ()),
+                             after  (glyphs_after  ? glyphs_after  : hb_set_get_empty ()),
+                             output (glyphs_output ? glyphs_output : hb_set_get_empty ()),
+                             recurse_func (NULL),
+                             nesting_level_left (nesting_level_left_),
+                             debug_depth (0) {}
+
+  void set_recurse_func (recurse_func_t func) { recurse_func = func; }
+};
+
+
+
+struct hb_get_coverage_context_t
+{
+  inline const char *get_name (void) { return "GET_COVERAGE"; }
+  static const unsigned int max_debug_depth = 0;
+  typedef const Coverage &return_t;
+  template <typename T>
+  inline return_t process (const T &obj) { return obj.get_coverage (); }
+  static return_t default_return_value (void) { return Null(Coverage); }
+
+  hb_get_coverage_context_t (void) :
+                           debug_depth (0) {}
+
+  unsigned int debug_depth;
 };
 
 
+
 #ifndef HB_DEBUG_APPLY
 #define HB_DEBUG_APPLY (HB_DEBUG+0)
 #endif
 
-#define TRACE_APPLY() \
-       hb_auto_trace_t<HB_DEBUG_APPLY> trace (&c->debug_depth, "APPLY", this, HB_FUNC, "idx %d codepoint %u", c->buffer->idx, c->buffer->cur().codepoint);
-
+#define TRACE_APPLY(this) \
+       hb_auto_trace_t<HB_DEBUG_APPLY, bool> trace \
+       (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+        "idx %d codepoint %u", c->buffer->idx, c->buffer->cur().codepoint);
 
 struct hb_apply_context_t
 {
+  inline const char *get_name (void) { return "APPLY"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_APPLY;
+  typedef bool return_t;
+  typedef return_t (*recurse_func_t) (hb_apply_context_t *c, unsigned int lookup_index);
+  template <typename T>
+  inline return_t process (const T &obj) { return obj.apply (this); }
+  static return_t default_return_value (void) { return false; }
+  bool stop_sublookup_iteration (return_t r) const { return r; }
+  return_t recurse (unsigned int lookup_index)
+  {
+    if (unlikely (nesting_level_left == 0 || !recurse_func))
+      return default_return_value ();
+
+    nesting_level_left--;
+    bool ret = recurse_func (this, lookup_index);
+    nesting_level_left++;
+    return ret;
+  }
+
   hb_font_t *font;
   hb_face_t *face;
   hb_buffer_t *buffer;
   hb_direction_t direction;
   hb_mask_t lookup_mask;
+  recurse_func_t recurse_func;
   unsigned int nesting_level_left;
   unsigned int lookup_props;
   unsigned int property; /* propety of first glyph */
-  unsigned int debug_depth;
   const GDEF &gdef;
   bool has_glyph_classes;
-  const hb_set_digest_t digest;
+  unsigned int debug_depth;
 
 
   hb_apply_context_t (hb_font_t *font_,
                      hb_buffer_t *buffer_,
-                     hb_mask_t lookup_mask_,
-                     const hb_set_digest_t *digest_) :
+                     hb_mask_t lookup_mask_) :
                        font (font_), face (font->face), buffer (buffer_),
                        direction (buffer_->props.direction),
                        lookup_mask (lookup_mask_),
+                       recurse_func (NULL),
                        nesting_level_left (MAX_NESTING_LEVEL),
-                       lookup_props (0), property (0), debug_depth (0),
+                       lookup_props (0), property (0),
                        gdef (*hb_ot_layout_from_face (face)->gdef),
                        has_glyph_classes (gdef.has_glyph_classes ()),
-                       digest (*digest_) {}
+                       debug_depth (0) {}
 
-  void set_lookup (const Lookup &l) {
-    lookup_props = l.get_props ();
-  }
+  void set_recurse_func (recurse_func_t func) { recurse_func = func; }
+  void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
+  void set_lookup (const Lookup &l) { lookup_props = l.get_props (); }
 
   struct mark_skipping_forward_iterator_t
   {
@@ -262,7 +415,7 @@ struct hb_apply_context_t
     if (glyph_props & lookup_props & LookupFlag::IgnoreFlags)
       return false;
 
-    if (unlikely (glyph_props & HB_OT_LAYOUT_GLYPH_CLASS_MARK))
+    if (unlikely (glyph_props & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
       return match_properties_mark (glyph, glyph_props, lookup_props);
 
     return true;
@@ -293,7 +446,7 @@ struct hb_apply_context_t
       *property_out = property;
 
     /* If it's a mark, skip it if we don't accept it. */
-    if (unlikely (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK))
+    if (unlikely (property & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
       return !match_properties (info->codepoint, property, lookup_props);
 
     /* If not a mark, don't skip. */
@@ -337,21 +490,23 @@ struct hb_apply_context_t
 
 
 typedef bool (*intersects_func_t) (hb_set_t *glyphs, const USHORT &value, const void *data);
+typedef void (*collect_glyphs_func_t) (hb_set_t *glyphs, const USHORT &value, const void *data);
 typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, const void *data);
-typedef void (*closure_lookup_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
-typedef bool (*apply_lookup_func_t) (hb_apply_context_t *c, unsigned int lookup_index);
 
 struct ContextClosureFuncs
 {
   intersects_func_t intersects;
-  closure_lookup_func_t closure;
+};
+struct ContextCollectGlyphsFuncs
+{
+  collect_glyphs_func_t collect;
 };
 struct ContextApplyFuncs
 {
   match_func_t match;
-  apply_lookup_func_t apply;
 };
 
+
 static inline bool intersects_glyph (hb_set_t *glyphs, const USHORT &value, const void *data HB_UNUSED)
 {
   return glyphs->has (value);
@@ -380,6 +535,32 @@ static inline bool intersects_array (hb_closure_context_t *c,
 }
 
 
+static inline void collect_glyph (hb_set_t *glyphs, const USHORT &value, const void *data HB_UNUSED)
+{
+  glyphs->add (value);
+}
+static inline void collect_class (hb_set_t *glyphs, const USHORT &value, const void *data)
+{
+  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
+  class_def.add_class (glyphs, value);
+}
+static inline void collect_coverage (hb_set_t *glyphs, const USHORT &value, const void *data)
+{
+  const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
+  (data+coverage).add_coverage (glyphs);
+}
+static inline void collect_array (hb_collect_glyphs_context_t *c HB_UNUSED,
+                                 hb_set_t *glyphs,
+                                 unsigned int count,
+                                 const USHORT values[],
+                                 collect_glyphs_func_t collect_func,
+                                 const void *collect_data)
+{
+  for (unsigned int i = 0; i < count; i++)
+    collect_func (glyphs, values[i], collect_data);
+}
+
+
 static inline bool match_glyph (hb_codepoint_t glyph_id, const USHORT &value, const void *data HB_UNUSED)
 {
   return glyph_id == value;
@@ -395,7 +576,6 @@ static inline bool match_coverage (hb_codepoint_t glyph_id, const USHORT &value,
   return (data+coverage).get_coverage (glyph_id) != NOT_COVERED;
 }
 
-
 static inline bool would_match_input (hb_would_apply_context_t *c,
                                      unsigned int count, /* Including the first glyph (not matched) */
                                      const USHORT input[], /* Array of input values--start with second glyph */
@@ -416,25 +596,159 @@ static inline bool match_input (hb_apply_context_t *c,
                                const USHORT input[], /* Array of input values--start with second glyph */
                                match_func_t match_func,
                                const void *match_data,
-                               unsigned int *end_offset = NULL)
+                               unsigned int *end_offset = NULL,
+                               bool *p_is_mark_ligature = NULL,
+                               unsigned int *p_total_component_count = NULL)
 {
+  TRACE_APPLY (NULL);
+
   hb_apply_context_t::mark_skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, count - 1);
-  if (skippy_iter.has_no_chance ())
-    return false;
+  if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
+
+  /*
+   * This is perhaps the trickiest part of OpenType...  Remarks:
+   *
+   * - If all components of the ligature were marks, we call this a mark ligature.
+   *
+   * - If there is no GDEF, and the ligature is NOT a mark ligature, we categorize
+   *   it as a ligature glyph.
+   *
+   * - Ligatures cannot be formed across glyphs attached to different components
+   *   of previous ligatures.  Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
+   *   LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
+   *   However, it would be wrong to ligate that SHADDA,FATHA sequence.o
+   *   There is an exception to this: If a ligature tries ligating with marks that
+   *   belong to it itself, go ahead, assuming that the font designer knows what
+   *   they are doing (otherwise it can break Indic stuff when a matra wants to
+   *   ligate with a conjunct...)
+   */
+
+  bool is_mark_ligature = !!(c->property & HB_OT_LAYOUT_GLYPH_PROPS_MARK);
+
+  unsigned int total_component_count = 0;
+  total_component_count += get_lig_num_comps (c->buffer->cur());
+
+  unsigned int first_lig_id = get_lig_id (c->buffer->cur());
+  unsigned int first_lig_comp = get_lig_comp (c->buffer->cur());
 
   for (unsigned int i = 1; i < count; i++)
   {
-    if (!skippy_iter.next ())
-      return false;
+    unsigned int property;
 
-    if (likely (!match_func (c->buffer->info[skippy_iter.idx].codepoint, input[i - 1], match_data)))
-      return false;
+    if (!skippy_iter.next (&property)) return TRACE_RETURN (false);
+
+    if (likely (!match_func (c->buffer->info[skippy_iter.idx].codepoint, input[i - 1], match_data))) return TRACE_RETURN (false);
+
+    unsigned int this_lig_id = get_lig_id (c->buffer->info[skippy_iter.idx]);
+    unsigned int this_lig_comp = get_lig_comp (c->buffer->info[skippy_iter.idx]);
+
+    if (first_lig_id && first_lig_comp) {
+      /* If first component was attached to a previous ligature component,
+       * all subsequent components should be attached to the same ligature
+       * component, otherwise we shouldn't ligate them. */
+      if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
+       return TRACE_RETURN (false);
+    } else {
+      /* If first component was NOT attached to a previous ligature component,
+       * all subsequent components should also NOT be attached to any ligature
+       * component, unless they are attached to the first component itself! */
+      if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
+       return TRACE_RETURN (false);
+    }
+
+    is_mark_ligature = is_mark_ligature && (property & HB_OT_LAYOUT_GLYPH_PROPS_MARK);
+    total_component_count += get_lig_num_comps (c->buffer->info[skippy_iter.idx]);
   }
 
   if (end_offset)
     *end_offset = skippy_iter.idx - c->buffer->idx + 1;
 
-  return true;
+  if (p_is_mark_ligature)
+    *p_is_mark_ligature = is_mark_ligature;
+
+  if (p_total_component_count)
+    *p_total_component_count = total_component_count;
+
+  return TRACE_RETURN (true);
+}
+static inline void ligate_input (hb_apply_context_t *c,
+                                unsigned int count, /* Including the first glyph (not matched) */
+                                const USHORT input[] HB_UNUSED, /* Array of input values--start with second glyph */
+                                hb_codepoint_t lig_glyph,
+                                match_func_t match_func HB_UNUSED,
+                                const void *match_data HB_UNUSED,
+                                bool is_mark_ligature,
+                                unsigned int total_component_count)
+{
+  /*
+   * - If it *is* a mark ligature, we don't allocate a new ligature id, and leave
+   *   the ligature to keep its old ligature id.  This will allow it to attach to
+   *   a base ligature in GPOS.  Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,
+   *   and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA wit a
+   *   ligature id and component value of 2.  Then if SHADDA,FATHA form a ligature
+   *   later, we don't want them to lose their ligature id/component, otherwise
+   *   GPOS will fail to correctly position the mark ligature on top of the
+   *   LAM,LAM,HEH ligature.  See:
+   *     https://bugzilla.gnome.org/show_bug.cgi?id=676343
+   *
+   * - If a ligature is formed of components that some of which are also ligatures
+   *   themselves, and those ligature components had marks attached to *their*
+   *   components, we have to attach the marks to the new ligature component
+   *   positions!  Now *that*'s tricky!  And these marks may be following the
+   *   last component of the whole sequence, so we should loop forward looking
+   *   for them and update them.
+   *
+   *   Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a
+   *   'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature
+   *   id and component == 1.  Now, during 'liga', the LAM and the LAM-HEH ligature
+   *   form a LAM-LAM-HEH ligature.  We need to reassign the SHADDA and FATHA to
+   *   the new ligature with a component value of 2.
+   *
+   *   This in fact happened to a font...  See:
+   *   https://bugzilla.gnome.org/show_bug.cgi?id=437633
+   */
+
+  unsigned int klass = is_mark_ligature ? 0 : HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE;
+  unsigned int lig_id = is_mark_ligature ? 0 : allocate_lig_id (c->buffer);
+  unsigned int last_lig_id = get_lig_id (c->buffer->cur());
+  unsigned int last_num_components = get_lig_num_comps (c->buffer->cur());
+  unsigned int components_so_far = last_num_components;
+
+  if (!is_mark_ligature)
+    set_lig_props_for_ligature (c->buffer->cur(), lig_id, total_component_count);
+  c->replace_glyph (lig_glyph, klass);
+
+  for (unsigned int i = 1; i < count; i++)
+  {
+    while (c->should_mark_skip_current_glyph ())
+    {
+      if (!is_mark_ligature) {
+       unsigned int new_lig_comp = components_so_far - last_num_components +
+                                   MIN (MAX (get_lig_comp (c->buffer->cur()), 1u), last_num_components);
+       set_lig_props_for_mark (c->buffer->cur(), lig_id, new_lig_comp);
+      }
+      c->buffer->next_glyph ();
+    }
+
+    last_lig_id = get_lig_id (c->buffer->cur());
+    last_num_components = get_lig_num_comps (c->buffer->cur());
+    components_so_far += last_num_components;
+
+    /* Skip the base glyph */
+    c->buffer->idx++;
+  }
+
+  if (!is_mark_ligature && last_lig_id) {
+    /* Re-adjust components for any marks following. */
+    for (unsigned int i = c->buffer->idx; i < c->buffer->len; i++) {
+      if (last_lig_id == get_lig_id (c->buffer->info[i])) {
+       unsigned int new_lig_comp = components_so_far - last_num_components +
+                                   MIN (MAX (get_lig_comp (c->buffer->info[i]), 1u), last_num_components);
+       set_lig_props_for_mark (c->buffer->info[i], lig_id, new_lig_comp);
+      } else
+       break;
+    }
+  }
 }
 
 static inline bool match_backtrack (hb_apply_context_t *c,
@@ -443,20 +757,22 @@ static inline bool match_backtrack (hb_apply_context_t *c,
                                    match_func_t match_func,
                                    const void *match_data)
 {
+  TRACE_APPLY (NULL);
+
   hb_apply_context_t::mark_skipping_backward_iterator_t skippy_iter (c, c->buffer->backtrack_len (), count, true);
   if (skippy_iter.has_no_chance ())
-    return false;
+    return TRACE_RETURN (false);
 
   for (unsigned int i = 0; i < count; i++)
   {
     if (!skippy_iter.prev ())
-      return false;
+      return TRACE_RETURN (false);
 
     if (likely (!match_func (c->buffer->out_info[skippy_iter.idx].codepoint, backtrack[i], match_data)))
-      return false;
+      return TRACE_RETURN (false);
   }
 
-  return true;
+  return TRACE_RETURN (true);
 }
 
 static inline bool match_lookahead (hb_apply_context_t *c,
@@ -466,20 +782,22 @@ static inline bool match_lookahead (hb_apply_context_t *c,
                                    const void *match_data,
                                    unsigned int offset)
 {
+  TRACE_APPLY (NULL);
+
   hb_apply_context_t::mark_skipping_forward_iterator_t skippy_iter (c, c->buffer->idx + offset - 1, count, true);
   if (skippy_iter.has_no_chance ())
-    return false;
+    return TRACE_RETURN (false);
 
   for (unsigned int i = 0; i < count; i++)
   {
     if (!skippy_iter.next ())
-      return false;
+      return TRACE_RETURN (false);
 
     if (likely (!match_func (c->buffer->info[skippy_iter.idx].codepoint, lookahead[i], match_data)))
-      return false;
+      return TRACE_RETURN (false);
   }
 
-  return true;
+  return TRACE_RETURN (true);
 }
 
 
@@ -487,7 +805,7 @@ static inline bool match_lookahead (hb_apply_context_t *c,
 struct LookupRecord
 {
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -500,24 +818,25 @@ struct LookupRecord
 };
 
 
-static inline void closure_lookup (hb_closure_context_t *c,
-                                  unsigned int lookupCount,
-                                  const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
-                                  closure_lookup_func_t closure_func)
+template <typename context_t>
+static inline void recurse_lookups (context_t *c,
+                                   unsigned int lookupCount,
+                                   const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */)
 {
   for (unsigned int i = 0; i < lookupCount; i++)
-    closure_func (c, lookupRecord->lookupListIndex);
+    c->recurse (lookupRecord->lookupListIndex);
 }
 
 static inline bool apply_lookup (hb_apply_context_t *c,
                                 unsigned int count, /* Including the first glyph */
                                 unsigned int lookupCount,
-                                const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
-                                apply_lookup_func_t apply_func)
+                                const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */)
 {
+  TRACE_APPLY (NULL);
+
   unsigned int end = c->buffer->len;
   if (unlikely (count == 0 || c->buffer->idx + count > end))
-    return false;
+    return TRACE_RETURN (false);
 
   /* TODO We don't support lookupRecord arrays that are not increasing:
    *      Should be easy for in_place ones at least. */
@@ -529,13 +848,13 @@ static inline bool apply_lookup (hb_apply_context_t *c,
   for (unsigned int i = 0; i < count; /* NOP */)
   {
     if (unlikely (c->buffer->idx == end))
-      return true;
+      return TRACE_RETURN (true);
     while (c->should_mark_skip_current_glyph ())
     {
       /* No lookup applied for this index */
       c->buffer->next_glyph ();
       if (unlikely (c->buffer->idx == end))
-       return true;
+       return TRACE_RETURN (true);
     }
 
     if (lookupCount && i == lookupRecord->sequenceIndex)
@@ -543,14 +862,14 @@ static inline bool apply_lookup (hb_apply_context_t *c,
       unsigned int old_pos = c->buffer->idx;
 
       /* Apply a lookup */
-      bool done = apply_func (c, lookupRecord->lookupListIndex);
+      bool done = c->recurse (lookupRecord->lookupListIndex);
 
       lookupRecord++;
       lookupCount--;
       /* Err, this is wrong if the lookup jumped over some glyphs */
       i += c->buffer->idx - old_pos;
       if (unlikely (c->buffer->idx == end))
-       return true;
+       return TRACE_RETURN (true);
 
       if (!done)
        goto not_applied;
@@ -564,7 +883,7 @@ static inline bool apply_lookup (hb_apply_context_t *c,
     }
   }
 
-  return true;
+  return TRACE_RETURN (true);
 }
 
 
@@ -577,6 +896,12 @@ struct ContextClosureLookupContext
   const void *intersects_data;
 };
 
+struct ContextCollectGlyphsLookupContext
+{
+  ContextCollectGlyphsFuncs funcs;
+  const void *collect_data;
+};
+
 struct ContextApplyLookupContext
 {
   ContextApplyFuncs funcs;
@@ -593,17 +918,29 @@ static inline void context_closure_lookup (hb_closure_context_t *c,
   if (intersects_array (c,
                        inputCount ? inputCount - 1 : 0, input,
                        lookup_context.funcs.intersects, lookup_context.intersects_data))
-    closure_lookup (c,
-                   lookupCount, lookupRecord,
-                   lookup_context.funcs.closure);
+    recurse_lookups (c,
+                    lookupCount, lookupRecord);
 }
 
+static inline void context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
+                                                 unsigned int inputCount, /* Including the first glyph (not matched) */
+                                                 const USHORT input[], /* Array of input values--start with second glyph */
+                                                 unsigned int lookupCount,
+                                                 const LookupRecord lookupRecord[],
+                                                 ContextCollectGlyphsLookupContext &lookup_context)
+{
+  collect_array (c, c->input,
+                inputCount ? inputCount - 1 : 0, input,
+                lookup_context.funcs.collect, lookup_context.collect_data);
+  recurse_lookups (c,
+                  lookupCount, lookupRecord);
+}
 
 static inline bool context_would_apply_lookup (hb_would_apply_context_t *c,
                                               unsigned int inputCount, /* Including the first glyph (not matched) */
                                               const USHORT input[], /* Array of input values--start with second glyph */
-                                              unsigned int lookupCount,
-                                              const LookupRecord lookupRecord[],
+                                              unsigned int lookupCount HB_UNUSED,
+                                              const LookupRecord lookupRecord[] HB_UNUSED,
                                               ContextApplyLookupContext &lookup_context)
 {
   return would_match_input (c,
@@ -622,19 +959,14 @@ static inline bool context_apply_lookup (hb_apply_context_t *c,
                      lookup_context.funcs.match, lookup_context.match_data)
       && apply_lookup (c,
                       inputCount,
-                      lookupCount, lookupRecord,
-                      lookup_context.funcs.apply);
+                      lookupCount, lookupRecord);
 }
 
 struct Rule
 {
-  friend struct RuleSet;
-
-  private:
-
   inline void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].static_size * (inputCount ? inputCount - 1 : 0));
     context_closure_lookup (c,
                            inputCount, input,
@@ -642,23 +974,33 @@ struct Rule
                            lookup_context);
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c, ContextCollectGlyphsLookupContext &lookup_context) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].static_size * (inputCount ? inputCount - 1 : 0));
+    context_collect_glyphs_lookup (c,
+                                  inputCount, input,
+                                  lookupCount, lookupRecord,
+                                  lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].static_size * (inputCount ? inputCount - 1 : 0));
     return TRACE_RETURN (context_would_apply_lookup (c, inputCount, input, lookupCount, lookupRecord, lookup_context));
   }
 
   inline bool apply (hb_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].static_size * (inputCount ? inputCount - 1 : 0));
     return TRACE_RETURN (context_apply_lookup (c, inputCount, input, lookupCount, lookupRecord, lookup_context));
   }
 
   public:
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return inputCount.sanitize (c)
        && lookupCount.sanitize (c)
        && c->check_range (input,
@@ -683,15 +1025,23 @@ struct RuleSet
 {
   inline void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     unsigned int num_rules = rule.len;
     for (unsigned int i = 0; i < num_rules; i++)
       (this+rule[i]).closure (c, lookup_context);
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c, ContextCollectGlyphsLookupContext &lookup_context) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    unsigned int num_rules = rule.len;
+    for (unsigned int i = 0; i < num_rules; i++)
+      (this+rule[i]).collect_glyphs (c, lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
     unsigned int num_rules = rule.len;
     for (unsigned int i = 0; i < num_rules; i++)
     {
@@ -703,7 +1053,7 @@ struct RuleSet
 
   inline bool apply (hb_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     unsigned int num_rules = rule.len;
     for (unsigned int i = 0; i < num_rules; i++)
     {
@@ -714,7 +1064,7 @@ struct RuleSet
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (rule.sanitize (c, this));
   }
 
@@ -729,18 +1079,14 @@ struct RuleSet
 
 struct ContextFormat1
 {
-  friend struct Context;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c, closure_lookup_func_t closure_func) const
+  inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
 
     const Coverage &cov = (this+coverage);
 
     struct ContextClosureLookupContext lookup_context = {
-      {intersects_glyph, closure_func},
+      {intersects_glyph},
       NULL
     };
 
@@ -752,35 +1098,55 @@ struct ContextFormat1
       }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+
+    struct ContextCollectGlyphsLookupContext lookup_context = {
+      {collect_glyph},
+      NULL
+    };
+
+    unsigned int count = ruleSet.len;
+    for (unsigned int i = 0; i < count; i++)
+      (this+ruleSet[i]).collect_glyphs (c, lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
 
-    const RuleSet &rule_set = this+ruleSet[(this+coverage) (c->glyphs[0])];
+    const RuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
     struct ContextApplyLookupContext lookup_context = {
-      {match_glyph, NULL},
+      {match_glyph},
       NULL
     };
     return TRACE_RETURN (rule_set.would_apply (c, lookup_context));
   }
 
-  inline bool apply (hb_apply_context_t *c, apply_lookup_func_t apply_func) const
+  inline const Coverage &get_coverage (void) const
   {
-    TRACE_APPLY ();
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    return this+coverage;
+  }
+
+  inline bool apply (hb_apply_context_t *c) const
+  {
+    TRACE_APPLY (this);
+    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED))
       return TRACE_RETURN (false);
 
     const RuleSet &rule_set = this+ruleSet[index];
     struct ContextApplyLookupContext lookup_context = {
-      {match_glyph, apply_func},
+      {match_glyph},
       NULL
     };
     return TRACE_RETURN (rule_set.apply (c, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
   }
 
@@ -799,21 +1165,17 @@ struct ContextFormat1
 
 struct ContextFormat2
 {
-  friend struct Context;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c, closure_lookup_func_t closure_func) const
+  inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     if (!(this+coverage).intersects (c->glyphs))
       return;
 
     const ClassDef &class_def = this+classDef;
 
     struct ContextClosureLookupContext lookup_context = {
-      {intersects_class, closure_func},
-      NULL
+      {intersects_class},
+      &class_def
     };
 
     unsigned int count = ruleSet.len;
@@ -824,38 +1186,59 @@ struct ContextFormat2
       }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+
+    const ClassDef &class_def = this+classDef;
+    struct ContextCollectGlyphsLookupContext lookup_context = {
+      {collect_class},
+      &class_def
+    };
+
+    unsigned int count = ruleSet.len;
+    for (unsigned int i = 0; i < count; i++)
+      (this+ruleSet[i]).collect_glyphs (c, lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
 
     const ClassDef &class_def = this+classDef;
-    unsigned int index = class_def (c->glyphs[0]);
+    unsigned int index = class_def.get_class (c->glyphs[0]);
     const RuleSet &rule_set = this+ruleSet[index];
     struct ContextApplyLookupContext lookup_context = {
-      {match_class, NULL},
+      {match_class},
       &class_def
     };
     return TRACE_RETURN (rule_set.would_apply (c, lookup_context));
   }
 
-  inline bool apply (hb_apply_context_t *c, apply_lookup_func_t apply_func) const
+  inline const Coverage &get_coverage (void) const
+  {
+    return this+coverage;
+  }
+
+  inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const ClassDef &class_def = this+classDef;
-    index = class_def (c->buffer->cur().codepoint);
+    index = class_def.get_class (c->buffer->cur().codepoint);
     const RuleSet &rule_set = this+ruleSet[index];
     struct ContextApplyLookupContext lookup_context = {
-      {match_class, apply_func},
+      {match_class},
       &class_def
     };
     return TRACE_RETURN (rule_set.apply (c, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this));
   }
 
@@ -877,19 +1260,15 @@ struct ContextFormat2
 
 struct ContextFormat3
 {
-  friend struct Context;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c, closure_lookup_func_t closure_func) const
+  inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     if (!(this+coverage[0]).intersects (c->glyphs))
       return;
 
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
     struct ContextClosureLookupContext lookup_context = {
-      {intersects_coverage, closure_func},
+      {intersects_coverage},
       this
     };
     context_closure_lookup (c,
@@ -898,34 +1277,56 @@ struct ContextFormat3
                            lookup_context);
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage[0]).add_coverage (c->input);
+
+    const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
+    struct ContextCollectGlyphsLookupContext lookup_context = {
+      {collect_coverage},
+      this
+    };
+
+    context_collect_glyphs_lookup (c,
+                                  glyphCount, (const USHORT *) (coverage + 1),
+                                  lookupCount, lookupRecord,
+                                  lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
 
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
     struct ContextApplyLookupContext lookup_context = {
-      {match_coverage, NULL},
+      {match_coverage},
       this
     };
     return TRACE_RETURN (context_would_apply_lookup (c, glyphCount, (const USHORT *) (coverage + 1), lookupCount, lookupRecord, lookup_context));
   }
 
-  inline bool apply (hb_apply_context_t *c, apply_lookup_func_t apply_func) const
+  inline const Coverage &get_coverage (void) const
+  {
+    return this+coverage[0];
+  }
+
+  inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int index = (this+coverage[0]) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int index = (this+coverage[0]).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
     struct ContextApplyLookupContext lookup_context = {
-      {match_coverage, apply_func},
+      {match_coverage},
       this
     };
     return TRACE_RETURN (context_apply_lookup (c, glyphCount, (const USHORT *) (coverage + 1), lookupCount, lookupRecord, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!c->check_struct (this)) return TRACE_RETURN (false);
     unsigned int count = glyphCount;
     if (!c->check_array (coverage, coverage[0].static_size, count)) return TRACE_RETURN (false);
@@ -951,52 +1352,20 @@ struct ContextFormat3
 
 struct Context
 {
-  protected:
-
-  inline void closure (hb_closure_context_t *c, closure_lookup_func_t closure_func) const
-  {
-    TRACE_CLOSURE ();
-    switch (u.format) {
-    case 1: u.format1.closure (c, closure_func); break;
-    case 2: u.format2.closure (c, closure_func); break;
-    case 3: u.format3.closure (c, closure_func); break;
-    default:                                     break;
-    }
-  }
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return this + u.format1.coverage;
-    case 2: return this + u.format2.coverage;
-    case 3: return this + u.format3.coverage[0];
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool would_apply (hb_would_apply_context_t *c) const
-  {
-    switch (u.format) {
-    case 1: return u.format1.would_apply (c);
-    case 2: return u.format2.would_apply (c);
-    case 3: return u.format3.would_apply (c);
-    default:return false;
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c, apply_lookup_func_t apply_func) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c, apply_func));
-    case 2: return TRACE_RETURN (u.format2.apply (c, apply_func));
-    case 3: return TRACE_RETURN (u.format3.apply (c, apply_func));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 2: return TRACE_RETURN (c->process (u.format2));
+    case 3: return TRACE_RETURN (c->process (u.format3));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -1024,6 +1393,12 @@ struct ChainContextClosureLookupContext
   const void *intersects_data[3];
 };
 
+struct ChainContextCollectGlyphsLookupContext
+{
+  ContextCollectGlyphsFuncs funcs;
+  const void *collect_data[3];
+};
+
 struct ChainContextApplyLookupContext
 {
   ContextApplyFuncs funcs;
@@ -1050,24 +1425,46 @@ static inline void chain_context_closure_lookup (hb_closure_context_t *c,
   && intersects_array (c,
                       lookaheadCount, lookahead,
                       lookup_context.funcs.intersects, lookup_context.intersects_data[2]))
-    closure_lookup (c,
-                   lookupCount, lookupRecord,
-                   lookup_context.funcs.closure);
+    recurse_lookups (c,
+                    lookupCount, lookupRecord);
+}
+
+static inline void chain_context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
+                                                       unsigned int backtrackCount,
+                                                       const USHORT backtrack[],
+                                                       unsigned int inputCount, /* Including the first glyph (not matched) */
+                                                       const USHORT input[], /* Array of input values--start with second glyph */
+                                                       unsigned int lookaheadCount,
+                                                       const USHORT lookahead[],
+                                                       unsigned int lookupCount,
+                                                       const LookupRecord lookupRecord[],
+                                                       ChainContextCollectGlyphsLookupContext &lookup_context)
+{
+  collect_array (c, c->before,
+                backtrackCount, backtrack,
+                lookup_context.funcs.collect, lookup_context.collect_data[0]);
+  collect_array (c, c->input,
+                inputCount ? inputCount - 1 : 0, input,
+                lookup_context.funcs.collect, lookup_context.collect_data[1]);
+  collect_array (c, c->after,
+                lookaheadCount, lookahead,
+                lookup_context.funcs.collect, lookup_context.collect_data[2]);
+  recurse_lookups (c,
+                  lookupCount, lookupRecord);
 }
 
 static inline bool chain_context_would_apply_lookup (hb_would_apply_context_t *c,
                                                     unsigned int backtrackCount,
-                                                    const USHORT backtrack[],
+                                                    const USHORT backtrack[] HB_UNUSED,
                                                     unsigned int inputCount, /* Including the first glyph (not matched) */
                                                     const USHORT input[], /* Array of input values--start with second glyph */
                                                     unsigned int lookaheadCount,
-                                                    const USHORT lookahead[],
-                                                    unsigned int lookupCount,
-                                                    const LookupRecord lookupRecord[],
+                                                    const USHORT lookahead[] HB_UNUSED,
+                                                    unsigned int lookupCount HB_UNUSED,
+                                                    const LookupRecord lookupRecord[] HB_UNUSED,
                                                     ChainContextApplyLookupContext &lookup_context)
 {
-  return !backtrackCount
-      && !lookaheadCount
+  return (c->zero_context ? !backtrackCount && !lookaheadCount : true)
       && would_match_input (c,
                            inputCount, input,
                            lookup_context.funcs.match, lookup_context.match_data[1]);
@@ -1084,7 +1481,7 @@ static inline bool chain_context_apply_lookup (hb_apply_context_t *c,
                                               const LookupRecord lookupRecord[],
                                               ChainContextApplyLookupContext &lookup_context)
 {
-  unsigned int lookahead_offset;
+  unsigned int lookahead_offset = 0;
   return match_input (c,
                      inputCount, input,
                      lookup_context.funcs.match, lookup_context.match_data[1],
@@ -1098,19 +1495,14 @@ static inline bool chain_context_apply_lookup (hb_apply_context_t *c,
                          lookahead_offset)
       && apply_lookup (c,
                       inputCount,
-                      lookupCount, lookupRecord,
-                      lookup_context.funcs.apply);
+                      lookupCount, lookupRecord);
 }
 
 struct ChainRule
 {
-  friend struct ChainRuleSet;
-
-  private:
-
   inline void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
     const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
@@ -1122,9 +1514,23 @@ struct ChainRule
                                  lookup_context);
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
+    const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
+    const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
+    chain_context_collect_glyphs_lookup (c,
+                                        backtrack.len, backtrack.array,
+                                        input.len, input.array,
+                                        lookahead.len, lookahead.array,
+                                        lookup.len, lookup.array,
+                                        lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
     const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
     const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
@@ -1137,7 +1543,7 @@ struct ChainRule
 
   inline bool apply (hb_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
     const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
@@ -1148,9 +1554,8 @@ struct ChainRule
                                                     lookup.array, lookup_context));
   }
 
-  public:
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!backtrack.sanitize (c)) return TRACE_RETURN (false);
     HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
     if (!input.sanitize (c)) return TRACE_RETURN (false);
@@ -1182,15 +1587,23 @@ struct ChainRuleSet
 {
   inline void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     unsigned int num_rules = rule.len;
     for (unsigned int i = 0; i < num_rules; i++)
       (this+rule[i]).closure (c, lookup_context);
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    unsigned int num_rules = rule.len;
+    for (unsigned int i = 0; i < num_rules; i++)
+      (this+rule[i]).collect_glyphs (c, lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
     unsigned int num_rules = rule.len;
     for (unsigned int i = 0; i < num_rules; i++)
       if ((this+rule[i]).would_apply (c, lookup_context))
@@ -1201,7 +1614,7 @@ struct ChainRuleSet
 
   inline bool apply (hb_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     unsigned int num_rules = rule.len;
     for (unsigned int i = 0; i < num_rules; i++)
       if ((this+rule[i]).apply (c, lookup_context))
@@ -1211,7 +1624,7 @@ struct ChainRuleSet
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (rule.sanitize (c, this));
   }
 
@@ -1225,17 +1638,13 @@ struct ChainRuleSet
 
 struct ChainContextFormat1
 {
-  friend struct ChainContext;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c, closure_lookup_func_t closure_func) const
+  inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     const Coverage &cov = (this+coverage);
 
     struct ChainContextClosureLookupContext lookup_context = {
-      {intersects_glyph, closure_func},
+      {intersects_glyph},
       {NULL, NULL, NULL}
     };
 
@@ -1247,34 +1656,54 @@ struct ChainContextFormat1
       }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+
+    struct ChainContextCollectGlyphsLookupContext lookup_context = {
+      {collect_glyph},
+      {NULL, NULL, NULL}
+    };
+
+    unsigned int count = ruleSet.len;
+    for (unsigned int i = 0; i < count; i++)
+      (this+ruleSet[i]).collect_glyphs (c, lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
 
-    const ChainRuleSet &rule_set = this+ruleSet[(this+coverage) (c->glyphs[0])];
+    const ChainRuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
     struct ChainContextApplyLookupContext lookup_context = {
-      {match_glyph, NULL},
+      {match_glyph},
       {NULL, NULL, NULL}
     };
     return TRACE_RETURN (rule_set.would_apply (c, lookup_context));
   }
 
-  inline bool apply (hb_apply_context_t *c, apply_lookup_func_t apply_func) const
+  inline const Coverage &get_coverage (void) const
+  {
+    return this+coverage;
+  }
+
+  inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const ChainRuleSet &rule_set = this+ruleSet[index];
     struct ChainContextApplyLookupContext lookup_context = {
-      {match_glyph, apply_func},
+      {match_glyph},
       {NULL, NULL, NULL}
     };
     return TRACE_RETURN (rule_set.apply (c, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
   }
 
@@ -1292,13 +1721,9 @@ struct ChainContextFormat1
 
 struct ChainContextFormat2
 {
-  friend struct ChainContext;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c, closure_lookup_func_t closure_func) const
+  inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     if (!(this+coverage).intersects (c->glyphs))
       return;
 
@@ -1307,7 +1732,7 @@ struct ChainContextFormat2
     const ClassDef &lookahead_class_def = this+lookaheadClassDef;
 
     struct ChainContextClosureLookupContext lookup_context = {
-      {intersects_class, closure_func},
+      {intersects_class},
       {&backtrack_class_def,
        &input_class_def,
        &lookahead_class_def}
@@ -1321,35 +1746,65 @@ struct ChainContextFormat2
       }
   }
 
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+  {
+    TRACE_COLLECT_GLYPHS (this);
+    (this+coverage).add_coverage (c->input);
+
+    const ClassDef &backtrack_class_def = this+backtrackClassDef;
+    const ClassDef &input_class_def = this+inputClassDef;
+    const ClassDef &lookahead_class_def = this+lookaheadClassDef;
+
+    struct ChainContextCollectGlyphsLookupContext lookup_context = {
+      {collect_class},
+      {&backtrack_class_def,
+       &input_class_def,
+       &lookahead_class_def}
+    };
+
+    unsigned int count = ruleSet.len;
+    for (unsigned int i = 0; i < count; i++)
+      (this+ruleSet[i]).collect_glyphs (c, lookup_context);
+  }
+
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
 
+    const ClassDef &backtrack_class_def = this+backtrackClassDef;
     const ClassDef &input_class_def = this+inputClassDef;
+    const ClassDef &lookahead_class_def = this+lookaheadClassDef;
 
-    unsigned int index = input_class_def (c->glyphs[0]);
+    unsigned int index = input_class_def.get_class (c->glyphs[0]);
     const ChainRuleSet &rule_set = this+ruleSet[index];
     struct ChainContextApplyLookupContext lookup_context = {
-      {match_class, NULL},
-      {NULL, &input_class_def, NULL}
+      {match_class},
+      {&backtrack_class_def,
+       &input_class_def,
+       &lookahead_class_def}
     };
     return TRACE_RETURN (rule_set.would_apply (c, lookup_context));
   }
 
-  inline bool apply (hb_apply_context_t *c, apply_lookup_func_t apply_func) const
+  inline const Coverage &get_coverage (void) const
+  {
+    return this+coverage;
+  }
+
+  inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
-    unsigned int index = (this+coverage) (c->buffer->cur().codepoint);
+    TRACE_APPLY (this);
+    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const ClassDef &backtrack_class_def = this+backtrackClassDef;
     const ClassDef &input_class_def = this+inputClassDef;
     const ClassDef &lookahead_class_def = this+lookaheadClassDef;
 
-    index = input_class_def (c->buffer->cur().codepoint);
+    index = input_class_def.get_class (c->buffer->cur().codepoint);
     const ChainRuleSet &rule_set = this+ruleSet[index];
     struct ChainContextApplyLookupContext lookup_context = {
-      {match_class, apply_func},
+      {match_class},
       {&backtrack_class_def,
        &input_class_def,
        &lookahead_class_def}
@@ -1358,7 +1813,7 @@ struct ChainContextFormat2
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (coverage.sanitize (c, this) && backtrackClassDef.sanitize (c, this) &&
                         inputClassDef.sanitize (c, this) && lookaheadClassDef.sanitize (c, this) &&
                         ruleSet.sanitize (c, this));
@@ -1390,13 +1845,9 @@ struct ChainContextFormat2
 
 struct ChainContextFormat3
 {
-  friend struct ChainContext;
-
-  private:
-
-  inline void closure (hb_closure_context_t *c, closure_lookup_func_t closure_func) const
+  inline void closure (hb_closure_context_t *c) const
   {
-    TRACE_CLOSURE ();
+    TRACE_CLOSURE (this);
     const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
 
     if (!(this+input[0]).intersects (c->glyphs))
@@ -1405,7 +1856,7 @@ struct ChainContextFormat3
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
     struct ChainContextClosureLookupContext lookup_context = {
-      {intersects_coverage, closure_func},
+      {intersects_coverage},
       {this, this, this}
     };
     chain_context_closure_lookup (c,
@@ -1416,21 +1867,36 @@ struct ChainContextFormat3
                                  lookup_context);
   }
 
-  inline const Coverage &get_coverage (void) const
+  inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
   {
+    TRACE_COLLECT_GLYPHS (this);
     const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
-    return this+input[0];
+
+    (this+input[0]).add_coverage (c->input);
+
+    const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
+    const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
+    struct ChainContextCollectGlyphsLookupContext lookup_context = {
+      {collect_coverage},
+      {this, this, this}
+    };
+    chain_context_collect_glyphs_lookup (c,
+                                        backtrack.len, (const USHORT *) backtrack.array,
+                                        input.len, (const USHORT *) input.array + 1,
+                                        lookahead.len, (const USHORT *) lookahead.array,
+                                        lookup.len, lookup.array,
+                                        lookup_context);
   }
 
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
-    TRACE_WOULD_APPLY ();
+    TRACE_WOULD_APPLY (this);
 
     const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
     struct ChainContextApplyLookupContext lookup_context = {
-      {match_coverage, NULL},
+      {match_coverage},
       {this, this, this}
     };
     return TRACE_RETURN (chain_context_would_apply_lookup (c,
@@ -1440,18 +1906,24 @@ struct ChainContextFormat3
                                                           lookup.len, lookup.array, lookup_context));
   }
 
-  inline bool apply (hb_apply_context_t *c, apply_lookup_func_t apply_func) const
+  inline const Coverage &get_coverage (void) const
+  {
+    const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
+    return this+input[0];
+  }
+
+  inline bool apply (hb_apply_context_t *c) const
   {
-    TRACE_APPLY ();
+    TRACE_APPLY (this);
     const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
 
-    unsigned int index = (this+input[0]) (c->buffer->cur().codepoint);
+    unsigned int index = (this+input[0]).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
     struct ChainContextApplyLookupContext lookup_context = {
-      {match_coverage, apply_func},
+      {match_coverage},
       {this, this, this}
     };
     return TRACE_RETURN (chain_context_apply_lookup (c,
@@ -1462,7 +1934,7 @@ struct ChainContextFormat3
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!backtrack.sanitize (c, this)) return TRACE_RETURN (false);
     OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
     if (!input.sanitize (c, this)) return TRACE_RETURN (false);
@@ -1495,52 +1967,20 @@ struct ChainContextFormat3
 
 struct ChainContext
 {
-  protected:
-
-  inline void closure (hb_closure_context_t *c, closure_lookup_func_t closure_func) const
-  {
-    TRACE_CLOSURE ();
-    switch (u.format) {
-    case 1: u.format1.closure (c, closure_func); break;
-    case 2: u.format2.closure (c, closure_func); break;
-    case 3: u.format3.closure (c, closure_func); break;
-    default:                                     break;
-    }
-  }
-
-  inline const Coverage &get_coverage (void) const
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
   {
+    TRACE_PROCESS (this);
     switch (u.format) {
-    case 1: return this + u.format1.coverage;
-    case 2: return this + u.format2.coverage;
-    case 3: return u.format3.get_coverage ();
-    default:return Null(Coverage);
-    }
-  }
-
-  inline bool would_apply (hb_would_apply_context_t *c) const
-  {
-    switch (u.format) {
-    case 1: return u.format1.would_apply (c);
-    case 2: return u.format2.would_apply (c);
-    case 3: return u.format3.would_apply (c);
-    default:return false;
-    }
-  }
-
-  inline bool apply (hb_apply_context_t *c, apply_lookup_func_t apply_func) const
-  {
-    TRACE_APPLY ();
-    switch (u.format) {
-    case 1: return TRACE_RETURN (u.format1.apply (c, apply_func));
-    case 2: return TRACE_RETURN (u.format2.apply (c, apply_func));
-    case 3: return TRACE_RETURN (u.format3.apply (c, apply_func));
-    default:return TRACE_RETURN (false);
+    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 2: return TRACE_RETURN (c->process (u.format2));
+    case 3: return TRACE_RETURN (c->process (u.format3));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -1562,14 +2002,11 @@ struct ChainContext
 
 struct ExtensionFormat1
 {
-  friend struct Extension;
-
-  protected:
   inline unsigned int get_type (void) const { return extensionLookupType; }
   inline unsigned int get_offset (void) const { return extensionOffset; }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this));
   }
 
@@ -1584,6 +2021,7 @@ struct ExtensionFormat1
   DEFINE_SIZE_STATIC (8);
 };
 
+template <typename T>
 struct Extension
 {
   inline unsigned int get_type (void) const
@@ -1601,8 +2039,22 @@ struct Extension
     }
   }
 
-  inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+  template <typename X>
+  inline const X& get_subtable (void) const
+  {
+    unsigned int offset = get_offset ();
+    if (unlikely (!offset)) return Null(typename T::LookupSubTable);
+    return StructAtOffset<typename T::LookupSubTable> (this, offset);
+  }
+
+  template <typename context_t>
+  inline typename context_t::return_t process (context_t *c) const
+  {
+    return get_subtable<typename T::LookupSubTable> ().process (c, get_type ());
+  }
+
+  inline bool sanitize_self (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
     case 1: return TRACE_RETURN (u.format1.sanitize (c));
@@ -1610,6 +2062,14 @@ struct Extension
     }
   }
 
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    if (!sanitize_self (c)) return TRACE_RETURN (false);
+    unsigned int offset = get_offset ();
+    if (unlikely (!offset)) return TRACE_RETURN (true);
+    return TRACE_RETURN (StructAtOffset<typename T::LookupSubTable> (this, offset).sanitize (c, get_type ()));
+  }
+
   protected:
   union {
   USHORT               format;         /* Format identifier */
@@ -1659,7 +2119,7 @@ struct GSUBGPOS
   { return (this+lookupList)[i]; }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (version.sanitize (c) && likely (version.major == 1) &&
                         scriptList.sanitize (c, this) &&
                         featureList.sanitize (c, this) &&
@@ -1680,5 +2140,7 @@ struct GSUBGPOS
 };
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH */
index e101782..49093de 100644 (file)
  */
 
 typedef enum {
-  HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED        = 0x0001,
-  HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH  = 0x0002,
-  HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE    = 0x0004,
-  HB_OT_LAYOUT_GLYPH_CLASS_MARK                = 0x0008,
-  HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT   = 0x0010
-} hb_ot_layout_glyph_class_t;
+  HB_OT_LAYOUT_GLYPH_PROPS_UNCLASSIFIED        = 0x0001,
+  HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH  = 0x0002,
+  HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE    = 0x0004,
+  HB_OT_LAYOUT_GLYPH_PROPS_MARK                = 0x0008,
+  HB_OT_LAYOUT_GLYPH_PROPS_COMPONENT   = 0x0010
+} hb_ot_layout_glyph_class_mask_t;
 
 
 
@@ -123,7 +123,7 @@ get_lig_comp (const hb_glyph_info_t &info)
 static inline unsigned int
 get_lig_num_comps (const hb_glyph_info_t &info)
 {
-  if ((info.glyph_props() & HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE) && is_a_ligature (info))
+  if ((info.glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE) && is_a_ligature (info))
     return info.lig_props() & 0x0F;
   else
     return 1;
@@ -138,10 +138,11 @@ static inline uint8_t allocate_lig_id (hb_buffer_t *buffer) {
 
 
 HB_INTERNAL hb_bool_t
-hb_ot_layout_would_substitute_lookup_fast (hb_face_t            *face,
+hb_ot_layout_lookup_would_substitute_fast (hb_face_t            *face,
+                                          unsigned int          lookup_index,
                                           const hb_codepoint_t *glyphs,
                                           unsigned int          glyphs_length,
-                                          unsigned int          lookup_index);
+                                          hb_bool_t             zero_context);
 
 
 /* Should be called before all the substitute_lookup's are done. */
@@ -184,15 +185,21 @@ hb_ot_layout_position_finish (hb_font_t    *font,
  * hb_ot_layout_t
  */
 
+namespace OT {
+  struct GDEF;
+  struct GSUB;
+  struct GPOS;
+}
+
 struct hb_ot_layout_t
 {
   hb_blob_t *gdef_blob;
   hb_blob_t *gsub_blob;
   hb_blob_t *gpos_blob;
 
-  const struct GDEF *gdef;
-  const struct GSUB *gsub;
-  const struct GPOS *gpos;
+  const struct OT::GDEF *gdef;
+  const struct OT::GSUB *gsub;
+  const struct OT::GPOS *gpos;
 
   unsigned int gsub_lookup_count;
   unsigned int gpos_lookup_count;
index e4d84e8..3ff6fc8 100644 (file)
@@ -33,8 +33,6 @@
 #include "hb-ot-layout-gdef-table.hh"
 #include "hb-ot-layout-gsub-table.hh"
 #include "hb-ot-layout-gpos-table.hh"
-#include "hb-ot-maxp-table.hh"
-
 
 #include <stdlib.h>
 #include <string.h>
@@ -49,14 +47,14 @@ _hb_ot_layout_create (hb_face_t *face)
   if (unlikely (!layout))
     return NULL;
 
-  layout->gdef_blob = Sanitizer<GDEF>::sanitize (face->reference_table (HB_OT_TAG_GDEF));
-  layout->gdef = Sanitizer<GDEF>::lock_instance (layout->gdef_blob);
+  layout->gdef_blob = OT::Sanitizer<OT::GDEF>::sanitize (face->reference_table (HB_OT_TAG_GDEF));
+  layout->gdef = OT::Sanitizer<OT::GDEF>::lock_instance (layout->gdef_blob);
 
-  layout->gsub_blob = Sanitizer<GSUB>::sanitize (face->reference_table (HB_OT_TAG_GSUB));
-  layout->gsub = Sanitizer<GSUB>::lock_instance (layout->gsub_blob);
+  layout->gsub_blob = OT::Sanitizer<OT::GSUB>::sanitize (face->reference_table (HB_OT_TAG_GSUB));
+  layout->gsub = OT::Sanitizer<OT::GSUB>::lock_instance (layout->gsub_blob);
 
-  layout->gpos_blob = Sanitizer<GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
-  layout->gpos = Sanitizer<GPOS>::lock_instance (layout->gpos_blob);
+  layout->gpos_blob = OT::Sanitizer<OT::GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
+  layout->gpos = OT::Sanitizer<OT::GPOS>::lock_instance (layout->gpos_blob);
 
   layout->gsub_lookup_count = layout->gsub->get_lookup_count ();
   layout->gpos_lookup_count = layout->gpos->get_lookup_count ();
@@ -72,9 +70,9 @@ _hb_ot_layout_create (hb_face_t *face)
   }
 
   for (unsigned int i = 0; i < layout->gsub_lookup_count; i++)
-    layout->gsub->add_coverage (&layout->gsub_digests[i], i);
+    layout->gsub->get_lookup (i).add_coverage (&layout->gsub_digests[i]);
   for (unsigned int i = 0; i < layout->gpos_lookup_count; i++)
-    layout->gpos->add_coverage (&layout->gpos_digests[i], i);
+    layout->gpos->get_lookup (i).add_coverage (&layout->gpos_digests[i]);
 
   return layout;
 }
@@ -92,22 +90,22 @@ _hb_ot_layout_destroy (hb_ot_layout_t *layout)
   free (layout);
 }
 
-static inline const GDEF&
+static inline const OT::GDEF&
 _get_gdef (hb_face_t *face)
 {
-  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return Null(GDEF);
+  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::GDEF);
   return *hb_ot_layout_from_face (face)->gdef;
 }
-static inline const GSUB&
+static inline const OT::GSUB&
 _get_gsub (hb_face_t *face)
 {
-  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return Null(GSUB);
+  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::GSUB);
   return *hb_ot_layout_from_face (face)->gsub;
 }
-static inline const GPOS&
+static inline const OT::GPOS&
 _get_gpos (hb_face_t *face)
 {
-  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return Null(GPOS);
+  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::GPOS);
   return *hb_ot_layout_from_face (face)->gpos;
 }
 
@@ -122,6 +120,20 @@ hb_ot_layout_has_glyph_classes (hb_face_t *face)
   return _get_gdef (face).has_glyph_classes ();
 }
 
+hb_ot_layout_glyph_class_t
+hb_ot_layout_get_glyph_class (hb_face_t      *face,
+                             hb_codepoint_t  glyph)
+{
+  return (hb_ot_layout_glyph_class_t) _get_gdef (face).get_glyph_class (glyph);
+}
+
+void
+hb_ot_layout_get_glyphs_in_class (hb_face_t                  *face,
+                                 hb_ot_layout_glyph_class_t  klass,
+                                 hb_set_t                   *glyphs /* OUT */)
+{
+  return _get_gdef (face).get_glyphs_in_class (klass, glyphs);
+}
 
 unsigned int
 hb_ot_layout_get_attach_points (hb_face_t      *face,
@@ -149,14 +161,14 @@ hb_ot_layout_get_ligature_carets (hb_font_t      *font,
  * GSUB/GPOS
  */
 
-static const GSUBGPOS&
+static const OT::GSUBGPOS&
 get_gsubgpos_table (hb_face_t *face,
                    hb_tag_t   table_tag)
 {
   switch (table_tag) {
     case HB_OT_TAG_GSUB: return _get_gsub (face);
     case HB_OT_TAG_GPOS: return _get_gpos (face);
-    default:             return Null(GSUBGPOS);
+    default:             return OT::Null(OT::GSUBGPOS);
   }
 }
 
@@ -168,19 +180,21 @@ hb_ot_layout_table_get_script_tags (hb_face_t    *face,
                                    unsigned int *script_count /* IN/OUT */,
                                    hb_tag_t     *script_tags /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   return g.get_script_tags (start_offset, script_count, script_tags);
 }
 
+#define HB_OT_TAG_LATIN_SCRIPT         HB_TAG ('l', 'a', 't', 'n')
+
 hb_bool_t
 hb_ot_layout_table_find_script (hb_face_t    *face,
                                hb_tag_t      table_tag,
                                hb_tag_t      script_tag,
                                unsigned int *script_index)
 {
-  ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   if (g.find_script_index (script_tag, script_index))
     return true;
@@ -194,6 +208,11 @@ hb_ot_layout_table_find_script (hb_face_t    *face,
   if (g.find_script_index (HB_OT_TAG_DEFAULT_LANGUAGE, script_index))
     return false;
 
+  /* try with 'latn'; some old fonts put their features there even though
+     they're really trying to support Thai, for example :( */
+  if (g.find_script_index (HB_OT_TAG_LATIN_SCRIPT, script_index))
+    return false;
+
   if (script_index) *script_index = HB_OT_LAYOUT_NO_SCRIPT_INDEX;
   return false;
 }
@@ -205,8 +224,8 @@ hb_ot_layout_table_choose_script (hb_face_t      *face,
                                  unsigned int   *script_index,
                                  hb_tag_t       *chosen_script)
 {
-  ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   while (*script_tags)
   {
@@ -234,7 +253,6 @@ hb_ot_layout_table_choose_script (hb_face_t      *face,
 
   /* try with 'latn'; some old fonts put their features there even though
      they're really trying to support Thai, for example :( */
-#define HB_OT_TAG_LATIN_SCRIPT         HB_TAG ('l', 'a', 't', 'n')
   if (g.find_script_index (HB_OT_TAG_LATIN_SCRIPT, script_index)) {
     if (chosen_script)
       *chosen_script = HB_OT_TAG_LATIN_SCRIPT;
@@ -254,7 +272,7 @@ hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
                                     unsigned int *feature_count /* IN/OUT */,
                                     hb_tag_t     *feature_tags /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   return g.get_feature_tags (start_offset, feature_count, feature_tags);
 }
@@ -268,7 +286,7 @@ hb_ot_layout_script_get_language_tags (hb_face_t    *face,
                                       unsigned int *language_count /* IN/OUT */,
                                       hb_tag_t     *language_tags /* OUT */)
 {
-  const Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
+  const OT::Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
 
   return s.get_lang_sys_tags (start_offset, language_count, language_tags);
 }
@@ -280,8 +298,8 @@ hb_ot_layout_script_find_language (hb_face_t    *face,
                                   hb_tag_t      language_tag,
                                   unsigned int *language_index)
 {
-  ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX);
-  const Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
+  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX);
+  const OT::Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
 
   if (s.find_lang_sys_index (language_tag, language_index))
     return true;
@@ -301,7 +319,7 @@ hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
                                                  unsigned int  language_index,
                                                  unsigned int *feature_index)
 {
-  const LangSys &l = get_gsubgpos_table (face, table_tag).get_script (script_index).get_lang_sys (language_index);
+  const OT::LangSys &l = get_gsubgpos_table (face, table_tag).get_script (script_index).get_lang_sys (language_index);
 
   if (feature_index) *feature_index = l.get_required_feature_index ();
 
@@ -317,8 +335,8 @@ hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
                                           unsigned int *feature_count /* IN/OUT */,
                                           unsigned int *feature_indexes /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
 
   return l.get_feature_indexes (start_offset, feature_count, feature_indexes);
 }
@@ -332,8 +350,8 @@ hb_ot_layout_language_get_feature_tags (hb_face_t    *face,
                                        unsigned int *feature_count /* IN/OUT */,
                                        hb_tag_t     *feature_tags /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
 
   ASSERT_STATIC (sizeof (unsigned int) == sizeof (hb_tag_t));
   unsigned int ret = l.get_feature_indexes (start_offset, feature_count, (unsigned int *) feature_tags);
@@ -356,9 +374,9 @@ hb_ot_layout_language_find_feature (hb_face_t    *face,
                                    hb_tag_t      feature_tag,
                                    unsigned int *feature_index)
 {
-  ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX);
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
 
   unsigned int num_features = l.get_feature_count ();
   for (unsigned int i = 0; i < num_features; i++) {
@@ -375,55 +393,273 @@ hb_ot_layout_language_find_feature (hb_face_t    *face,
 }
 
 unsigned int
-hb_ot_layout_feature_get_lookup_indexes (hb_face_t    *face,
-                                        hb_tag_t      table_tag,
-                                        unsigned int  feature_index,
-                                        unsigned int  start_offset,
-                                        unsigned int *lookup_count /* IN/OUT */,
-                                        unsigned int *lookup_indexes /* OUT */)
+hb_ot_layout_feature_get_lookups (hb_face_t    *face,
+                                 hb_tag_t      table_tag,
+                                 unsigned int  feature_index,
+                                 unsigned int  start_offset,
+                                 unsigned int *lookup_count /* IN/OUT */,
+                                 unsigned int *lookup_indexes /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  const Feature &f = g.get_feature (feature_index);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::Feature &f = g.get_feature (feature_index);
 
   return f.get_lookup_indexes (start_offset, lookup_count, lookup_indexes);
 }
 
+static void
+_hb_ot_layout_collect_lookups_lookups (hb_face_t      *face,
+                                      hb_tag_t        table_tag,
+                                      unsigned int    feature_index,
+                                      hb_set_t       *lookup_indexes /* OUT */)
+{
+  unsigned int lookup_indices[32];
+  unsigned int offset, len;
+
+  offset = 0;
+  do {
+    len = ARRAY_LENGTH (lookup_indices);
+    hb_ot_layout_feature_get_lookups (face,
+                                     table_tag,
+                                     feature_index,
+                                     offset, &len,
+                                     lookup_indices);
+
+    for (unsigned int i = 0; i < len; i++)
+      lookup_indexes->add (lookup_indices[i]);
+
+    offset += len;
+  } while (len == ARRAY_LENGTH (lookup_indices));
+}
+
+static void
+_hb_ot_layout_collect_lookups_features (hb_face_t      *face,
+                                       hb_tag_t        table_tag,
+                                       unsigned int    script_index,
+                                       unsigned int    language_index,
+                                       const hb_tag_t *features,
+                                       hb_set_t       *lookup_indexes /* OUT */)
+{
+  unsigned int required_feature_index;
+  if (hb_ot_layout_language_get_required_feature_index (face,
+                                                       table_tag,
+                                                       script_index,
+                                                       language_index,
+                                                       &required_feature_index))
+    _hb_ot_layout_collect_lookups_lookups (face,
+                                          table_tag,
+                                          required_feature_index,
+                                          lookup_indexes);
+
+  if (!features)
+  {
+    /* All features */
+    unsigned int feature_indices[32];
+    unsigned int offset, len;
+
+    offset = 0;
+    do {
+      len = ARRAY_LENGTH (feature_indices);
+      hb_ot_layout_language_get_feature_indexes (face,
+                                                table_tag,
+                                                script_index,
+                                                language_index,
+                                                offset, &len,
+                                                feature_indices);
+
+      for (unsigned int i = 0; i < len; i++)
+       _hb_ot_layout_collect_lookups_lookups (face,
+                                              table_tag,
+                                              feature_indices[i],
+                                              lookup_indexes);
+
+      offset += len;
+    } while (len == ARRAY_LENGTH (feature_indices));
+  }
+  else
+  {
+    for (; *features; features++)
+    {
+      unsigned int feature_index;
+      if (hb_ot_layout_language_find_feature (face,
+                                             table_tag,
+                                             script_index,
+                                             language_index,
+                                             *features,
+                                             &feature_index))
+        _hb_ot_layout_collect_lookups_lookups (face,
+                                              table_tag,
+                                              feature_index,
+                                              lookup_indexes);
+    }
+  }
+}
+
+static void
+_hb_ot_layout_collect_lookups_languages (hb_face_t      *face,
+                                        hb_tag_t        table_tag,
+                                        unsigned int    script_index,
+                                        const hb_tag_t *languages,
+                                        const hb_tag_t *features,
+                                        hb_set_t       *lookup_indexes /* OUT */)
+{
+  _hb_ot_layout_collect_lookups_features (face,
+                                         table_tag,
+                                         script_index,
+                                         HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX,
+                                         features,
+                                         lookup_indexes);
+
+  if (!languages)
+  {
+    /* All languages */
+    unsigned int count = hb_ot_layout_script_get_language_tags (face,
+                                                               table_tag,
+                                                               script_index,
+                                                               0, NULL, NULL);
+    for (unsigned int language_index = 0; language_index < count; language_index++)
+      _hb_ot_layout_collect_lookups_features (face,
+                                             table_tag,
+                                             script_index,
+                                             language_index,
+                                             features,
+                                             lookup_indexes);
+  }
+  else
+  {
+    for (; *languages; languages++)
+    {
+      unsigned int language_index;
+      if (hb_ot_layout_script_find_language (face,
+                                            table_tag,
+                                            script_index,
+                                            *languages,
+                                            &language_index))
+        _hb_ot_layout_collect_lookups_features (face,
+                                               table_tag,
+                                               script_index,
+                                               language_index,
+                                               features,
+                                               lookup_indexes);
+    }
+  }
+}
+
+void
+hb_ot_layout_collect_lookups (hb_face_t      *face,
+                             hb_tag_t        table_tag,
+                             const hb_tag_t *scripts,
+                             const hb_tag_t *languages,
+                             const hb_tag_t *features,
+                             hb_set_t       *lookup_indexes /* OUT */)
+{
+  if (!scripts)
+  {
+    /* All scripts */
+    unsigned int count = hb_ot_layout_table_get_script_tags (face,
+                                                            table_tag,
+                                                            0, NULL, NULL);
+    for (unsigned int script_index = 0; script_index < count; script_index++)
+      _hb_ot_layout_collect_lookups_languages (face,
+                                              table_tag,
+                                              script_index,
+                                              languages,
+                                              features,
+                                              lookup_indexes);
+  }
+  else
+  {
+    for (; *scripts; scripts++)
+    {
+      unsigned int script_index;
+      if (hb_ot_layout_table_find_script (face,
+                                         table_tag,
+                                         *scripts,
+                                         &script_index))
+        _hb_ot_layout_collect_lookups_languages (face,
+                                                table_tag,
+                                                script_index,
+                                                languages,
+                                                features,
+                                                lookup_indexes);
+    }
+  }
+}
+
+void
+hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
+                                   hb_tag_t      table_tag,
+                                   unsigned int  lookup_index,
+                                   hb_set_t     *glyphs_before, /* OUT. May be NULL */
+                                   hb_set_t     *glyphs_input,  /* OUT. May be NULL */
+                                   hb_set_t     *glyphs_after,  /* OUT. May be NULL */
+                                   hb_set_t     *glyphs_output  /* OUT. May be NULL */)
+{
+  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return;
+
+  OT::hb_collect_glyphs_context_t c (face,
+                                    glyphs_before,
+                                    glyphs_input,
+                                    glyphs_after,
+                                    glyphs_output);
+
+  switch (table_tag)
+  {
+    case HB_OT_TAG_GSUB:
+    {
+      const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
+      l.collect_glyphs_lookup (&c);
+      return;
+    }
+    case HB_OT_TAG_GPOS:
+    {
+      const OT::PosLookup& l = hb_ot_layout_from_face (face)->gpos->get_lookup (lookup_index);
+      l.collect_glyphs_lookup (&c);
+      return;
+    }
+  }
+}
+
 
 /*
- * GSUB
+ * OT::GSUB
  */
 
 hb_bool_t
 hb_ot_layout_has_substitution (hb_face_t *face)
 {
-  return &_get_gsub (face) != &Null(GSUB);
+  return &_get_gsub (face) != &OT::Null(OT::GSUB);
 }
 
 hb_bool_t
-hb_ot_layout_would_substitute_lookup (hb_face_t            *face,
+hb_ot_layout_lookup_would_substitute (hb_face_t            *face,
+                                     unsigned int          lookup_index,
                                      const hb_codepoint_t *glyphs,
                                      unsigned int          glyphs_length,
-                                     unsigned int          lookup_index)
+                                     hb_bool_t             zero_context)
 {
   if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return false;
-  return hb_ot_layout_would_substitute_lookup_fast (face, glyphs, glyphs_length, lookup_index);
+  return hb_ot_layout_lookup_would_substitute_fast (face, lookup_index, glyphs, glyphs_length, zero_context);
 }
 
 hb_bool_t
-hb_ot_layout_would_substitute_lookup_fast (hb_face_t            *face,
+hb_ot_layout_lookup_would_substitute_fast (hb_face_t            *face,
+                                          unsigned int          lookup_index,
                                           const hb_codepoint_t *glyphs,
                                           unsigned int          glyphs_length,
-                                          unsigned int          lookup_index)
+                                          hb_bool_t             zero_context)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (face)->gsub_lookup_count)) return false;
-  hb_would_apply_context_t c (face, glyphs, glyphs_length, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
-  return hb_ot_layout_from_face (face)->gsub->would_substitute_lookup (&c, lookup_index);
+  OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context);
+
+  const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
+
+  return l.would_apply (&c, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
 }
 
 void
 hb_ot_layout_substitute_start (hb_font_t *font, hb_buffer_t *buffer)
 {
-  GSUB::substitute_start (font, buffer);
+  OT::GSUB::substitute_start (font, buffer);
 }
 
 hb_bool_t
@@ -433,39 +669,46 @@ hb_ot_layout_substitute_lookup (hb_font_t    *font,
                                hb_mask_t     mask)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gsub_lookup_count)) return false;
-  hb_apply_context_t c (font, buffer, mask, &hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
-  return hb_ot_layout_from_face (font->face)->gsub->substitute_lookup (&c, lookup_index);
+
+  OT::hb_apply_context_t c (font, buffer, mask);
+
+  const OT::SubstLookup& l = hb_ot_layout_from_face (font->face)->gsub->get_lookup (lookup_index);
+
+  return l.apply_string (&c, &hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
 }
 
 void
 hb_ot_layout_substitute_finish (hb_font_t *font, hb_buffer_t *buffer)
 {
-  GSUB::substitute_finish (font, buffer);
+  OT::GSUB::substitute_finish (font, buffer);
 }
 
 void
-hb_ot_layout_substitute_closure_lookup (hb_face_t    *face,
-                                       hb_set_t     *glyphs,
-                                       unsigned int  lookup_index)
+hb_ot_layout_lookup_substitute_closure (hb_face_t    *face,
+                                       unsigned int  lookup_index,
+                                       hb_set_t     *glyphs)
 {
-  hb_closure_context_t c (face, glyphs);
-  _get_gsub (face).closure_lookup (&c, lookup_index);
+  OT::hb_closure_context_t c (face, glyphs);
+
+  const OT::SubstLookup& l = _get_gsub (face).get_lookup (lookup_index);
+
+  l.closure (&c);
 }
 
 /*
- * GPOS
+ * OT::GPOS
  */
 
 hb_bool_t
 hb_ot_layout_has_positioning (hb_face_t *face)
 {
-  return &_get_gpos (face) != &Null(GPOS);
+  return &_get_gpos (face) != &OT::Null(OT::GPOS);
 }
 
 void
 hb_ot_layout_position_start (hb_font_t *font, hb_buffer_t *buffer)
 {
-  GPOS::position_start (font, buffer);
+  OT::GPOS::position_start (font, buffer);
 }
 
 hb_bool_t
@@ -475,12 +718,61 @@ hb_ot_layout_position_lookup (hb_font_t    *font,
                              hb_mask_t     mask)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gpos_lookup_count)) return false;
-  hb_apply_context_t c (font, buffer, mask, &hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
-  return hb_ot_layout_from_face (font->face)->gpos->position_lookup (&c, lookup_index);
+
+  OT::hb_apply_context_t c (font, buffer, mask);
+
+  const OT::PosLookup& l = hb_ot_layout_from_face (font->face)->gpos->get_lookup (lookup_index);
+
+  return l.apply_string (&c, &hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
 }
 
 void
 hb_ot_layout_position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t zero_width_attached_marks)
 {
-  GPOS::position_finish (font, buffer, zero_width_attached_marks);
+  OT::GPOS::position_finish (font, buffer, zero_width_attached_marks);
+}
+
+hb_bool_t
+hb_ot_layout_get_size_params (hb_face_t    *face,
+                             unsigned int *design_size,       /* OUT.  May be NULL */
+                             unsigned int *subfamily_id,      /* OUT.  May be NULL */
+                             unsigned int *subfamily_name_id, /* OUT.  May be NULL */
+                             unsigned int *range_start,       /* OUT.  May be NULL */
+                             unsigned int *range_end          /* OUT.  May be NULL */)
+{
+  const OT::GPOS &gpos = _get_gpos (face);
+  const hb_tag_t tag = HB_TAG ('s','i','z','e');
+
+  unsigned int num_features = gpos.get_feature_count ();
+  for (unsigned int i = 0; i < num_features; i++)
+  {
+    if (tag == gpos.get_feature_tag (i))
+    {
+      const OT::Feature &f = gpos.get_feature (i);
+      const OT::FeatureParamsSize &params = f.get_feature_params ().get_size_params (tag);
+
+      if (params.designSize)
+      {
+#define PARAM(a, A) if (a) *a = params.A
+       PARAM (design_size, designSize);
+       PARAM (subfamily_id, subfamilyID);
+       PARAM (subfamily_name_id, subfamilyNameID);
+       PARAM (range_start, rangeStart);
+       PARAM (range_end, rangeEnd);
+#undef PARAM
+
+       return true;
+      }
+    }
+  }
+
+#define PARAM(a, A) if (a) *a = 0
+  PARAM (design_size, designSize);
+  PARAM (subfamily_id, subfamilyID);
+  PARAM (subfamily_name_id, subfamilyNameID);
+  PARAM (range_start, rangeStart);
+  PARAM (range_end, rangeEnd);
+#undef PARAM
+
+  return false;
 }
index 2ad4ff4..134f1a6 100644 (file)
@@ -50,6 +50,24 @@ HB_BEGIN_DECLS
 hb_bool_t
 hb_ot_layout_has_glyph_classes (hb_face_t *face);
 
+typedef enum {
+  HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED        = 0,
+  HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH  = 1,
+  HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE    = 2,
+  HB_OT_LAYOUT_GLYPH_CLASS_MARK                = 3,
+  HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT   = 4
+} hb_ot_layout_glyph_class_t;
+
+hb_ot_layout_glyph_class_t
+hb_ot_layout_get_glyph_class (hb_face_t      *face,
+                             hb_codepoint_t  glyph);
+
+void
+hb_ot_layout_get_glyphs_in_class (hb_face_t                  *face,
+                                 hb_ot_layout_glyph_class_t  klass,
+                                 hb_set_t                   *glyphs /* OUT */);
+
+
 /* Not that useful.  Provides list of attach points for a glyph that a
  * client may want to cache */
 unsigned int
@@ -154,12 +172,60 @@ hb_ot_layout_language_find_feature (hb_face_t    *face,
                                    unsigned int *feature_index);
 
 unsigned int
-hb_ot_layout_feature_get_lookup_indexes (hb_face_t    *face,
+hb_ot_layout_feature_get_lookups (hb_face_t    *face,
+                                 hb_tag_t      table_tag,
+                                 unsigned int  feature_index,
+                                 unsigned int  start_offset,
+                                 unsigned int *lookup_count /* IN/OUT */,
+                                 unsigned int *lookup_indexes /* OUT */);
+
+void
+hb_ot_layout_collect_lookups (hb_face_t      *face,
+                             hb_tag_t        table_tag,
+                             const hb_tag_t *scripts,
+                             const hb_tag_t *languages,
+                             const hb_tag_t *features,
+                             hb_set_t       *lookup_indexes /* OUT */);
+
+void
+hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
+                                 hb_tag_t         table_tag,
+                                 hb_set_t        *lookup_indexes /* OUT */);
+
+void
+hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
+                                   hb_tag_t      table_tag,
+                                   unsigned int  lookup_index,
+                                   hb_set_t     *glyphs_before, /* OUT. May be NULL */
+                                   hb_set_t     *glyphs_input,  /* OUT. May be NULL */
+                                   hb_set_t     *glyphs_after,  /* OUT. May be NULL */
+                                   hb_set_t     *glyphs_output  /* OUT. May be NULL */);
+
+#ifdef HB_NOT_IMPLEMENTED
+typedef struct
+{
+  const hb_codepoint_t *before,
+  unsigned int          before_length,
+  const hb_codepoint_t *input,
+  unsigned int          input_length,
+  const hb_codepoint_t *after,
+  unsigned int          after_length,
+} hb_ot_layout_glyph_sequence_t;
+
+typedef hb_bool_t
+(*hb_ot_layout_glyph_sequence_func_t) (hb_font_t    *font,
+                                      hb_tag_t      table_tag,
+                                      unsigned int  lookup_index,
+                                      const hb_ot_layout_glyph_sequence_t *sequence,
+                                      void         *user_data);
+
+void
+Xhb_ot_layout_lookup_enumerate_sequences (hb_face_t    *face,
                                         hb_tag_t      table_tag,
-                                        unsigned int  feature_index,
-                                        unsigned int  start_offset,
-                                        unsigned int *lookup_count /* IN/OUT */,
-                                        unsigned int *lookup_indexes /* OUT */);
+                                        unsigned int  lookup_index,
+                                        hb_ot_layout_glyph_sequence_func_t callback,
+                                        void         *user_data);
+#endif
 
 
 /*
@@ -170,15 +236,30 @@ hb_bool_t
 hb_ot_layout_has_substitution (hb_face_t *face);
 
 hb_bool_t
-hb_ot_layout_would_substitute_lookup (hb_face_t            *face,
+hb_ot_layout_lookup_would_substitute (hb_face_t            *face,
+                                     unsigned int          lookup_index,
                                      const hb_codepoint_t *glyphs,
                                      unsigned int          glyphs_length,
-                                     unsigned int          lookup_index);
+                                     hb_bool_t             zero_context);
 
 void
-hb_ot_layout_substitute_closure_lookup (hb_face_t    *face,
-                                       hb_set_t     *glyphs,
-                                       unsigned int  lookup_index);
+hb_ot_layout_lookup_substitute_closure (hb_face_t    *face,
+                                       unsigned int  lookup_index,
+                                       hb_set_t     *glyphs
+                                       /*TODO , hb_bool_t  inclusive */);
+
+#ifdef HB_NOT_IMPLEMENTED
+/* Note: You better have GDEF when using this API, or marks won't do much. */
+hb_bool_t
+Xhb_ot_layout_lookup_substitute (hb_font_t            *font,
+                               unsigned int          lookup_index,
+                               const hb_ot_layout_glyph_sequence_t *sequence,
+                               unsigned int          out_size,
+                               hb_codepoint_t       *glyphs_out,   /* OUT */
+                               unsigned int         *clusters_out, /* OUT */
+                               unsigned int         *out_length    /* OUT */);
+#endif
+
 
 /*
  * GPOS
@@ -187,6 +268,25 @@ hb_ot_layout_substitute_closure_lookup (hb_face_t    *face,
 hb_bool_t
 hb_ot_layout_has_positioning (hb_face_t *face);
 
+#ifdef HB_NOT_IMPLEMENTED
+/* Note: You better have GDEF when using this API, or marks won't do much. */
+hb_bool_t
+Xhb_ot_layout_lookup_position (hb_font_t            *font,
+                             unsigned int          lookup_index,
+                             const hb_ot_layout_glyph_sequence_t *sequence,
+                             hb_glyph_position_t  *positions /* IN / OUT */);
+#endif
+
+/* Optical 'size' feature info.  Returns true if found.
+ * http://www.microsoft.com/typography/otspec/features_pt.htm#size */
+hb_bool_t
+hb_ot_layout_get_size_params (hb_face_t    *face,
+                             unsigned int *design_size,       /* OUT.  May be NULL */
+                             unsigned int *subfamily_id,      /* OUT.  May be NULL */
+                             unsigned int *subfamily_name_id, /* OUT.  May be NULL */
+                             unsigned int *range_start,       /* OUT.  May be NULL */
+                             unsigned int *range_end          /* OUT.  May be NULL */);
+
 
 HB_END_DECLS
 
index b9c6736..b140207 100644 (file)
@@ -49,6 +49,7 @@ struct hb_ot_map_t
     unsigned int shift;
     hb_mask_t mask;
     hb_mask_t _1_mask; /* mask for value=1, for quick access */
+    hb_bool_t needs_fallback;
 
     static int cmp (const feature_map_t *a, const feature_map_t *b)
     { return a->tag < b->tag ? -1 : a->tag > b->tag ? 1 : 0; }
@@ -80,6 +81,11 @@ struct hb_ot_map_t
     return map ? map->mask : 0;
   }
 
+  inline bool needs_fallback (hb_tag_t feature_tag) const {
+    const feature_map_t *map = features.bsearch (&feature_tag);
+    return map ? map->needs_fallback : false;
+  }
+
   inline hb_mask_t get_1_mask (hb_tag_t feature_tag) const {
     const feature_map_t *map = features.bsearch (&feature_tag);
     return map ? map->_1_mask : 0;
@@ -109,10 +115,7 @@ struct hb_ot_map_t
     *lookup_count = end - start;
   }
 
-  inline hb_tag_t get_chosen_script (unsigned int table_index) const
-  { return chosen_script[table_index]; }
-
-  HB_INTERNAL void substitute_closure (const struct hb_ot_shape_plan_t *plan, hb_face_t *face, hb_set_t *glyphs) const;
+  HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t *lookups) const;
   HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
   HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
 
@@ -124,6 +127,9 @@ struct hb_ot_map_t
     pauses[1].finish ();
   }
 
+  public:
+  hb_tag_t chosen_script[2];
+  bool found_script[2];
 
   private:
 
@@ -134,7 +140,6 @@ struct hb_ot_map_t
 
   hb_mask_t global_mask;
 
-  hb_tag_t chosen_script[2];
   hb_prealloced_array_t<feature_map_t, 8> features;
   hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */
   hb_prealloced_array_t<pause_map_t, 1> pauses[2]; /* GSUB/GPOS */
@@ -145,21 +150,20 @@ struct hb_ot_map_builder_t
 {
   public:
 
-  hb_ot_map_builder_t (void) { memset (this, 0, sizeof (*this)); }
+  HB_INTERNAL hb_ot_map_builder_t (hb_face_t *face_,
+                                  const hb_segment_properties_t *props_);
 
-  HB_INTERNAL void add_feature (hb_tag_t tag, unsigned int value, bool global);
+  HB_INTERNAL void add_feature (hb_tag_t tag, unsigned int value, bool global, bool has_fallback = false);
 
-  inline void add_bool_feature (hb_tag_t tag, bool global = true)
-  { add_feature (tag, 1, global); }
+  inline void add_bool_feature (hb_tag_t tag, bool global = true, bool has_fallback = false)
+  { add_feature (tag, 1, global, has_fallback); }
 
   inline void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func)
   { add_pause (0, pause_func); }
   inline void add_gpos_pause (hb_ot_map_t::pause_func_t pause_func)
   { add_pause (1, pause_func); }
 
-  HB_INTERNAL void compile (hb_face_t *face,
-                           const hb_segment_properties_t *props,
-                           struct hb_ot_map_t &m);
+  HB_INTERNAL void compile (struct hb_ot_map_t &m);
 
   inline void finish (void) {
     feature_infos.finish ();
@@ -174,6 +178,7 @@ struct hb_ot_map_builder_t
     unsigned int seq; /* sequence#, used for stable sorting only */
     unsigned int max_value;
     bool global; /* whether the feature applies value to every glyph in the buffer */
+    bool has_fallback; /* whether to allocate bits even if feature not found */
     unsigned int default_value; /* for non-global features, what should the unset glyphs take */
     unsigned int stage[2]; /* GSUB/GPOS */
 
@@ -188,6 +193,17 @@ struct hb_ot_map_builder_t
 
   HB_INTERNAL void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func);
 
+  public:
+
+  hb_face_t *face;
+  hb_segment_properties_t props;
+
+  hb_tag_t chosen_script[2];
+  bool found_script[2];
+  unsigned int script_index[2], language_index[2];
+
+  private:
+
   unsigned int current_stage[2]; /* GSUB/GPOS */
   hb_prealloced_array_t<feature_info_t,16> feature_infos;
   hb_prealloced_array_t<pause_info_t, 1> pauses[2]; /* GSUB/GPOS */
index 7eed624..62f7904 100644 (file)
@@ -41,11 +41,11 @@ hb_ot_map_t::add_lookups (hb_face_t    *face,
   offset = 0;
   do {
     len = ARRAY_LENGTH (lookup_indices);
-    hb_ot_layout_feature_get_lookup_indexes (face,
-                                            table_tags[table_index],
-                                            feature_index,
-                                            offset, &len,
-                                            lookup_indices);
+    hb_ot_layout_feature_get_lookups (face,
+                                     table_tags[table_index],
+                                     feature_index,
+                                     offset, &len,
+                                     lookup_indices);
 
     for (unsigned int i = 0; i < len; i++) {
       hb_ot_map_t::lookup_map_t *lookup = lookups[table_index].push ();
@@ -59,8 +59,32 @@ hb_ot_map_t::add_lookups (hb_face_t    *face,
   } while (len == ARRAY_LENGTH (lookup_indices));
 }
 
+hb_ot_map_builder_t::hb_ot_map_builder_t (hb_face_t *face_,
+                                         const hb_segment_properties_t *props_)
+{
+  memset (this, 0, sizeof (*this));
+
+  face = face_;
+  props = *props_;
+
+
+  /* Fetch script/language indices for GSUB/GPOS.  We need these later to skip
+   * features not available in either table and not waste precious bits for them. */
+
+  hb_tag_t script_tags[3] = {HB_TAG_NONE, HB_TAG_NONE, HB_TAG_NONE};
+  hb_tag_t language_tag;
 
-void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value, bool global)
+  hb_ot_tags_from_script (props.script, &script_tags[0], &script_tags[1]);
+  language_tag = hb_ot_tag_from_language (props.language);
+
+  for (unsigned int table_index = 0; table_index < 2; table_index++) {
+    hb_tag_t table_tag = table_tags[table_index];
+    found_script[table_index] = hb_ot_layout_table_choose_script (face, table_tag, script_tags, &script_index[table_index], &chosen_script[table_index]);
+    hb_ot_layout_script_find_language (face, table_tag, script_index[table_index], language_tag, &language_index[table_index]);
+  }
+}
+
+void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value, bool global, bool has_fallback)
 {
   feature_info_t *info = feature_infos.push();
   if (unlikely (!info)) return;
@@ -68,6 +92,7 @@ void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value, bool gl
   info->seq = feature_infos.len;
   info->max_value = value;
   info->global = global;
+  info->has_fallback = has_fallback;
   info->default_value = global ? value : 0;
   info->stage[0] = current_stage[0];
   info->stage[1] = current_stage[1];
@@ -113,19 +138,10 @@ void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_
     hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index, lookups[table_index][i].mask);
 }
 
-void hb_ot_map_t::substitute_closure (const hb_ot_shape_plan_t *plan, hb_face_t *face, hb_set_t *glyphs) const
+void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t *lookups_out) const
 {
-  unsigned int table_index = 0;
-  unsigned int i = 0;
-
-  for (unsigned int pause_index = 0; pause_index < pauses[table_index].len; pause_index++) {
-    const pause_map_t *pause = &pauses[table_index][pause_index];
-    for (; i < pause->num_lookups; i++)
-      hb_ot_layout_substitute_closure_lookup (face, glyphs, lookups[table_index][i].index);
-  }
-
-  for (; i < lookups[table_index].len; i++)
-    hb_ot_layout_substitute_closure_lookup (face, glyphs, lookups[table_index][i].index);
+  for (unsigned int i = 0; i < lookups[table_index].len; i++)
+    hb_set_add (lookups_out, lookups[table_index][i].index);
 }
 
 void hb_ot_map_builder_t::add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func)
@@ -140,32 +156,17 @@ void hb_ot_map_builder_t::add_pause (unsigned int table_index, hb_ot_map_t::paus
 }
 
 void
-hb_ot_map_builder_t::compile (hb_face_t *face,
-                             const hb_segment_properties_t *props,
-                             hb_ot_map_t &m)
+hb_ot_map_builder_t::compile (hb_ot_map_t &m)
 {
- m.global_mask = 1;
-
-  if (!feature_infos.len)
-    return;
-
-
-  /* Fetch script/language indices for GSUB/GPOS.  We need these later to skip
-   * features not available in either table and not waste precious bits for them. */
-
-  hb_tag_t script_tags[3] = {HB_TAG_NONE};
-  hb_tag_t language_tag;
-
-  hb_ot_tags_from_script (props->script, &script_tags[0], &script_tags[1]);
-  language_tag = hb_ot_tag_from_language (props->language);
+  m.global_mask = 1;
 
-  unsigned int script_index[2], language_index[2];
   for (unsigned int table_index = 0; table_index < 2; table_index++) {
-    hb_tag_t table_tag = table_tags[table_index];
-    hb_ot_layout_table_choose_script (face, table_tag, script_tags, &script_index[table_index], &m.chosen_script[table_index]);
-    hb_ot_layout_script_find_language (face, table_tag, script_index[table_index], language_tag, &language_index[table_index]);
+    m.chosen_script[table_index] = chosen_script[table_index];
+    m.found_script[table_index] = found_script[table_index];
   }
 
+  if (!feature_infos.len)
+    return;
 
   /* Sort features and merge duplicates */
   {
@@ -183,6 +184,7 @@ hb_ot_map_builder_t::compile (hb_face_t *face,
          feature_infos[j].global = false;
          feature_infos[j].max_value = MAX (feature_infos[j].max_value, feature_infos[i].max_value);
        }
+       feature_infos[j].has_fallback = feature_infos[j].has_fallback || feature_infos[i].has_fallback;
        feature_infos[j].stage[0] = MIN (feature_infos[j].stage[0], feature_infos[i].stage[0]);
        feature_infos[j].stage[1] = MIN (feature_infos[j].stage[1], feature_infos[i].stage[1]);
        /* Inherit default_value from j */
@@ -217,7 +219,7 @@ hb_ot_map_builder_t::compile (hb_face_t *face,
                                                   language_index[table_index],
                                                   info->tag,
                                                   &feature_index[table_index]);
-    if (!found)
+    if (!found && !info->has_fallback)
       continue;
 
 
@@ -242,6 +244,7 @@ hb_ot_map_builder_t::compile (hb_face_t *face,
        m.global_mask |= (info->default_value << map->shift) & map->mask;
     }
     map->_1_mask = (1 << map->shift) & map->mask;
+    map->needs_fallback = !found;
 
   }
   feature_infos.shrink (0); /* Done with these */
index c2c90d1..0ce3ebc 100644 (file)
@@ -30,6 +30,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * maxp -- The Maximum Profile Table
@@ -46,7 +48,7 @@ struct maxp
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) &&
                         likely (version.major == 1 || (version.major == 0 && version.minor == 0x5000)));
   }
@@ -61,5 +63,7 @@ struct maxp
 };
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OT_MAXP_TABLE_HH */
index e0d2e89..75a1b94 100644 (file)
@@ -30,6 +30,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * name -- The Naming Table
@@ -55,7 +57,7 @@ struct NameRecord
   }
 
   inline bool sanitize (hb_sanitize_context_t *c, void *base) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     /* We can check from base all the way up to the end of string... */
     return TRACE_RETURN (c->check_struct (this) && c->check_range ((char *) base, (unsigned int) length + offset));
   }
@@ -97,7 +99,7 @@ struct name
   }
 
   inline bool sanitize_records (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     char *string_pool = (char *) this + stringOffset;
     unsigned int _count = count;
     for (unsigned int i = 0; i < _count; i++)
@@ -106,7 +108,7 @@ struct name
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
-    TRACE_SANITIZE ();
+    TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) &&
                         likely (format == 0 || format == 1) &&
                         c->check_array (nameRecord, nameRecord[0].static_size, count) &&
@@ -124,5 +126,7 @@ struct name
 };
 
 
+} /* namespace OT */
+
 
 #endif /* HB_OT_NAME_TABLE_HH */
diff --git a/src/hb-ot-shape-complex-arabic-fallback.hh b/src/hb-ot-shape-complex-arabic-fallback.hh
new file mode 100644 (file)
index 0000000..4fcd0a2
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+ * Copyright © 2012  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH
+#define HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH
+
+#include "hb-private.hh"
+
+#include "hb-ot-shape-private.hh"
+#include "hb-ot-layout-gsub-table.hh"
+
+
+static const hb_tag_t arabic_fallback_features[] =
+{
+  HB_TAG('i','n','i','t'),
+  HB_TAG('m','e','d','i'),
+  HB_TAG('f','i','n','a'),
+  HB_TAG('i','s','o','l'),
+  HB_TAG('r','l','i','g'),
+};
+
+/* Same order as the fallback feature array */
+enum {
+  FALLBACK_INIT,
+  FALLBACK_MEDI,
+  FALLBACK_FINA,
+  FALLBACK_ISOL,
+  FALLBACK_RLIG,
+  ARABIC_NUM_FALLBACK_FEATURES
+};
+
+static OT::SubstLookup *
+arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                                         hb_font_t *font,
+                                         unsigned int feature_index)
+{
+  OT::GlyphID glyphs[SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1];
+  OT::GlyphID substitutes[SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1];
+  unsigned int num_glyphs = 0;
+
+  /* Populate arrays */
+  for (hb_codepoint_t u = SHAPING_TABLE_FIRST; u < SHAPING_TABLE_LAST + 1; u++)
+  {
+    hb_codepoint_t s = shaping_table[u - SHAPING_TABLE_FIRST][feature_index];
+    hb_codepoint_t u_glyph, s_glyph;
+
+    if (!s ||
+       !hb_font_get_glyph (font, u, 0, &u_glyph) ||
+       !hb_font_get_glyph (font, s, 0, &s_glyph) ||
+       u_glyph == s_glyph ||
+       u_glyph > 0xFFFF || s_glyph > 0xFFFF)
+      continue;
+
+    glyphs[num_glyphs].set (u_glyph);
+    substitutes[num_glyphs].set (s_glyph);
+
+    num_glyphs++;
+  }
+
+  /* Bubble-sort!
+   * May not be good-enough for presidential candidate interviews, but good-enough for us... */
+  hb_bubble_sort (&glyphs[0], num_glyphs, OT::GlyphID::cmp, &substitutes[0]);
+
+  OT::Supplier<OT::GlyphID> glyphs_supplier      (glyphs, num_glyphs);
+  OT::Supplier<OT::GlyphID> substitutes_supplier (substitutes, num_glyphs);
+
+  /* Each glyph takes four bytes max, and there's some overhead. */
+  char buf[(SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1) * 4 + 128];
+  OT::hb_serialize_context_t c (buf, sizeof (buf));
+  OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> ();
+  bool ret = lookup->serialize_single (&c,
+                                      OT::LookupFlag::IgnoreMarks,
+                                      glyphs_supplier,
+                                      substitutes_supplier,
+                                      num_glyphs);
+  c.end_serialize ();
+  /* TODO sanitize the results? */
+
+  return ret ? c.copy<OT::SubstLookup> () : NULL;
+}
+
+static OT::SubstLookup *
+arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                                           hb_font_t *font)
+{
+  OT::GlyphID first_glyphs[ARRAY_LENGTH_CONST (ligature_table)];
+  unsigned int first_glyphs_indirection[ARRAY_LENGTH_CONST (ligature_table)];
+  unsigned int ligature_per_first_glyph_count_list[ARRAY_LENGTH_CONST (first_glyphs)];
+  unsigned int num_first_glyphs = 0;
+
+  /* We know that all our ligatures are 2-component */
+  OT::GlyphID ligature_list[ARRAY_LENGTH_CONST (first_glyphs) * ARRAY_LENGTH_CONST(ligature_table[0].ligatures)];
+  unsigned int component_count_list[ARRAY_LENGTH_CONST (ligature_list)];
+  OT::GlyphID component_list[ARRAY_LENGTH_CONST (ligature_list) * 1/* One extra component per ligature */];
+  unsigned int num_ligatures = 0;
+
+  /* Populate arrays */
+
+  /* Sort out the first-glyphs */
+  for (unsigned int first_glyph_idx = 0; first_glyph_idx < ARRAY_LENGTH (first_glyphs); first_glyph_idx++)
+  {
+    hb_codepoint_t first_u = ligature_table[first_glyph_idx].first;
+    hb_codepoint_t first_glyph;
+    if (!hb_font_get_glyph (font, first_u, 0, &first_glyph))
+      continue;
+    first_glyphs[num_first_glyphs].set (first_glyph);
+    ligature_per_first_glyph_count_list[num_first_glyphs] = 0;
+    first_glyphs_indirection[num_first_glyphs] = first_glyph_idx;
+    num_first_glyphs++;
+  }
+  hb_bubble_sort (&first_glyphs[0], num_first_glyphs, OT::GlyphID::cmp, &first_glyphs_indirection[0]);
+
+  /* Now that the first-glyphs are sorted, walk again, populate ligatures. */
+  for (unsigned int i = 0; i < num_first_glyphs; i++)
+  {
+    unsigned int first_glyph_idx = first_glyphs_indirection[i];
+
+    for (unsigned int second_glyph_idx = 0; second_glyph_idx < ARRAY_LENGTH (ligature_table[0].ligatures); second_glyph_idx++)
+    {
+      hb_codepoint_t second_u   = ligature_table[first_glyph_idx].ligatures[second_glyph_idx].second;
+      hb_codepoint_t ligature_u = ligature_table[first_glyph_idx].ligatures[second_glyph_idx].ligature;
+      hb_codepoint_t second_glyph, ligature_glyph;
+      if (!second_u ||
+         !hb_font_get_glyph (font, second_u,   0, &second_glyph) ||
+         !hb_font_get_glyph (font, ligature_u, 0, &ligature_glyph))
+       continue;
+
+      ligature_per_first_glyph_count_list[i]++;
+
+      ligature_list[num_ligatures].set (ligature_glyph);
+      component_count_list[num_ligatures] = 2;
+      component_list[num_ligatures].set (second_glyph);
+      num_ligatures++;
+    }
+  }
+
+  OT::Supplier<OT::GlyphID>   first_glyphs_supplier                      (first_glyphs, num_first_glyphs);
+  OT::Supplier<unsigned int > ligature_per_first_glyph_count_supplier    (ligature_per_first_glyph_count_list, num_first_glyphs);
+  OT::Supplier<OT::GlyphID>   ligatures_supplier                         (ligature_list, num_ligatures);
+  OT::Supplier<unsigned int > component_count_supplier                   (component_count_list, num_ligatures);
+  OT::Supplier<OT::GlyphID>   component_supplier                         (component_list, num_ligatures);
+
+  /* 16 bytes per ligature ought to be enough... */
+  char buf[ARRAY_LENGTH_CONST (ligature_list) * 16 + 128];
+  OT::hb_serialize_context_t c (buf, sizeof (buf));
+  OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> ();
+  bool ret = lookup->serialize_ligature (&c,
+                                        OT::LookupFlag::IgnoreMarks,
+                                        first_glyphs_supplier,
+                                        ligature_per_first_glyph_count_supplier,
+                                        num_first_glyphs,
+                                        ligatures_supplier,
+                                        component_count_supplier,
+                                        component_supplier);
+
+  c.end_serialize ();
+  /* TODO sanitize the results? */
+
+  return ret ? c.copy<OT::SubstLookup> () : NULL;
+}
+
+static OT::SubstLookup *
+arabic_fallback_synthesize_lookup (const hb_ot_shape_plan_t *plan,
+                                  hb_font_t *font,
+                                  unsigned int feature_index)
+{
+  if (feature_index < 4)
+    return arabic_fallback_synthesize_lookup_single (plan, font, feature_index);
+  else
+    return arabic_fallback_synthesize_lookup_ligature (plan, font);
+}
+
+struct arabic_fallback_plan_t
+{
+  ASSERT_POD ();
+
+  hb_mask_t mask_array[ARABIC_NUM_FALLBACK_FEATURES];
+  OT::SubstLookup *lookup_array[ARABIC_NUM_FALLBACK_FEATURES];
+  hb_set_digest_t digest_array[ARABIC_NUM_FALLBACK_FEATURES];
+};
+
+static const arabic_fallback_plan_t arabic_fallback_plan_nil = {};
+
+static arabic_fallback_plan_t *
+arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan,
+                            hb_font_t *font)
+{
+  arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) calloc (1, sizeof (arabic_fallback_plan_t));
+  if (unlikely (!fallback_plan))
+    return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil);
+
+  for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) {
+    fallback_plan->mask_array[i] = plan->map.get_1_mask (arabic_fallback_features[i]);
+    if (fallback_plan->mask_array[i]) {
+      fallback_plan->lookup_array[i] = arabic_fallback_synthesize_lookup (plan, font, i);
+      if (fallback_plan->lookup_array[i])
+       fallback_plan->lookup_array[i]->add_coverage (&fallback_plan->digest_array[i]);
+    }
+  }
+
+  return fallback_plan;
+}
+
+static void
+arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan)
+{
+  if (!fallback_plan || fallback_plan == &arabic_fallback_plan_nil)
+    return;
+
+  for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++)
+    if (fallback_plan->lookup_array[i])
+      free (fallback_plan->lookup_array[i]);
+
+  free (fallback_plan);
+}
+
+static void
+arabic_fallback_plan_shape (arabic_fallback_plan_t *fallback_plan,
+                           hb_font_t *font,
+                           hb_buffer_t *buffer)
+{
+  for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++)
+    if (fallback_plan->lookup_array[i]) {
+      OT::hb_apply_context_t c (font, buffer, fallback_plan->mask_array[i]);
+      fallback_plan->lookup_array[i]->apply_string (&c, &fallback_plan->digest_array[i]);
+    }
+}
+
+
+#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH */
index c66111b..730a275 100644 (file)
@@ -6,8 +6,8 @@
  *
  * on files with these headers:
  *
- * # ArabicShaping-6.1.0.txt
- * # Date: 2011-04-15, 23:16:00 GMT [KW]
+ * # ArabicShaping-6.2.0.txt
+ * # Date: 2012-05-15, 21:05:00 GMT [KW]
  * UnicodeData.txt does not have a header.
  */
 
@@ -729,24 +729,24 @@ static const uint8_t joining_table[] =
 
 static const uint16_t shaping_table[][4] =
 {
-  {0x0621, 0x0621, 0x0621, 0xFE80}, /* U+0621 ARABIC LETTER HAMZA ISOLATED FORM */
-  {0x0622, 0x0622, 0xFE82, 0xFE81}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
-  {0x0623, 0x0623, 0xFE84, 0xFE83}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
-  {0x0624, 0x0624, 0xFE86, 0xFE85}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
-  {0x0625, 0x0625, 0xFE88, 0xFE87}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
+  {0x0000, 0x0000, 0x0000, 0xFE80}, /* U+0621 ARABIC LETTER HAMZA ISOLATED FORM */
+  {0x0000, 0x0000, 0xFE82, 0xFE81}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
+  {0x0000, 0x0000, 0xFE84, 0xFE83}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
+  {0x0000, 0x0000, 0xFE86, 0xFE85}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
+  {0x0000, 0x0000, 0xFE88, 0xFE87}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
   {0xFE8B, 0xFE8C, 0xFE8A, 0xFE89}, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
-  {0x0627, 0x0627, 0xFE8E, 0xFE8D}, /* U+0627 ARABIC LETTER ALEF */
+  {0x0000, 0x0000, 0xFE8E, 0xFE8D}, /* U+0627 ARABIC LETTER ALEF */
   {0xFE91, 0xFE92, 0xFE90, 0xFE8F}, /* U+0628 ARABIC LETTER BEH */
-  {0x0629, 0x0629, 0xFE94, 0xFE93}, /* U+0629 ARABIC LETTER TEH MARBUTA */
+  {0x0000, 0x0000, 0xFE94, 0xFE93}, /* U+0629 ARABIC LETTER TEH MARBUTA */
   {0xFE97, 0xFE98, 0xFE96, 0xFE95}, /* U+062A ARABIC LETTER TEH */
   {0xFE9B, 0xFE9C, 0xFE9A, 0xFE99}, /* U+062B ARABIC LETTER THEH */
   {0xFE9F, 0xFEA0, 0xFE9E, 0xFE9D}, /* U+062C ARABIC LETTER JEEM */
   {0xFEA3, 0xFEA4, 0xFEA2, 0xFEA1}, /* U+062D ARABIC LETTER HAH */
   {0xFEA7, 0xFEA8, 0xFEA6, 0xFEA5}, /* U+062E ARABIC LETTER KHAH */
-  {0x062F, 0x062F, 0xFEAA, 0xFEA9}, /* U+062F ARABIC LETTER DAL */
-  {0x0630, 0x0630, 0xFEAC, 0xFEAB}, /* U+0630 ARABIC LETTER THAL */
-  {0x0631, 0x0631, 0xFEAE, 0xFEAD}, /* U+0631 ARABIC LETTER REH */
-  {0x0632, 0x0632, 0xFEB0, 0xFEAF}, /* U+0632 ARABIC LETTER ZAIN */
+  {0x0000, 0x0000, 0xFEAA, 0xFEA9}, /* U+062F ARABIC LETTER DAL */
+  {0x0000, 0x0000, 0xFEAC, 0xFEAB}, /* U+0630 ARABIC LETTER THAL */
+  {0x0000, 0x0000, 0xFEAE, 0xFEAD}, /* U+0631 ARABIC LETTER REH */
+  {0x0000, 0x0000, 0xFEB0, 0xFEAF}, /* U+0632 ARABIC LETTER ZAIN */
   {0xFEB3, 0xFEB4, 0xFEB2, 0xFEB1}, /* U+0633 ARABIC LETTER SEEN */
   {0xFEB7, 0xFEB8, 0xFEB6, 0xFEB5}, /* U+0634 ARABIC LETTER SHEEN */
   {0xFEBB, 0xFEBC, 0xFEBA, 0xFEB9}, /* U+0635 ARABIC LETTER SAD */
@@ -755,12 +755,12 @@ static const uint16_t shaping_table[][4] =
   {0xFEC7, 0xFEC8, 0xFEC6, 0xFEC5}, /* U+0638 ARABIC LETTER ZAH */
   {0xFECB, 0xFECC, 0xFECA, 0xFEC9}, /* U+0639 ARABIC LETTER AIN */
   {0xFECF, 0xFED0, 0xFECE, 0xFECD}, /* U+063A ARABIC LETTER GHAIN */
-  {0x063B, 0x063B, 0x063B, 0x063B}, /* U+063B  */
-  {0x063C, 0x063C, 0x063C, 0x063C}, /* U+063C  */
-  {0x063D, 0x063D, 0x063D, 0x063D}, /* U+063D  */
-  {0x063E, 0x063E, 0x063E, 0x063E}, /* U+063E  */
-  {0x063F, 0x063F, 0x063F, 0x063F}, /* U+063F  */
-  {0x0640, 0x0640, 0x0640, 0x0640}, /* U+0640  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063B  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063C  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063D  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063E  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063F  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0640  */
   {0xFED3, 0xFED4, 0xFED2, 0xFED1}, /* U+0641 ARABIC LETTER FEH */
   {0xFED7, 0xFED8, 0xFED6, 0xFED5}, /* U+0642 ARABIC LETTER QAF */
   {0xFEDB, 0xFEDC, 0xFEDA, 0xFED9}, /* U+0643 ARABIC LETTER KAF */
@@ -768,146 +768,146 @@ static const uint16_t shaping_table[][4] =
   {0xFEE3, 0xFEE4, 0xFEE2, 0xFEE1}, /* U+0645 ARABIC LETTER MEEM */
   {0xFEE7, 0xFEE8, 0xFEE6, 0xFEE5}, /* U+0646 ARABIC LETTER NOON */
   {0xFEEB, 0xFEEC, 0xFEEA, 0xFEE9}, /* U+0647 ARABIC LETTER HEH */
-  {0x0648, 0x0648, 0xFEEE, 0xFEED}, /* U+0648 ARABIC LETTER WAW */
+  {0x0000, 0x0000, 0xFEEE, 0xFEED}, /* U+0648 ARABIC LETTER WAW */
   {0xFBE8, 0xFBE9, 0xFEF0, 0xFEEF}, /* U+0649 ARABIC LETTER */
   {0xFEF3, 0xFEF4, 0xFEF2, 0xFEF1}, /* U+064A ARABIC LETTER YEH */
-  {0x064B, 0x064B, 0x064B, 0x064B}, /* U+064B  */
-  {0x064C, 0x064C, 0x064C, 0x064C}, /* U+064C  */
-  {0x064D, 0x064D, 0x064D, 0x064D}, /* U+064D  */
-  {0x064E, 0x064E, 0x064E, 0x064E}, /* U+064E  */
-  {0x064F, 0x064F, 0x064F, 0x064F}, /* U+064F  */
-  {0x0650, 0x0650, 0x0650, 0x0650}, /* U+0650  */
-  {0x0651, 0x0651, 0x0651, 0x0651}, /* U+0651  */
-  {0x0652, 0x0652, 0x0652, 0x0652}, /* U+0652  */
-  {0x0653, 0x0653, 0x0653, 0x0653}, /* U+0653  */
-  {0x0654, 0x0654, 0x0654, 0x0654}, /* U+0654  */
-  {0x0655, 0x0655, 0x0655, 0x0655}, /* U+0655  */
-  {0x0656, 0x0656, 0x0656, 0x0656}, /* U+0656  */
-  {0x0657, 0x0657, 0x0657, 0x0657}, /* U+0657  */
-  {0x0658, 0x0658, 0x0658, 0x0658}, /* U+0658  */
-  {0x0659, 0x0659, 0x0659, 0x0659}, /* U+0659  */
-  {0x065A, 0x065A, 0x065A, 0x065A}, /* U+065A  */
-  {0x065B, 0x065B, 0x065B, 0x065B}, /* U+065B  */
-  {0x065C, 0x065C, 0x065C, 0x065C}, /* U+065C  */
-  {0x065D, 0x065D, 0x065D, 0x065D}, /* U+065D  */
-  {0x065E, 0x065E, 0x065E, 0x065E}, /* U+065E  */
-  {0x065F, 0x065F, 0x065F, 0x065F}, /* U+065F  */
-  {0x0660, 0x0660, 0x0660, 0x0660}, /* U+0660  */
-  {0x0661, 0x0661, 0x0661, 0x0661}, /* U+0661  */
-  {0x0662, 0x0662, 0x0662, 0x0662}, /* U+0662  */
-  {0x0663, 0x0663, 0x0663, 0x0663}, /* U+0663  */
-  {0x0664, 0x0664, 0x0664, 0x0664}, /* U+0664  */
-  {0x0665, 0x0665, 0x0665, 0x0665}, /* U+0665  */
-  {0x0666, 0x0666, 0x0666, 0x0666}, /* U+0666  */
-  {0x0667, 0x0667, 0x0667, 0x0667}, /* U+0667  */
-  {0x0668, 0x0668, 0x0668, 0x0668}, /* U+0668  */
-  {0x0669, 0x0669, 0x0669, 0x0669}, /* U+0669  */
-  {0x066A, 0x066A, 0x066A, 0x066A}, /* U+066A  */
-  {0x066B, 0x066B, 0x066B, 0x066B}, /* U+066B  */
-  {0x066C, 0x066C, 0x066C, 0x066C}, /* U+066C  */
-  {0x066D, 0x066D, 0x066D, 0x066D}, /* U+066D  */
-  {0x066E, 0x066E, 0x066E, 0x066E}, /* U+066E  */
-  {0x066F, 0x066F, 0x066F, 0x066F}, /* U+066F  */
-  {0x0670, 0x0670, 0x0670, 0x0670}, /* U+0670  */
-  {0x0671, 0x0671, 0xFB51, 0xFB50}, /* U+0671 ARABIC LETTER ALEF WASLA */
-  {0x0672, 0x0672, 0x0672, 0x0672}, /* U+0672  */
-  {0x0673, 0x0673, 0x0673, 0x0673}, /* U+0673  */
-  {0x0674, 0x0674, 0x0674, 0x0674}, /* U+0674  */
-  {0x0675, 0x0675, 0x0675, 0x0675}, /* U+0675  */
-  {0x0676, 0x0676, 0x0676, 0x0676}, /* U+0676  */
-  {0x0677, 0x0677, 0x0677, 0xFBDD}, /* U+0677 ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
-  {0x0678, 0x0678, 0x0678, 0x0678}, /* U+0678  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064B  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064C  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064D  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064E  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064F  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0650  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0651  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0652  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0653  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0654  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0655  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0656  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0657  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0658  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0659  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065A  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065B  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065C  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065D  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065E  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065F  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0660  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0661  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0662  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0663  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0664  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0665  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0666  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0667  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0668  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0669  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066A  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066B  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066C  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066D  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066E  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066F  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0670  */
+  {0x0000, 0x0000, 0xFB51, 0xFB50}, /* U+0671 ARABIC LETTER ALEF WASLA */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0672  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0673  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0674  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0675  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0676  */
+  {0x0000, 0x0000, 0x0000, 0xFBDD}, /* U+0677 ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0678  */
   {0xFB68, 0xFB69, 0xFB67, 0xFB66}, /* U+0679 ARABIC LETTER TTEH */
   {0xFB60, 0xFB61, 0xFB5F, 0xFB5E}, /* U+067A ARABIC LETTER TTEHEH */
   {0xFB54, 0xFB55, 0xFB53, 0xFB52}, /* U+067B ARABIC LETTER BEEH */
-  {0x067C, 0x067C, 0x067C, 0x067C}, /* U+067C  */
-  {0x067D, 0x067D, 0x067D, 0x067D}, /* U+067D  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+067C  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+067D  */
   {0xFB58, 0xFB59, 0xFB57, 0xFB56}, /* U+067E ARABIC LETTER PEH */
   {0xFB64, 0xFB65, 0xFB63, 0xFB62}, /* U+067F ARABIC LETTER TEHEH */
   {0xFB5C, 0xFB5D, 0xFB5B, 0xFB5A}, /* U+0680 ARABIC LETTER BEHEH */
-  {0x0681, 0x0681, 0x0681, 0x0681}, /* U+0681  */
-  {0x0682, 0x0682, 0x0682, 0x0682}, /* U+0682  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0681  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0682  */
   {0xFB78, 0xFB79, 0xFB77, 0xFB76}, /* U+0683 ARABIC LETTER NYEH */
   {0xFB74, 0xFB75, 0xFB73, 0xFB72}, /* U+0684 ARABIC LETTER DYEH */
-  {0x0685, 0x0685, 0x0685, 0x0685}, /* U+0685  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0685  */
   {0xFB7C, 0xFB7D, 0xFB7B, 0xFB7A}, /* U+0686 ARABIC LETTER TCHEH */
   {0xFB80, 0xFB81, 0xFB7F, 0xFB7E}, /* U+0687 ARABIC LETTER TCHEHEH */
-  {0x0688, 0x0688, 0xFB89, 0xFB88}, /* U+0688 ARABIC LETTER DDAL */
-  {0x0689, 0x0689, 0x0689, 0x0689}, /* U+0689  */
-  {0x068A, 0x068A, 0x068A, 0x068A}, /* U+068A  */
-  {0x068B, 0x068B, 0x068B, 0x068B}, /* U+068B  */
-  {0x068C, 0x068C, 0xFB85, 0xFB84}, /* U+068C ARABIC LETTER DAHAL */
-  {0x068D, 0x068D, 0xFB83, 0xFB82}, /* U+068D ARABIC LETTER DDAHAL */
-  {0x068E, 0x068E, 0xFB87, 0xFB86}, /* U+068E ARABIC LETTER DUL */
-  {0x068F, 0x068F, 0x068F, 0x068F}, /* U+068F  */
-  {0x0690, 0x0690, 0x0690, 0x0690}, /* U+0690  */
-  {0x0691, 0x0691, 0xFB8D, 0xFB8C}, /* U+0691 ARABIC LETTER RREH */
-  {0x0692, 0x0692, 0x0692, 0x0692}, /* U+0692  */
-  {0x0693, 0x0693, 0x0693, 0x0693}, /* U+0693  */
-  {0x0694, 0x0694, 0x0694, 0x0694}, /* U+0694  */
-  {0x0695, 0x0695, 0x0695, 0x0695}, /* U+0695  */
-  {0x0696, 0x0696, 0x0696, 0x0696}, /* U+0696  */
-  {0x0697, 0x0697, 0x0697, 0x0697}, /* U+0697  */
-  {0x0698, 0x0698, 0xFB8B, 0xFB8A}, /* U+0698 ARABIC LETTER JEH */
-  {0x0699, 0x0699, 0x0699, 0x0699}, /* U+0699  */
-  {0x069A, 0x069A, 0x069A, 0x069A}, /* U+069A  */
-  {0x069B, 0x069B, 0x069B, 0x069B}, /* U+069B  */
-  {0x069C, 0x069C, 0x069C, 0x069C}, /* U+069C  */
-  {0x069D, 0x069D, 0x069D, 0x069D}, /* U+069D  */
-  {0x069E, 0x069E, 0x069E, 0x069E}, /* U+069E  */
-  {0x069F, 0x069F, 0x069F, 0x069F}, /* U+069F  */
-  {0x06A0, 0x06A0, 0x06A0, 0x06A0}, /* U+06A0  */
-  {0x06A1, 0x06A1, 0x06A1, 0x06A1}, /* U+06A1  */
-  {0x06A2, 0x06A2, 0x06A2, 0x06A2}, /* U+06A2  */
-  {0x06A3, 0x06A3, 0x06A3, 0x06A3}, /* U+06A3  */
+  {0x0000, 0x0000, 0xFB89, 0xFB88}, /* U+0688 ARABIC LETTER DDAL */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0689  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068A  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068B  */
+  {0x0000, 0x0000, 0xFB85, 0xFB84}, /* U+068C ARABIC LETTER DAHAL */
+  {0x0000, 0x0000, 0xFB83, 0xFB82}, /* U+068D ARABIC LETTER DDAHAL */
+  {0x0000, 0x0000, 0xFB87, 0xFB86}, /* U+068E ARABIC LETTER DUL */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068F  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0690  */
+  {0x0000, 0x0000, 0xFB8D, 0xFB8C}, /* U+0691 ARABIC LETTER RREH */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0692  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0693  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0694  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0695  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0696  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0697  */
+  {0x0000, 0x0000, 0xFB8B, 0xFB8A}, /* U+0698 ARABIC LETTER JEH */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0699  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069A  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069B  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069C  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069D  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069E  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069F  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A0  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A1  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A2  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A3  */
   {0xFB6C, 0xFB6D, 0xFB6B, 0xFB6A}, /* U+06A4 ARABIC LETTER VEH */
-  {0x06A5, 0x06A5, 0x06A5, 0x06A5}, /* U+06A5  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A5  */
   {0xFB70, 0xFB71, 0xFB6F, 0xFB6E}, /* U+06A6 ARABIC LETTER PEHEH */
-  {0x06A7, 0x06A7, 0x06A7, 0x06A7}, /* U+06A7  */
-  {0x06A8, 0x06A8, 0x06A8, 0x06A8}, /* U+06A8  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A7  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A8  */
   {0xFB90, 0xFB91, 0xFB8F, 0xFB8E}, /* U+06A9 ARABIC LETTER KEHEH */
-  {0x06AA, 0x06AA, 0x06AA, 0x06AA}, /* U+06AA  */
-  {0x06AB, 0x06AB, 0x06AB, 0x06AB}, /* U+06AB  */
-  {0x06AC, 0x06AC, 0x06AC, 0x06AC}, /* U+06AC  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AA  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AB  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AC  */
   {0xFBD5, 0xFBD6, 0xFBD4, 0xFBD3}, /* U+06AD ARABIC LETTER NG */
-  {0x06AE, 0x06AE, 0x06AE, 0x06AE}, /* U+06AE  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AE  */
   {0xFB94, 0xFB95, 0xFB93, 0xFB92}, /* U+06AF ARABIC LETTER GAF */
-  {0x06B0, 0x06B0, 0x06B0, 0x06B0}, /* U+06B0  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B0  */
   {0xFB9C, 0xFB9D, 0xFB9B, 0xFB9A}, /* U+06B1 ARABIC LETTER NGOEH */
-  {0x06B2, 0x06B2, 0x06B2, 0x06B2}, /* U+06B2  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B2  */
   {0xFB98, 0xFB99, 0xFB97, 0xFB96}, /* U+06B3 ARABIC LETTER GUEH */
-  {0x06B4, 0x06B4, 0x06B4, 0x06B4}, /* U+06B4  */
-  {0x06B5, 0x06B5, 0x06B5, 0x06B5}, /* U+06B5  */
-  {0x06B6, 0x06B6, 0x06B6, 0x06B6}, /* U+06B6  */
-  {0x06B7, 0x06B7, 0x06B7, 0x06B7}, /* U+06B7  */
-  {0x06B8, 0x06B8, 0x06B8, 0x06B8}, /* U+06B8  */
-  {0x06B9, 0x06B9, 0x06B9, 0x06B9}, /* U+06B9  */
-  {0x06BA, 0x06BA, 0xFB9F, 0xFB9E}, /* U+06BA ARABIC LETTER NOON GHUNNA */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B4  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B5  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B6  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B7  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B8  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B9  */
+  {0x0000, 0x0000, 0xFB9F, 0xFB9E}, /* U+06BA ARABIC LETTER NOON GHUNNA */
   {0xFBA2, 0xFBA3, 0xFBA1, 0xFBA0}, /* U+06BB ARABIC LETTER RNOON */
-  {0x06BC, 0x06BC, 0x06BC, 0x06BC}, /* U+06BC  */
-  {0x06BD, 0x06BD, 0x06BD, 0x06BD}, /* U+06BD  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BC  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BD  */
   {0xFBAC, 0xFBAD, 0xFBAB, 0xFBAA}, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
-  {0x06BF, 0x06BF, 0x06BF, 0x06BF}, /* U+06BF  */
-  {0x06C0, 0x06C0, 0xFBA5, 0xFBA4}, /* U+06C0 ARABIC LETTER HEH WITH YEH ABOVE */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BF  */
+  {0x0000, 0x0000, 0xFBA5, 0xFBA4}, /* U+06C0 ARABIC LETTER HEH WITH YEH ABOVE */
   {0xFBA8, 0xFBA9, 0xFBA7, 0xFBA6}, /* U+06C1 ARABIC LETTER HEH GOAL */
-  {0x06C2, 0x06C2, 0x06C2, 0x06C2}, /* U+06C2  */
-  {0x06C3, 0x06C3, 0x06C3, 0x06C3}, /* U+06C3  */
-  {0x06C4, 0x06C4, 0x06C4, 0x06C4}, /* U+06C4  */
-  {0x06C5, 0x06C5, 0xFBE1, 0xFBE0}, /* U+06C5 ARABIC LETTER KIRGHIZ OE */
-  {0x06C6, 0x06C6, 0xFBDA, 0xFBD9}, /* U+06C6 ARABIC LETTER OE */
-  {0x06C7, 0x06C7, 0xFBD8, 0xFBD7}, /* U+06C7 ARABIC LETTER U */
-  {0x06C8, 0x06C8, 0xFBDC, 0xFBDB}, /* U+06C8 ARABIC LETTER YU */
-  {0x06C9, 0x06C9, 0xFBE3, 0xFBE2}, /* U+06C9 ARABIC LETTER KIRGHIZ YU */
-  {0x06CA, 0x06CA, 0x06CA, 0x06CA}, /* U+06CA  */
-  {0x06CB, 0x06CB, 0xFBDF, 0xFBDE}, /* U+06CB ARABIC LETTER VE */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C2  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C3  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C4  */
+  {0x0000, 0x0000, 0xFBE1, 0xFBE0}, /* U+06C5 ARABIC LETTER KIRGHIZ OE */
+  {0x0000, 0x0000, 0xFBDA, 0xFBD9}, /* U+06C6 ARABIC LETTER OE */
+  {0x0000, 0x0000, 0xFBD8, 0xFBD7}, /* U+06C7 ARABIC LETTER U */
+  {0x0000, 0x0000, 0xFBDC, 0xFBDB}, /* U+06C8 ARABIC LETTER YU */
+  {0x0000, 0x0000, 0xFBE3, 0xFBE2}, /* U+06C9 ARABIC LETTER KIRGHIZ YU */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CA  */
+  {0x0000, 0x0000, 0xFBDF, 0xFBDE}, /* U+06CB ARABIC LETTER VE */
   {0xFBFE, 0xFBFF, 0xFBFD, 0xFBFC}, /* U+06CC ARABIC LETTER FARSI YEH */
-  {0x06CD, 0x06CD, 0x06CD, 0x06CD}, /* U+06CD  */
-  {0x06CE, 0x06CE, 0x06CE, 0x06CE}, /* U+06CE  */
-  {0x06CF, 0x06CF, 0x06CF, 0x06CF}, /* U+06CF  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CD  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CE  */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CF  */
   {0xFBE6, 0xFBE7, 0xFBE5, 0xFBE4}, /* U+06D0 ARABIC LETTER E */
-  {0x06D1, 0x06D1, 0x06D1, 0x06D1}, /* U+06D1  */
-  {0x06D2, 0x06D2, 0xFBAF, 0xFBAE}, /* U+06D2 ARABIC LETTER YEH BARREE */
-  {0x06D3, 0x06D3, 0xFBB1, 0xFBB0}, /* U+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */
+  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06D1  */
+  {0x0000, 0x0000, 0xFBAF, 0xFBAE}, /* U+06D2 ARABIC LETTER YEH BARREE */
+  {0x0000, 0x0000, 0xFBB1, 0xFBB0}, /* U+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */
 };
 
 #define SHAPING_TABLE_FIRST    0x0621
index 857bf55..35356fe 100644 (file)
@@ -28,7 +28,6 @@
 #include "hb-ot-shape-private.hh"
 
 
-
 /* buffer var allocations */
 #define arabic_shaping_action() complex_var_u8_0() /* arabic shaping action */
 
@@ -65,15 +64,31 @@ static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_categ
       return j_type;
   }
 
-  /* Mongolian joining data is not in ArabicJoining.txt yet */
+  /* Mongolian joining data is not in ArabicJoining.txt yet. */
   if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1800, 0x18AF)))
   {
+    if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1880, 0x1886)))
+      return JOINING_TYPE_U;
+
     /* All letters, SIBE SYLLABLE BOUNDARY MARKER, and NIRUGU are D */
-    if (gen_cat == HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER || u == 0x1807 || u == 0x180A)
+    if ((FLAG(gen_cat) & (FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) |
+                         FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER)))
+       || u == 0x1807 || u == 0x180A)
+      return JOINING_TYPE_D;
+  }
+
+  /* 'Phags-pa joining data is not in ArabicJoining.txt yet. */
+  if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xA840, 0xA872)))
+  {
+      if (unlikely (u == 0xA872))
+       /* XXX Looks like this should be TYPE_L, but we don't support that yet! */
+       return JOINING_TYPE_R;
+
       return JOINING_TYPE_D;
   }
 
-  if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x200C, 0x200D))) {
+  if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x200C, 0x200D)))
+  {
     return u == 0x200C ? JOINING_TYPE_U : JOINING_TYPE_C;
   }
 
@@ -81,24 +96,6 @@ static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_categ
         JOINING_TYPE_T : JOINING_TYPE_U;
 }
 
-static hb_codepoint_t get_arabic_shape (hb_codepoint_t u, unsigned int shape)
-{
-  if (likely (hb_in_range<hb_codepoint_t> (u, SHAPING_TABLE_FIRST, SHAPING_TABLE_LAST)) && shape < 4)
-    return shaping_table[u - SHAPING_TABLE_FIRST][shape];
-  return u;
-}
-
-static uint16_t get_ligature (hb_codepoint_t first, hb_codepoint_t second)
-{
-  if (unlikely (!second)) return 0;
-  for (unsigned i = 0; i < ARRAY_LENGTH (ligature_table); i++)
-    if (ligature_table[i].first == first)
-      for (unsigned j = 0; j < ARRAY_LENGTH (ligature_table[i].ligatures); j++)
-       if (ligature_table[i].ligatures[j].second == second)
-         return ligature_table[i].ligatures[j].ligature;
-  return 0;
-}
-
 static const hb_tag_t arabic_features[] =
 {
   HB_TAG('i','n','i','t'),
@@ -161,6 +158,10 @@ static const struct arabic_state_table_entry {
 };
 
 
+static void
+arabic_fallback_shape (const hb_ot_shape_plan_t *plan,
+                      hb_font_t *font,
+                      hb_buffer_t *buffer);
 
 static void
 collect_features_arabic (hb_ot_shape_planner_t *plan)
@@ -183,30 +184,35 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
   map->add_gsub_pause (NULL);
 
   for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++)
-    map->add_bool_feature (arabic_features[i], false);
+    map->add_bool_feature (arabic_features[i], false, i < 4); /* The first four features have fallback. */
 
   map->add_gsub_pause (NULL);
 
-  map->add_bool_feature (HB_TAG('r','l','i','g'));
-  map->add_gsub_pause (NULL);
+  map->add_bool_feature (HB_TAG('r','l','i','g'), true, true);
+  map->add_gsub_pause (arabic_fallback_shape);
 
   map->add_bool_feature (HB_TAG('c','a','l','t'));
   map->add_gsub_pause (NULL);
 
-  /* ArabicOT spec enables 'cswh' for Arabic where as for basic shaper it's disabled by default. */
   map->add_bool_feature (HB_TAG('c','s','w','h'));
+  map->add_bool_feature (HB_TAG('d','l','i','g'));
+  map->add_bool_feature (HB_TAG('m','s','e','t'));
 }
 
+#include "hb-ot-shape-complex-arabic-fallback.hh"
+
 struct arabic_shape_plan_t
 {
   ASSERT_POD ();
 
-  bool do_fallback;
   /* The "+ 1" in the next array is to accommodate for the "NONE" command,
    * which is not an OpenType feature, but this simplifies the code by not
    * having to do a "if (... < NONE) ..." and just rely on the fact that
    * mask_array[NONE] == 0. */
   hb_mask_t mask_array[ARABIC_NUM_FEATURES + 1];
+
+  bool do_fallback;
+  arabic_fallback_plan_t *fallback_plan;
 };
 
 static void *
@@ -216,75 +222,48 @@ data_create_arabic (const hb_ot_shape_plan_t *plan)
   if (unlikely (!arabic_plan))
     return NULL;
 
-  hb_mask_t total_masks = 0;
+  arabic_plan->do_fallback = plan->props.script == HB_SCRIPT_ARABIC;
   for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++) {
     arabic_plan->mask_array[i] = plan->map.get_1_mask (arabic_features[i]);
-    total_masks |= arabic_plan->mask_array[i];
+    if (i < 4)
+      arabic_plan->do_fallback = arabic_plan->do_fallback && plan->map.needs_fallback (arabic_features[i]);
   }
 
-  /* Pitfalls:
-   * - This path fires if user force-set init/medi/fina/isol off,
-   * - If font does not declare script 'arab', well, what to do?
-   *   Most probably it's safe to assume that init/medi/fina/isol
-   *   still mean Arabic shaping, although they do not have to.
-   */
-  arabic_plan->do_fallback = 0 == total_masks;
-
   return arabic_plan;
 }
 
 static void
 data_destroy_arabic (void *data)
 {
-  free (data);
-}
+  arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) data;
 
-static void
-arabic_fallback_shape (hb_font_t *font, hb_buffer_t *buffer)
-{
-  /* Only Arabic has presentation forms encoded in Unicode. */
-  if (buffer->props.script != HB_SCRIPT_ARABIC)
-    return;
-
-  unsigned int count = buffer->len;
-  hb_codepoint_t glyph;
-
-  /* Shape to presentation forms */
-  for (unsigned int i = 0; i < count; i++) {
-    hb_codepoint_t u = buffer->info[i].codepoint;
-    hb_codepoint_t shaped = get_arabic_shape (u, buffer->info[i].arabic_shaping_action());
-    if (shaped != u && font->get_glyph (shaped, 0, &glyph))
-      buffer->info[i].codepoint = shaped;
-  }
+  arabic_fallback_plan_destroy (arabic_plan->fallback_plan);
 
-  /* Mandatory ligatures */
-  buffer->clear_output ();
-  for (buffer->idx = 0; buffer->idx + 1 < count;) {
-    hb_codepoint_t ligature = get_ligature (buffer->cur().codepoint,
-                                           buffer->cur(+1).codepoint);
-    if (likely (!ligature) || !(font->get_glyph (ligature, 0, &glyph))) {
-      buffer->next_glyph ();
-      continue;
-    }
-
-    buffer->replace_glyphs (2, 1, &ligature);
-
-    /* Technically speaking we can skip marks and stuff, like the GSUB path does.
-     * But who cares, we're in fallback! */
-  }
-  for (; buffer->idx < count;)
-      buffer->next_glyph ();
-  buffer->swap_buffers ();
+  free (data);
 }
 
 static void
 arabic_joining (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
-  unsigned int prev = 0, state = 0;
+  unsigned int prev = (unsigned int) -1, state = 0;
 
   HB_BUFFER_ALLOCATE_VAR (buffer, arabic_shaping_action);
 
+  /* Check pre-context */
+  if (!(buffer->flags & HB_BUFFER_FLAG_BOT))
+    for (unsigned int i = 0; i < buffer->context_len[0]; i++)
+    {
+      unsigned int this_type = get_joining_type (buffer->context[0][i], buffer->unicode->general_category (buffer->context[0][i]));
+
+      if (unlikely (this_type == JOINING_TYPE_T))
+       continue;
+
+      const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
+      state = entry->next_state;
+      break;
+    }
+
   for (unsigned int i = 0; i < count; i++)
   {
     unsigned int this_type = get_joining_type (buffer->info[i].codepoint, _hb_glyph_info_get_general_category (&buffer->info[i]));
@@ -296,7 +275,7 @@ arabic_joining (hb_buffer_t *buffer)
 
     const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
 
-    if (entry->prev_action != NONE)
+    if (entry->prev_action != NONE && prev != (unsigned int) -1)
       buffer->info[prev].arabic_shaping_action() = entry->prev_action;
 
     buffer->info[i].arabic_shaping_action() = entry->curr_action;
@@ -305,39 +284,64 @@ arabic_joining (hb_buffer_t *buffer)
     state = entry->next_state;
   }
 
+  if (!(buffer->flags & HB_BUFFER_FLAG_EOT))
+    for (unsigned int i = 0; i < buffer->context_len[1]; i++)
+    {
+      unsigned int this_type = get_joining_type (buffer->context[1][i], buffer->unicode->general_category (buffer->context[1][i]));
+
+      if (unlikely (this_type == JOINING_TYPE_T))
+       continue;
+
+      const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
+      if (entry->prev_action != NONE && prev != (unsigned int) -1)
+       buffer->info[prev].arabic_shaping_action() = entry->prev_action;
+      break;
+    }
+
+
   HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action);
 }
 
 static void
-preprocess_text_arabic (const hb_ot_shape_plan_t *plan,
-                       hb_buffer_t              *buffer,
-                       hb_font_t                *font)
+setup_masks_arabic (const hb_ot_shape_plan_t *plan,
+                   hb_buffer_t              *buffer,
+                   hb_font_t                *font HB_UNUSED)
 {
   const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
 
-  if (unlikely (arabic_plan->do_fallback))
-  {
-    arabic_joining (buffer);
-    arabic_fallback_shape (font, buffer);
-  }
+  arabic_joining (buffer);
+  unsigned int count = buffer->len;
+  for (unsigned int i = 0; i < count; i++)
+    buffer->info[i].mask |= arabic_plan->mask_array[buffer->info[i].arabic_shaping_action()];
 }
 
+
 static void
-setup_masks_arabic (const hb_ot_shape_plan_t *plan,
-                   hb_buffer_t              *buffer,
-                   hb_font_t                *font)
+arabic_fallback_shape (const hb_ot_shape_plan_t *plan,
+                      hb_font_t *font,
+                      hb_buffer_t *buffer)
 {
   const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
 
-  if (likely (!arabic_plan->do_fallback))
+  if (!arabic_plan->do_fallback)
+    return;
+
+retry:
+  arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) hb_atomic_ptr_get (&arabic_plan->fallback_plan);
+  if (unlikely (!fallback_plan))
   {
-    arabic_joining (buffer);
-    unsigned int count = buffer->len;
-    for (unsigned int i = 0; i < count; i++)
-      buffer->info[i].mask |= arabic_plan->mask_array[buffer->info[i].arabic_shaping_action()];
+    /* This sucks.  We need a font to build the fallback plan... */
+    fallback_plan = arabic_fallback_plan_create (plan, font);
+    if (unlikely (!hb_atomic_ptr_cmpexch (&(const_cast<arabic_shape_plan_t *> (arabic_plan))->fallback_plan, NULL, fallback_plan))) {
+      arabic_fallback_plan_destroy (fallback_plan);
+      goto retry;
+    }
   }
+
+  arabic_fallback_plan_shape (fallback_plan, font, buffer);
 }
 
+
 const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
 {
   "arabic",
@@ -345,8 +349,11 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
   NULL, /* override_features */
   data_create_arabic,
   data_destroy_arabic,
-  preprocess_text_arabic,
+  NULL, /* preprocess_text_arabic */
   NULL, /* normalization_preference */
+  NULL, /* decompose */
+  NULL, /* compose */
   setup_masks_arabic,
   true, /* zero_width_attached_marks */
+  true, /* fallback_position */
 };
diff --git a/src/hb-ot-shape-complex-default.cc b/src/hb-ot-shape-complex-default.cc
new file mode 100644 (file)
index 0000000..5340293
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+ * Copyright © 2010,2012  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-private.hh"
+
+
+/* TODO Add kana, and other small shapers here */
+
+
+/* The default shaper *only* adds additional per-script features.*/
+
+static const hb_tag_t hangul_features[] =
+{
+  HB_TAG('l','j','m','o'),
+  HB_TAG('v','j','m','o'),
+  HB_TAG('t','j','m','o'),
+  HB_TAG_NONE
+};
+
+static const hb_tag_t tibetan_features[] =
+{
+  HB_TAG('a','b','v','s'),
+  HB_TAG('b','l','w','s'),
+  HB_TAG('a','b','v','m'),
+  HB_TAG('b','l','w','m'),
+  HB_TAG_NONE
+};
+
+static void
+collect_features_default (hb_ot_shape_planner_t *plan)
+{
+  const hb_tag_t *script_features = NULL;
+
+  switch ((hb_tag_t) plan->props.script)
+  {
+    /* Unicode-1.1 additions */
+    case HB_SCRIPT_HANGUL:
+      script_features = hangul_features;
+      break;
+
+    /* Unicode-2.0 additions */
+    case HB_SCRIPT_TIBETAN:
+      script_features = tibetan_features;
+      break;
+  }
+
+  for (; script_features && *script_features; script_features++)
+    plan->map.add_bool_feature (*script_features);
+}
+
+static hb_ot_shape_normalization_mode_t
+normalization_preference_default (const hb_segment_properties_t *props)
+{
+  switch ((hb_tag_t) props->script)
+  {
+    /* Unicode-1.1 additions */
+    case HB_SCRIPT_HANGUL:
+      return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL;
+  }
+  return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS;
+}
+
+static bool
+compose_default (const hb_ot_shape_normalize_context_t *c,
+                hb_codepoint_t  a,
+                hb_codepoint_t  b,
+                hb_codepoint_t *ab)
+{
+  /* Hebrew presentation-form shaping.
+   * https://bugzilla.mozilla.org/show_bug.cgi?id=728866
+   * Hebrew presentation forms with dagesh, for characters 0x05D0..0x05EA;
+   * Note that some letters do not have a dagesh presForm encoded.
+   */
+  static const hb_codepoint_t sDageshForms[0x05EA - 0x05D0 + 1] = {
+    0xFB30, /* ALEF */
+    0xFB31, /* BET */
+    0xFB32, /* GIMEL */
+    0xFB33, /* DALET */
+    0xFB34, /* HE */
+    0xFB35, /* VAV */
+    0xFB36, /* ZAYIN */
+    0x0000, /* HET */
+    0xFB38, /* TET */
+    0xFB39, /* YOD */
+    0xFB3A, /* FINAL KAF */
+    0xFB3B, /* KAF */
+    0xFB3C, /* LAMED */
+    0x0000, /* FINAL MEM */
+    0xFB3E, /* MEM */
+    0x0000, /* FINAL NUN */
+    0xFB40, /* NUN */
+    0xFB41, /* SAMEKH */
+    0x0000, /* AYIN */
+    0xFB43, /* FINAL PE */
+    0xFB44, /* PE */
+    0x0000, /* FINAL TSADI */
+    0xFB46, /* TSADI */
+    0xFB47, /* QOF */
+    0xFB48, /* RESH */
+    0xFB49, /* SHIN */
+    0xFB4A /* TAV */
+  };
+
+  bool found = c->unicode->compose (a, b, ab);
+
+  if (!found && (b & ~0x7F) == 0x0580) {
+      /* Special-case Hebrew presentation forms that are excluded from
+       * standard normalization, but wanted for old fonts. */
+      switch (b) {
+      case 0x05B4: /* HIRIQ */
+         if (a == 0x05D9) { /* YOD */
+             *ab = 0xFB1D;
+             found = true;
+         }
+         break;
+      case 0x05B7: /* patah */
+         if (a == 0x05F2) { /* YIDDISH YOD YOD */
+             *ab = 0xFB1F;
+             found = true;
+         } else if (a == 0x05D0) { /* ALEF */
+             *ab = 0xFB2E;
+             found = true;
+         }
+         break;
+      case 0x05B8: /* QAMATS */
+         if (a == 0x05D0) { /* ALEF */
+             *ab = 0xFB2F;
+             found = true;
+         }
+         break;
+      case 0x05B9: /* HOLAM */
+         if (a == 0x05D5) { /* VAV */
+             *ab = 0xFB4B;
+             found = true;
+         }
+         break;
+      case 0x05BC: /* DAGESH */
+         if (a >= 0x05D0 && a <= 0x05EA) {
+             *ab = sDageshForms[a - 0x05D0];
+             found = (*ab != 0);
+         } else if (a == 0xFB2A) { /* SHIN WITH SHIN DOT */
+             *ab = 0xFB2C;
+             found = true;
+         } else if (a == 0xFB2B) { /* SHIN WITH SIN DOT */
+             *ab = 0xFB2D;
+             found = true;
+         }
+         break;
+      case 0x05BF: /* RAFE */
+         switch (a) {
+         case 0x05D1: /* BET */
+             *ab = 0xFB4C;
+             found = true;
+             break;
+         case 0x05DB: /* KAF */
+             *ab = 0xFB4D;
+             found = true;
+             break;
+         case 0x05E4: /* PE */
+             *ab = 0xFB4E;
+             found = true;
+             break;
+         }
+         break;
+      case 0x05C1: /* SHIN DOT */
+         if (a == 0x05E9) { /* SHIN */
+             *ab = 0xFB2A;
+             found = true;
+         } else if (a == 0xFB49) { /* SHIN WITH DAGESH */
+             *ab = 0xFB2C;
+             found = true;
+         }
+         break;
+      case 0x05C2: /* SIN DOT */
+         if (a == 0x05E9) { /* SHIN */
+             *ab = 0xFB2B;
+             found = true;
+         } else if (a == 0xFB49) { /* SHIN WITH DAGESH */
+             *ab = 0xFB2D;
+             found = true;
+         }
+         break;
+      }
+  }
+
+  return found;
+}
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
+{
+  "default",
+  collect_features_default,
+  NULL, /* override_features */
+  NULL, /* data_create */
+  NULL, /* data_destroy */
+  NULL, /* preprocess_text */
+  normalization_preference_default,
+  NULL, /* decompose */
+  compose_default,
+  NULL, /* setup_masks */
+  true, /* zero_width_attached_marks */
+  true, /* fallback_position */
+};
index 4c7282c..ed40b96 100644 (file)
 
 #line 36 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
 static const unsigned char _indic_syllable_machine_trans_keys[] = {
-       1u, 16u, 13u, 13u, 4u, 14u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 
+       1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 
        5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, 
        16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 
        6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 
-       4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 4u, 14u, 5u, 7u, 7u, 7u, 
+       4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 
+       7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 
+       5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 
+       4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 
+       4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 
+       1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 
+       5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, 
+       16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 
+       6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 
+       4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 
        5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 
        7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 
        6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 
-       4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 
-       4u, 14u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 
-       7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 
-       6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 
        4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 
-       4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 
-       4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 
-       4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 5u, 14u, 
-       9u, 14u, 9u, 9u, 3u, 13u, 3u, 9u, 9u, 9u, 3u, 9u, 6u, 14u, 3u, 14u, 
-       4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
-       3u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 
-       3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 
-       3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 3u, 14u, 4u, 14u, 
-       1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 
-       1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 
-       5u, 14u, 8u, 14u, 5u, 14u, 9u, 14u, 9u, 9u, 3u, 13u, 3u, 9u, 9u, 9u, 
-       3u, 9u, 6u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
-       3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 14u, 1u, 16u, 
-       1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 
-       1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 1u, 16u, 4u, 14u, 1u, 16u, 3u, 14u, 
-       3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 
-       3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 
-       3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 5u, 14u, 9u, 14u, 9u, 9u, 
-       3u, 13u, 3u, 9u, 9u, 9u, 3u, 9u, 6u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
+       4u, 14u, 5u, 7u, 5u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 
+       7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 1u, 16u, 13u, 13u, 4u, 4u, 6u, 6u, 
+       16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 
+       6u, 6u, 16u, 16u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 
+       3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 
+       3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 
+       5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u, 
+       3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 
+       4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 
+       3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 
+       3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 3u, 14u, 3u, 14u, 
+       4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 
+       4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 
+       4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u, 
+       8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 
+       4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u, 
+       3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 
+       3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 14u, 1u, 16u, 3u, 14u, 
+       3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 
+       3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 
+       3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u, 
+       3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
+       3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 
+       6u, 14u, 3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 14u, 
+       3u, 14u, 4u, 14u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 
+       4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 
+       4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u, 
+       9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u, 
        3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 
-       1u, 16u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 1u, 16u, 
-       1u, 16u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 1u, 16u, 
-       1u, 16u, 3u, 14u, 1u, 16u, 3u, 14u, 1u, 16u, 0
+       5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u, 3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 3u, 17u, 1u, 16u, 4u, 14u, 1u, 16u, 
+       3u, 17u, 3u, 14u, 4u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 14u, 3u, 14u, 
+       1u, 16u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 
+       4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 8u, 14u, 3u, 17u, 3u, 9u, 8u, 9u, 
+       3u, 9u, 3u, 13u, 1u, 16u, 0
 };
 
 static const char _indic_syllable_machine_key_spans[] = {
-       16, 1, 11, 3, 1, 3, 3, 1, 
+       16, 1, 3, 3, 1, 3, 3, 1, 
+       3, 3, 1, 3, 3, 1, 1, 1, 
+       1, 4, 1, 1, 4, 1, 1, 4, 
+       1, 1, 11, 11, 11, 11, 11, 11, 
+       11, 11, 11, 11, 16, 1, 3, 3, 
+       1, 3, 3, 1, 3, 3, 1, 3, 
+       3, 1, 1, 1, 1, 4, 1, 1, 
+       4, 1, 1, 4, 1, 1, 11, 11, 
+       11, 11, 11, 11, 11, 11, 11, 11, 
+       16, 1, 3, 3, 1, 3, 3, 1, 
        3, 3, 1, 3, 3, 1, 1, 1, 
        1, 4, 1, 1, 4, 1, 1, 4, 
        1, 1, 11, 11, 11, 11, 11, 11, 
-       11, 11, 11, 16, 1, 11, 3, 1, 
+       11, 11, 11, 16, 1, 3, 3, 1, 
        3, 3, 1, 3, 3, 1, 3, 3, 
        1, 1, 1, 1, 4, 1, 1, 4, 
        1, 1, 4, 1, 1, 11, 11, 11, 
-       11, 11, 11, 11, 11, 11, 16, 1, 
-       11, 3, 1, 3, 3, 1, 3, 3, 
-       1, 3, 3, 1, 1, 1, 1, 4, 
-       1, 1, 4, 1, 1, 4, 1, 1, 
        11, 11, 11, 11, 11, 11, 11, 11, 
-       11, 16, 12, 12, 11, 16, 12, 12, 
-       11, 16, 12, 12, 11, 16, 12, 12, 
-       11, 16, 12, 12, 11, 10, 7, 10, 
-       6, 1, 11, 7, 1, 7, 9, 12, 
-       11, 10, 12, 11, 10, 12, 11, 10, 
-       12, 11, 11, 16, 12, 16, 16, 16, 
-       12, 16, 16, 16, 12, 16, 16, 16, 
-       12, 16, 16, 16, 12, 12, 12, 11, 
-       16, 12, 12, 11, 16, 12, 12, 11, 
-       16, 12, 12, 11, 16, 12, 12, 11, 
-       10, 7, 10, 6, 1, 11, 7, 1, 
-       7, 9, 12, 11, 10, 12, 11, 10, 
-       12, 11, 10, 12, 11, 16, 12, 16, 
-       16, 16, 12, 16, 16, 16, 12, 16, 
-       16, 16, 12, 16, 16, 11, 16, 12, 
-       12, 12, 11, 16, 12, 12, 11, 16, 
-       12, 12, 11, 16, 12, 12, 11, 16, 
-       12, 12, 11, 10, 7, 10, 6, 1, 
-       11, 7, 1, 7, 9, 12, 11, 10, 
+       11, 3, 3, 3, 3, 1, 3, 3, 
+       1, 3, 3, 1, 16, 1, 1, 1, 
+       1, 4, 1, 1, 4, 1, 1, 4, 
+       1, 1, 16, 15, 12, 11, 16, 15, 
+       12, 11, 16, 15, 12, 11, 16, 15, 
+       12, 11, 16, 15, 12, 11, 10, 7, 
+       5, 1, 1, 15, 7, 2, 7, 11, 
+       12, 12, 11, 10, 12, 11, 10, 12, 
+       11, 10, 12, 11, 9, 12, 11, 16, 
+       12, 12, 16, 16, 16, 16, 16, 12, 
+       12, 16, 16, 16, 16, 16, 12, 12, 
+       16, 16, 16, 16, 16, 12, 12, 16, 
+       16, 16, 16, 16, 12, 12, 12, 12, 
+       11, 16, 15, 12, 11, 16, 15, 12, 
+       11, 16, 15, 12, 11, 16, 15, 12, 
+       11, 10, 7, 5, 1, 1, 15, 7, 
+       2, 7, 11, 12, 12, 11, 10, 12, 
+       11, 10, 12, 11, 10, 12, 11, 9, 
+       12, 16, 12, 12, 16, 16, 16, 16, 
+       16, 12, 12, 16, 16, 16, 16, 16, 
+       12, 12, 16, 16, 16, 16, 16, 12, 
+       12, 16, 16, 16, 16, 11, 16, 12, 
+       12, 11, 16, 15, 12, 11, 16, 15, 
+       12, 11, 16, 15, 12, 11, 16, 15, 
+       12, 11, 10, 7, 5, 1, 1, 15, 
+       7, 2, 7, 11, 12, 12, 11, 10, 
+       12, 11, 10, 12, 11, 10, 12, 11, 
+       9, 12, 16, 12, 12, 16, 16, 16, 
+       16, 16, 12, 12, 16, 16, 16, 16, 
+       16, 12, 12, 16, 16, 16, 16, 16, 
+       12, 12, 16, 16, 16, 16, 16, 11, 
+       12, 11, 12, 12, 11, 16, 15, 12, 
+       11, 16, 15, 12, 11, 16, 15, 12, 
+       11, 16, 15, 12, 11, 10, 7, 5, 
+       1, 1, 15, 7, 2, 7, 11, 12, 
        12, 11, 10, 12, 11, 10, 12, 11, 
-       16, 12, 16, 16, 16, 12, 16, 16, 
-       16, 12, 16, 16, 16, 12, 16, 16, 
-       16, 12, 16, 12, 16
+       10, 12, 11, 9, 12, 16, 12, 12, 
+       16, 16, 16, 16, 16, 12, 12, 16, 
+       16, 16, 16, 16, 12, 12, 16, 16, 
+       16, 16, 16, 12, 12, 16, 16, 16, 
+       16, 16, 12, 16, 15, 16, 11, 16, 
+       15, 12, 11, 5, 1, 1, 12, 12, 
+       16, 12, 11, 10, 12, 11, 10, 12, 
+       11, 10, 12, 11, 7, 15, 7, 2, 
+       7, 11, 16
 };
 
 static const short _indic_syllable_machine_index_offsets[] = {
-       0, 17, 19, 31, 35, 37, 41, 45, 
-       47, 51, 55, 57, 61, 65, 67, 69, 
-       71, 73, 78, 80, 82, 87, 89, 91, 
-       96, 98, 100, 112, 124, 136, 148, 160, 
-       172, 184, 196, 208, 225, 227, 239, 243, 
-       245, 249, 253, 255, 259, 263, 265, 269, 
-       273, 275, 277, 279, 281, 286, 288, 290, 
-       295, 297, 299, 304, 306, 308, 320, 332, 
-       344, 356, 368, 380, 392, 404, 416, 433, 
-       435, 447, 451, 453, 457, 461, 463, 467, 
-       471, 473, 477, 481, 483, 485, 487, 489, 
-       494, 496, 498, 503, 505, 507, 512, 514, 
-       516, 528, 540, 552, 564, 576, 588, 600, 
-       612, 624, 641, 654, 667, 679, 696, 709, 
-       722, 734, 751, 764, 777, 789, 806, 819, 
-       832, 844, 861, 874, 887, 899, 910, 918, 
-       929, 936, 938, 950, 958, 960, 968, 978, 
-       991, 1003, 1014, 1027, 1039, 1050, 1063, 1075, 
-       1086, 1099, 1111, 1123, 1140, 1153, 1170, 1187, 
-       1204, 1217, 1234, 1251, 1268, 1281, 1298, 1315, 
-       1332, 1345, 1362, 1379, 1396, 1409, 1422, 1435, 
-       1447, 1464, 1477, 1490, 1502, 1519, 1532, 1545, 
-       1557, 1574, 1587, 1600, 1612, 1629, 1642, 1655, 
-       1667, 1678, 1686, 1697, 1704, 1706, 1718, 1726, 
-       1728, 1736, 1746, 1759, 1771, 1782, 1795, 1807, 
-       1818, 1831, 1843, 1854, 1867, 1879, 1896, 1909, 
-       1926, 1943, 1960, 1973, 1990, 2007, 2024, 2037, 
-       2054, 2071, 2088, 2101, 2118, 2135, 2147, 2164, 
-       2177, 2190, 2203, 2215, 2232, 2245, 2258, 2270, 
-       2287, 2300, 2313, 2325, 2342, 2355, 2368, 2380, 
-       2397, 2410, 2423, 2435, 2446, 2454, 2465, 2472, 
-       2474, 2486, 2494, 2496, 2504, 2514, 2527, 2539, 
-       2550, 2563, 2575, 2586, 2599, 2611, 2622, 2635, 
-       2647, 2664, 2677, 2694, 2711, 2728, 2741, 2758, 
-       2775, 2792, 2805, 2822, 2839, 2856, 2869, 2886, 
-       2903, 2920, 2933, 2950, 2963
+       0, 17, 19, 23, 27, 29, 33, 37, 
+       39, 43, 47, 49, 53, 57, 59, 61, 
+       63, 65, 70, 72, 74, 79, 81, 83, 
+       88, 90, 92, 104, 116, 128, 140, 152, 
+       164, 176, 188, 200, 212, 229, 231, 235, 
+       239, 241, 245, 249, 251, 255, 259, 261, 
+       265, 269, 271, 273, 275, 277, 282, 284, 
+       286, 291, 293, 295, 300, 302, 304, 316, 
+       328, 340, 352, 364, 376, 388, 400, 412, 
+       424, 441, 443, 447, 451, 453, 457, 461, 
+       463, 467, 471, 473, 477, 481, 483, 485, 
+       487, 489, 494, 496, 498, 503, 505, 507, 
+       512, 514, 516, 528, 540, 552, 564, 576, 
+       588, 600, 612, 624, 641, 643, 647, 651, 
+       653, 657, 661, 663, 667, 671, 673, 677, 
+       681, 683, 685, 687, 689, 694, 696, 698, 
+       703, 705, 707, 712, 714, 716, 728, 740, 
+       752, 764, 776, 788, 800, 812, 824, 836, 
+       848, 860, 864, 868, 872, 876, 878, 882, 
+       886, 888, 892, 896, 898, 915, 917, 919, 
+       921, 923, 928, 930, 932, 937, 939, 941, 
+       946, 948, 950, 967, 983, 996, 1008, 1025, 
+       1041, 1054, 1066, 1083, 1099, 1112, 1124, 1141, 
+       1157, 1170, 1182, 1199, 1215, 1228, 1240, 1251, 
+       1259, 1265, 1267, 1269, 1285, 1293, 1296, 1304, 
+       1316, 1329, 1342, 1354, 1365, 1378, 1390, 1401, 
+       1414, 1426, 1437, 1450, 1462, 1472, 1485, 1497, 
+       1514, 1527, 1540, 1557, 1574, 1591, 1608, 1625, 
+       1638, 1651, 1668, 1685, 1702, 1719, 1736, 1749, 
+       1762, 1779, 1796, 1813, 1830, 1847, 1860, 1873, 
+       1890, 1907, 1924, 1941, 1958, 1971, 1984, 1997, 
+       2010, 2022, 2039, 2055, 2068, 2080, 2097, 2113, 
+       2126, 2138, 2155, 2171, 2184, 2196, 2213, 2229, 
+       2242, 2254, 2265, 2273, 2279, 2281, 2283, 2299, 
+       2307, 2310, 2318, 2330, 2343, 2356, 2368, 2379, 
+       2392, 2404, 2415, 2428, 2440, 2451, 2464, 2476, 
+       2486, 2499, 2516, 2529, 2542, 2559, 2576, 2593, 
+       2610, 2627, 2640, 2653, 2670, 2687, 2704, 2721, 
+       2738, 2751, 2764, 2781, 2798, 2815, 2832, 2849, 
+       2862, 2875, 2892, 2909, 2926, 2943, 2955, 2972, 
+       2985, 2998, 3010, 3027, 3043, 3056, 3068, 3085, 
+       3101, 3114, 3126, 3143, 3159, 3172, 3184, 3201, 
+       3217, 3230, 3242, 3253, 3261, 3267, 3269, 3271, 
+       3287, 3295, 3298, 3306, 3318, 3331, 3344, 3356, 
+       3367, 3380, 3392, 3403, 3416, 3428, 3439, 3452, 
+       3464, 3474, 3487, 3504, 3517, 3530, 3547, 3564, 
+       3581, 3598, 3615, 3628, 3641, 3658, 3675, 3692, 
+       3709, 3726, 3739, 3752, 3769, 3786, 3803, 3820, 
+       3837, 3850, 3863, 3880, 3897, 3914, 3931, 3948, 
+       3960, 3973, 3985, 3998, 4011, 4023, 4040, 4056, 
+       4069, 4081, 4098, 4114, 4127, 4139, 4156, 4172, 
+       4185, 4197, 4214, 4230, 4243, 4255, 4266, 4274, 
+       4280, 4282, 4284, 4300, 4308, 4311, 4319, 4331, 
+       4344, 4357, 4369, 4380, 4393, 4405, 4416, 4429, 
+       4441, 4452, 4465, 4477, 4487, 4500, 4517, 4530, 
+       4543, 4560, 4577, 4594, 4611, 4628, 4641, 4654, 
+       4671, 4688, 4705, 4722, 4739, 4752, 4765, 4782, 
+       4799, 4816, 4833, 4850, 4863, 4876, 4893, 4910, 
+       4927, 4944, 4961, 4974, 4991, 5007, 5024, 5036, 
+       5053, 5069, 5082, 5094, 5100, 5102, 5104, 5117, 
+       5130, 5147, 5160, 5172, 5183, 5196, 5208, 5219, 
+       5232, 5244, 5255, 5268, 5280, 5288, 5304, 5312, 
+       5315, 5323, 5335
 };
 
 static const short _indic_syllable_machine_indicies[] = {
        1, 2, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 1, 
-       0, 3, 0, 4, 5, 5, 6, 0, 
-       0, 0, 0, 0, 0, 4, 0, 7, 
-       7, 6, 0, 6, 0, 8, 8, 9, 
-       0, 10, 10, 9, 0, 9, 0, 11, 
-       11, 12, 0, 13, 13, 12, 0, 12, 
-       0, 14, 14, 15, 0, 16, 16, 15, 
-       0, 15, 0, 17, 0, 18, 0, 19, 
-       0, 20, 14, 14, 15, 0, 21, 0, 
-       22, 0, 23, 11, 11, 12, 0, 24, 
-       0, 25, 0, 26, 8, 8, 9, 0, 
-       27, 0, 28, 0, 4, 5, 5, 6, 
-       0, 0, 0, 0, 0, 29, 4, 0, 
-       30, 5, 5, 6, 0, 0, 0, 0, 
-       0, 0, 30, 0, 30, 5, 5, 6, 
-       0, 0, 0, 0, 0, 31, 30, 0, 
-       32, 5, 5, 6, 0, 0, 0, 0, 
-       0, 0, 32, 0, 32, 5, 5, 6, 
-       0, 0, 0, 0, 0, 33, 32, 0, 
-       34, 5, 5, 6, 0, 0, 0, 0, 
-       0, 0, 34, 0, 34, 5, 5, 6, 
-       0, 0, 0, 0, 0, 35, 34, 0, 
-       36, 5, 5, 6, 0, 0, 0, 0, 
-       0, 0, 36, 0, 36, 5, 5, 6, 
-       0, 0, 0, 0, 0, 37, 36, 0, 
-       39, 40, 38, 38, 38, 38, 38, 38, 
-       38, 38, 38, 38, 38, 38, 38, 39, 
-       38, 41, 38, 42, 43, 43, 44, 38, 
-       38, 38, 38, 38, 38, 42, 38, 45, 
-       45, 44, 38, 44, 38, 46, 46, 47, 
-       38, 48, 48, 47, 38, 47, 38, 49, 
-       49, 50, 38, 51, 51, 50, 38, 50, 
-       38, 52, 52, 53, 38, 54, 54, 53, 
-       38, 53, 38, 55, 38, 56, 38, 57, 
-       38, 58, 52, 52, 53, 38, 59, 38, 
-       60, 38, 61, 49, 49, 50, 38, 62, 
-       38, 63, 38, 64, 46, 46, 47, 38, 
-       65, 38, 66, 38, 42, 43, 43, 44, 
-       38, 38, 38, 38, 38, 67, 42, 38, 
-       68, 43, 43, 44, 38, 38, 38, 38, 
-       38, 38, 68, 38, 68, 43, 43, 44, 
+       0, 3, 0, 4, 4, 5, 0, 6, 
+       6, 5, 0, 5, 0, 7, 7, 8, 
+       0, 9, 9, 8, 0, 8, 0, 10, 
+       10, 11, 0, 12, 12, 11, 0, 11, 
+       0, 13, 13, 14, 0, 15, 15, 14, 
+       0, 14, 0, 16, 0, 17, 0, 18, 
+       0, 19, 13, 13, 14, 0, 20, 0, 
+       21, 0, 22, 10, 10, 11, 0, 23, 
+       0, 24, 0, 25, 7, 7, 8, 0, 
+       26, 0, 27, 0, 28, 4, 4, 5, 
+       0, 0, 0, 0, 0, 0, 28, 0, 
+       28, 4, 4, 5, 0, 0, 0, 0, 
+       0, 29, 28, 0, 30, 4, 4, 5, 
+       0, 0, 0, 0, 0, 0, 30, 0, 
+       30, 4, 4, 5, 0, 0, 0, 0, 
+       0, 31, 30, 0, 32, 4, 4, 5, 
+       0, 0, 0, 0, 0, 0, 32, 0, 
+       32, 4, 4, 5, 0, 0, 0, 0, 
+       0, 33, 32, 0, 34, 4, 4, 5, 
+       0, 0, 0, 0, 0, 0, 34, 0, 
+       34, 4, 4, 5, 0, 0, 0, 0, 
+       0, 35, 34, 0, 36, 4, 4, 5, 
+       0, 0, 0, 0, 0, 0, 36, 0, 
+       36, 4, 4, 5, 0, 0, 0, 0, 
+       0, 37, 36, 0, 39, 40, 38, 38, 
+       38, 38, 38, 38, 38, 38, 38, 38, 
+       38, 38, 38, 39, 38, 41, 38, 42, 
+       42, 43, 38, 44, 44, 43, 38, 43, 
+       38, 45, 45, 46, 38, 47, 47, 46, 
+       38, 46, 38, 48, 48, 49, 38, 50, 
+       50, 49, 38, 49, 38, 51, 51, 52, 
+       38, 53, 53, 52, 38, 52, 38, 54, 
+       38, 55, 38, 56, 38, 57, 51, 51, 
+       52, 38, 58, 38, 59, 38, 60, 48, 
+       48, 49, 38, 61, 38, 62, 38, 63, 
+       45, 45, 46, 38, 64, 38, 65, 38, 
+       66, 42, 42, 43, 38, 38, 38, 38, 
+       38, 38, 66, 38, 66, 42, 42, 43, 
+       38, 38, 38, 38, 38, 67, 66, 38, 
+       68, 42, 42, 43, 38, 38, 38, 38, 
+       38, 38, 68, 38, 68, 42, 42, 43, 
        38, 38, 38, 38, 38, 69, 68, 38, 
-       70, 43, 43, 44, 38, 38, 38, 38, 
-       38, 38, 70, 38, 70, 43, 43, 44
+       70, 42, 42, 43, 38, 38, 38, 38, 
+       38, 38, 70, 38, 70, 42, 42, 43
        38, 38, 38, 38, 38, 71, 70, 38, 
-       72, 43, 43, 44, 38, 38, 38, 38, 
-       38, 38, 72, 38, 72, 43, 43, 44
+       72, 42, 42, 43, 38, 38, 38, 38, 
+       38, 38, 72, 38, 72, 42, 42, 43
        38, 38, 38, 38, 38, 73, 72, 38, 
-       74, 43, 43, 44, 38, 38, 38, 38, 
-       38, 38, 74, 38, 74, 43, 43, 44
+       74, 42, 42, 43, 38, 38, 38, 38, 
+       38, 38, 74, 38, 74, 42, 42, 43
        38, 38, 38, 38, 38, 75, 74, 38, 
        77, 78, 76, 76, 76, 76, 76, 76, 
        76, 76, 76, 76, 76, 76, 76, 77, 
-       76, 79, 76, 80, 81, 81, 82, 76, 
-       76, 76, 76, 76, 76, 80, 76, 83, 
-       83, 82, 76, 82, 76, 84, 84, 85, 
+       76, 79, 76, 80, 80, 81, 76, 83, 
+       83, 81, 82, 81, 82, 84, 84, 85, 
        76, 86, 86, 85, 76, 85, 76, 87, 
        87, 88, 76, 89, 89, 88, 76, 88, 
        76, 90, 90, 91, 76, 92, 92, 91, 
@@ -215,395 +296,748 @@ static const short _indic_syllable_machine_indicies[] = {
        76, 96, 90, 90, 91, 76, 97, 76, 
        98, 76, 99, 87, 87, 88, 76, 100, 
        76, 101, 76, 102, 84, 84, 85, 76, 
-       103, 76, 104, 76, 80, 81, 81, 82
-       76, 76, 76, 76, 76, 105, 80, 76, 
-       106, 81, 81, 82, 76, 76, 76, 76, 
-       76, 76, 106, 76, 106, 81, 81, 82
-       76, 76, 76, 76, 76, 107, 106, 76, 
-       108, 81, 81, 82, 76, 76, 76, 76, 
-       76, 76, 108, 76, 108, 81, 81, 82
-       76, 76, 76, 76, 76, 109, 108, 76, 
-       110, 81, 81, 82, 76, 76, 76, 76, 
-       76, 76, 110, 76, 110, 81, 81, 82
-       76, 76, 76, 76, 76, 111, 110, 76
-       112, 81, 81, 82, 76, 76, 76, 76, 
-       76, 76, 112, 76, 112, 81, 81, 82
-       76, 76, 76, 76, 76, 113, 112, 76, 
+       103, 76, 104, 76, 105, 80, 80, 81
+       76, 76, 76, 76, 76, 76, 105, 76, 
+       105, 80, 80, 81, 76, 76, 76, 76, 
+       76, 106, 105, 76, 107, 80, 80, 81
+       76, 76, 76, 76, 76, 76, 107, 76, 
+       107, 80, 80, 81, 76, 76, 76, 76, 
+       76, 108, 107, 76, 109, 80, 80, 81
+       76, 76, 76, 76, 76, 76, 109, 76, 
+       109, 80, 80, 81, 76, 76, 76, 76, 
+       76, 110, 109, 76, 111, 80, 80, 81
+       82, 82, 82, 82, 82, 82, 111, 82
+       111, 80, 80, 81, 76, 76, 76, 76, 
+       76, 112, 111, 76, 113, 80, 80, 81
+       76, 76, 76, 76, 76, 76, 113, 76, 
        115, 116, 114, 114, 114, 114, 114, 114, 
-       114, 114, 117, 117, 114, 114, 118, 119, 
-       114, 121, 122, 123, 124, 6, 125, 126, 
-       127, 120, 120, 37, 128, 120, 129, 122, 
-       124, 124, 6, 125, 126, 127, 120, 120, 
-       120, 128, 120, 122, 124, 124, 6, 125, 
-       126, 127, 120, 120, 120, 128, 120, 130, 
-       120, 120, 120, 19, 131, 120, 125, 126, 
-       120, 120, 120, 120, 132, 120, 130, 120, 
-       133, 134, 135, 136, 6, 125, 126, 127, 
-       120, 120, 35, 137, 120, 138, 134, 136, 
-       136, 6, 125, 126, 127, 120, 120, 120, 
-       137, 120, 134, 136, 136, 6, 125, 126, 
-       127, 120, 120, 120, 137, 120, 139, 120, 
-       120, 120, 19, 140, 120, 125, 126, 120, 
-       120, 120, 120, 132, 120, 139, 120, 141, 
-       142, 143, 144, 6, 125, 126, 127, 120, 
-       120, 33, 145, 120, 146, 142, 144, 144, 
-       6, 125, 126, 127, 120, 120, 120, 145, 
-       120, 142, 144, 144, 6, 125, 126, 127, 
-       120, 120, 120, 145, 120, 147, 120, 120, 
-       120, 19, 148, 120, 125, 126, 120, 120, 
-       120, 120, 132, 120, 147, 120, 149, 150, 
-       151, 152, 6, 125, 126, 127, 120, 120, 
-       31, 153, 120, 154, 150, 152, 152, 6, 
-       125, 126, 127, 120, 120, 120, 153, 120, 
-       150, 152, 152, 6, 125, 126, 127, 120, 
-       120, 120, 153, 120, 155, 120, 120, 120, 
-       19, 156, 120, 125, 126, 120, 120, 120, 
-       120, 132, 120, 155, 120, 157, 158, 159, 
-       160, 6, 125, 126, 127, 120, 120, 29, 
-       161, 120, 162, 158, 160, 160, 6, 125, 
-       126, 127, 120, 120, 120, 161, 120, 158, 
-       160, 160, 6, 125, 126, 127, 120, 120, 
-       120, 161, 120, 19, 19, 120, 125, 126, 
-       120, 120, 120, 120, 132, 120, 125, 126, 
-       120, 120, 120, 120, 132, 120, 163, 120, 
-       120, 120, 126, 120, 120, 120, 120, 132, 
-       120, 126, 120, 120, 120, 120, 132, 120, 
-       164, 120, 165, 120, 166, 120, 120, 120, 
-       126, 120, 120, 120, 3, 120, 2, 120, 
-       120, 120, 120, 120, 126, 120, 126, 120, 
-       165, 120, 120, 120, 120, 120, 126, 120, 
-       19, 120, 125, 126, 120, 120, 120, 120, 
-       132, 120, 167, 28, 168, 169, 9, 125, 
-       126, 120, 120, 120, 120, 132, 120, 28, 
-       168, 169, 9, 125, 126, 120, 120, 120, 
-       120, 132, 120, 168, 168, 9, 125, 126, 
-       120, 120, 120, 120, 132, 120, 170, 25, 
-       171, 172, 12, 125, 126, 120, 120, 120, 
-       120, 132, 120, 25, 171, 172, 12, 125, 
-       126, 120, 120, 120, 120, 132, 120, 171, 
-       171, 12, 125, 126, 120, 120, 120, 120, 
-       132, 120, 173, 22, 174, 175, 15, 125, 
-       126, 120, 120, 120, 120, 132, 120, 22, 
-       174, 175, 15, 125, 126, 120, 120, 120, 
-       120, 132, 120, 174, 174, 15, 125, 126, 
-       120, 120, 120, 120, 132, 120, 176, 19, 
-       120, 177, 120, 125, 126, 120, 120, 120, 
-       120, 132, 120, 19, 120, 177, 120, 125, 
-       126, 120, 120, 120, 120, 132, 120, 158, 
-       160, 160, 6, 125, 126, 120, 120, 120, 
-       120, 161, 120, 1, 2, 120, 120, 19, 
-       19, 120, 125, 126, 120, 120, 120, 120, 
-       132, 120, 1, 120, 157, 158, 160, 160, 
-       6, 125, 126, 127, 120, 120, 120, 161, 
-       120, 155, 120, 120, 120, 120, 120, 120, 
-       125, 126, 120, 120, 120, 120, 132, 120, 
-       155, 120, 155, 120, 120, 120, 120, 156, 
-       120, 125, 126, 120, 120, 120, 120, 132, 
-       120, 155, 120, 155, 2, 120, 120, 19, 
-       156, 120, 125, 126, 120, 120, 120, 120, 
-       132, 120, 155, 120, 149, 150, 152, 152, 
-       6, 125, 126, 127, 120, 120, 120, 153, 
-       120, 147, 120, 120, 120, 120, 120, 120, 
-       125, 126, 120, 120, 120, 120, 132, 120, 
-       147, 120, 147, 120, 120, 120, 120, 148, 
-       120, 125, 126, 120, 120, 120, 120, 132, 
-       120, 147, 120, 147, 2, 120, 120, 19, 
-       148, 120, 125, 126, 120, 120, 120, 120, 
-       132, 120, 147, 120, 141, 142, 144, 144, 
-       6, 125, 126, 127, 120, 120, 120, 145, 
-       120, 139, 120, 120, 120, 120, 120, 120, 
-       125, 126, 120, 120, 120, 120, 132, 120, 
-       139, 120, 139, 120, 120, 120, 120, 140, 
-       120, 125, 126, 120, 120, 120, 120, 132, 
-       120, 139, 120, 139, 2, 120, 120, 19, 
-       140, 120, 125, 126, 120, 120, 120, 120, 
-       132, 120, 139, 120, 133, 134, 136, 136, 
-       6, 125, 126, 127, 120, 120, 120, 137, 
-       120, 130, 120, 120, 120, 120, 120, 120, 
-       125, 126, 120, 120, 120, 120, 132, 120, 
-       130, 120, 130, 120, 120, 120, 120, 131, 
-       120, 125, 126, 120, 120, 120, 120, 132, 
-       120, 130, 120, 130, 2, 120, 120, 19, 
-       131, 120, 125, 126, 120, 120, 120, 120, 
-       132, 120, 130, 120, 121, 122, 124, 124, 
-       6, 125, 126, 127, 120, 120, 120, 128, 
-       120, 179, 180, 181, 182, 44, 183, 184, 
-       178, 178, 178, 75, 185, 178, 186, 180, 
-       187, 182, 44, 183, 184, 178, 178, 178, 
-       178, 185, 178, 180, 187, 182, 44, 183, 
-       184, 178, 178, 178, 178, 185, 178, 188, 
-       178, 178, 178, 57, 189, 178, 183, 184, 
-       178, 178, 178, 178, 190, 178, 188, 178, 
-       191, 192, 193, 194, 44, 183, 184, 178, 
-       178, 178, 73, 195, 178, 196, 192, 194, 
-       194, 44, 183, 184, 178, 178, 178, 178, 
-       195, 178, 192, 194, 194, 44, 183, 184, 
-       178, 178, 178, 178, 195, 178, 197, 178, 
-       178, 178, 57, 198, 178, 183, 184, 178, 
-       178, 178, 178, 190, 178, 197, 178, 199, 
-       200, 201, 202, 44, 183, 184, 178, 178, 
-       178, 71, 203, 178, 204, 200, 202, 202, 
-       44, 183, 184, 178, 178, 178, 178, 203, 
-       178, 200, 202, 202, 44, 183, 184, 178, 
-       178, 178, 178, 203, 178, 205, 178, 178, 
-       178, 57, 206, 178, 183, 184, 178, 178, 
-       178, 178, 190, 178, 205, 178, 207, 208, 
-       209, 210, 44, 183, 184, 178, 178, 178, 
-       69, 211, 178, 212, 208, 210, 210, 44, 
-       183, 184, 178, 178, 178, 178, 211, 178, 
-       208, 210, 210, 44, 183, 184, 178, 178, 
-       178, 178, 211, 178, 213, 178, 178, 178, 
-       57, 214, 178, 183, 184, 178, 178, 178, 
-       178, 190, 178, 213, 178, 215, 216, 217, 
-       218, 44, 183, 184, 178, 178, 178, 67, 
-       219, 178, 220, 216, 218, 218, 44, 183, 
-       184, 178, 178, 178, 178, 219, 178, 216, 
-       218, 218, 44, 183, 184, 178, 178, 178, 
-       178, 219, 178, 57, 57, 178, 183, 184, 
-       178, 178, 178, 178, 190, 178, 183, 184, 
-       178, 178, 178, 178, 190, 178, 221, 178, 
-       178, 178, 184, 178, 178, 178, 178, 190, 
-       178, 184, 178, 178, 178, 178, 190, 178, 
-       222, 178, 223, 178, 224, 178, 178, 178, 
-       184, 178, 178, 178, 41, 178, 40, 178, 
-       178, 178, 178, 178, 184, 178, 184, 178, 
-       223, 178, 178, 178, 178, 178, 184, 178, 
-       57, 178, 183, 184, 178, 178, 178, 178, 
-       190, 178, 225, 66, 226, 227, 47, 183, 
-       184, 178, 178, 178, 178, 190, 178, 66, 
-       226, 227, 47, 183, 184, 178, 178, 178, 
-       178, 190, 178, 226, 226, 47, 183, 184, 
-       178, 178, 178, 178, 190, 178, 228, 63, 
-       229, 230, 50, 183, 184, 178, 178, 178, 
-       178, 190, 178, 63, 229, 230, 50, 183, 
-       184, 178, 178, 178, 178, 190, 178, 229, 
-       229, 50, 183, 184, 178, 178, 178, 178, 
-       190, 178, 231, 60, 232, 233, 53, 183, 
-       184, 178, 178, 178, 178, 190, 178, 60, 
-       232, 233, 53, 183, 184, 178, 178, 178, 
-       178, 190, 178, 232, 232, 53, 183, 184, 
-       178, 178, 178, 178, 190, 178, 234, 57, 
-       178, 235, 178, 183, 184, 178, 178, 178, 
-       178, 190, 178, 57, 178, 235, 178, 183, 
-       184, 178, 178, 178, 178, 190, 178, 39, 
-       40, 178, 178, 57, 57, 178, 183, 184, 
-       178, 178, 178, 178, 190, 178, 39, 178, 
-       215, 216, 218, 218, 44, 183, 184, 178, 
-       178, 178, 178, 219, 178, 213, 178, 178, 
-       178, 178, 178, 178, 183, 184, 178, 178, 
-       178, 178, 190, 178, 213, 178, 213, 178, 
-       178, 178, 178, 214, 178, 183, 184, 178, 
-       178, 178, 178, 190, 178, 213, 178, 213, 
-       40, 178, 178, 57, 214, 178, 183, 184, 
-       178, 178, 178, 178, 190, 178, 213, 178, 
-       207, 208, 210, 210, 44, 183, 184, 178, 
-       178, 178, 178, 211, 178, 205, 178, 178, 
-       178, 178, 178, 178, 183, 184, 178, 178, 
-       178, 178, 190, 178, 205, 178, 205, 178, 
-       178, 178, 178, 206, 178, 183, 184, 178, 
-       178, 178, 178, 190, 178, 205, 178, 205, 
-       40, 178, 178, 57, 206, 178, 183, 184, 
-       178, 178, 178, 178, 190, 178, 205, 178, 
-       199, 200, 202, 202, 44, 183, 184, 178, 
-       178, 178, 178, 203, 178, 197, 178, 178, 
-       178, 178, 178, 178, 183, 184, 178, 178, 
-       178, 178, 190, 178, 197, 178, 197, 178, 
-       178, 178, 178, 198, 178, 183, 184, 178, 
-       178, 178, 178, 190, 178, 197, 178, 197, 
-       40, 178, 178, 57, 198, 178, 183, 184, 
-       178, 178, 178, 178, 190, 178, 197, 178, 
-       191, 192, 194, 194, 44, 183, 184, 178, 
-       178, 178, 178, 195, 178, 188, 178, 178, 
-       178, 178, 178, 178, 183, 184, 178, 178, 
-       178, 178, 190, 178, 188, 178, 188, 178, 
-       178, 178, 178, 189, 178, 183, 184, 178, 
-       178, 178, 178, 190, 178, 188, 178, 74, 
-       43, 43, 44, 178, 178, 178, 178, 178, 
-       178, 74, 178, 188, 40, 178, 178, 57, 
-       189, 178, 183, 184, 178, 178, 178, 178, 
-       190, 178, 188, 178, 179, 180, 187, 182, 
-       44, 183, 184, 178, 178, 178, 178, 185, 
-       178, 237, 238, 239, 240, 82, 241, 242, 
-       236, 236, 236, 113, 243, 236, 244, 238, 
-       240, 240, 82, 241, 242, 236, 236, 236, 
-       236, 243, 236, 238, 240, 240, 82, 241, 
-       242, 236, 236, 236, 236, 243, 236, 245, 
-       236, 236, 236, 95, 246, 236, 241, 242, 
-       236, 236, 236, 236, 247, 236, 245, 236, 
-       248, 249, 250, 251, 82, 241, 242, 236, 
-       236, 236, 111, 252, 236, 253, 249, 251, 
-       251, 82, 241, 242, 236, 236, 236, 236, 
-       252, 236, 249, 251, 251, 82, 241, 242, 
-       236, 236, 236, 236, 252, 236, 254, 236, 
-       236, 236, 95, 255, 236, 241, 242, 236, 
-       236, 236, 236, 247, 236, 254, 236, 256, 
-       257, 258, 259, 82, 241, 242, 236, 236, 
-       236, 109, 260, 236, 261, 257, 259, 259, 
-       82, 241, 242, 236, 236, 236, 236, 260, 
-       236, 257, 259, 259, 82, 241, 242, 236, 
-       236, 236, 236, 260, 236, 262, 236, 236, 
-       236, 95, 263, 236, 241, 242, 236, 236, 
-       236, 236, 247, 236, 262, 236, 264, 265, 
-       266, 267, 82, 241, 242, 236, 236, 236, 
-       107, 268, 236, 269, 265, 267, 267, 82, 
-       241, 242, 236, 236, 236, 236, 268, 236, 
-       265, 267, 267, 82, 241, 242, 236, 236, 
-       236, 236, 268, 236, 270, 236, 236, 236, 
-       95, 271, 236, 241, 242, 236, 236, 236, 
-       236, 247, 236, 270, 236, 272, 273, 274, 
-       275, 82, 241, 242, 236, 236, 236, 105, 
-       276, 236, 277, 273, 275, 275, 82, 241, 
-       242, 236, 236, 236, 236, 276, 236, 273, 
-       275, 275, 82, 241, 242, 236, 236, 236, 
-       236, 276, 236, 95, 95, 236, 241, 242, 
-       236, 236, 236, 236, 247, 236, 241, 242, 
-       236, 236, 236, 236, 247, 236, 278, 236, 
-       236, 236, 242, 236, 236, 236, 236, 247, 
-       236, 242, 236, 236, 236, 236, 247, 236, 
-       279, 236, 280, 236, 281, 236, 236, 236, 
-       242, 236, 236, 236, 79, 236, 78, 236, 
-       236, 236, 236, 236, 242, 236, 242, 236, 
-       280, 236, 236, 236, 236, 236, 242, 236, 
-       95, 236, 241, 242, 236, 236, 236, 236, 
-       247, 236, 282, 104, 283, 284, 85, 241, 
-       242, 236, 236, 236, 236, 247, 236, 104, 
-       283, 284, 85, 241, 242, 236, 236, 236, 
-       236, 247, 236, 283, 283, 85, 241, 242, 
-       236, 236, 236, 236, 247, 236, 285, 101, 
-       286, 287, 88, 241, 242, 236, 236, 236, 
-       236, 247, 236, 101, 286, 287, 88, 241, 
-       242, 236, 236, 236, 236, 247, 236, 286, 
-       286, 88, 241, 242, 236, 236, 236, 236, 
-       247, 236, 288, 98, 289, 290, 91, 241, 
-       242, 236, 236, 236, 236, 247, 236, 98, 
-       289, 290, 91, 241, 242, 236, 236, 236, 
-       236, 247, 236, 289, 289, 91, 241, 242, 
-       236, 236, 236, 236, 247, 236, 291, 95, 
-       236, 292, 236, 241, 242, 236, 236, 236, 
-       236, 247, 236, 95, 236, 292, 236, 241, 
-       242, 236, 236, 236, 236, 247, 236, 77, 
-       78, 236, 236, 95, 95, 236, 241, 242, 
-       236, 236, 236, 236, 247, 236, 77, 236, 
-       272, 273, 275, 275, 82, 241, 242, 236, 
-       236, 236, 236, 276, 236, 270, 236, 236, 
-       236, 236, 236, 236, 241, 242, 236, 236, 
-       236, 236, 247, 236, 270, 236, 270, 236, 
-       236, 236, 236, 271, 236, 241, 242, 236, 
-       236, 236, 236, 247, 236, 270, 236, 270, 
-       78, 236, 236, 95, 271, 236, 241, 242, 
-       236, 236, 236, 236, 247, 236, 270, 236, 
-       264, 265, 267, 267, 82, 241, 242, 236, 
-       236, 236, 236, 268, 236, 262, 236, 236, 
-       236, 236, 236, 236, 241, 242, 236, 236, 
-       236, 236, 247, 236, 262, 236, 262, 236, 
-       236, 236, 236, 263, 236, 241, 242, 236, 
-       236, 236, 236, 247, 236, 262, 236, 262, 
-       78, 236, 236, 95, 263, 236, 241, 242, 
-       236, 236, 236, 236, 247, 236, 262, 236, 
-       256, 257, 259, 259, 82, 241, 242, 236, 
-       236, 236, 236, 260, 236, 254, 236, 236, 
-       236, 236, 236, 236, 241, 242, 236, 236, 
-       236, 236, 247, 236, 254, 236, 254, 236, 
-       236, 236, 236, 255, 236, 241, 242, 236, 
-       236, 236, 236, 247, 236, 254, 236, 254, 
-       78, 236, 236, 95, 255, 236, 241, 242, 
-       236, 236, 236, 236, 247, 236, 254, 236, 
-       248, 249, 251, 251, 82, 241, 242, 236, 
-       236, 236, 236, 252, 236, 245, 236, 236, 
-       236, 236, 236, 236, 241, 242, 236, 236, 
-       236, 236, 247, 236, 245, 236, 245, 236, 
-       236, 236, 236, 246, 236, 241, 242, 236, 
-       236, 236, 236, 247, 236, 245, 236, 245, 
-       78, 236, 236, 95, 246, 236, 241, 242, 
-       236, 236, 236, 236, 247, 236, 245, 236, 
-       237, 238, 240, 240, 82, 241, 242, 236, 
-       236, 236, 236, 243, 236, 115, 116, 293, 
-       293, 293, 293, 293, 293, 293, 293, 117, 
-       117, 293, 293, 293, 115, 293, 121, 294, 
-       123, 124, 6, 125, 126, 127, 120, 120, 
-       37, 128, 120, 130, 116, 120, 120, 19, 
-       131, 120, 125, 126, 120, 117, 117, 120, 
-       132, 120, 130, 120, 0
+       114, 114, 114, 114, 114, 114, 114, 115, 
+       114, 117, 114, 118, 118, 119, 114, 120, 
+       120, 119, 114, 119, 114, 121, 121, 122, 
+       114, 123, 123, 122, 114, 122, 114, 124, 
+       124, 125, 114, 126, 126, 125, 114, 125, 
+       114, 127, 127, 128, 114, 129, 129, 128, 
+       114, 128, 114, 130, 114, 131, 114, 132, 
+       114, 133, 127, 127, 128, 114, 134, 114, 
+       135, 114, 136, 124, 124, 125, 114, 137, 
+       114, 138, 114, 139, 121, 121, 122, 114, 
+       140, 114, 141, 114, 142, 118, 118, 119, 
+       114, 114, 114, 114, 114, 114, 142, 114, 
+       142, 118, 118, 119, 114, 114, 114, 114, 
+       114, 143, 142, 114, 144, 118, 118, 119, 
+       114, 114, 114, 114, 114, 114, 144, 114, 
+       144, 118, 118, 119, 114, 114, 114, 114, 
+       114, 145, 144, 114, 146, 118, 118, 119, 
+       114, 114, 114, 114, 114, 114, 146, 114, 
+       146, 118, 118, 119, 114, 114, 114, 114, 
+       114, 147, 146, 114, 148, 118, 118, 119, 
+       114, 114, 114, 114, 114, 114, 148, 114, 
+       148, 118, 118, 119, 114, 114, 114, 114, 
+       114, 149, 148, 114, 150, 118, 118, 119, 
+       114, 114, 114, 114, 114, 114, 150, 114, 
+       150, 118, 118, 119, 114, 114, 114, 114, 
+       114, 151, 150, 114, 113, 80, 80, 81, 
+       76, 76, 76, 76, 76, 152, 113, 76, 
+       111, 80, 80, 81, 0, 0, 0, 0, 
+       0, 153, 111, 0, 154, 154, 155, 0, 
+       6, 6, 155, 0, 156, 156, 157, 0, 
+       158, 158, 157, 0, 157, 0, 159, 159, 
+       160, 0, 161, 161, 160, 0, 160, 0, 
+       162, 162, 163, 0, 164, 164, 163, 0, 
+       163, 0, 165, 166, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 165, 0, 167, 0, 168, 0, 169, 
+       0, 170, 0, 171, 162, 162, 163, 0, 
+       172, 0, 173, 0, 174, 159, 159, 160, 
+       0, 175, 0, 176, 0, 177, 156, 156, 
+       157, 0, 178, 0, 179, 0, 181, 182, 
+       183, 184, 185, 186, 81, 187, 188, 180, 
+       189, 189, 152, 190, 191, 192, 180, 194, 
+       195, 196, 197, 5, 198, 199, 200, 193, 
+       193, 37, 201, 193, 193, 181, 193, 202, 
+       195, 203, 203, 5, 198, 199, 200, 193, 
+       193, 193, 201, 193, 195, 203, 203, 5, 
+       198, 199, 200, 193, 193, 193, 201, 193, 
+       204, 193, 193, 193, 18, 205, 193, 198, 
+       199, 193, 193, 193, 193, 206, 193, 204, 
+       193, 207, 208, 209, 210, 5, 198, 199, 
+       200, 193, 193, 35, 211, 193, 193, 204, 
+       193, 212, 208, 213, 213, 5, 198, 199, 
+       200, 193, 193, 193, 211, 193, 208, 213, 
+       213, 5, 198, 199, 200, 193, 193, 193, 
+       211, 193, 214, 193, 193, 193, 18, 215, 
+       193, 198, 199, 193, 193, 193, 193, 206, 
+       193, 214, 193, 216, 217, 218, 219, 5, 
+       198, 199, 200, 193, 193, 33, 220, 193, 
+       193, 214, 193, 221, 217, 222, 222, 5, 
+       198, 199, 200, 193, 193, 193, 220, 193, 
+       217, 222, 222, 5, 198, 199, 200, 193, 
+       193, 193, 220, 193, 223, 193, 193, 193, 
+       18, 224, 193, 198, 199, 193, 193, 193, 
+       193, 206, 193, 223, 193, 225, 226, 227, 
+       228, 5, 198, 199, 200, 193, 193, 31, 
+       229, 193, 193, 223, 193, 230, 226, 231, 
+       231, 5, 198, 199, 200, 193, 193, 193, 
+       229, 193, 226, 231, 231, 5, 198, 199, 
+       200, 193, 193, 193, 229, 193, 232, 193, 
+       193, 193, 18, 233, 193, 198, 199, 193, 
+       193, 193, 193, 206, 193, 232, 193, 234, 
+       235, 236, 237, 5, 198, 199, 200, 193, 
+       193, 29, 238, 193, 193, 232, 193, 239, 
+       235, 240, 240, 5, 198, 199, 200, 193, 
+       193, 193, 238, 193, 235, 240, 240, 5, 
+       198, 199, 200, 193, 193, 193, 238, 193, 
+       18, 241, 193, 198, 199, 193, 193, 193, 
+       193, 206, 193, 198, 199, 193, 193, 193, 
+       193, 206, 193, 242, 193, 193, 193, 199, 
+       193, 199, 193, 243, 193, 244, 193, 245, 
+       246, 193, 198, 199, 193, 193, 193, 3, 
+       193, 193, 193, 1, 193, 2, 193, 193, 
+       193, 193, 198, 199, 193, 198, 199, 193, 
+       244, 193, 193, 193, 193, 198, 199, 193, 
+       244, 193, 245, 193, 193, 198, 199, 193, 
+       193, 193, 3, 193, 18, 193, 247, 247, 
+       5, 198, 199, 193, 193, 193, 193, 206, 
+       193, 248, 27, 249, 250, 8, 198, 199, 
+       193, 193, 193, 193, 206, 193, 27, 249, 
+       250, 8, 198, 199, 193, 193, 193, 193, 
+       206, 193, 249, 249, 8, 198, 199, 193, 
+       193, 193, 193, 206, 193, 251, 24, 252, 
+       253, 11, 198, 199, 193, 193, 193, 193, 
+       206, 193, 24, 252, 253, 11, 198, 199, 
+       193, 193, 193, 193, 206, 193, 252, 252, 
+       11, 198, 199, 193, 193, 193, 193, 206, 
+       193, 254, 21, 255, 256, 14, 198, 199, 
+       193, 193, 193, 193, 206, 193, 21, 255, 
+       256, 14, 198, 199, 193, 193, 193, 193, 
+       206, 193, 255, 255, 14, 198, 199, 193, 
+       193, 193, 193, 206, 193, 257, 18, 193, 
+       258, 193, 198, 199, 193, 193, 193, 193, 
+       206, 193, 18, 193, 258, 193, 198, 199, 
+       193, 193, 193, 193, 206, 193, 259, 193, 
+       198, 199, 193, 193, 193, 193, 206, 193, 
+       18, 193, 193, 193, 193, 198, 199, 193, 
+       193, 193, 193, 206, 193, 235, 240, 240, 
+       5, 198, 199, 193, 193, 193, 193, 238, 
+       193, 1, 2, 193, 193, 18, 241, 193, 
+       198, 199, 193, 193, 193, 193, 206, 193, 
+       1, 193, 234, 235, 240, 240, 5, 198, 
+       199, 200, 193, 193, 193, 238, 193, 234, 
+       235, 236, 240, 5, 198, 199, 200, 193, 
+       193, 29, 238, 193, 232, 193, 260, 193, 
+       247, 247, 5, 198, 199, 193, 193, 193, 
+       193, 206, 193, 232, 193, 232, 193, 193, 
+       193, 193, 193, 193, 198, 199, 193, 193, 
+       193, 193, 206, 193, 232, 193, 232, 193, 
+       193, 193, 193, 261, 193, 198, 199, 193, 
+       193, 193, 193, 206, 193, 232, 193, 232, 
+       193, 260, 193, 193, 193, 193, 198, 199, 
+       193, 193, 193, 193, 206, 193, 232, 193, 
+       232, 2, 193, 193, 18, 233, 193, 198, 
+       199, 193, 193, 193, 193, 206, 193, 232, 
+       193, 225, 226, 231, 231, 5, 198, 199, 
+       200, 193, 193, 193, 229, 193, 225, 226, 
+       227, 231, 5, 198, 199, 200, 193, 193, 
+       31, 229, 193, 223, 193, 262, 193, 247, 
+       247, 5, 198, 199, 193, 193, 193, 193, 
+       206, 193, 223, 193, 223, 193, 193, 193, 
+       193, 193, 193, 198, 199, 193, 193, 193, 
+       193, 206, 193, 223, 193, 223, 193, 193, 
+       193, 193, 263, 193, 198, 199, 193, 193, 
+       193, 193, 206, 193, 223, 193, 223, 193, 
+       262, 193, 193, 193, 193, 198, 199, 193, 
+       193, 193, 193, 206, 193, 223, 193, 223, 
+       2, 193, 193, 18, 224, 193, 198, 199, 
+       193, 193, 193, 193, 206, 193, 223, 193, 
+       216, 217, 222, 222, 5, 198, 199, 200, 
+       193, 193, 193, 220, 193, 216, 217, 218, 
+       222, 5, 198, 199, 200, 193, 193, 33, 
+       220, 193, 214, 193, 264, 193, 247, 247, 
+       5, 198, 199, 193, 193, 193, 193, 206, 
+       193, 214, 193, 214, 193, 193, 193, 193, 
+       193, 193, 198, 199, 193, 193, 193, 193, 
+       206, 193, 214, 193, 214, 193, 193, 193, 
+       193, 265, 193, 198, 199, 193, 193, 193, 
+       193, 206, 193, 214, 193, 214, 193, 264, 
+       193, 193, 193, 193, 198, 199, 193, 193, 
+       193, 193, 206, 193, 214, 193, 214, 2, 
+       193, 193, 18, 215, 193, 198, 199, 193, 
+       193, 193, 193, 206, 193, 214, 193, 207, 
+       208, 213, 213, 5, 198, 199, 200, 193, 
+       193, 193, 211, 193, 207, 208, 209, 213, 
+       5, 198, 199, 200, 193, 193, 35, 211, 
+       193, 204, 193, 266, 193, 247, 247, 5, 
+       198, 199, 193, 193, 193, 193, 206, 193, 
+       204, 193, 204, 193, 193, 193, 193, 193, 
+       193, 198, 199, 193, 193, 193, 193, 206, 
+       193, 204, 193, 204, 193, 193, 193, 193, 
+       267, 193, 198, 199, 193, 193, 193, 193, 
+       206, 193, 204, 193, 204, 193, 266, 193, 
+       193, 193, 193, 198, 199, 193, 193, 193, 
+       193, 206, 193, 204, 193, 204, 2, 193, 
+       193, 18, 205, 193, 198, 199, 193, 193, 
+       193, 193, 206, 193, 204, 193, 194, 195, 
+       203, 203, 5, 198, 199, 200, 193, 193, 
+       193, 201, 193, 194, 195, 196, 203, 5, 
+       198, 199, 200, 193, 193, 37, 201, 193, 
+       269, 270, 271, 272, 43, 273, 274, 268, 
+       268, 268, 75, 275, 268, 276, 270, 277, 
+       272, 43, 273, 274, 268, 268, 268, 268, 
+       275, 268, 270, 277, 272, 43, 273, 274, 
+       268, 268, 268, 268, 275, 268, 278, 268, 
+       268, 268, 56, 279, 268, 273, 274, 268, 
+       268, 268, 268, 280, 268, 278, 268, 281, 
+       282, 283, 284, 43, 273, 274, 268, 268, 
+       268, 73, 285, 268, 268, 278, 268, 286, 
+       282, 287, 287, 43, 273, 274, 268, 268, 
+       268, 268, 285, 268, 282, 287, 287, 43, 
+       273, 274, 268, 268, 268, 268, 285, 268, 
+       288, 268, 268, 268, 56, 289, 268, 273, 
+       274, 268, 268, 268, 268, 280, 268, 288, 
+       268, 290, 291, 292, 293, 43, 273, 274, 
+       268, 268, 268, 71, 294, 268, 268, 288, 
+       268, 295, 291, 296, 296, 43, 273, 274, 
+       268, 268, 268, 268, 294, 268, 291, 296, 
+       296, 43, 273, 274, 268, 268, 268, 268, 
+       294, 268, 297, 268, 268, 268, 56, 298, 
+       268, 273, 274, 268, 268, 268, 268, 280, 
+       268, 297, 268, 299, 300, 301, 302, 43, 
+       273, 274, 268, 268, 268, 69, 303, 268, 
+       268, 297, 268, 304, 300, 305, 305, 43, 
+       273, 274, 268, 268, 268, 268, 303, 268, 
+       300, 305, 305, 43, 273, 274, 268, 268, 
+       268, 268, 303, 268, 306, 268, 268, 268, 
+       56, 307, 268, 273, 274, 268, 268, 268, 
+       268, 280, 268, 306, 268, 308, 309, 310, 
+       311, 43, 273, 274, 268, 268, 268, 67, 
+       312, 268, 268, 306, 268, 313, 309, 314, 
+       314, 43, 273, 274, 268, 268, 268, 268, 
+       312, 268, 309, 314, 314, 43, 273, 274, 
+       268, 268, 268, 268, 312, 268, 56, 315, 
+       268, 273, 274, 268, 268, 268, 268, 280, 
+       268, 273, 274, 268, 268, 268, 268, 280, 
+       268, 316, 268, 268, 268, 274, 268, 274, 
+       268, 317, 268, 318, 268, 319, 320, 268, 
+       273, 274, 268, 268, 268, 41, 268, 268, 
+       268, 39, 268, 40, 268, 268, 268, 268, 
+       273, 274, 268, 273, 274, 268, 318, 268, 
+       268, 268, 268, 273, 274, 268, 318, 268, 
+       319, 268, 268, 273, 274, 268, 268, 268, 
+       41, 268, 56, 268, 321, 321, 43, 273, 
+       274, 268, 268, 268, 268, 280, 268, 322, 
+       65, 323, 324, 46, 273, 274, 268, 268, 
+       268, 268, 280, 268, 65, 323, 324, 46, 
+       273, 274, 268, 268, 268, 268, 280, 268, 
+       323, 323, 46, 273, 274, 268, 268, 268, 
+       268, 280, 268, 325, 62, 326, 327, 49, 
+       273, 274, 268, 268, 268, 268, 280, 268, 
+       62, 326, 327, 49, 273, 274, 268, 268, 
+       268, 268, 280, 268, 326, 326, 49, 273, 
+       274, 268, 268, 268, 268, 280, 268, 328, 
+       59, 329, 330, 52, 273, 274, 268, 268, 
+       268, 268, 280, 268, 59, 329, 330, 52, 
+       273, 274, 268, 268, 268, 268, 280, 268, 
+       329, 329, 52, 273, 274, 268, 268, 268, 
+       268, 280, 268, 331, 56, 268, 332, 268, 
+       273, 274, 268, 268, 268, 268, 280, 268, 
+       56, 268, 332, 268, 273, 274, 268, 268, 
+       268, 268, 280, 268, 333, 268, 273, 274, 
+       268, 268, 268, 268, 280, 268, 56, 268, 
+       268, 268, 268, 273, 274, 268, 268, 268, 
+       268, 280, 268, 39, 40, 268, 268, 56, 
+       315, 268, 273, 274, 268, 268, 268, 268, 
+       280, 268, 39, 268, 308, 309, 314, 314, 
+       43, 273, 274, 268, 268, 268, 268, 312, 
+       268, 308, 309, 310, 314, 43, 273, 274, 
+       268, 268, 268, 67, 312, 268, 306, 268, 
+       334, 268, 321, 321, 43, 273, 274, 268, 
+       268, 268, 268, 280, 268, 306, 268, 306, 
+       268, 268, 268, 268, 268, 268, 273, 274, 
+       268, 268, 268, 268, 280, 268, 306, 268, 
+       306, 268, 268, 268, 268, 335, 268, 273, 
+       274, 268, 268, 268, 268, 280, 268, 306, 
+       268, 306, 268, 334, 268, 268, 268, 268, 
+       273, 274, 268, 268, 268, 268, 280, 268, 
+       306, 268, 306, 40, 268, 268, 56, 307, 
+       268, 273, 274, 268, 268, 268, 268, 280, 
+       268, 306, 268, 299, 300, 305, 305, 43, 
+       273, 274, 268, 268, 268, 268, 303, 268, 
+       299, 300, 301, 305, 43, 273, 274, 268, 
+       268, 268, 69, 303, 268, 297, 268, 336, 
+       268, 321, 321, 43, 273, 274, 268, 268, 
+       268, 268, 280, 268, 297, 268, 297, 268, 
+       268, 268, 268, 268, 268, 273, 274, 268, 
+       268, 268, 268, 280, 268, 297, 268, 297, 
+       268, 268, 268, 268, 337, 268, 273, 274, 
+       268, 268, 268, 268, 280, 268, 297, 268, 
+       297, 268, 336, 268, 268, 268, 268, 273, 
+       274, 268, 268, 268, 268, 280, 268, 297, 
+       268, 297, 40, 268, 268, 56, 298, 268, 
+       273, 274, 268, 268, 268, 268, 280, 268, 
+       297, 268, 290, 291, 296, 296, 43, 273, 
+       274, 268, 268, 268, 268, 294, 268, 290, 
+       291, 292, 296, 43, 273, 274, 268, 268, 
+       268, 71, 294, 268, 288, 268, 338, 268, 
+       321, 321, 43, 273, 274, 268, 268, 268, 
+       268, 280, 268, 288, 268, 288, 268, 268, 
+       268, 268, 268, 268, 273, 274, 268, 268, 
+       268, 268, 280, 268, 288, 268, 288, 268, 
+       268, 268, 268, 339, 268, 273, 274, 268, 
+       268, 268, 268, 280, 268, 288, 268, 288, 
+       268, 338, 268, 268, 268, 268, 273, 274, 
+       268, 268, 268, 268, 280, 268, 288, 268, 
+       288, 40, 268, 268, 56, 289, 268, 273, 
+       274, 268, 268, 268, 268, 280, 268, 288, 
+       268, 281, 282, 287, 287, 43, 273, 274, 
+       268, 268, 268, 268, 285, 268, 281, 282, 
+       283, 287, 43, 273, 274, 268, 268, 268, 
+       73, 285, 268, 278, 268, 340, 268, 321, 
+       321, 43, 273, 274, 268, 268, 268, 268, 
+       280, 268, 278, 268, 278, 268, 268, 268, 
+       268, 268, 268, 273, 274, 268, 268, 268, 
+       268, 280, 268, 278, 268, 278, 268, 268, 
+       268, 268, 341, 268, 273, 274, 268, 268, 
+       268, 268, 280, 268, 278, 268, 278, 268, 
+       340, 268, 268, 268, 268, 273, 274, 268, 
+       268, 268, 268, 280, 268, 278, 268, 74, 
+       42, 42, 43, 268, 268, 268, 268, 268, 
+       268, 74, 268, 278, 40, 268, 268, 56, 
+       279, 268, 273, 274, 268, 268, 268, 268, 
+       280, 268, 278, 268, 269, 270, 277, 272, 
+       43, 273, 274, 268, 268, 268, 268, 275, 
+       268, 343, 184, 344, 344, 81, 187, 188, 
+       342, 342, 342, 342, 190, 342, 184, 344, 
+       344, 81, 187, 188, 342, 342, 342, 342, 
+       190, 342, 345, 342, 342, 342, 95, 346, 
+       342, 187, 188, 342, 342, 342, 342, 347, 
+       342, 345, 342, 348, 349, 350, 351, 81, 
+       187, 188, 342, 342, 342, 112, 352, 342, 
+       342, 345, 342, 353, 349, 354, 354, 81, 
+       187, 188, 342, 342, 342, 342, 352, 342, 
+       349, 354, 354, 81, 187, 188, 342, 342, 
+       342, 342, 352, 342, 355, 342, 342, 342, 
+       95, 356, 342, 187, 188, 342, 342, 342, 
+       342, 347, 342, 355, 342, 357, 358, 359, 
+       360, 81, 187, 188, 342, 342, 342, 110, 
+       361, 342, 342, 355, 342, 362, 358, 363, 
+       363, 81, 187, 188, 342, 342, 342, 342, 
+       361, 342, 358, 363, 363, 81, 187, 188, 
+       342, 342, 342, 342, 361, 342, 364, 342, 
+       342, 342, 95, 365, 342, 187, 188, 342, 
+       342, 342, 342, 347, 342, 364, 342, 366, 
+       367, 368, 369, 81, 187, 188, 342, 342, 
+       342, 108, 370, 342, 342, 364, 342, 371, 
+       367, 372, 372, 81, 187, 188, 342, 342, 
+       342, 342, 370, 342, 367, 372, 372, 81, 
+       187, 188, 342, 342, 342, 342, 370, 342, 
+       373, 342, 342, 342, 95, 374, 342, 187, 
+       188, 342, 342, 342, 342, 347, 342, 373, 
+       342, 375, 376, 377, 378, 81, 187, 188, 
+       342, 342, 342, 106, 379, 342, 342, 373, 
+       342, 380, 376, 381, 381, 81, 187, 188, 
+       342, 342, 342, 342, 379, 342, 376, 381, 
+       381, 81, 187, 188, 342, 342, 342, 342, 
+       379, 342, 95, 382, 342, 187, 188, 342, 
+       342, 342, 342, 347, 342, 187, 188, 342, 
+       342, 342, 342, 347, 342, 383, 342, 342, 
+       342, 188, 342, 188, 342, 384, 342, 385, 
+       342, 386, 387, 342, 187, 188, 342, 342, 
+       342, 79, 342, 342, 342, 77, 342, 78, 
+       342, 342, 342, 342, 187, 188, 342, 187, 
+       188, 342, 385, 342, 342, 342, 342, 187, 
+       188, 342, 385, 342, 386, 342, 342, 187, 
+       188, 342, 342, 342, 79, 342, 95, 342, 
+       388, 388, 81, 187, 188, 342, 342, 342, 
+       342, 347, 342, 389, 104, 390, 391, 85, 
+       187, 188, 342, 342, 342, 342, 347, 342, 
+       104, 390, 391, 85, 187, 188, 342, 342, 
+       342, 342, 347, 342, 390, 390, 85, 187, 
+       188, 342, 342, 342, 342, 347, 342, 392, 
+       101, 393, 394, 88, 187, 188, 342, 342, 
+       342, 342, 347, 342, 101, 393, 394, 88, 
+       187, 188, 342, 342, 342, 342, 347, 342, 
+       393, 393, 88, 187, 188, 342, 342, 342, 
+       342, 347, 342, 395, 98, 396, 397, 91, 
+       187, 188, 342, 342, 342, 342, 347, 342, 
+       98, 396, 397, 91, 187, 188, 342, 342, 
+       342, 342, 347, 342, 396, 396, 91, 187, 
+       188, 342, 342, 342, 342, 347, 342, 398, 
+       95, 342, 399, 342, 187, 188, 342, 342, 
+       342, 342, 347, 342, 95, 342, 399, 342, 
+       187, 188, 342, 342, 342, 342, 347, 342, 
+       400, 342, 187, 188, 342, 342, 342, 342, 
+       347, 342, 95, 342, 342, 342, 342, 187, 
+       188, 342, 342, 342, 342, 347, 342, 77, 
+       78, 342, 342, 95, 382, 342, 187, 188, 
+       342, 342, 342, 342, 347, 342, 77, 342, 
+       375, 376, 381, 381, 81, 187, 188, 342, 
+       342, 342, 342, 379, 342, 375, 376, 377, 
+       381, 81, 187, 188, 342, 342, 342, 106, 
+       379, 342, 373, 342, 401, 342, 388, 388, 
+       81, 187, 188, 342, 342, 342, 342, 347, 
+       342, 373, 342, 373, 342, 342, 342, 342, 
+       342, 342, 187, 188, 342, 342, 342, 342, 
+       347, 342, 373, 342, 373, 342, 342, 342, 
+       342, 402, 342, 187, 188, 342, 342, 342, 
+       342, 347, 342, 373, 342, 373, 342, 401, 
+       342, 342, 342, 342, 187, 188, 342, 342, 
+       342, 342, 347, 342, 373, 342, 373, 78, 
+       342, 342, 95, 374, 342, 187, 188, 342, 
+       342, 342, 342, 347, 342, 373, 342, 366, 
+       367, 372, 372, 81, 187, 188, 342, 342, 
+       342, 342, 370, 342, 366, 367, 368, 372, 
+       81, 187, 188, 342, 342, 342, 108, 370, 
+       342, 364, 342, 403, 342, 388, 388, 81, 
+       187, 188, 342, 342, 342, 342, 347, 342, 
+       364, 342, 364, 342, 342, 342, 342, 342, 
+       342, 187, 188, 342, 342, 342, 342, 347, 
+       342, 364, 342, 364, 342, 342, 342, 342, 
+       404, 342, 187, 188, 342, 342, 342, 342, 
+       347, 342, 364, 342, 364, 342, 403, 342, 
+       342, 342, 342, 187, 188, 342, 342, 342, 
+       342, 347, 342, 364, 342, 364, 78, 342, 
+       342, 95, 365, 342, 187, 188, 342, 342, 
+       342, 342, 347, 342, 364, 342, 357, 358, 
+       363, 363, 81, 187, 188, 342, 342, 342, 
+       342, 361, 342, 357, 358, 359, 363, 81, 
+       187, 188, 342, 342, 342, 110, 361, 342, 
+       355, 342, 405, 342, 388, 388, 81, 187, 
+       188, 342, 342, 342, 342, 347, 342, 355, 
+       342, 355, 342, 342, 342, 342, 342, 342, 
+       187, 188, 342, 342, 342, 342, 347, 342, 
+       355, 342, 355, 342, 342, 342, 342, 406, 
+       342, 187, 188, 342, 342, 342, 342, 347, 
+       342, 355, 342, 355, 342, 405, 342, 342, 
+       342, 342, 187, 188, 342, 342, 342, 342, 
+       347, 342, 355, 342, 355, 78, 342, 342, 
+       95, 356, 342, 187, 188, 342, 342, 342, 
+       342, 347, 342, 355, 342, 348, 349, 354, 
+       354, 81, 187, 188, 342, 342, 342, 342, 
+       352, 342, 348, 349, 350, 354, 81, 187, 
+       188, 342, 342, 342, 112, 352, 342, 345, 
+       342, 407, 342, 388, 388, 81, 187, 188, 
+       342, 342, 342, 342, 347, 342, 345, 342, 
+       345, 342, 342, 342, 342, 342, 342, 187, 
+       188, 342, 342, 342, 342, 347, 342, 345, 
+       342, 345, 342, 342, 342, 342, 408, 342, 
+       187, 188, 342, 342, 342, 342, 347, 342, 
+       345, 342, 345, 342, 407, 342, 342, 342, 
+       342, 187, 188, 342, 342, 342, 342, 347, 
+       342, 345, 342, 345, 78, 342, 342, 95, 
+       346, 342, 187, 188, 342, 342, 342, 342, 
+       347, 342, 345, 342, 113, 80, 80, 81, 
+       409, 409, 409, 409, 409, 152, 113, 409, 
+       183, 184, 344, 344, 81, 187, 188, 342, 
+       342, 342, 342, 190, 342, 113, 80, 80, 
+       81, 409, 409, 409, 409, 409, 409, 113, 
+       409, 411, 412, 413, 414, 119, 415, 416, 
+       410, 410, 410, 151, 417, 410, 418, 412, 
+       414, 414, 119, 415, 416, 410, 410, 410, 
+       410, 417, 410, 412, 414, 414, 119, 415, 
+       416, 410, 410, 410, 410, 417, 410, 419, 
+       410, 410, 410, 132, 420, 410, 415, 416, 
+       410, 410, 410, 410, 421, 410, 419, 410, 
+       422, 423, 424, 425, 119, 415, 416, 410, 
+       410, 410, 149, 426, 410, 410, 419, 410, 
+       427, 423, 428, 428, 119, 415, 416, 410, 
+       410, 410, 410, 426, 410, 423, 428, 428, 
+       119, 415, 416, 410, 410, 410, 410, 426, 
+       410, 429, 410, 410, 410, 132, 430, 410, 
+       415, 416, 410, 410, 410, 410, 421, 410, 
+       429, 410, 431, 432, 433, 434, 119, 415, 
+       416, 410, 410, 410, 147, 435, 410, 410, 
+       429, 410, 436, 432, 437, 437, 119, 415, 
+       416, 410, 410, 410, 410, 435, 410, 432, 
+       437, 437, 119, 415, 416, 410, 410, 410, 
+       410, 435, 410, 438, 410, 410, 410, 132, 
+       439, 410, 415, 416, 410, 410, 410, 410, 
+       421, 410, 438, 410, 440, 441, 442, 443, 
+       119, 415, 416, 410, 410, 410, 145, 444, 
+       410, 410, 438, 410, 445, 441, 446, 446, 
+       119, 415, 416, 410, 410, 410, 410, 444, 
+       410, 441, 446, 446, 119, 415, 416, 410, 
+       410, 410, 410, 444, 410, 447, 410, 410, 
+       410, 132, 448, 410, 415, 416, 410, 410, 
+       410, 410, 421, 410, 447, 410, 449, 450, 
+       451, 452, 119, 415, 416, 410, 410, 410, 
+       143, 453, 410, 410, 447, 410, 454, 450, 
+       455, 455, 119, 415, 416, 410, 410, 410, 
+       410, 453, 410, 450, 455, 455, 119, 415, 
+       416, 410, 410, 410, 410, 453, 410, 132, 
+       456, 410, 415, 416, 410, 410, 410, 410, 
+       421, 410, 415, 416, 410, 410, 410, 410, 
+       421, 410, 457, 410, 410, 410, 416, 410, 
+       416, 410, 458, 410, 459, 410, 460, 461, 
+       410, 415, 416, 410, 410, 410, 117, 410, 
+       410, 410, 115, 410, 116, 410, 410, 410, 
+       410, 415, 416, 410, 415, 416, 410, 459, 
+       410, 410, 410, 410, 415, 416, 410, 459, 
+       410, 460, 410, 410, 415, 416, 410, 410, 
+       410, 117, 410, 132, 410, 462, 462, 119, 
+       415, 416, 410, 410, 410, 410, 421, 410, 
+       463, 141, 464, 465, 122, 415, 416, 410, 
+       410, 410, 410, 421, 410, 141, 464, 465, 
+       122, 415, 416, 410, 410, 410, 410, 421, 
+       410, 464, 464, 122, 415, 416, 410, 410, 
+       410, 410, 421, 410, 466, 138, 467, 468, 
+       125, 415, 416, 410, 410, 410, 410, 421, 
+       410, 138, 467, 468, 125, 415, 416, 410, 
+       410, 410, 410, 421, 410, 467, 467, 125, 
+       415, 416, 410, 410, 410, 410, 421, 410, 
+       469, 135, 470, 471, 128, 415, 416, 410, 
+       410, 410, 410, 421, 410, 135, 470, 471, 
+       128, 415, 416, 410, 410, 410, 410, 421, 
+       410, 470, 470, 128, 415, 416, 410, 410, 
+       410, 410, 421, 410, 472, 132, 410, 473, 
+       410, 415, 416, 410, 410, 410, 410, 421, 
+       410, 132, 410, 473, 410, 415, 416, 410, 
+       410, 410, 410, 421, 410, 474, 410, 415, 
+       416, 410, 410, 410, 410, 421, 410, 132, 
+       410, 410, 410, 410, 415, 416, 410, 410, 
+       410, 410, 421, 410, 115, 116, 410, 410, 
+       132, 456, 410, 415, 416, 410, 410, 410, 
+       410, 421, 410, 115, 410, 449, 450, 455, 
+       455, 119, 415, 416, 410, 410, 410, 410, 
+       453, 410, 449, 450, 451, 455, 119, 415, 
+       416, 410, 410, 410, 143, 453, 410, 447, 
+       410, 475, 410, 462, 462, 119, 415, 416, 
+       410, 410, 410, 410, 421, 410, 447, 410, 
+       447, 410, 410, 410, 410, 410, 410, 415, 
+       416, 410, 410, 410, 410, 421, 410, 447, 
+       410, 447, 410, 410, 410, 410, 476, 410, 
+       415, 416, 410, 410, 410, 410, 421, 410, 
+       447, 410, 447, 410, 475, 410, 410, 410, 
+       410, 415, 416, 410, 410, 410, 410, 421, 
+       410, 447, 410, 447, 116, 410, 410, 132, 
+       448, 410, 415, 416, 410, 410, 410, 410, 
+       421, 410, 447, 410, 440, 441, 446, 446, 
+       119, 415, 416, 410, 410, 410, 410, 444, 
+       410, 440, 441, 442, 446, 119, 415, 416, 
+       410, 410, 410, 145, 444, 410, 438, 410, 
+       477, 410, 462, 462, 119, 415, 416, 410, 
+       410, 410, 410, 421, 410, 438, 410, 438, 
+       410, 410, 410, 410, 410, 410, 415, 416, 
+       410, 410, 410, 410, 421, 410, 438, 410, 
+       438, 410, 410, 410, 410, 478, 410, 415, 
+       416, 410, 410, 410, 410, 421, 410, 438, 
+       410, 438, 410, 477, 410, 410, 410, 410, 
+       415, 416, 410, 410, 410, 410, 421, 410, 
+       438, 410, 438, 116, 410, 410, 132, 439, 
+       410, 415, 416, 410, 410, 410, 410, 421, 
+       410, 438, 410, 431, 432, 437, 437, 119, 
+       415, 416, 410, 410, 410, 410, 435, 410, 
+       431, 432, 433, 437, 119, 415, 416, 410, 
+       410, 410, 147, 435, 410, 429, 410, 479, 
+       410, 462, 462, 119, 415, 416, 410, 410, 
+       410, 410, 421, 410, 429, 410, 429, 410, 
+       410, 410, 410, 410, 410, 415, 416, 410, 
+       410, 410, 410, 421, 410, 429, 410, 429, 
+       410, 410, 410, 410, 480, 410, 415, 416, 
+       410, 410, 410, 410, 421, 410, 429, 410, 
+       429, 410, 479, 410, 410, 410, 410, 415, 
+       416, 410, 410, 410, 410, 421, 410, 429, 
+       410, 429, 116, 410, 410, 132, 430, 410, 
+       415, 416, 410, 410, 410, 410, 421, 410, 
+       429, 410, 422, 423, 428, 428, 119, 415, 
+       416, 410, 410, 410, 410, 426, 410, 422, 
+       423, 424, 428, 119, 415, 416, 410, 410, 
+       410, 149, 426, 410, 419, 410, 481, 410, 
+       462, 462, 119, 415, 416, 410, 410, 410, 
+       410, 421, 410, 419, 410, 419, 410, 410, 
+       410, 410, 410, 410, 415, 416, 410, 410, 
+       410, 410, 421, 410, 419, 410, 419, 410, 
+       410, 410, 410, 482, 410, 415, 416, 410, 
+       410, 410, 410, 421, 410, 419, 410, 419, 
+       410, 481, 410, 410, 410, 410, 415, 416, 
+       410, 410, 410, 410, 421, 410, 419, 410, 
+       419, 116, 410, 410, 132, 420, 410, 415, 
+       416, 410, 410, 410, 410, 421, 410, 419, 
+       410, 411, 412, 414, 414, 119, 415, 416, 
+       410, 410, 410, 410, 417, 410, 181, 182, 
+       183, 184, 483, 344, 81, 187, 188, 342, 
+       189, 189, 152, 190, 342, 181, 342, 194, 
+       484, 196, 197, 5, 198, 199, 200, 193, 
+       193, 37, 201, 193, 193, 181, 193, 204, 
+       182, 183, 184, 485, 486, 81, 487, 488, 
+       193, 189, 189, 152, 489, 193, 204, 193, 
+       113, 80, 80, 81, 198, 199, 193, 193, 
+       193, 152, 490, 193, 491, 2, 342, 342, 
+       342, 408, 342, 187, 188, 342, 342, 342, 
+       342, 347, 342, 491, 342, 492, 349, 493, 
+       494, 81, 487, 488, 193, 193, 193, 153, 
+       352, 193, 193, 491, 193, 495, 349, 354, 
+       354, 81, 487, 488, 193, 193, 193, 193, 
+       352, 193, 349, 354, 354, 81, 487, 488, 
+       193, 193, 193, 193, 352, 193, 496, 193, 
+       193, 193, 488, 193, 488, 193, 243, 193, 
+       492, 349, 354, 354, 81, 487, 488, 193, 
+       193, 193, 193, 352, 193, 492, 349, 493, 
+       354, 81, 487, 488, 193, 193, 193, 153, 
+       352, 193, 204, 193, 266, 113, 497, 497, 
+       155, 198, 199, 193, 193, 193, 193, 490, 
+       193, 204, 193, 498, 179, 499, 500, 157, 
+       487, 488, 193, 193, 193, 193, 501, 193, 
+       179, 499, 500, 157, 487, 488, 193, 193, 
+       193, 193, 501, 193, 499, 499, 157, 487, 
+       488, 193, 193, 193, 193, 501, 193, 502, 
+       176, 503, 504, 160, 487, 488, 193, 193, 
+       193, 193, 501, 193, 176, 503, 504, 160, 
+       487, 488, 193, 193, 193, 193, 501, 193, 
+       503, 503, 160, 487, 488, 193, 193, 193, 
+       193, 501, 193, 505, 173, 506, 507, 163, 
+       487, 488, 193, 193, 193, 193, 501, 193, 
+       173, 506, 507, 163, 487, 488, 193, 193, 
+       193, 193, 501, 193, 506, 506, 163, 487, 
+       488, 193, 193, 193, 193, 501, 193, 508, 
+       170, 193, 509, 193, 487, 488, 193, 193, 
+       193, 193, 501, 193, 170, 193, 509, 193, 
+       487, 488, 193, 193, 193, 193, 501, 193, 
+       487, 488, 193, 193, 193, 193, 501, 193, 
+       510, 193, 511, 512, 193, 487, 488, 193, 
+       193, 193, 167, 193, 193, 193, 165, 193, 
+       166, 193, 193, 193, 193, 487, 488, 193, 
+       487, 488, 193, 510, 193, 193, 193, 193, 
+       487, 488, 193, 510, 193, 511, 193, 193, 
+       487, 488, 193, 193, 193, 167, 193, 491, 
+       166, 342, 342, 95, 346, 342, 187, 188, 
+       342, 342, 342, 342, 347, 342, 491, 342, 
+       0
 };
 
 static const short _indic_syllable_machine_trans_targs[] = {
-       105, 130, 132, 133, 134, 3, 135, 4, 
-       6, 138, 7, 9, 141, 10, 12, 144, 
-       13, 15, 16, 126, 18, 19, 143, 21, 
-       22, 140, 24, 25, 137, 148, 150, 152, 
-       154, 156, 158, 160, 162, 164, 105, 189, 
-       191, 192, 193, 38, 194, 39, 41, 197, 
-       42, 44, 200, 45, 47, 203, 48, 50, 
-       51, 185, 53, 54, 202, 56, 57, 199, 
-       59, 60, 196, 206, 208, 210, 212, 214, 
-       216, 218, 220, 223, 105, 248, 250, 251, 
-       252, 73, 253, 74, 76, 256, 77, 79, 
-       259, 80, 82, 262, 83, 85, 86, 244, 
-       88, 89, 261, 91, 92, 258, 94, 95, 
-       255, 265, 267, 269, 271, 273, 275, 277, 
-       279, 281, 105, 106, 165, 224, 282, 283, 
-       105, 107, 109, 34, 33, 127, 129, 146, 
-       163, 108, 110, 161, 0, 111, 113, 32, 
-       31, 159, 112, 114, 157, 115, 117, 30, 
-       29, 155, 116, 118, 153, 119, 121, 28, 
-       27, 151, 120, 122, 149, 123, 125, 26, 
-       2, 147, 124, 128, 105, 131, 1, 136, 
-       5, 23, 139, 8, 20, 142, 11, 17, 
-       145, 14, 105, 166, 168, 69, 221, 186, 
-       188, 222, 167, 68, 169, 219, 35, 170, 
-       172, 67, 66, 217, 171, 173, 215, 174, 
-       176, 65, 64, 213, 175, 177, 211, 178, 
-       180, 63, 62, 209, 179, 181, 207, 182, 
-       184, 61, 37, 205, 183, 187, 105, 190, 
-       36, 195, 40, 58, 198, 43, 55, 201, 
-       46, 52, 204, 49, 105, 225, 227, 104, 
-       103, 245, 247, 280, 226, 228, 278, 70, 
-       229, 231, 102, 101, 276, 230, 232, 274, 
-       233, 235, 100, 99, 272, 234, 236, 270, 
-       237, 239, 98, 97, 268, 238, 240, 266, 
-       241, 243, 96, 72, 264, 242, 246, 105, 
-       249, 71, 254, 75, 93, 257, 78, 90, 
-       260, 81, 87, 263, 84, 105, 284
+       170, 195, 197, 198, 3, 201, 4, 6, 
+       204, 7, 9, 207, 10, 12, 210, 13, 
+       15, 16, 191, 18, 19, 209, 21, 22, 
+       206, 24, 25, 203, 212, 216, 220, 223, 
+       227, 230, 234, 237, 241, 244, 170, 270, 
+       272, 273, 39, 276, 40, 42, 279, 43, 
+       45, 282, 46, 48, 285, 49, 51, 52, 
+       266, 54, 55, 284, 57, 58, 281, 60, 
+       61, 278, 287, 290, 294, 297, 301, 304, 
+       308, 311, 315, 319, 170, 343, 345, 346, 
+       75, 349, 170, 76, 78, 352, 79, 81, 
+       355, 82, 84, 358, 85, 87, 88, 339, 
+       90, 91, 357, 93, 94, 354, 96, 97, 
+       351, 360, 363, 367, 370, 374, 377, 381, 
+       384, 388, 170, 418, 420, 421, 110, 424, 
+       111, 113, 427, 114, 116, 430, 117, 119, 
+       433, 120, 122, 123, 414, 125, 126, 432, 
+       128, 129, 429, 131, 132, 426, 435, 438, 
+       442, 445, 449, 452, 456, 459, 463, 466, 
+       392, 478, 146, 481, 148, 484, 149, 151, 
+       487, 152, 154, 490, 155, 493, 495, 496, 
+       159, 160, 492, 162, 163, 489, 165, 166, 
+       486, 168, 169, 483, 170, 171, 246, 320, 
+       322, 391, 393, 340, 342, 394, 390, 467, 
+       468, 170, 172, 174, 35, 245, 192, 194, 
+       214, 243, 173, 34, 175, 239, 0, 176, 
+       178, 33, 238, 236, 177, 32, 179, 232, 
+       180, 182, 31, 231, 229, 181, 30, 183, 
+       225, 184, 186, 29, 224, 222, 185, 28, 
+       187, 218, 188, 190, 27, 217, 215, 189, 
+       26, 200, 193, 170, 196, 1, 199, 2, 
+       202, 5, 23, 205, 8, 20, 208, 11, 
+       17, 211, 14, 213, 219, 221, 226, 228, 
+       233, 235, 240, 242, 170, 247, 249, 71, 
+       317, 267, 269, 318, 248, 70, 250, 313, 
+       36, 251, 253, 69, 312, 310, 252, 68, 
+       254, 306, 255, 257, 67, 305, 303, 256, 
+       66, 258, 299, 259, 261, 65, 298, 296, 
+       260, 64, 262, 292, 263, 265, 63, 291, 
+       289, 264, 62, 275, 268, 170, 271, 37, 
+       274, 38, 277, 41, 59, 280, 44, 56, 
+       283, 47, 53, 286, 50, 288, 293, 295, 
+       300, 302, 307, 309, 314, 316, 170, 321, 
+       106, 323, 386, 72, 324, 326, 105, 385, 
+       383, 325, 104, 327, 379, 328, 330, 103, 
+       378, 376, 329, 102, 331, 372, 332, 334, 
+       101, 371, 369, 333, 100, 335, 365, 336, 
+       338, 99, 364, 362, 337, 98, 348, 341, 
+       170, 344, 73, 347, 74, 350, 77, 95, 
+       353, 80, 92, 356, 83, 89, 359, 86, 
+       361, 366, 368, 373, 375, 380, 382, 387, 
+       389, 170, 170, 395, 397, 142, 141, 415, 
+       417, 465, 396, 398, 461, 107, 399, 401, 
+       140, 460, 458, 400, 139, 402, 454, 403, 
+       405, 138, 453, 451, 404, 137, 406, 447, 
+       407, 409, 136, 446, 444, 408, 135, 410, 
+       440, 411, 413, 134, 439, 437, 412, 133, 
+       423, 416, 170, 419, 108, 422, 109, 425, 
+       112, 130, 428, 115, 127, 431, 118, 124, 
+       434, 121, 436, 441, 443, 448, 450, 455, 
+       457, 462, 464, 143, 469, 470, 480, 475, 
+       477, 498, 471, 472, 473, 144, 479, 474, 
+       476, 145, 482, 147, 167, 156, 485, 150, 
+       164, 488, 153, 161, 491, 158, 494, 157, 
+       497
 };
 
 static const char _indic_syllable_machine_trans_actions[] = {
-       1, 2, 0, 0, 2, 0, 2, 0, 
-       0, 2, 0, 0, 2, 0, 0, 2, 
-       0, 0, 0, 2, 0, 0, 2, 0, 
-       0, 2, 0, 0, 2, 2, 2, 2, 
-       2, 2, 2, 2, 2, 2, 3, 2, 
-       0, 0, 2, 0, 2, 0, 0, 2, 
+       1, 2, 0, 0, 0, 2, 0, 0, 
+       2, 0, 0, 2, 0, 0, 2, 0, 
        0, 0, 2, 0, 0, 2, 0, 0, 
-       0, 2, 0, 0, 2, 0, 0, 2, 
-       0, 0, 2, 2, 2, 2, 2, 2, 
+       2, 0, 0, 2, 2, 2, 2, 2, 
+       2, 2, 2, 2, 2, 2, 3, 2, 
+       0, 0, 0, 2, 0, 0, 2, 0, 
+       0, 2, 0, 0, 2, 0, 0, 0, 
+       2, 0, 0, 2, 0, 0, 2, 0, 
+       0, 2, 2, 2, 2, 2, 2, 2, 
        2, 2, 2, 2, 4, 2, 0, 0, 
-       2, 0, 2, 0, 0, 2, 0, 0, 
+       0, 2, 5, 0, 0, 2, 0, 0, 
        2, 0, 0, 2, 0, 0, 0, 2, 
        0, 0, 2, 0, 0, 2, 0, 0, 
+       2, 2, 6, 2, 6, 2, 6, 2, 
+       6, 2, 7, 2, 0, 0, 0, 2, 
+       0, 0, 2, 0, 0, 2, 0, 0, 
+       2, 0, 0, 0, 2, 0, 0, 2, 
+       0, 0, 2, 0, 0, 2, 2, 2, 
        2, 2, 2, 2, 2, 2, 2, 2, 
-       2, 2, 7, 2, 2, 2, 0, 2, 
-       8, 2, 2, 0, 0, 2, 0, 2, 
-       2, 2, 2, 2, 0, 2, 2, 0, 
-       0, 2, 2, 2, 2, 2, 2, 0, 
-       0, 2, 2, 2, 2, 2, 2, 0, 
-       0, 2, 2, 2, 2, 2, 2, 0, 
-       0, 2, 2, 2, 9, 0, 0, 2, 
+       6, 8, 0, 2, 0, 2, 0, 0, 
+       2, 0, 0, 2, 0, 2, 0, 0, 
        0, 0, 2, 0, 0, 2, 0, 0, 
-       2, 0, 10, 2, 2, 0, 2, 2, 
-       0, 2, 2, 0, 2, 2, 0, 2, 
-       2, 0, 0, 2, 2, 2, 2, 2, 
-       2, 0, 0, 2, 2, 2, 2, 2, 
-       2, 0, 0, 2, 2, 2, 2, 2, 
-       2, 0, 0, 2, 2, 2, 11, 0, 
-       0, 2, 0, 0, 2, 0, 0, 2, 
-       0, 0, 2, 0, 12, 2, 2, 0, 
-       0, 2, 0, 2, 2, 2, 2, 0, 
-       2, 2, 0, 0, 2, 2, 2, 2, 
-       2, 2, 0, 0, 2, 2, 2, 2, 
-       2, 2, 0, 0, 2, 2, 2, 2, 
-       2, 2, 0, 0, 2, 2, 2, 13, 
+       2, 0, 0, 2, 11, 2, 2, 6, 
+       2, 12, 12, 0, 0, 2, 2, 6, 
+       2, 13, 2, 2, 0, 2, 0, 0, 
+       2, 2, 2, 0, 2, 2, 0, 2, 
+       2, 0, 2, 2, 2, 0, 2, 2, 
+       2, 2, 0, 2, 2, 2, 0, 2, 
+       2, 2, 2, 0, 2, 2, 2, 0, 
+       2, 2, 2, 2, 0, 2, 2, 2, 
+       0, 2, 0, 14, 0, 0, 2, 0, 
+       2, 0, 0, 2, 0, 0, 2, 0, 
+       0, 2, 0, 2, 2, 2, 2, 2, 
+       2, 2, 2, 2, 15, 2, 2, 0, 
+       2, 0, 0, 2, 2, 0, 2, 2, 
+       0, 2, 2, 0, 2, 2, 2, 0, 
+       2, 2, 2, 2, 0, 2, 2, 2, 
+       0, 2, 2, 2, 2, 0, 2, 2, 
+       2, 0, 2, 2, 2, 2, 0, 2, 
+       2, 2, 0, 2, 0, 16, 0, 0, 
+       2, 0, 2, 0, 0, 2, 0, 0, 
+       2, 0, 0, 2, 0, 2, 2, 2, 
+       2, 2, 2, 2, 2, 2, 17, 6, 
+       0, 6, 6, 0, 6, 2, 0, 6, 
+       2, 6, 0, 6, 6, 6, 2, 0, 
+       6, 2, 6, 0, 6, 6, 6, 2, 
+       0, 6, 2, 6, 0, 6, 6, 6, 
+       2, 0, 6, 2, 6, 0, 6, 0, 
+       18, 0, 0, 2, 0, 2, 0, 0, 
+       2, 0, 0, 2, 0, 0, 2, 0, 
+       2, 2, 2, 2, 2, 2, 2, 2, 
+       2, 19, 20, 2, 2, 0, 0, 0, 
+       0, 2, 2, 2, 2, 0, 2, 2, 
+       0, 2, 2, 2, 0, 2, 2, 2, 
+       2, 0, 2, 2, 2, 0, 2, 2, 
+       2, 2, 0, 2, 2, 2, 0, 2, 
+       2, 2, 2, 0, 2, 2, 2, 0, 
+       2, 0, 21, 0, 0, 2, 0, 2, 
        0, 0, 2, 0, 0, 2, 0, 0, 
-       2, 0, 0, 2, 0, 14, 2
+       2, 0, 2, 2, 2, 2, 2, 2, 
+       2, 2, 2, 0, 0, 8, 2, 0, 
+       0, 2, 2, 8, 8, 0, 8, 8, 
+       0, 0, 2, 0, 0, 0, 2, 0, 
+       0, 2, 0, 0, 2, 0, 0, 0, 
+       2
 };
 
 static const char _indic_syllable_machine_to_state_actions[] = {
@@ -620,7 +1054,15 @@ static const char _indic_syllable_machine_to_state_actions[] = {
        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, 5, 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, 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, 0, 0, 0, 0, 0, 0, 
+       0, 0, 9, 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, 
@@ -642,7 +1084,26 @@ static const char _indic_syllable_machine_to_state_actions[] = {
        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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0
 };
 
 static const char _indic_syllable_machine_from_state_actions[] = {
@@ -659,7 +1120,19 @@ static const char _indic_syllable_machine_from_state_actions[] = {
        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, 6, 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, 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, 0, 0, 0, 0, 0, 0, 
+       0, 0, 10, 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, 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, 
@@ -681,7 +1154,22 @@ static const char _indic_syllable_machine_from_state_actions[] = {
        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, 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, 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, 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, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0
 };
 
 static const short _indic_syllable_machine_eof_trans[] = {
@@ -689,73 +1177,99 @@ static const short _indic_syllable_machine_eof_trans[] = {
        1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 39, 39, 39, 39, 39, 
+       1, 1, 1, 1, 39, 39, 39, 39, 
        39, 39, 39, 39, 39, 39, 39, 39, 
        39, 39, 39, 39, 39, 39, 39, 39, 
        39, 39, 39, 39, 39, 39, 39, 39, 
-       39, 39, 39, 39, 39, 39, 77, 77
-       77, 77, 77, 77, 77, 77, 77, 77, 
+       39, 39, 39, 39, 39, 39, 39, 39
+       77, 77, 77, 83, 83, 77, 77, 77, 
        77, 77, 77, 77, 77, 77, 77, 77, 
        77, 77, 77, 77, 77, 77, 77, 77, 
        77, 77, 77, 77, 77, 77, 77, 77, 
-       77, 0, 121, 121, 121, 121, 121, 121, 
-       121, 121, 121, 121, 121, 121, 121, 121, 
-       121, 121, 121, 121, 121, 121, 121, 121, 
-       121, 121, 121, 121, 121, 121, 121, 121, 
-       121, 121, 121, 121, 121, 121, 121, 121, 
-       121, 121, 121, 121, 121, 121, 121, 121, 
-       121, 121, 121, 121, 121, 121, 121, 121, 
-       121, 121, 121, 121, 121, 179, 179, 179, 
-       179, 179, 179, 179, 179, 179, 179, 179, 
-       179, 179, 179, 179, 179, 179, 179, 179, 
-       179, 179, 179, 179, 179, 179, 179, 179, 
-       179, 179, 179, 179, 179, 179, 179, 179, 
-       179, 179, 179, 179, 179, 179, 179, 179, 
-       179, 179, 179, 179, 179, 179, 179, 179, 
-       179, 179, 179, 179, 179, 179, 179, 179, 
-       237, 237, 237, 237, 237, 237, 237, 237, 
-       237, 237, 237, 237, 237, 237, 237, 237, 
-       237, 237, 237, 237, 237, 237, 237, 237, 
-       237, 237, 237, 237, 237, 237, 237, 237, 
-       237, 237, 237, 237, 237, 237, 237, 237, 
-       237, 237, 237, 237, 237, 237, 237, 237, 
-       237, 237, 237, 237, 237, 237, 237, 237, 
-       237, 237, 294, 121, 121
+       83, 77, 77, 115, 115, 115, 115, 115, 
+       115, 115, 115, 115, 115, 115, 115, 115, 
+       115, 115, 115, 115, 115, 115, 115, 115, 
+       115, 115, 115, 115, 115, 115, 115, 115, 
+       115, 115, 115, 115, 115, 115, 115, 77, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 0, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       269, 269, 269, 269, 269, 269, 269, 269, 
+       343, 343, 343, 343, 343, 343, 343, 343, 
+       343, 343, 343, 343, 343, 343, 343, 343, 
+       343, 343, 343, 343, 343, 343, 343, 343, 
+       343, 343, 343, 343, 343, 343, 343, 343, 
+       343, 343, 343, 343, 343, 343, 343, 343, 
+       343, 343, 343, 343, 343, 343, 343, 343, 
+       343, 343, 343, 343, 343, 343, 343, 343, 
+       343, 343, 343, 343, 343, 343, 343, 343, 
+       343, 343, 343, 343, 343, 343, 343, 410, 
+       343, 410, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 411, 411, 411, 411, 411, 
+       411, 411, 411, 343, 194, 194, 194, 343, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 194, 194, 194, 194, 194, 194, 
+       194, 194, 343
 };
 
-static const int indic_syllable_machine_start = 105;
-static const int indic_syllable_machine_first_final = 105;
+static const int indic_syllable_machine_start = 170;
+static const int indic_syllable_machine_first_final = 170;
 static const int indic_syllable_machine_error = -1;
 
-static const int indic_syllable_machine_en_main = 105;
+static const int indic_syllable_machine_en_main = 170;
 
 
 #line 36 "../../src/hb-ot-shape-complex-indic-machine.rl"
 
 
 
-#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl"
 
 
-#define process_syllable(func) \
+#define found_syllable(syllable_type) \
   HB_STMT_START { \
-    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #func); \
+    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
     for (unsigned int i = last; i < p+1; i++) \
-      info[i].syllable() = syllable_serial; \
-    PASTE (initial_reordering_, func) (plan, buffer, last, p+1); \
+      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
     last = p+1; \
     syllable_serial++; \
-    if (unlikely (!syllable_serial)) syllable_serial++; \
+    if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
   } HB_STMT_END
 
 static void
-find_syllables (const hb_ot_shape_plan_t *plan, hb_buffer_t *buffer)
+find_syllables (hb_buffer_t *buffer)
 {
-  unsigned int p, pe, eof, ts, te, act;
+  unsigned int p, pe, eof, ts HB_UNUSED, te, act;
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 759 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1273 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        {
        cs = indic_syllable_machine_start;
        ts = 0;
@@ -763,16 +1277,16 @@ find_syllables (const hb_ot_shape_plan_t *plan, hb_buffer_t *buffer)
        act = 0;
        }
 
-#line 110 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 112 "../../src/hb-ot-shape-complex-indic-machine.rl"
 
 
   p = 0;
   pe = eof = buffer->len;
 
   unsigned int last = 0;
-  uint8_t syllable_serial = 1;
+  unsigned int syllable_serial = 1;
   
-#line 776 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1290 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        {
        int _slen;
        int _trans;
@@ -782,11 +1296,11 @@ find_syllables (const hb_ot_shape_plan_t *plan, hb_buffer_t *buffer)
                goto _test_eof;
 _resume:
        switch ( _indic_syllable_machine_from_state_actions[cs] ) {
-       case 6:
-#line 1 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       case 10:
+#line 1 "NONE"
        {ts = p;}
        break;
-#line 790 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1304 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        }
 
        _keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -805,63 +1319,108 @@ _eof_trans:
 
        switch ( _indic_syllable_machine_trans_actions[_trans] ) {
        case 2:
-#line 1 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 1 "NONE"
        {te = p+1;}
        break;
-       case 9:
-#line 81 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {te = p+1;{ process_syllable (consonant_syllable); }}
+       case 14:
+#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (consonant_syllable); }}
+       break;
+       case 16:
+#line 84 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (vowel_syllable); }}
+       break;
+       case 21:
+#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (standalone_cluster); }}
+       break;
+       case 18:
+#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (broken_cluster); }}
        break;
        case 11:
-#line 82 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {te = p+1;{ process_syllable (vowel_syllable); }}
+#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (non_indic_cluster); }}
        break;
        case 13:
 #line 83 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {te = p+1;{ process_syllable (standalone_cluster); }}
+       {te = p;p--;{ found_syllable (consonant_syllable); }}
        break;
-       case 7:
+       case 15:
 #line 84 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {te = p+1;{ process_syllable (non_indic); }}
+       {te = p;p--;{ found_syllable (vowel_syllable); }}
        break;
-       case 8:
-#line 81 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {te = p;p--;{ process_syllable (consonant_syllable); }}
+       case 20:
+#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (standalone_cluster); }}
        break;
-       case 10:
-#line 82 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {te = p;p--;{ process_syllable (vowel_syllable); }}
+       case 17:
+#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (broken_cluster); }}
        break;
-       case 12:
+       case 19:
+#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (non_indic_cluster); }}
+       break;
+       case 1:
 #line 83 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {te = p;p--;{ process_syllable (standalone_cluster); }}
+       {{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
        break;
-       case 14:
+       case 3:
 #line 84 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {te = p;p--;{ process_syllable (non_indic); }}
+       {{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
        break;
-       case 1:
-#line 81 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {{p = ((te))-1;}{ process_syllable (consonant_syllable); }}
+       case 7:
+#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
        break;
-       case 3:
-#line 82 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {{p = ((te))-1;}{ process_syllable (vowel_syllable); }}
+       case 4:
+#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
+       break;
+       case 5:
+#line 1 "NONE"
+       {       switch( act ) {
+       case 1:
+       {{p = ((te))-1;} found_syllable (consonant_syllable); }
        break;
        case 4:
+       {{p = ((te))-1;} found_syllable (broken_cluster); }
+       break;
+       case 5:
+       {{p = ((te))-1;} found_syllable (non_indic_cluster); }
+       break;
+       }
+       }
+       break;
+       case 8:
+#line 1 "NONE"
+       {te = p+1;}
 #line 83 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {{p = ((te))-1;}{ process_syllable (standalone_cluster); }}
+       {act = 1;}
        break;
-#line 856 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+       case 6:
+#line 1 "NONE"
+       {te = p+1;}
+#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {act = 4;}
+       break;
+       case 12:
+#line 1 "NONE"
+       {te = p+1;}
+#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {act = 5;}
+       break;
+#line 1415 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        }
 
 _again:
        switch ( _indic_syllable_machine_to_state_actions[cs] ) {
-       case 5:
-#line 1 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       case 9:
+#line 1 "NONE"
        {ts = 0;}
        break;
-#line 865 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1424 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        }
 
        if ( ++p != pe )
@@ -877,7 +1436,7 @@ _again:
 
        }
 
-#line 119 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 121 "../../src/hb-ot-shape-complex-indic-machine.rl"
 
 }
 
index b6a372e..11115c9 100644 (file)
@@ -55,53 +55,55 @@ RS   = 13;
 Coeng = 14;
 Repha = 15;
 Ra    = 16;
+CM    = 17;
 
-c = (C | Ra);                  # is_consonant
+c = (C | Ra)CM*;               # is_consonant
 n = ((ZWNJ?.RS)? (N.N?)?);     # is_consonant_modifier
 z = ZWJ|ZWNJ;                  # is_joiner
 h = H | Coeng;                 # is_halant_or_coeng
 reph = (Ra H | Repha);         # possible reph
 
-cn = c.n?;
+cn = c.ZWJ?.n?;
 forced_rakar = ZWJ H ZWJ Ra;
 matra_group = z{0,3}.M.N?.(H | forced_rakar)?;
-syllable_tail = (SM.ZWNJ?)? (Coeng (cn|V))? (VD VD?)?;
+syllable_tail =  (Coeng (cn|V))? (SM.ZWNJ?)? (VD VD?)?;
 place_holder = NBSP | DOTTEDCIRCLE;
-halant_group = (z?.h.ZWJ?);
+halant_group = (z?.h.(ZWJ.N?)?);
 final_halant_group = halant_group | h.ZWNJ;
-halant_or_matra_group = (final_halant_group | matra_group{0,4});
+halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4});
 
 
 consonant_syllable =   Repha? (cn.halant_group){0,4} cn A? halant_or_matra_group? syllable_tail;
 vowel_syllable =       reph? V.n? (ZWJ | (halant_group.cn){0,4} halant_or_matra_group? syllable_tail);
 standalone_cluster =   reph? place_holder.n? (halant_group.cn){0,4} halant_or_matra_group? syllable_tail;
+broken_cluster =       reph? n? (halant_group.cn){0,4} halant_or_matra_group syllable_tail;
 other =                        any;
 
 main := |*
-       consonant_syllable      => { process_syllable (consonant_syllable); };
-       vowel_syllable          => { process_syllable (vowel_syllable); };
-       standalone_cluster      => { process_syllable (standalone_cluster); };
-       other                   => { process_syllable (non_indic); };
+       consonant_syllable      => { found_syllable (consonant_syllable); };
+       vowel_syllable          => { found_syllable (vowel_syllable); };
+       standalone_cluster      => { found_syllable (standalone_cluster); };
+       broken_cluster          => { found_syllable (broken_cluster); };
+       other                   => { found_syllable (non_indic_cluster); };
 *|;
 
 
 }%%
 
-#define process_syllable(func) \
+#define found_syllable(syllable_type) \
   HB_STMT_START { \
-    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #func); \
+    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
     for (unsigned int i = last; i < p+1; i++) \
-      info[i].syllable() = syllable_serial; \
-    PASTE (initial_reordering_, func) (plan, buffer, last, p+1); \
+      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
     last = p+1; \
     syllable_serial++; \
-    if (unlikely (!syllable_serial)) syllable_serial++; \
+    if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
   } HB_STMT_END
 
 static void
-find_syllables (const hb_ot_shape_plan_t *plan, hb_buffer_t *buffer)
+find_syllables (hb_buffer_t *buffer)
 {
-  unsigned int p, pe, eof, ts, te, act;
+  unsigned int p, pe, eof, ts HB_UNUSED, te, act;
   int cs;
   hb_glyph_info_t *info = buffer->info;
   %%{
@@ -113,7 +115,7 @@ find_syllables (const hb_ot_shape_plan_t *plan, hb_buffer_t *buffer)
   pe = eof = buffer->len;
 
   unsigned int last = 0;
-  uint8_t syllable_serial = 1;
+  unsigned int syllable_serial = 1;
   %%{
     write exec;
   }%%
index 79daba5..e36090e 100644 (file)
@@ -39,7 +39,7 @@
 #define indic_position() complex_var_u8_1() /* indic_matra_category_t */
 
 
-#define INDIC_TABLE_ELEMENT_TYPE uint8_t
+#define INDIC_TABLE_ELEMENT_TYPE uint16_t
 
 /* Cateories used in the OpenType spec:
  * https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx
@@ -63,7 +63,8 @@ enum indic_category_t {
   OT_RS, /* Register Shifter, used in Khmer OT spec */
   OT_Coeng,
   OT_Repha,
-  OT_Ra /* Not explicitly listed in the OT spec, but used in the grammar. */
+  OT_Ra, /* Not explicitly listed in the OT spec, but used in the grammar. */
+  OT_CM
 };
 
 /* Visual positions in a syllable from left to right. */
@@ -103,7 +104,7 @@ enum indic_syllabic_category_t {
   INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD       = OT_C,
   INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL      = OT_C,
   INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER        = OT_C,
-  INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL     = OT_C,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL     = OT_CM,
   INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER        = OT_NBSP,
   INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED  = OT_C,
   INDIC_SYLLABIC_CATEGORY_CONSONANT_REPHA      = OT_Repha,
@@ -111,7 +112,7 @@ enum indic_syllabic_category_t {
   INDIC_SYLLABIC_CATEGORY_NUKTA                        = OT_N,
   INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER     = OT_RS,
   INDIC_SYLLABIC_CATEGORY_TONE_LETTER          = OT_X,
-  INDIC_SYLLABIC_CATEGORY_TONE_MARK            = OT_X,
+  INDIC_SYLLABIC_CATEGORY_TONE_MARK            = OT_N,
   INDIC_SYLLABIC_CATEGORY_VIRAMA               = OT_H,
   INDIC_SYLLABIC_CATEGORY_VISARGA              = OT_SM,
   INDIC_SYLLABIC_CATEGORY_VOWEL                        = OT_V,
@@ -138,16 +139,16 @@ enum indic_matra_category_t {
   INDIC_MATRA_CATEGORY_TOP_AND_RIGHT           = INDIC_MATRA_CATEGORY_RIGHT,
 
   INDIC_MATRA_CATEGORY_INVISIBLE               = INDIC_MATRA_CATEGORY_NOT_APPLICABLE,
-  INDIC_MATRA_CATEGORY_OVERSTRUCK              = INDIC_MATRA_CATEGORY_NOT_APPLICABLE,
-  INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT       = INDIC_MATRA_CATEGORY_NOT_APPLICABLE
+  INDIC_MATRA_CATEGORY_OVERSTRUCK              = POS_AFTER_MAIN,
+  INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT       = POS_PRE_M
 };
 
 /* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation
  * because gcc fails to optimize the latter and fills the table in at runtime. */
 #define INDIC_COMBINE_CATEGORIES(S,M) \
   (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || (S == INDIC_SYLLABIC_CATEGORY_VIRAMA || S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT)) + \
-   ASSERT_STATIC_EXPR_ZERO (S < 16 && M < 16) + \
-   ((M << 4) | S))
+   ASSERT_STATIC_EXPR_ZERO (S < 255 && M < 255) + \
+   ((M << 8) | S))
 
 
 #include "hb-ot-shape-complex-indic-table.hh"
@@ -221,7 +222,7 @@ matra_position (hb_codepoint_t u, indic_position_t side)
     case POS_ABOVE_C:  return MATRA_POS_TOP (u);
     case POS_BELOW_C:  return MATRA_POS_BOTTOM (u);
   };
-  abort ();
+  return side;
 }
 
 
@@ -285,7 +286,7 @@ is_joiner (const hb_glyph_info_t &info)
  * We treat Vowels and placeholders as if they were consonants.  This is safe because Vowels
  * cannot happen in a consonant syllable.  The plus side however is, we can call the
  * consonant syllable logic from the vowel syllable function and get it all right! */
-#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_Ra) | FLAG (OT_V) | FLAG (OT_NBSP) | FLAG (OT_DOTTEDCIRCLE))
+#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CM) | FLAG (OT_Ra) | FLAG (OT_V) | FLAG (OT_NBSP) | FLAG (OT_DOTTEDCIRCLE))
 static inline bool
 is_consonant (const hb_glyph_info_t &info)
 {
@@ -300,12 +301,12 @@ is_halant_or_coeng (const hb_glyph_info_t &info)
 }
 
 static inline void
-set_indic_properties (hb_glyph_info_t   &info)
+set_indic_properties (hb_glyph_info_t &info)
 {
   hb_codepoint_t u = info.codepoint;
   unsigned int type = get_indic_categories (u);
-  indic_category_t cat = (indic_category_t) (type & 0x0F);
-  indic_position_t pos = (indic_position_t) (type >> 4);
+  indic_category_t cat = (indic_category_t) (type & 0x7F);
+  indic_position_t pos = (indic_position_t) (type >> 8);
 
 
   /*
index 5b4b344..70765b6 100644 (file)
@@ -6,12 +6,12 @@
  *
  * on files with these headers:
  *
- * # IndicSyllabicCategory-6.1.0.txt
- * # Date: 2011-08-31, 23:54:00 GMT [KW]
- * # IndicMatraCategory-6.1.0.txt
- * # Date: 2011-08-31, 23:50:00 GMT [KW]
- * # Blocks-6.1.0.txt
- * # Date: 2011-06-14, 18:26:00 GMT [KW, LI]
+ * # IndicSyllabicCategory-6.2.0.txt
+ * # Date: 2012-05-15, 21:12:00 GMT [KW]
+ * # IndicMatraCategory-6.2.0.txt
+ * # Date: 2012-05-15, 21:10:00 GMT [KW]
+ * # Blocks-6.2.0.txt
+ * # Date: 2012-05-14, 22:42:00 GMT [KW, LI]
  */
 
 #ifndef HB_OT_SHAPE_COMPLEX_INDIC_TABLE_HH
index 6fbd5c8..5afede0 100644 (file)
@@ -123,6 +123,8 @@ static const indic_config_t indic_configs[] =
   {HB_SCRIPT_MALAYALAM,        true, 0x0D4D,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_LOG_REPHA},
   {HB_SCRIPT_SINHALA,  false,0x0DCA,BASE_POS_FIRST,REPH_POS_AFTER_MAIN, REPH_MODE_EXPLICIT},
   {HB_SCRIPT_KHMER,    false,0x17D2,BASE_POS_FIRST,REPH_POS_DEFAULT,    REPH_MODE_VIS_REPHA},
+  /* Myanmar does not have the "old_indic" behavior, even though it has a "new" tag. */
+  {HB_SCRIPT_MYANMAR,  false,0x1039,BASE_POS_LAST, REPH_POS_DEFAULT,    REPH_MODE_EXPLICIT},
 };
 
 
@@ -203,6 +205,10 @@ enum {
 };
 
 static void
+setup_syllables (const hb_ot_shape_plan_t *plan,
+                hb_font_t *font,
+                hb_buffer_t *buffer);
+static void
 initial_reordering (const hb_ot_shape_plan_t *plan,
                    hb_font_t *font,
                    hb_buffer_t *buffer);
@@ -216,6 +222,9 @@ collect_features_indic (hb_ot_shape_planner_t *plan)
 {
   hb_ot_map_builder_t *map = &plan->map;
 
+  /* Do this before any lookups have been applied. */
+  map->add_gsub_pause (setup_syllables);
+
   map->add_bool_feature (HB_TAG('l','o','c','l'));
   /* The Indic specs do not require ccmp, but we apply it here since if
    * there is a use of it, it's typically at the beginning. */
@@ -240,6 +249,8 @@ override_features_indic (hb_ot_shape_planner_t *plan)
   /* Uniscribe does not apply 'kern'. */
   if (indic_options ().uniscribe_bug_compatible)
     plan->map.add_feature (HB_TAG('k','e','r','n'), 0, true);
+
+  plan->map.add_feature (HB_TAG('l','i','g','a'), 0, true);
 }
 
 
@@ -254,10 +265,11 @@ struct would_substitute_feature_t
 
   inline bool would_substitute (hb_codepoint_t    *glyphs,
                                unsigned int       glyphs_count,
+                               bool               zero_context,
                                hb_face_t         *face) const
   {
     for (unsigned int i = 0; i < count; i++)
-      if (hb_ot_layout_would_substitute_lookup_fast (face, glyphs, glyphs_count, lookups[i].index))
+      if (hb_ot_layout_lookup_would_substitute_fast (face, lookups[i].index, glyphs, glyphs_count, zero_context))
        return true;
     return false;
   }
@@ -295,6 +307,7 @@ struct indic_shape_plan_t
   bool is_old_spec;
   hb_codepoint_t virama_glyph;
 
+  would_substitute_feature_t rphf;
   would_substitute_feature_t pref;
   would_substitute_feature_t blwf;
   would_substitute_feature_t pstf;
@@ -316,9 +329,10 @@ data_create_indic (const hb_ot_shape_plan_t *plan)
       break;
     }
 
-  indic_plan->is_old_spec = indic_plan->config->has_old_spec && ((plan->map.get_chosen_script (0) & 0x000000FF) != '2');
+  indic_plan->is_old_spec = indic_plan->config->has_old_spec && ((plan->map.chosen_script[0] & 0x000000FF) != '2');
   indic_plan->virama_glyph = (hb_codepoint_t) -1;
 
+  indic_plan->rphf.init (&plan->map, HB_TAG('r','p','h','f'));
   indic_plan->pref.init (&plan->map, HB_TAG('p','r','e','f'));
   indic_plan->blwf.init (&plan->map, HB_TAG('b','l','w','f'));
   indic_plan->pstf.init (&plan->map, HB_TAG('p','s','t','f'));
@@ -340,13 +354,25 @@ consonant_position_from_face (const indic_shape_plan_t *indic_plan,
                              hb_codepoint_t *glyphs, unsigned int glyphs_len,
                              hb_face_t      *face)
 {
-  if (indic_plan->pref.would_substitute (glyphs, glyphs_len, face)) return POS_BELOW_C;
-  if (indic_plan->blwf.would_substitute (glyphs, glyphs_len, face)) return POS_BELOW_C;
-  if (indic_plan->pstf.would_substitute (glyphs, glyphs_len, face)) return POS_POST_C;
+  bool zero_context = indic_plan->is_old_spec ? false : true;
+  if (indic_plan->pref.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_BELOW_C;
+  if (indic_plan->blwf.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_BELOW_C;
+  if (indic_plan->pstf.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_POST_C;
   return POS_BASE_C;
 }
 
 
+enum syllable_type_t {
+  consonant_syllable,
+  vowel_syllable,
+  standalone_cluster,
+  broken_cluster,
+  non_indic_cluster,
+};
+
+#include "hb-ot-shape-complex-indic-machine.hh"
+
+
 static void
 setup_masks_indic (const hb_ot_shape_plan_t *plan HB_UNUSED,
                   hb_buffer_t              *buffer,
@@ -363,6 +389,14 @@ setup_masks_indic (const hb_ot_shape_plan_t *plan HB_UNUSED,
     set_indic_properties (buffer->info[i]);
 }
 
+static void
+setup_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                hb_font_t *font HB_UNUSED,
+                hb_buffer_t *buffer)
+{
+  find_syllables (buffer);
+}
+
 static int
 compare_indic_order (const hb_glyph_info_t *pa, const hb_glyph_info_t *pb)
 {
@@ -400,7 +434,9 @@ update_consonant_positions (const hb_ot_shape_plan_t *plan,
  * https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx */
 
 static void
-initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer_t *buffer,
+initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
+                                      hb_face_t *face,
+                                      hb_buffer_t *buffer,
                                       unsigned int start, unsigned int end)
 {
   const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
@@ -431,22 +467,36 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
     unsigned int limit = start;
     if (indic_plan->mask_array[RPHF] &&
        start + 3 <= end &&
-       info[start].indic_category() == OT_Ra &&
-       info[start + 1].indic_category() == OT_H &&
-       (/* TODO Handle other Reph modes. */
+       (
         (indic_plan->config->reph_mode == REPH_MODE_IMPLICIT && !is_joiner (info[start + 2])) ||
         (indic_plan->config->reph_mode == REPH_MODE_EXPLICIT && info[start + 2].indic_category() == OT_ZWJ)
        ))
     {
-      limit += 2;
-      while (limit < end && is_joiner (info[limit]))
-        limit++;
-      base = start;
-      has_reph = true;
-    };
-
-    switch (indic_plan->config->base_pos == BASE_POS_LAST)
+      /* See if it matches the 'rphf' feature. */
+      hb_codepoint_t glyphs[2] = {info[start].codepoint, info[start + 1].codepoint};
+      if (indic_plan->rphf.would_substitute (glyphs, ARRAY_LENGTH (glyphs), true, face))
+      {
+       limit += 2;
+       while (limit < end && is_joiner (info[limit]))
+         limit++;
+       base = start;
+       has_reph = true;
+      }
+    } else if (indic_plan->config->reph_mode == REPH_MODE_LOG_REPHA && info[start].indic_category() == OT_Repha)
+    {
+       limit += 1;
+       while (limit < end && is_joiner (info[limit]))
+         limit++;
+       base = start;
+       has_reph = true;
+    }
+
+    switch (indic_plan->config->base_pos)
     {
+      default:
+        assert (false);
+       /* fallthrough */
+
       case BASE_POS_LAST:
       {
        /* -> starting from the end of the syllable, move backwards */
@@ -486,7 +536,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
             * half form.
             * A ZWJ before a Halant, requests a subjoined form instead, and hence
             * search continues.  This is particularly important for Bengali
-            * sequence Ra,H,Ya that shouls form Ya-Phalaa by subjoining Ya. */
+            * sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya. */
            if (start < i &&
                info[i].indic_category() == OT_ZWJ &&
                info[i - 1].indic_category() == OT_H)
@@ -520,9 +570,6 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
            info[i].indic_position() = POS_BELOW_C;
       }
       break;
-
-      default:
-      abort ();
     }
 
     /* -> If the syllable starts with Ra + Halant (in a script that has Reph)
@@ -530,7 +577,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
      *    base consonants.
      *
      *  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ. */
-    if (has_reph && base == start && start + 2 == limit) {
+    if (has_reph && base == start && start - limit <= 2) {
       /* Have no other consonant, so Reph is not formed and Ra becomes base. */
       has_reph = false;
     }
@@ -597,15 +644,16 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
     info[start].indic_position() = POS_RA_TO_BECOME_REPH;
 
   /* For old-style Indic script tags, move the first post-base Halant after
-   * last consonant. */
+   * last consonant.  Only do this if there is *not* a Halant after last
+   * consonant.  Otherwise it becomes messy. */
   if (indic_plan->is_old_spec) {
     for (unsigned int i = base + 1; i < end; i++)
       if (info[i].indic_category() == OT_H) {
         unsigned int j;
         for (j = end - 1; j > i; j--)
-         if (is_consonant (info[j]))
+         if (is_consonant (info[j]) || info[j].indic_category() == OT_H)
            break;
-       if (j > i) {
+       if (info[j].indic_category() != OT_H && j > i) {
          /* Move Halant to after last consonant. */
          hb_glyph_info_t t = info[i];
          memmove (&info[i], &info[i + 1], (j - i) * sizeof (info[0]));
@@ -623,13 +671,17 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
       if ((FLAG (info[i].indic_category()) & (JOINER_FLAGS | FLAG (OT_N) | FLAG (OT_RS) | HALANT_OR_COENG_FLAGS)))
       {
        info[i].indic_position() = last_pos;
-       if (unlikely (indic_options ().uniscribe_bug_compatible &&
-                     info[i].indic_category() == OT_H &&
+       if (unlikely (info[i].indic_category() == OT_H &&
                      info[i].indic_position() == POS_PRE_M))
        {
          /*
           * Uniscribe doesn't move the Halant with Left Matra.
           * TEST: U+092B,U+093F,U+094DE
+          * We follow.  This is important for the Sinhala
+          * U+0DDA split matra since it decomposes to U+0DD9,U+0DCA
+          * where U+0DD9 is a left matra and U+0DCA is the virama.
+          * We don't want to move the virama with the left matra.
+          * TEST: U+0D9A,U+0DDA
           */
          for (unsigned int j = i; j > start; j--)
            if (info[j - 1].indic_position() != POS_PRE_M) {
@@ -694,13 +746,12 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
       info[i].mask  |= mask;
   }
 
-  /* XXX This will not match for old-Indic spec since the Halant-Ra order is reversed already. */
   if (indic_plan->mask_array[PREF] && base + 2 < end)
   {
     /* Find a Halant,Ra sequence and mark it for pre-base reordering processing. */
-    for (unsigned int i = base + 1; i + 1 < end; i++)
-      if (is_halant_or_coeng (info[i]) &&
-         info[i + 1].indic_category() == OT_Ra)
+    for (unsigned int i = base + 1; i + 1 < end; i++) {
+      hb_codepoint_t glyphs[2] = {info[i].codepoint, info[i + 1].codepoint};
+      if (indic_plan->pref.would_substitute (glyphs, ARRAY_LENGTH (glyphs), true, face))
       {
        info[i++].mask |= indic_plan->mask_array[PREF];
        info[i++].mask |= indic_plan->mask_array[PREF];
@@ -716,6 +767,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
 
        break;
       }
+    }
   }
 
   /* Apply ZWJ/ZWNJ effects */
@@ -741,15 +793,17 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, hb_buffer
 
 static void
 initial_reordering_vowel_syllable (const hb_ot_shape_plan_t *plan,
+                                  hb_face_t *face,
                                   hb_buffer_t *buffer,
                                   unsigned int start, unsigned int end)
 {
   /* We made the vowels look like consonants.  So let's call the consonant logic! */
-  initial_reordering_consonant_syllable (plan, buffer, start, end);
+  initial_reordering_consonant_syllable (plan, face, buffer, start, end);
 }
 
 static void
 initial_reordering_standalone_cluster (const hb_ot_shape_plan_t *plan,
+                                      hb_face_t *face,
                                       hb_buffer_t *buffer,
                                       unsigned int start, unsigned int end)
 {
@@ -765,19 +819,103 @@ initial_reordering_standalone_cluster (const hb_ot_shape_plan_t *plan,
       return;
   }
 
-  initial_reordering_consonant_syllable (plan, buffer, start, end);
+  initial_reordering_consonant_syllable (plan, face, buffer, start, end);
 }
 
 static void
-initial_reordering_non_indic (const hb_ot_shape_plan_t *plan HB_UNUSED,
-                             hb_buffer_t *buffer HB_UNUSED,
-                             unsigned int start HB_UNUSED, unsigned int end HB_UNUSED)
+initial_reordering_broken_cluster (const hb_ot_shape_plan_t *plan,
+                                  hb_face_t *face,
+                                  hb_buffer_t *buffer,
+                                  unsigned int start, unsigned int end)
+{
+  /* We already inserted dotted-circles, so just call the standalone_cluster. */
+  initial_reordering_standalone_cluster (plan, face, buffer, start, end);
+}
+
+static void
+initial_reordering_non_indic_cluster (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                                     hb_face_t *face HB_UNUSED,
+                                     hb_buffer_t *buffer HB_UNUSED,
+                                     unsigned int start HB_UNUSED, unsigned int end HB_UNUSED)
 {
   /* Nothing to do right now.  If we ever switch to using the output
    * buffer in the reordering process, we'd need to next_glyph() here. */
 }
 
-#include "hb-ot-shape-complex-indic-machine.hh"
+
+static void
+initial_reordering_syllable (const hb_ot_shape_plan_t *plan,
+                            hb_face_t *face,
+                            hb_buffer_t *buffer,
+                            unsigned int start, unsigned int end)
+{
+  syllable_type_t syllable_type = (syllable_type_t) (buffer->info[start].syllable() & 0x0F);
+  switch (syllable_type) {
+  case consonant_syllable:     initial_reordering_consonant_syllable (plan, face, buffer, start, end); return;
+  case vowel_syllable:         initial_reordering_vowel_syllable     (plan, face, buffer, start, end); return;
+  case standalone_cluster:     initial_reordering_standalone_cluster (plan, face, buffer, start, end); return;
+  case broken_cluster:         initial_reordering_broken_cluster     (plan, face, buffer, start, end); return;
+  case non_indic_cluster:      initial_reordering_non_indic_cluster  (plan, face, buffer, start, end); return;
+  }
+}
+
+static inline void
+insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                      hb_font_t *font,
+                      hb_buffer_t *buffer)
+{
+  /* Note: This loop is extra overhead, but should not be measurable. */
+  bool has_broken_syllables = false;
+  unsigned int count = buffer->len;
+  for (unsigned int i = 0; i < count; i++)
+    if ((buffer->info[i].syllable() & 0x0F) == broken_cluster) {
+      has_broken_syllables = true;
+      break;
+    }
+  if (likely (!has_broken_syllables))
+    return;
+
+
+  hb_codepoint_t dottedcircle_glyph;
+  if (!font->get_glyph (0x25CC, 0, &dottedcircle_glyph))
+    return;
+
+  hb_glyph_info_t dottedcircle = {0};
+  dottedcircle.codepoint = 0x25CC;
+  set_indic_properties (dottedcircle);
+  dottedcircle.codepoint = dottedcircle_glyph;
+
+  buffer->clear_output ();
+
+  buffer->idx = 0;
+  unsigned int last_syllable = 0;
+  while (buffer->idx < buffer->len)
+  {
+    unsigned int syllable = buffer->cur().syllable();
+    syllable_type_t syllable_type = (syllable_type_t) (syllable & 0x0F);
+    if (unlikely (last_syllable != syllable && syllable_type == broken_cluster))
+    {
+      last_syllable = syllable;
+
+      hb_glyph_info_t info = dottedcircle;
+      info.cluster = buffer->cur().cluster;
+      info.mask = buffer->cur().mask;
+      info.syllable() = buffer->cur().syllable();
+
+      /* Insert dottedcircle after possible Repha. */
+      while (buffer->idx < buffer->len &&
+            last_syllable == buffer->cur().syllable() &&
+            buffer->cur().indic_category() == OT_Repha)
+        buffer->next_glyph ();
+
+      buffer->output_info (info);
+    }
+    else
+      buffer->next_glyph ();
+  }
+
+  buffer->swap_buffers ();
+}
 
 static void
 initial_reordering (const hb_ot_shape_plan_t *plan,
@@ -785,7 +923,20 @@ initial_reordering (const hb_ot_shape_plan_t *plan,
                    hb_buffer_t *buffer)
 {
   update_consonant_positions (plan, font, buffer);
-  find_syllables (plan, buffer);
+  insert_dotted_circles (plan, font, buffer);
+
+  hb_glyph_info_t *info = buffer->info;
+  unsigned int count = buffer->len;
+  if (unlikely (!count)) return;
+  unsigned int last = 0;
+  unsigned int last_syllable = info[0].syllable();
+  for (unsigned int i = 1; i < count; i++)
+    if (last_syllable != info[i].syllable()) {
+      initial_reordering_syllable (plan, font->face, buffer, last, i);
+      last = i;
+      last_syllable = info[last].syllable();
+    }
+  initial_reordering_syllable (plan, font->face, buffer, last, count);
 }
 
 static void
@@ -829,11 +980,11 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
     /* If we lost track of base, alas, position before last thingy. */
     unsigned int new_pos = base == end ? base - 2 : base - 1;
 
-    /* Malayalam does not have "half" forms or explicit virama forms.
-     * The glyphs formed by 'half' are Chillus.  We want to position
-     * matra after them all.
+    /* Malayalam / Tamil do not have "half" forms or explicit virama forms.
+     * The glyphs formed by 'half' are Chillus or ligated explicit viramas.
+     * We want to position matra after them.
      */
-    if (buffer->props.script != HB_SCRIPT_MALAYALAM)
+    if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
     {
       while (new_pos > start &&
             !(is_one_of (info[new_pos], (FLAG (OT_M) | FLAG (OT_H) | FLAG (OT_Coeng)))))
@@ -853,7 +1004,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
         new_pos = start; /* No move. */
     }
 
-    if (start < new_pos)
+    if (start < new_pos && info[new_pos].indic_position () != POS_PRE_M)
     {
       /* Now go see if there's actually any matras... */
       for (unsigned int i = new_pos; i > start; i--)
@@ -1045,21 +1196,28 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
           */
 
          unsigned int new_pos = base;
-         while (new_pos > start &&
-                !(is_one_of (info[new_pos - 1], FLAG(OT_M) | HALANT_OR_COENG_FLAGS)))
-           new_pos--;
-
-         /* In Khmer coeng model, a V,Ra can go *after* matras.  If it goes after a
-          * split matra, it should be reordered to *before* the left part of such matra. */
-         if (new_pos > start && info[new_pos - 1].indic_category() == OT_M)
+         /* Malayalam / Tamil do not have "half" forms or explicit virama forms.
+          * The glyphs formed by 'half' are Chillus or ligated explicit viramas.
+          * We want to position matra after them.
+          */
+         if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
          {
-           unsigned int old_pos = i;
-           for (unsigned int i = base + 1; i < old_pos; i++)
-             if (info[i].indic_category() == OT_M)
-             {
-               new_pos--;
-               break;
-             }
+           while (new_pos > start &&
+                  !(is_one_of (info[new_pos - 1], FLAG(OT_M) | HALANT_OR_COENG_FLAGS)))
+             new_pos--;
+
+           /* In Khmer coeng model, a V,Ra can go *after* matras.  If it goes after a
+            * split matra, it should be reordered to *before* the left part of such matra. */
+           if (new_pos > start && info[new_pos - 1].indic_category() == OT_M)
+           {
+             unsigned int old_pos = i;
+             for (unsigned int i = base + 1; i < old_pos; i++)
+               if (info[i].indic_category() == OT_M)
+               {
+                 new_pos--;
+                 break;
+               }
+           }
          }
 
          if (new_pos > start && is_halant_or_coeng (info[new_pos - 1]))
@@ -1105,11 +1263,11 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
 
 static void
 final_reordering (const hb_ot_shape_plan_t *plan,
-                 hb_font_t *font,
+                 hb_font_t *font HB_UNUSED,
                  hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
-  if (!count) return;
+  if (unlikely (!count)) return;
 
   hb_glyph_info_t *info = buffer->info;
   unsigned int last = 0;
@@ -1122,11 +1280,123 @@ final_reordering (const hb_ot_shape_plan_t *plan,
     }
   final_reordering_syllable (plan, buffer, last, count);
 
+  /* Zero syllables now... */
+  for (unsigned int i = 0; i < count; i++)
+    info[i].syllable() = 0;
+
   HB_BUFFER_DEALLOCATE_VAR (buffer, indic_category);
   HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position);
 }
 
 
+static hb_ot_shape_normalization_mode_t
+normalization_preference_indic (const hb_segment_properties_t *props HB_UNUSED)
+{
+  return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
+}
+
+static bool
+decompose_indic (const hb_ot_shape_normalize_context_t *c,
+                hb_codepoint_t  ab,
+                hb_codepoint_t *a,
+                hb_codepoint_t *b)
+{
+  switch (ab)
+  {
+    /* Don't decompose these. */
+    case 0x0931  : return false;
+    case 0x0B94  : return false;
+
+
+    /*
+     * Decompose split matras that don't have Unicode decompositions.
+     */
+
+    case 0x0F77  : *a = 0x0FB2; *b= 0x0F81; return true;
+    case 0x0F79  : *a = 0x0FB3; *b= 0x0F81; return true;
+    case 0x17BE  : *a = 0x17C1; *b= 0x17BE; return true;
+    case 0x17BF  : *a = 0x17C1; *b= 0x17BF; return true;
+    case 0x17C0  : *a = 0x17C1; *b= 0x17C0; return true;
+    case 0x17C4  : *a = 0x17C1; *b= 0x17C4; return true;
+    case 0x17C5  : *a = 0x17C1; *b= 0x17C5; return true;
+    case 0x1925  : *a = 0x1920; *b= 0x1923; return true;
+    case 0x1926  : *a = 0x1920; *b= 0x1924; return true;
+    case 0x1B3C  : *a = 0x1B42; *b= 0x1B3C; return true;
+    case 0x1112E  : *a = 0x11127; *b= 0x11131; return true;
+    case 0x1112F  : *a = 0x11127; *b= 0x11132; return true;
+#if 0
+    /* This one has no decomposition in Unicode, but needs no decomposition either. */
+    /* case 0x0AC9  : return false; */
+    case 0x0B57  : *a = no decomp, -> RIGHT; return true;
+    case 0x1C29  : *a = no decomp, -> LEFT; return true;
+    case 0xA9C0  : *a = no decomp, -> RIGHT; return true;
+    case 0x111BF  : *a = no decomp, -> ABOVE; return true;
+#endif
+  }
+
+  if ((ab == 0x0DDA || hb_in_range<hb_codepoint_t> (ab, 0x0DDC, 0x0DDE)))
+  {
+    /*
+     * Sinhala split matras...  Let the fun begin.
+     *
+     * These four characters have Unicode decompositions.  However, Uniscribe
+     * decomposes them "Khmer-style", that is, it uses the character itself to
+     * get the second half.  The first half of all four decompositions is always
+     * U+0DD9.
+     *
+     * Now, there are buggy fonts, namely, the widely used lklug.ttf, that are
+     * broken with Uniscribe.  But we need to support them.  As such, we only
+     * do the Uniscribe-style decomposition if the character is transformed into
+     * its "sec.half" form by the 'pstf' feature.  Otherwise, we fall back to
+     * Unicode decomposition.
+     *
+     * Note that we can't unconditionally use Unicode decomposition.  That would
+     * break some other fonts, that are designed to work with Uniscribe, and
+     * don't have positioning features for the Unicode-style decomposition.
+     *
+     * Argh...
+     *
+     * The Uniscribe behavior is now documented in the newly published Sinhala
+     * spec in 2012:
+     *
+     *   http://www.microsoft.com/typography/OpenTypeDev/sinhala/intro.htm#shaping
+     */
+
+    const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) c->plan->data;
+
+    hb_codepoint_t glyph;
+
+    if (indic_options ().uniscribe_bug_compatible ||
+       (c->font->get_glyph (ab, 0, &glyph) &&
+        indic_plan->pstf.would_substitute (&glyph, 1, true, c->font->face)))
+    {
+      /* Ok, safe to use Uniscribe-style decomposition. */
+      *a = 0x0DD9;
+      *b = ab;
+      return true;
+    }
+  }
+
+  return c->unicode->decompose (ab, a, b);
+}
+
+static bool
+compose_indic (const hb_ot_shape_normalize_context_t *c,
+              hb_codepoint_t  a,
+              hb_codepoint_t  b,
+              hb_codepoint_t *ab)
+{
+  /* Avoid recomposing split matras. */
+  if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (c->unicode->general_category (a)))
+    return false;
+
+  /* Composition-exclusion exceptions that we want to recompose. */
+  if (a == 0x09AF && b == 0x09BC) { *ab = 0x09DF; return true; }
+
+  return c->unicode->compose (a, b, ab);
+}
+
+
 const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
 {
   "indic",
@@ -1135,7 +1405,10 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
   data_create_indic,
   data_destroy_indic,
   NULL, /* preprocess_text */
-  NULL, /* normalization_preference */
+  normalization_preference_indic,
+  decompose_indic,
+  compose_indic,
   setup_masks_indic,
   false, /* zero_width_attached_marks */
+  false, /* fallback_position */
 };
diff --git a/src/hb-ot-shape-complex-misc.cc b/src/hb-ot-shape-complex-misc.cc
deleted file mode 100644 (file)
index 13bc22b..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright © 2010,2012  Google, Inc.
- *
- *  This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#include "hb-ot-shape-complex-private.hh"
-
-
-/* TODO Add kana, and other small shapers here */
-
-
-/* The default shaper *only* adds additional per-script features.*/
-
-static const hb_tag_t hangul_features[] =
-{
-  HB_TAG('l','j','m','o'),
-  HB_TAG('v','j','m','o'),
-  HB_TAG('t','j','m','o'),
-  HB_TAG_NONE
-};
-
-static const hb_tag_t tibetan_features[] =
-{
-  HB_TAG('a','b','v','s'),
-  HB_TAG('b','l','w','s'),
-  HB_TAG('a','b','v','m'),
-  HB_TAG('b','l','w','m'),
-  HB_TAG_NONE
-};
-
-static void
-collect_features_default (hb_ot_shape_planner_t *plan)
-{
-  const hb_tag_t *script_features = NULL;
-
-  switch ((hb_tag_t) plan->props.script)
-  {
-    /* Unicode-1.1 additions */
-    case HB_SCRIPT_HANGUL:
-      script_features = hangul_features;
-      break;
-
-    /* Unicode-2.0 additions */
-    case HB_SCRIPT_TIBETAN:
-      script_features = tibetan_features;
-      break;
-  }
-
-  for (; script_features && *script_features; script_features++)
-    plan->map.add_bool_feature (*script_features);
-}
-
-static hb_ot_shape_normalization_mode_t
-normalization_preference_default (const hb_ot_shape_plan_t *plan)
-{
-  switch ((hb_tag_t) plan->props.script)
-  {
-    /* Unicode-1.1 additions */
-    case HB_SCRIPT_HANGUL:
-      return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL;
-  }
-  return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS;
-}
-
-const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
-{
-  "default",
-  collect_features_default,
-  NULL, /* override_features */
-  NULL, /* data_create */
-  NULL, /* data_destroy */
-  NULL, /* preprocess_text */
-  normalization_preference_default,
-  NULL, /* setup_masks */
-  true, /* zero_width_attached_marks */
-};
-
-
-/* Thai / Lao shaper */
-
-static void
-preprocess_text_thai (const hb_ot_shape_plan_t *plan HB_UNUSED,
-                     hb_buffer_t              *buffer,
-                     hb_font_t                *font HB_UNUSED)
-{
-  /* The following is NOT specified in the MS OT Thai spec, however, it seems
-   * to be what Uniscribe and other engines implement.  According to Eric Muller:
-   *
-   * When you have a SARA AM, decompose it in NIKHAHIT + SARA AA, *and* move the
-   * NIKHAHIT backwards over any tone mark (0E48-0E4B).
-   *
-   * <0E14, 0E4B, 0E33> -> <0E14, 0E4D, 0E4B, 0E32>
-   *
-   * This reordering is legit only when the NIKHAHIT comes from a SARA AM, not
-   * when it's there to start with. The string <0E14, 0E4B, 0E4D> is probably
-   * not what a user wanted, but the rendering is nevertheless nikhahit above
-   * chattawa.
-   *
-   * Same for Lao.
-   *
-   * Note:
-   *
-   * Uniscribe also does so below-marks reordering.  Namely, it positions U+0E3A
-   * after U+0E38 and U+0E39.  We do that by modifying the ccc for U+0E3A.
-   * See unicode->modified_combining_class ().  Lao does NOT have a U+0E3A
-   * equivalent.
-   */
-
-
-  /*
-   * Here are the characters of significance:
-   *
-   *                   Thai    Lao
-   * SARA AM:          U+0E33  U+0EB3
-   * SARA AA:          U+0E32  U+0EB2
-   * Nikhahit:         U+0E4D  U+0ECD
-   *
-   * Testing shows that Uniscribe reorder the following marks:
-   * Thai:     <0E31,0E34..0E37,0E47..0E4E>
-   * Lao:      <0EB1,0EB4..0EB7,0EC7..0ECE>
-   *
-   * Note how the Lao versions are the same as Thai + 0x80.
-   */
-
-  /* We only get one script at a time, so a script-agnostic implementation
-   * is adequate here. */
-#define IS_SARA_AM(x) (((x) & ~0x0080) == 0x0E33)
-#define NIKHAHIT_FROM_SARA_AM(x) ((x) - 0xE33 + 0xE4D)
-#define SARA_AA_FROM_SARA_AM(x) ((x) - 1)
-#define IS_TONE_MARK(x) (hb_in_ranges<hb_codepoint_t> ((x) & ~0x0080, 0x0E34, 0x0E37, 0x0E47, 0x0E4E, 0x0E31, 0x0E31))
-
-  buffer->clear_output ();
-  unsigned int count = buffer->len;
-  for (buffer->idx = 0; buffer->idx < count;)
-  {
-    hb_codepoint_t u = buffer->cur().codepoint;
-    if (likely (!IS_SARA_AM (u))) {
-      buffer->next_glyph ();
-      continue;
-    }
-
-    /* Is SARA AM. Decompose and reorder. */
-    hb_codepoint_t decomposed[2] = {hb_codepoint_t (NIKHAHIT_FROM_SARA_AM (u)),
-                                   hb_codepoint_t (SARA_AA_FROM_SARA_AM (u))};
-    buffer->replace_glyphs (1, 2, decomposed);
-    if (unlikely (buffer->in_error))
-      return;
-
-    /* Ok, let's see... */
-    unsigned int end = buffer->out_len;
-    unsigned int start = end - 2;
-    while (start > 0 && IS_TONE_MARK (buffer->out_info[start - 1].codepoint))
-      start--;
-
-    if (start + 2 < end)
-    {
-      /* Move Nikhahit (end-2) to the beginning */
-      buffer->merge_out_clusters (start, end);
-      hb_glyph_info_t t = buffer->out_info[end - 2];
-      memmove (buffer->out_info + start + 1,
-              buffer->out_info + start,
-              sizeof (buffer->out_info[0]) * (end - start - 2));
-      buffer->out_info[start] = t;
-    }
-    else
-    {
-      /* Since we decomposed, and NIKHAHIT is combining, merge clusters with the
-       * previous cluster. */
-      if (start)
-       buffer->merge_out_clusters (start - 1, end);
-    }
-  }
-  buffer->swap_buffers ();
-}
-
-const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai =
-{
-  "thai",
-  NULL, /* collect_features */
-  NULL, /* override_features */
-  NULL, /* data_create */
-  NULL, /* data_destroy */
-  preprocess_text_thai,
-  NULL, /* normalization_preference */
-  NULL, /* setup_masks */
-  true, /* zero_width_attached_marks */
-};
index e84c490..26871c2 100644 (file)
@@ -56,6 +56,7 @@ struct hb_ot_complex_shaper_t
   /* collect_features()
    * Called during shape_plan().
    * Shapers should use plan->map to add their features and callbacks.
+   * May be NULL.
    */
   void (*collect_features) (hb_ot_shape_planner_t *plan);
 
@@ -63,6 +64,7 @@ struct hb_ot_complex_shaper_t
    * Called during shape_plan().
    * Shapers should use plan->map to override features and add callbacks after
    * common features are added.
+   * May be NULL.
    */
   void (*override_features) (hb_ot_shape_planner_t *plan);
 
@@ -78,13 +80,15 @@ struct hb_ot_complex_shaper_t
    * Called when the shape_plan is being destroyed.
    * plan->data is passed here for destruction.
    * If NULL is returned, means a plan failure.
-   * May be NULL. */
+   * May be NULL.
+   */
   void (*data_destroy) (void *data);
 
 
   /* preprocess_text()
    * Called during shape().
    * Shapers can use to modify text before shaping starts.
+   * May be NULL.
    */
   void (*preprocess_text) (const hb_ot_shape_plan_t *plan,
                           hb_buffer_t              *buffer,
@@ -93,20 +97,41 @@ struct hb_ot_complex_shaper_t
 
   /* normalization_preference()
    * Called during shape().
+   * May be NULL.
    */
   hb_ot_shape_normalization_mode_t
-  (*normalization_preference) (const hb_ot_shape_plan_t *plan);
+  (*normalization_preference) (const hb_segment_properties_t *props);
+
+  /* decompose()
+   * Called during shape()'s normalization.
+   * May be NULL.
+   */
+  bool (*decompose) (const hb_ot_shape_normalize_context_t *c,
+                    hb_codepoint_t  ab,
+                    hb_codepoint_t *a,
+                    hb_codepoint_t *b);
+
+  /* compose()
+   * Called during shape()'s normalization.
+   * May be NULL.
+   */
+  bool (*compose) (const hb_ot_shape_normalize_context_t *c,
+                  hb_codepoint_t  a,
+                  hb_codepoint_t  b,
+                  hb_codepoint_t *ab);
 
   /* setup_masks()
    * Called during shape().
    * Shapers should use map to get feature masks and set on buffer.
    * Shapers may NOT modify characters.
+   * May be NULL.
    */
   void (*setup_masks) (const hb_ot_shape_plan_t *plan,
                       hb_buffer_t              *buffer,
                       hb_font_t                *font);
 
   bool zero_width_attached_marks;
+  bool fallback_position;
 };
 
 #define HB_COMPLEX_SHAPER_IMPLEMENT(name) extern HB_INTERNAL const hb_ot_complex_shaper_t _hb_ot_complex_shaper_##name;
@@ -115,9 +140,9 @@ HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
 
 
 static inline const hb_ot_complex_shaper_t *
-hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
+hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
 {
-  switch ((hb_tag_t) props->script)
+  switch ((hb_tag_t) planner->props.script)
   {
     default:
       return &_hb_ot_complex_shaper_default;
@@ -130,11 +155,18 @@ hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
 
     /* Unicode-5.0 additions */
     case HB_SCRIPT_NKO:
+    case HB_SCRIPT_PHAGS_PA:
 
     /* Unicode-6.0 additions */
     case HB_SCRIPT_MANDAIC:
 
-      return &_hb_ot_complex_shaper_arabic;
+      /* For Arabic script, use the Arabic shaper even if no OT script tag was found.
+       * This is because we do fallback shaping for Arabic script (and not others). */
+      if (planner->map.chosen_script[0] != HB_OT_TAG_DEFAULT_SCRIPT ||
+         planner->props.script == HB_SCRIPT_ARABIC)
+       return &_hb_ot_complex_shaper_arabic;
+      else
+       return &_hb_ot_complex_shaper_default;
 
 
     /* Unicode-1.1 additions */
@@ -170,9 +202,6 @@ hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
     /* Unicode-5.1 additions */
     case HB_SCRIPT_SAURASHTRA:
 
-    /* Unicode-5.2 additions */
-    case HB_SCRIPT_MEETEI_MAYEK:
-
     /* Unicode-6.0 additions */
     case HB_SCRIPT_BATAK:
     case HB_SCRIPT_BRAHMI:
@@ -197,11 +226,9 @@ hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
     case HB_SCRIPT_TAI_LE:
 
     /* Unicode-4.1 additions */
+    case HB_SCRIPT_KHAROSHTHI:
     case HB_SCRIPT_SYLOTI_NAGRI:
 
-    /* Unicode-5.0 additions */
-    case HB_SCRIPT_PHAGS_PA:
-
     /* Unicode-5.1 additions */
     case HB_SCRIPT_KAYAH_LI:
 
@@ -209,12 +236,6 @@ hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
     case HB_SCRIPT_TAI_VIET:
 
 
-    /* May need Indic treatment in the future? */
-
-    /* Unicode-3.0 additions */
-    case HB_SCRIPT_MYANMAR:
-
-
 #endif
 
     /* Unicode-1.1 additions */
@@ -229,12 +250,10 @@ hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
     case HB_SCRIPT_TELUGU:
 
     /* Unicode-3.0 additions */
-    case HB_SCRIPT_KHMER:
     case HB_SCRIPT_SINHALA:
 
     /* Unicode-4.1 additions */
     case HB_SCRIPT_BUGINESE:
-    case HB_SCRIPT_KHAROSHTHI:
     case HB_SCRIPT_NEW_TAI_LUE:
 
     /* Unicode-5.0 additions */
@@ -249,14 +268,44 @@ hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
     /* Unicode-5.2 additions */
     case HB_SCRIPT_JAVANESE:
     case HB_SCRIPT_KAITHI:
+    case HB_SCRIPT_MEETEI_MAYEK:
     case HB_SCRIPT_TAI_THAM:
 
+
     /* Unicode-6.1 additions */
     case HB_SCRIPT_CHAKMA:
     case HB_SCRIPT_SHARADA:
     case HB_SCRIPT_TAKRI:
 
-      return &_hb_ot_complex_shaper_indic;
+      /* Only use Indic shaper if the font has Indic tables. */
+      if (planner->map.found_script[0])
+       return &_hb_ot_complex_shaper_indic;
+      else
+       return &_hb_ot_complex_shaper_default;
+
+    case HB_SCRIPT_KHMER:
+      /* A number of Khmer fonts in the wild don't have a 'pref' feature,
+       * and as such won't shape properly via the Indic shaper;
+       * however, they typically have 'liga' / 'clig' features that implement
+       * the necessary "reordering" by means of ligature substitutions.
+       * So we send such pref-less fonts through the generic shaper instead. */
+      if (planner->map.found_script[0] &&
+         hb_ot_layout_language_find_feature (planner->face, HB_OT_TAG_GSUB,
+                                             planner->map.script_index[0],
+                                             planner->map.language_index[0],
+                                             HB_TAG ('p','r','e','f'),
+                                             NULL))
+       return &_hb_ot_complex_shaper_indic;
+      else
+       return &_hb_ot_complex_shaper_default;
+
+    case HB_SCRIPT_MYANMAR:
+      /* For Myanmar, we only want to use the Indic shaper if the "new" script
+       * tag is found.  For "old" script tag we want to use the default shaper. */
+      if (planner->map.chosen_script[0] == HB_TAG ('m','y','m','2'))
+       return &_hb_ot_complex_shaper_indic;
+      else
+       return &_hb_ot_complex_shaper_default;
   }
 }
 
diff --git a/src/hb-ot-shape-complex-thai.cc b/src/hb-ot-shape-complex-thai.cc
new file mode 100644 (file)
index 0000000..24d476a
--- /dev/null
@@ -0,0 +1,378 @@
+/*
+ * Copyright © 2010,2012  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-private.hh"
+
+
+/* Thai / Lao shaper */
+
+
+/* PUA shaping */
+
+
+enum thai_consonant_type_t
+{
+  NC,
+  AC,
+  RC,
+  DC,
+  NOT_CONSONANT,
+  NUM_CONSONANT_TYPES = NOT_CONSONANT
+};
+
+static thai_consonant_type_t
+get_consonant_type (hb_codepoint_t u)
+{
+  if (u == 0x0E1B || u == 0x0E1D || u == 0x0E1F/* || u == 0x0E2C*/)
+    return AC;
+  if (u == 0x0E0D || u == 0x0E10)
+    return RC;
+  if (u == 0x0E0E || u == 0x0E0F)
+    return DC;
+  if (hb_in_range<hb_codepoint_t> (u, 0x0E01, 0x0E2E))
+    return NC;
+  return NOT_CONSONANT;
+}
+
+
+enum thai_mark_type_t
+{
+  AV,
+  BV,
+  T,
+  NOT_MARK,
+  NUM_MARK_TYPES = NOT_MARK
+};
+
+static thai_mark_type_t
+get_mark_type (hb_codepoint_t u)
+{
+  if (u == 0x0E31 || hb_in_range<hb_codepoint_t> (u, 0x0E34, 0x0E37) ||
+      u == 0x0E47 || hb_in_range<hb_codepoint_t> (u, 0x0E4D, 0x0E4E))
+    return AV;
+  if (hb_in_range<hb_codepoint_t> (u, 0x0E38, 0x0E3A))
+    return BV;
+  if (hb_in_range<hb_codepoint_t> (u, 0x0E48, 0x0E4C))
+    return T;
+  return NOT_MARK;
+}
+
+
+enum thai_action_t
+{
+  NOP,
+  SD,  /* Shift combining-mark down */
+  SL,  /* Shift combining-mark left */
+  SDL, /* Shift combining-mark down-left */
+  RD   /* Remove descender from base */
+};
+
+static hb_codepoint_t
+thai_pua_shape (hb_codepoint_t u, thai_action_t action, hb_font_t *font)
+{
+  struct thai_pua_mapping_t {
+    hb_codepoint_t u;
+    hb_codepoint_t win_pua;
+    hb_codepoint_t mac_pua;
+  } const *pua_mappings = NULL;
+  static const thai_pua_mapping_t SD_mappings[] = {
+    {0x0E48, 0xF70A, 0xF88B}, /* MAI EK */
+    {0x0E49, 0xF70B, 0xF88E}, /* MAI THO */
+    {0x0E4A, 0xF70C, 0xF891}, /* MAI TRI */
+    {0x0E4B, 0xF70D, 0xF894}, /* MAI CHATTAWA */
+    {0x0E4C, 0xF70E, 0xF897}, /* THANTHAKHAT */
+    {0x0E38, 0xF718, 0xF89B}, /* SARA U */
+    {0x0E39, 0xF719, 0xF89C}, /* SARA UU */
+    {0x0E3A, 0xF71A, 0xF89D}, /* PHINTHU */
+    {0x0000, 0x0000, 0x0000}
+  };
+  static const thai_pua_mapping_t SDL_mappings[] = {
+    {0x0E48, 0xF705, 0xF88C}, /* MAI EK */
+    {0x0E49, 0xF706, 0xF88F}, /* MAI THO */
+    {0x0E4A, 0xF707, 0xF892}, /* MAI TRI */
+    {0x0E4B, 0xF708, 0xF895}, /* MAI CHATTAWA */
+    {0x0E4C, 0xF709, 0xF898}, /* THANTHAKHAT */
+    {0x0000, 0x0000, 0x0000}
+  };
+  static const thai_pua_mapping_t SL_mappings[] = {
+    {0x0E48, 0xF713, 0xF88A}, /* MAI EK */
+    {0x0E49, 0xF714, 0xF88D}, /* MAI THO */
+    {0x0E4A, 0xF715, 0xF890}, /* MAI TRI */
+    {0x0E4B, 0xF716, 0xF893}, /* MAI CHATTAWA */
+    {0x0E4C, 0xF717, 0xF896}, /* THANTHAKHAT */
+    {0x0E31, 0xF710, 0xF884}, /* MAI HAN-AKAT */
+    {0x0E34, 0xF701, 0xF885}, /* SARA I */
+    {0x0E35, 0xF702, 0xF886}, /* SARA II */
+    {0x0E36, 0xF703, 0xF887}, /* SARA UE */
+    {0x0E37, 0xF704, 0xF888}, /* SARA UEE */
+    {0x0E47, 0xF712, 0xF889}, /* MAITAIKHU */
+    {0x0E4D, 0xF711, 0xF899}, /* NIKHAHIT */
+    {0x0000, 0x0000, 0x0000}
+  };
+  static const thai_pua_mapping_t RD_mappings[] = {
+    {0x0E0D, 0xF70F, 0xF89A}, /* YO YING */
+    {0x0E10, 0xF700, 0xF89E}, /* THO THAN */
+    {0x0000, 0x0000, 0x0000}
+  };
+
+  switch (action) {
+    default: assert (false); /* Fallthrough */
+    case NOP: return u;
+    case SD:  pua_mappings = SD_mappings; break;
+    case SDL: pua_mappings = SDL_mappings; break;
+    case SL:  pua_mappings = SL_mappings; break;
+    case RD:  pua_mappings = RD_mappings; break;
+  }
+  for (; pua_mappings->u; pua_mappings++)
+    if (pua_mappings->u == u)
+    {
+      hb_codepoint_t glyph;
+      if (hb_font_get_glyph (font, pua_mappings->win_pua, 0, &glyph))
+       return pua_mappings->win_pua;
+      if (hb_font_get_glyph (font, pua_mappings->mac_pua, 0, &glyph))
+       return pua_mappings->mac_pua;
+      break;
+    }
+  return u;
+}
+
+
+static enum thai_above_state_t
+{     /* Cluster above looks like: */
+  T0, /*  ⣤                      */
+  T1, /*     ⣼                   */
+  T2, /*        ⣾                */
+  T3, /*           ⣿             */
+  NUM_ABOVE_STATES
+} thai_above_start_state[NUM_CONSONANT_TYPES + 1/* For NOT_CONSONANT */] =
+{
+  T0, /* NC */
+  T1, /* AC */
+  T0, /* RC */
+  T0, /* DC */
+  T3, /* NOT_CONSONANT */
+};
+
+static const struct thai_above_state_machine_edge_t {
+  thai_action_t action;
+  thai_above_state_t next_state;
+} thai_above_state_machine[NUM_ABOVE_STATES][NUM_MARK_TYPES] =
+{        /*AV*/    /*BV*/    /*T*/
+/*T0*/ {{NOP,T3}, {NOP,T0}, {SD, T3}},
+/*T1*/ {{SL, T2}, {NOP,T1}, {SDL,T2}},
+/*T2*/ {{NOP,T3}, {NOP,T2}, {SL, T3}},
+/*T3*/ {{NOP,T3}, {NOP,T3}, {NOP,T3}},
+};
+
+
+static enum thai_below_state_t
+{
+  B0, /* No descender */
+  B1, /* Removable descender */
+  B2, /* Strict descender */
+  NUM_BELOW_STATES
+} thai_below_start_state[NUM_CONSONANT_TYPES + 1/* For NOT_CONSONANT */] =
+{
+  B0, /* NC */
+  B0, /* AC */
+  B1, /* RC */
+  B2, /* DC */
+  B2, /* NOT_CONSONANT */
+};
+
+static const struct thai_below_state_machine_edge_t {
+  thai_action_t action;
+  thai_below_state_t next_state;
+} thai_below_state_machine[NUM_BELOW_STATES][NUM_MARK_TYPES] =
+{        /*AV*/    /*BV*/    /*T*/
+/*B0*/ {{NOP,B0}, {NOP,B2}, {NOP, B0}},
+/*B1*/ {{NOP,B1}, {RD, B2}, {NOP, B1}},
+/*B2*/ {{NOP,B2}, {SD, B2}, {NOP, B2}},
+};
+
+
+static void
+do_thai_pua_shaping (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                    hb_buffer_t              *buffer,
+                    hb_font_t                *font)
+{
+  thai_above_state_t above_state = thai_above_start_state[NOT_CONSONANT];
+  thai_below_state_t below_state = thai_below_start_state[NOT_CONSONANT];
+  unsigned int base = 0;
+
+  hb_glyph_info_t *info = buffer->info;
+  unsigned int count = buffer->len;
+  for (unsigned int i = 0; i < count; i++)
+  {
+    thai_mark_type_t mt = get_mark_type (info[i].codepoint);
+
+    if (mt == NOT_MARK) {
+      thai_consonant_type_t ct = get_consonant_type (info[i].codepoint);
+      above_state = thai_above_start_state[ct];
+      below_state = thai_below_start_state[ct];
+      base = i;
+      continue;
+    }
+
+    const thai_above_state_machine_edge_t &above_edge = thai_above_state_machine[above_state][mt];
+    const thai_below_state_machine_edge_t &below_edge = thai_below_state_machine[below_state][mt];
+    above_state = above_edge.next_state;
+    below_state = below_edge.next_state;
+
+    /* At least one of the above/below actions is NOP. */
+    thai_action_t action = above_edge.action != NOP ? above_edge.action : below_edge.action;
+
+    if (action == RD)
+      info[base].codepoint = thai_pua_shape (info[base].codepoint, action, font);
+    else
+      info[i].codepoint = thai_pua_shape (info[i].codepoint, action, font);
+  }
+}
+
+
+static void
+preprocess_text_thai (const hb_ot_shape_plan_t *plan,
+                     hb_buffer_t              *buffer,
+                     hb_font_t                *font)
+{
+  /* This function implements the shaping logic documented here:
+   *
+   *   http://linux.thai.net/~thep/th-otf/shaping.html
+   *
+   * The first shaping rule listed there is needed even if the font has Thai
+   * OpenType tables.  The rest do fallback positioning based on PUA codepoints.
+   * We implement that only if there exist no Thai GSUB in the font.
+   */
+
+  /* The following is NOT specified in the MS OT Thai spec, however, it seems
+   * to be what Uniscribe and other engines implement.  According to Eric Muller:
+   *
+   * When you have a SARA AM, decompose it in NIKHAHIT + SARA AA, *and* move the
+   * NIKHAHIT backwards over any tone mark (0E48-0E4B).
+   *
+   * <0E14, 0E4B, 0E33> -> <0E14, 0E4D, 0E4B, 0E32>
+   *
+   * This reordering is legit only when the NIKHAHIT comes from a SARA AM, not
+   * when it's there to start with. The string <0E14, 0E4B, 0E4D> is probably
+   * not what a user wanted, but the rendering is nevertheless nikhahit above
+   * chattawa.
+   *
+   * Same for Lao.
+   *
+   * Note:
+   *
+   * Uniscribe also does some below-marks reordering.  Namely, it positions U+0E3A
+   * after U+0E38 and U+0E39.  We do that by modifying the ccc for U+0E3A.
+   * See unicode->modified_combining_class ().  Lao does NOT have a U+0E3A
+   * equivalent.
+   */
+
+
+  /*
+   * Here are the characters of significance:
+   *
+   *                   Thai    Lao
+   * SARA AM:          U+0E33  U+0EB3
+   * SARA AA:          U+0E32  U+0EB2
+   * Nikhahit:         U+0E4D  U+0ECD
+   *
+   * Testing shows that Uniscribe reorder the following marks:
+   * Thai:     <0E31,0E34..0E37,0E47..0E4E>
+   * Lao:      <0EB1,0EB4..0EB7,0EC7..0ECE>
+   *
+   * Note how the Lao versions are the same as Thai + 0x80.
+   */
+
+  /* We only get one script at a time, so a script-agnostic implementation
+   * is adequate here. */
+#define IS_SARA_AM(x) (((x) & ~0x0080) == 0x0E33)
+#define NIKHAHIT_FROM_SARA_AM(x) ((x) - 0xE33 + 0xE4D)
+#define SARA_AA_FROM_SARA_AM(x) ((x) - 1)
+#define IS_TONE_MARK(x) (hb_in_ranges<hb_codepoint_t> ((x) & ~0x0080, 0x0E34, 0x0E37, 0x0E47, 0x0E4E, 0x0E31, 0x0E31))
+
+  buffer->clear_output ();
+  unsigned int count = buffer->len;
+  for (buffer->idx = 0; buffer->idx < count;)
+  {
+    hb_codepoint_t u = buffer->cur().codepoint;
+    if (likely (!IS_SARA_AM (u))) {
+      buffer->next_glyph ();
+      continue;
+    }
+
+    /* Is SARA AM. Decompose and reorder. */
+    hb_codepoint_t decomposed[2] = {hb_codepoint_t (NIKHAHIT_FROM_SARA_AM (u)),
+                                   hb_codepoint_t (SARA_AA_FROM_SARA_AM (u))};
+    buffer->replace_glyphs (1, 2, decomposed);
+    if (unlikely (buffer->in_error))
+      return;
+
+    /* Ok, let's see... */
+    unsigned int end = buffer->out_len;
+    unsigned int start = end - 2;
+    while (start > 0 && IS_TONE_MARK (buffer->out_info[start - 1].codepoint))
+      start--;
+
+    if (start + 2 < end)
+    {
+      /* Move Nikhahit (end-2) to the beginning */
+      buffer->merge_out_clusters (start, end);
+      hb_glyph_info_t t = buffer->out_info[end - 2];
+      memmove (buffer->out_info + start + 1,
+              buffer->out_info + start,
+              sizeof (buffer->out_info[0]) * (end - start - 2));
+      buffer->out_info[start] = t;
+    }
+    else
+    {
+      /* Since we decomposed, and NIKHAHIT is combining, merge clusters with the
+       * previous cluster. */
+      if (start)
+       buffer->merge_out_clusters (start - 1, end);
+    }
+  }
+  buffer->swap_buffers ();
+
+  /* If font has Thai GSUB, we are done. */
+  if (plan->props.script == HB_SCRIPT_THAI && !plan->map.found_script[0])
+    do_thai_pua_shaping (plan, buffer, font);
+}
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai =
+{
+  "thai",
+  NULL, /* collect_features */
+  NULL, /* override_features */
+  NULL, /* data_create */
+  NULL, /* data_destroy */
+  preprocess_text_thai,
+  NULL, /* normalization_preference */
+  NULL, /* decompose */
+  NULL, /* compose */
+  NULL, /* setup_masks */
+  true, /* zero_width_attached_marks */
+  false,/* fallback_position */
+};
index be96c4f..5e9cb06 100644 (file)
@@ -36,4 +36,9 @@ HB_INTERNAL void _hb_ot_shape_fallback_position (const hb_ot_shape_plan_t *plan,
                                                 hb_font_t *font,
                                                 hb_buffer_t  *buffer);
 
+HB_INTERNAL void _hb_ot_shape_fallback_position_recategorize_marks (const hb_ot_shape_plan_t *plan,
+                                                                   hb_font_t *font,
+                                                                   hb_buffer_t  *buffer);
+
+
 #endif /* HB_OT_SHAPE_FALLBACK_PRIVATE_HH */
index 56a3e7a..6f3426e 100644 (file)
 
 #include "hb-ot-shape-fallback-private.hh"
 
-static void
-zero_mark_advances (hb_buffer_t *buffer,
-                   unsigned int start,
-                   unsigned int end)
+static unsigned int
+recategorize_combining_class (hb_codepoint_t u,
+                             unsigned int klass)
 {
-  for (unsigned int i = start; i < end; i++)
-    if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
+  if (klass >= 200)
+    return klass;
+
+  /* Thai / Lao need some per-character work. */
+  if ((u & ~0xFF) == 0x0E00)
+  {
+    if (unlikely (klass == 0))
     {
-      buffer->pos[i].x_advance = 0;
-      buffer->pos[i].y_advance = 0;
+      switch (u)
+      {
+        case 0x0E31:
+        case 0x0E34:
+        case 0x0E35:
+        case 0x0E36:
+        case 0x0E37:
+        case 0x0E47:
+        case 0x0E4C:
+        case 0x0E4D:
+        case 0x0E4E:
+         klass = HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT;
+         break;
+
+        case 0x0EB1:
+        case 0x0EB4:
+        case 0x0EB5:
+        case 0x0EB6:
+        case 0x0EB7:
+        case 0x0EBB:
+        case 0x0ECC:
+        case 0x0ECD:
+         klass = HB_UNICODE_COMBINING_CLASS_ABOVE;
+         break;
+
+        case 0x0EBC:
+         klass = HB_UNICODE_COMBINING_CLASS_BELOW;
+         break;
+      }
+    } else {
+      /* Thai virama is below-right */
+      if (u == 0x0E3A)
+       klass = HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT;
     }
-}
-
-static unsigned int
-recategorize_combining_class (unsigned int modified_combining_class)
-{
-  if (modified_combining_class >= 200)
-    return modified_combining_class;
+  }
 
-  /* This should be kept in sync with modified combining class mapping
-   * from hb-unicode.cc. */
-  switch (modified_combining_class)
+  switch (klass)
   {
 
     /* Hebrew */
@@ -101,14 +128,11 @@ recategorize_combining_class (unsigned int modified_combining_class)
 
     /* Thai */
 
-    /* Note: to be useful we also need to position U+0E3A that has ccc=9 (virama).
-     * But viramas can be both above and below based on the codepoint / script. */
-
     case HB_MODIFIED_COMBINING_CLASS_CCC103: /* sara u / sara uu */
-      return HB_UNICODE_COMBINING_CLASS_BELOW;
+      return HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT;
 
     case HB_MODIFIED_COMBINING_CLASS_CCC107: /* mai */
-      return HB_UNICODE_COMBINING_CLASS_ABOVE;
+      return HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT;
 
 
     /* Lao */
@@ -133,7 +157,35 @@ recategorize_combining_class (unsigned int modified_combining_class)
 
   }
 
-  return modified_combining_class;
+  return klass;
+}
+
+void
+_hb_ot_shape_fallback_position_recategorize_marks (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                                                  hb_font_t *font HB_UNUSED,
+                                                  hb_buffer_t  *buffer)
+{
+  unsigned int count = buffer->len;
+  for (unsigned int i = 0; i < count; i++)
+    if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) {
+      unsigned int combining_class = _hb_glyph_info_get_modified_combining_class (&buffer->info[i]);
+      combining_class = recategorize_combining_class (buffer->info[i].codepoint, combining_class);
+      _hb_glyph_info_set_modified_combining_class (&buffer->info[i], combining_class);
+    }
+}
+
+
+static void
+zero_mark_advances (hb_buffer_t *buffer,
+                   unsigned int start,
+                   unsigned int end)
+{
+  for (unsigned int i = start; i < end; i++)
+    if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
+    {
+      buffer->pos[i].x_advance = 0;
+      buffer->pos[i].y_advance = 0;
+    }
 }
 
 static inline void
@@ -171,6 +223,7 @@ position_mark (const hb_ot_shape_plan_t *plan,
       }
       /* Fall through */
 
+    default:
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW:
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE:
     case HB_UNICODE_COMBINING_CLASS_BELOW:
@@ -234,6 +287,7 @@ position_around_base (const hb_ot_shape_plan_t *plan,
                      unsigned int base,
                      unsigned int end)
 {
+  hb_direction_t horiz_dir = HB_DIRECTION_INVALID;
   hb_glyph_extents_t base_extents;
   if (!font->get_glyph_extents (buffer->info[base].codepoint,
                                &base_extents))
@@ -245,33 +299,61 @@ position_around_base (const hb_ot_shape_plan_t *plan,
   base_extents.x_bearing += buffer->pos[base].x_offset;
   base_extents.y_bearing += buffer->pos[base].y_offset;
 
-  /* XXX Handle ligature component positioning... */
-  HB_UNUSED bool is_ligature = is_a_ligature (buffer->info[base]);
+  unsigned int lig_id = get_lig_id (buffer->info[base]);
+  unsigned int num_lig_components = get_lig_num_comps (buffer->info[base]);
 
   hb_position_t x_offset = 0, y_offset = 0;
   if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
     x_offset -= buffer->pos[base].x_advance;
     y_offset -= buffer->pos[base].y_advance;
   }
+
+  hb_glyph_extents_t component_extents = base_extents;
+  unsigned int last_lig_component = (unsigned int) -1;
   unsigned int last_combining_class = 255;
-  hb_glyph_extents_t cluster_extents;
+  hb_glyph_extents_t cluster_extents = base_extents; /* Initialization is just to shut gcc up. */
   for (unsigned int i = base + 1; i < end; i++)
-    if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
+    if (_hb_glyph_info_get_modified_combining_class (&buffer->info[i]))
     {
-      unsigned int this_combining_class = recategorize_combining_class (_hb_glyph_info_get_modified_combining_class (&buffer->info[i]));
-      if (this_combining_class != last_combining_class)
-        cluster_extents = base_extents;
+      if (num_lig_components > 1) {
+       unsigned int this_lig_id = get_lig_id (buffer->info[i]);
+       unsigned int this_lig_component = get_lig_comp (buffer->info[i]) - 1;
+       /* Conditions for attaching to the last component. */
+       if (!lig_id || lig_id != this_lig_id || this_lig_component >= num_lig_components)
+         this_lig_component = num_lig_components - 1;
+       if (last_lig_component != this_lig_component)
+       {
+         last_lig_component = this_lig_component;
+         last_combining_class = 255;
+         component_extents = base_extents;
+         if (unlikely (horiz_dir == HB_DIRECTION_INVALID)) {
+           if (HB_DIRECTION_IS_HORIZONTAL (plan->props.direction))
+             horiz_dir = plan->props.direction;
+           else
+             horiz_dir = hb_script_get_horizontal_direction (plan->props.script);
+         }
+         if (horiz_dir == HB_DIRECTION_LTR)
+           component_extents.x_bearing += (this_lig_component * component_extents.width) / num_lig_components;
+         else
+           component_extents.x_bearing += ((num_lig_components - 1 - this_lig_component) * component_extents.width) / num_lig_components;
+         component_extents.width /= num_lig_components;
+       }
+      }
+
+      unsigned int this_combining_class = _hb_glyph_info_get_modified_combining_class (&buffer->info[i]);
+      if (last_combining_class != this_combining_class)
+      {
+       last_combining_class = this_combining_class;
+        cluster_extents = component_extents;
+      }
 
-      position_mark (plan, font, buffer, base_extents, i, this_combining_class);
+      position_mark (plan, font, buffer, cluster_extents, i, this_combining_class);
 
       buffer->pos[i].x_advance = 0;
       buffer->pos[i].y_advance = 0;
       buffer->pos[i].x_offset += x_offset;
       buffer->pos[i].y_offset += y_offset;
 
-      /* combine cluster extents. */
-
-      last_combining_class = this_combining_class;
     } else {
       if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
        x_offset -= buffer->pos[i].x_advance;
@@ -281,8 +363,6 @@ position_around_base (const hb_ot_shape_plan_t *plan,
        y_offset += buffer->pos[i].y_advance;
       }
     }
-
-
 }
 
 static inline void
@@ -297,14 +377,17 @@ position_cluster (const hb_ot_shape_plan_t *plan,
 
   /* Find the base glyph */
   for (unsigned int i = start; i < end; i++)
-    if (is_a_ligature (buffer->info[i]) ||
-        !(FLAG (_hb_glyph_info_get_general_category (&buffer->info[i])) &
-         (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) |
-          FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) |
-          FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK))))
+    if (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->info[i])))
     {
-      position_around_base (plan, font, buffer, i, end);
-      break;
+      /* Find mark glyphs */
+      unsigned int j;
+      for (j = i + 1; j < end; j++)
+       if (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->info[j])))
+         break;
+
+      position_around_base (plan, font, buffer, i, j);
+
+      i = j - 1;
     }
 }
 
index 462b87d..8112f03 100644 (file)
 /* buffer var allocations, used during the normalization process */
 #define glyph_index()  var1.u32
 
+struct hb_ot_shape_plan_t;
+
 enum hb_ot_shape_normalization_mode_t {
   HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED,
   HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS, /* never composes base-to-base */
+  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, /* always fully decomposes and then recompose back */
   HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL, /* including base-to-base composition */
 
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT = HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS
 };
 
-HB_INTERNAL void _hb_ot_shape_normalize (hb_font_t *font,
+HB_INTERNAL void _hb_ot_shape_normalize (const hb_ot_shape_plan_t *shaper,
                                         hb_buffer_t *buffer,
-                                        hb_ot_shape_normalization_mode_t mode);
+                                        hb_font_t *font);
+
+
+struct hb_ot_shape_normalize_context_t
+{
+  const hb_ot_shape_plan_t *plan;
+  hb_buffer_t *buffer;
+  hb_font_t *font;
+  hb_unicode_funcs_t *unicode;
+  bool (*decompose) (const hb_ot_shape_normalize_context_t *c,
+                    hb_codepoint_t  ab,
+                    hb_codepoint_t *a,
+                    hb_codepoint_t *b);
+  bool (*compose) (const hb_ot_shape_normalize_context_t *c,
+                  hb_codepoint_t  a,
+                  hb_codepoint_t  b,
+                  hb_codepoint_t *ab);
+};
+
 
 #endif /* HB_OT_SHAPE_NORMALIZE_PRIVATE_HH */
index 93dd00c..c5325e4 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 #include "hb-ot-shape-normalize-private.hh"
+#include "hb-ot-shape-complex-private.hh"
 #include "hb-ot-shape-private.hh"
 
 
  *     egrep  "`echo -n ';('; grep ';<' UnicodeData.txt | cut -d';' -f1 | tr '\n' '|'; echo ') '`" UnicodeData.txt
  */
 
-static hb_bool_t
-decompose_func (hb_unicode_funcs_t *unicode,
-               hb_codepoint_t  ab,
-               hb_codepoint_t *a,
-               hb_codepoint_t *b)
+static bool
+decompose_unicode (const hb_ot_shape_normalize_context_t *c,
+                  hb_codepoint_t  ab,
+                  hb_codepoint_t *a,
+                  hb_codepoint_t *b)
 {
-  /* XXX FIXME, move these to complex shapers and propagage to normalizer.*/
-  switch (ab) {
-    case 0x0AC9  : return false;
-
-    case 0x0931  : return false;
-    case 0x0B94  : return false;
-
-    /* These ones have Unicode decompositions, but we do it
-     * this way to be close to what Uniscribe does. */
-    case 0x0DDA  : *a = 0x0DD9; *b= 0x0DDA; return true;
-    case 0x0DDC  : *a = 0x0DD9; *b= 0x0DDC; return true;
-    case 0x0DDD  : *a = 0x0DD9; *b= 0x0DDD; return true;
-    case 0x0DDE  : *a = 0x0DD9; *b= 0x0DDE; return true;
-
-    case 0x0F77  : *a = 0x0FB2; *b= 0x0F81; return true;
-    case 0x0F79  : *a = 0x0FB3; *b= 0x0F81; return true;
-    case 0x17BE  : *a = 0x17C1; *b= 0x17BE; return true;
-    case 0x17BF  : *a = 0x17C1; *b= 0x17BF; return true;
-    case 0x17C0  : *a = 0x17C1; *b= 0x17C0; return true;
-    case 0x17C4  : *a = 0x17C1; *b= 0x17C4; return true;
-    case 0x17C5  : *a = 0x17C1; *b= 0x17C5; return true;
-    case 0x1925  : *a = 0x1920; *b= 0x1923; return true;
-    case 0x1926  : *a = 0x1920; *b= 0x1924; return true;
-    case 0x1B3C  : *a = 0x1B42; *b= 0x1B3C; return true;
-    case 0x1112E  : *a = 0x11127; *b= 0x11131; return true;
-    case 0x1112F  : *a = 0x11127; *b= 0x11132; return true;
-#if 0
-    case 0x0B57  : *a = 0xno decomp, -> RIGHT; return true;
-    case 0x1C29  : *a = 0xno decomp, -> LEFT; return true;
-    case 0xA9C0  : *a = 0xno decomp, -> RIGHT; return true;
-    case 0x111BF  : *a = 0xno decomp, -> ABOVE; return true;
-#endif
-  }
-  return unicode->decompose (ab, a, b);
+  return c->unicode->decompose (ab, a, b);
 }
 
-static hb_bool_t
-compose_func (hb_unicode_funcs_t *unicode,
-             hb_codepoint_t  a,
-             hb_codepoint_t  b,
-             hb_codepoint_t *ab)
+static bool
+compose_unicode (const hb_ot_shape_normalize_context_t *c,
+                hb_codepoint_t  a,
+                hb_codepoint_t  b,
+                hb_codepoint_t *ab)
 {
-  /* XXX, this belongs to indic normalizer. */
-  if ((FLAG (unicode->general_category (a)) &
-       (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) |
-       FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) |
-       FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK))))
-    return false;
-  /* XXX, add composition-exclusion exceptions to Indic shaper. */
-  if (a == 0x09AF && b == 0x09BC) { *ab = 0x09DF; return true; }
-
-  /* XXX, these belong to the hebew / default shaper. */
-  /* Hebrew presentation-form shaping.
-   * https://bugzilla.mozilla.org/show_bug.cgi?id=728866 */
-  // Hebrew presentation forms with dagesh, for characters 0x05D0..0x05EA;
-  // note that some letters do not have a dagesh presForm encoded
-  static const hb_codepoint_t sDageshForms[0x05EA - 0x05D0 + 1] = {
-    0xFB30, // ALEF
-    0xFB31, // BET
-    0xFB32, // GIMEL
-    0xFB33, // DALET
-    0xFB34, // HE
-    0xFB35, // VAV
-    0xFB36, // ZAYIN
-    0, // HET
-    0xFB38, // TET
-    0xFB39, // YOD
-    0xFB3A, // FINAL KAF
-    0xFB3B, // KAF
-    0xFB3C, // LAMED
-    0, // FINAL MEM
-    0xFB3E, // MEM
-    0, // FINAL NUN
-    0xFB40, // NUN
-    0xFB41, // SAMEKH
-    0, // AYIN
-    0xFB43, // FINAL PE
-    0xFB44, // PE
-    0, // FINAL TSADI
-    0xFB46, // TSADI
-    0xFB47, // QOF
-    0xFB48, // RESH
-    0xFB49, // SHIN
-    0xFB4A // TAV
-  };
-
-  hb_bool_t found = unicode->compose (a, b, ab);
-
-  if (!found && (b & ~0x7F) == 0x0580) {
-      // special-case Hebrew presentation forms that are excluded from
-      // standard normalization, but wanted for old fonts
-      switch (b) {
-      case 0x05B4: // HIRIQ
-         if (a == 0x05D9) { // YOD
-             *ab = 0xFB1D;
-             found = true;
-         }
-         break;
-      case 0x05B7: // patah
-         if (a == 0x05F2) { // YIDDISH YOD YOD
-             *ab = 0xFB1F;
-             found = true;
-         } else if (a == 0x05D0) { // ALEF
-             *ab = 0xFB2E;
-             found = true;
-         }
-         break;
-      case 0x05B8: // QAMATS
-         if (a == 0x05D0) { // ALEF
-             *ab = 0xFB2F;
-             found = true;
-         }
-         break;
-      case 0x05B9: // HOLAM
-         if (a == 0x05D5) { // VAV
-             *ab = 0xFB4B;
-             found = true;
-         }
-         break;
-      case 0x05BC: // DAGESH
-         if (a >= 0x05D0 && a <= 0x05EA) {
-             *ab = sDageshForms[a - 0x05D0];
-             found = (*ab != 0);
-         } else if (a == 0xFB2A) { // SHIN WITH SHIN DOT
-             *ab = 0xFB2C;
-             found = true;
-         } else if (a == 0xFB2B) { // SHIN WITH SIN DOT
-             *ab = 0xFB2D;
-             found = true;
-         }
-         break;
-      case 0x05BF: // RAFE
-         switch (a) {
-         case 0x05D1: // BET
-             *ab = 0xFB4C;
-             found = true;
-             break;
-         case 0x05DB: // KAF
-             *ab = 0xFB4D;
-             found = true;
-             break;
-         case 0x05E4: // PE
-             *ab = 0xFB4E;
-             found = true;
-             break;
-         }
-         break;
-      case 0x05C1: // SHIN DOT
-         if (a == 0x05E9) { // SHIN
-             *ab = 0xFB2A;
-             found = true;
-         } else if (a == 0xFB49) { // SHIN WITH DAGESH
-             *ab = 0xFB2C;
-             found = true;
-         }
-         break;
-      case 0x05C2: // SIN DOT
-         if (a == 0x05E9) { // SHIN
-             *ab = 0xFB2B;
-             found = true;
-         } else if (a == 0xFB49) { // SHIN WITH DAGESH
-             *ab = 0xFB2D;
-             found = true;
-         }
-         break;
-      }
-  }
-
-  return found;
+  return c->unicode->compose (a, b, ab);
 }
 
-
 static inline void
 set_glyph (hb_glyph_info_t &info, hb_font_t *font)
 {
@@ -288,38 +129,38 @@ skip_char (hb_buffer_t *buffer)
 
 /* Returns 0 if didn't decompose, number of resulting characters otherwise. */
 static inline unsigned int
-decompose (hb_font_t *font, hb_buffer_t *buffer, bool shortest, hb_codepoint_t ab)
+decompose (const hb_ot_shape_normalize_context_t *c, bool shortest, hb_codepoint_t ab)
 {
   hb_codepoint_t a, b, a_glyph, b_glyph;
 
-  if (!decompose_func (buffer->unicode, ab, &a, &b) ||
-      (b && !font->get_glyph (b, 0, &b_glyph)))
+  if (!c->decompose (c, ab, &a, &b) ||
+      (b && !c->font->get_glyph (b, 0, &b_glyph)))
     return 0;
 
-  bool has_a = font->get_glyph (a, 0, &a_glyph);
+  bool has_a = c->font->get_glyph (a, 0, &a_glyph);
   if (shortest && has_a) {
     /* Output a and b */
-    output_char (buffer, a, a_glyph);
+    output_char (c->buffer, a, a_glyph);
     if (likely (b)) {
-      output_char (buffer, b, b_glyph);
+      output_char (c->buffer, b, b_glyph);
       return 2;
     }
     return 1;
   }
 
   unsigned int ret;
-  if ((ret = decompose (font, buffer, shortest, a))) {
+  if ((ret = decompose (c, shortest, a))) {
     if (b) {
-      output_char (buffer, b, b_glyph);
+      output_char (c->buffer, b, b_glyph);
       return ret + 1;
     }
     return ret;
   }
 
   if (has_a) {
-    output_char (buffer, a, a_glyph);
+    output_char (c->buffer, a, a_glyph);
     if (likely (b)) {
-      output_char (buffer, b, b_glyph);
+      output_char (c->buffer, b, b_glyph);
       return 2;
     }
     return 1;
@@ -330,41 +171,42 @@ decompose (hb_font_t *font, hb_buffer_t *buffer, bool shortest, hb_codepoint_t a
 
 /* Returns 0 if didn't decompose, number of resulting characters otherwise. */
 static inline bool
-decompose_compatibility (hb_font_t *font, hb_buffer_t *buffer, hb_codepoint_t u)
+decompose_compatibility (const hb_ot_shape_normalize_context_t *c, hb_codepoint_t u)
 {
   unsigned int len, i;
   hb_codepoint_t decomposed[HB_UNICODE_MAX_DECOMPOSITION_LEN];
   hb_codepoint_t glyphs[HB_UNICODE_MAX_DECOMPOSITION_LEN];
 
-  len = buffer->unicode->decompose_compatibility (u, decomposed);
+  len = c->buffer->unicode->decompose_compatibility (u, decomposed);
   if (!len)
     return 0;
 
   for (i = 0; i < len; i++)
-    if (!font->get_glyph (decomposed[i], 0, &glyphs[i]))
+    if (!c->font->get_glyph (decomposed[i], 0, &glyphs[i]))
       return 0;
 
   for (i = 0; i < len; i++)
-    output_char (buffer, decomposed[i], glyphs[i]);
+    output_char (c->buffer, decomposed[i], glyphs[i]);
 
   return len;
 }
 
 /* Returns true if recomposition may be benefitial. */
 static inline bool
-decompose_current_character (hb_font_t *font, hb_buffer_t *buffer, bool shortest)
+decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shortest)
 {
+  hb_buffer_t * const buffer = c->buffer;
   hb_codepoint_t glyph;
   unsigned int len = 1;
 
   /* Kind of a cute waterfall here... */
-  if (shortest && font->get_glyph (buffer->cur().codepoint, 0, &glyph))
+  if (shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
     next_char (buffer, glyph);
-  else if ((len = decompose (font, buffer, shortest, buffer->cur().codepoint)))
+  else if ((len = decompose (c, shortest, buffer->cur().codepoint)))
     skip_char (buffer);
-  else if (!shortest && font->get_glyph (buffer->cur().codepoint, 0, &glyph))
+  else if (!shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
     next_char (buffer, glyph);
-  else if ((len = decompose_compatibility (font, buffer, buffer->cur().codepoint)))
+  else if ((len = decompose_compatibility (c, buffer->cur().codepoint)))
     skip_char (buffer);
   else
     next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
@@ -377,49 +219,51 @@ decompose_current_character (hb_font_t *font, hb_buffer_t *buffer, bool shortest
 }
 
 static inline void
-handle_variation_selector_cluster (hb_font_t *font, hb_buffer_t *buffer, unsigned int end)
+handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end)
 {
+  hb_buffer_t * const buffer = c->buffer;
   for (; buffer->idx < end - 1;) {
     if (unlikely (buffer->unicode->is_variation_selector (buffer->cur(+1).codepoint))) {
       /* The next two lines are some ugly lines... But work. */
-      font->get_glyph (buffer->cur().codepoint, buffer->cur(+1).codepoint, &buffer->cur().glyph_index());
+      c->font->get_glyph (buffer->cur().codepoint, buffer->cur(+1).codepoint, &buffer->cur().glyph_index());
       buffer->replace_glyphs (2, 1, &buffer->cur().codepoint);
     } else {
-      set_glyph (buffer->cur(), font);
+      set_glyph (buffer->cur(), c->font);
       buffer->next_glyph ();
     }
   }
   if (likely (buffer->idx < end)) {
-    set_glyph (buffer->cur(), font);
+    set_glyph (buffer->cur(), c->font);
     buffer->next_glyph ();
   }
 }
 
 /* Returns true if recomposition may be benefitial. */
 static inline bool
-decompose_multi_char_cluster (hb_font_t *font, hb_buffer_t *buffer, unsigned int end)
+decompose_multi_char_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end)
 {
+  hb_buffer_t * const buffer = c->buffer;
   /* TODO Currently if there's a variation-selector we give-up, it's just too hard. */
   for (unsigned int i = buffer->idx; i < end; i++)
     if (unlikely (buffer->unicode->is_variation_selector (buffer->info[i].codepoint))) {
-      handle_variation_selector_cluster (font, buffer, end);
+      handle_variation_selector_cluster (c, end);
       return false;
     }
 
   while (buffer->idx < end)
-    decompose_current_character (font, buffer, false);
+    decompose_current_character (c, false);
   /* We can be smarter here and only return true if there are at least two ccc!=0 marks.
    * But does not matter. */
   return true;
 }
 
 static inline bool
-decompose_cluster (hb_font_t *font, hb_buffer_t *buffer, bool recompose, unsigned int end)
+decompose_cluster (const hb_ot_shape_normalize_context_t *c, bool short_circuit, unsigned int end)
 {
-  if (likely (buffer->idx + 1 == end))
-    return decompose_current_character (font, buffer, recompose);
+  if (likely (c->buffer->idx + 1 == end))
+    return decompose_current_character (c, short_circuit);
   else
-    return decompose_multi_char_cluster (font, buffer, end);
+    return decompose_multi_char_cluster (c, end);
 }
 
 
@@ -434,10 +278,24 @@ compare_combining_class (const hb_glyph_info_t *pa, const hb_glyph_info_t *pb)
 
 
 void
-_hb_ot_shape_normalize (hb_font_t *font, hb_buffer_t *buffer,
-                       hb_ot_shape_normalization_mode_t mode)
+_hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
+                       hb_buffer_t *buffer,
+                       hb_font_t *font)
 {
-  bool recompose = mode != HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED;
+  hb_ot_shape_normalization_mode_t mode = plan->shaper->normalization_preference ?
+                                         plan->shaper->normalization_preference (&buffer->props) :
+                                         HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT;
+  const hb_ot_shape_normalize_context_t c = {
+    plan,
+    buffer,
+    font,
+    buffer->unicode,
+    plan->shaper->decompose ? plan->shaper->decompose : decompose_unicode,
+    plan->shaper->compose   ? plan->shaper->compose   : compose_unicode
+  };
+
+  bool short_circuit = mode != HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED &&
+                      mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
   bool can_use_recompose = false;
   unsigned int count;
 
@@ -459,7 +317,7 @@ _hb_ot_shape_normalize (hb_font_t *font, hb_buffer_t *buffer,
       if (buffer->cur().cluster != buffer->info[end].cluster)
         break;
 
-    can_use_recompose = decompose_cluster (font, buffer, recompose, end) || can_use_recompose;
+    can_use_recompose = decompose_cluster (&c, short_circuit, end) || can_use_recompose;
   }
   buffer->swap_buffers ();
 
@@ -495,7 +353,7 @@ _hb_ot_shape_normalize (hb_font_t *font, hb_buffer_t *buffer,
   }
 
 
-  if (!recompose)
+  if (mode == HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED)
     return;
 
   /* Third round, recompose */
@@ -519,10 +377,10 @@ _hb_ot_shape_normalize (hb_font_t *font, hb_buffer_t *buffer,
        (starter == buffer->out_len - 1 ||
         _hb_glyph_info_get_modified_combining_class (&buffer->prev()) < _hb_glyph_info_get_modified_combining_class (&buffer->cur())) &&
        /* And compose. */
-       compose_func (buffer->unicode,
-                     buffer->out_info[starter].codepoint,
-                     buffer->cur().codepoint,
-                     &composed) &&
+       c.compose (&c,
+                  buffer->out_info[starter].codepoint,
+                  buffer->cur().codepoint,
+                  &composed) &&
        /* And the font has glyph for the composite. */
        font->get_glyph (composed, 0, &glyph))
     {
index f856045..23e80b7 100644 (file)
@@ -46,7 +46,16 @@ struct hb_ot_shape_plan_t
   hb_ot_map_t map;
   const void *data;
 
-  inline void substitute_closure (hb_face_t *face, hb_set_t *glyphs) const { map.substitute_closure (this, face, glyphs); }
+  inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
+  {
+    unsigned int table_index;
+    switch (table_tag) {
+      case HB_OT_TAG_GSUB: table_index = 0; break;
+      case HB_OT_TAG_GPOS: table_index = 1; break;
+      default: return;
+    }
+    map.collect_lookups (table_index, lookups);
+  }
   inline void substitute (hb_font_t *font, hb_buffer_t *buffer) const { map.substitute (this, font, buffer); }
   inline void position (hb_font_t *font, hb_buffer_t *buffer) const { map.position (this, font, buffer); }
 
@@ -65,14 +74,14 @@ struct hb_ot_shape_planner_t
                         face (master_plan->face),
                         props (master_plan->props),
                         shaper (NULL),
-                        map () {}
+                        map (face, &props) {}
   ~hb_ot_shape_planner_t (void) { map.finish (); }
 
   inline void compile (hb_ot_shape_plan_t &plan)
   {
     plan.props = props;
     plan.shaper = shaper;
-    map.compile (face, &props, plan.map);
+    map.compile (plan.map);
   }
 
   private:
@@ -85,7 +94,7 @@ inline void
 _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode)
 {
   info->unicode_props0() = ((unsigned int) unicode->general_category (info->codepoint)) |
-                          (unicode->is_zero_width (info->codepoint) ? 0x80 : 0);
+                          (unicode->is_default_ignorable (info->codepoint) ? 0x80 : 0);
   info->unicode_props1() = unicode->modified_combining_class (info->codepoint);
 }
 
@@ -95,6 +104,12 @@ _hb_glyph_info_get_general_category (const hb_glyph_info_t *info)
   return (hb_unicode_general_category_t) (info->unicode_props0() & 0x7F);
 }
 
+inline void
+_hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info, unsigned int modified_class)
+{
+  info->unicode_props1() = modified_class;
+}
+
 inline unsigned int
 _hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
 {
@@ -102,7 +117,7 @@ _hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
 }
 
 inline hb_bool_t
-_hb_glyph_info_is_zero_width (const hb_glyph_info_t *info)
+_hb_glyph_info_is_default_ignorable (const hb_glyph_info_t *info)
 {
   return !!(info->unicode_props0() & 0x80);
 }
index 29076cf..96461d7 100644 (file)
@@ -175,7 +175,7 @@ _hb_ot_shaper_shape_plan_data_create (hb_shape_plan_t    *shape_plan,
 
   hb_ot_shape_planner_t planner (shape_plan);
 
-  planner.shaper = hb_ot_shape_complex_categorize (&shape_plan->props);
+  planner.shaper = hb_ot_shape_complex_categorize (&planner);
 
   hb_ot_shape_collect_features (&planner, &shape_plan->props, user_features, num_user_features);
 
@@ -235,14 +235,40 @@ hb_set_unicode_props (hb_buffer_t *buffer)
 }
 
 static void
+hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
+{
+  if (!(buffer->flags & HB_BUFFER_FLAG_BOT) ||
+      _hb_glyph_info_get_general_category (&buffer->info[0]) !=
+      HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
+    return;
+
+  hb_codepoint_t dottedcircle_glyph;
+  if (!font->get_glyph (0x25CC, 0, &dottedcircle_glyph))
+    return;
+
+  hb_glyph_info_t dottedcircle;
+  dottedcircle.codepoint = 0x25CC;
+  _hb_glyph_info_set_unicode_props (&dottedcircle, buffer->unicode);
+
+  buffer->clear_output ();
+
+  buffer->idx = 0;
+  hb_glyph_info_t info = dottedcircle;
+  info.cluster = buffer->cur().cluster;
+  info.mask = buffer->cur().mask;
+  buffer->output_info (info);
+  while (buffer->idx < buffer->len)
+    buffer->next_glyph ();
+
+  buffer->swap_buffers ();
+}
+
+static void
 hb_form_clusters (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
   for (unsigned int i = 1; i < count; i++)
-    if (FLAG (_hb_glyph_info_get_general_category (&buffer->info[i])) &
-       (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) |
-        FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) |
-        FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
+    if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->info[i])))
       buffer->merge_clusters (i - 1, i + 1);
 }
 
@@ -317,6 +343,16 @@ hb_ot_map_glyphs_fast (hb_buffer_t  *buffer)
 }
 
 static inline void
+hb_synthesize_glyph_classes (hb_ot_shape_context_t *c)
+{
+  unsigned int count = c->buffer->len;
+  for (unsigned int i = 0; i < count; i++)
+    c->buffer->info[i].glyph_props() = _hb_glyph_info_get_general_category (&c->buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK ?
+                                      HB_OT_LAYOUT_GLYPH_PROPS_MARK :
+                                      HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH;
+}
+
+static inline void
 hb_ot_substitute_default (hb_ot_shape_context_t *c)
 {
   if (c->plan->shaper->preprocess_text)
@@ -326,30 +362,20 @@ hb_ot_substitute_default (hb_ot_shape_context_t *c)
 
   HB_BUFFER_ALLOCATE_VAR (c->buffer, glyph_index);
 
-  _hb_ot_shape_normalize (c->font, c->buffer,
-                         c->plan->shaper->normalization_preference ?
-                         c->plan->shaper->normalization_preference (c->plan) :
-                         HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT);
+  _hb_ot_shape_normalize (c->plan, c->buffer, c->font);
 
   hb_ot_shape_setup_masks (c);
 
+  /* This is unfortunate to go here, but necessary... */
+  if (!hb_ot_layout_has_positioning (c->face))
+    _hb_ot_shape_fallback_position_recategorize_marks (c->plan, c->font, c->buffer);
+
   hb_ot_map_glyphs_fast (c->buffer);
 
   HB_BUFFER_DEALLOCATE_VAR (c->buffer, glyph_index);
 }
 
 static inline void
-hb_synthesize_glyph_classes (hb_ot_shape_context_t *c)
-{
-  unsigned int count = c->buffer->len;
-  for (unsigned int i = 0; i < count; i++)
-    c->buffer->info[i].glyph_props() = _hb_glyph_info_get_general_category (&c->buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK ?
-                                      HB_OT_LAYOUT_GLYPH_CLASS_MARK :
-                                      HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH;
-}
-
-
-static inline void
 hb_ot_substitute_complex (hb_ot_shape_context_t *c)
 {
   hb_ot_layout_substitute_start (c->font, c->buffer);
@@ -357,8 +383,7 @@ hb_ot_substitute_complex (hb_ot_shape_context_t *c)
   if (!hb_ot_layout_has_glyph_classes (c->face))
     hb_synthesize_glyph_classes (c);
 
-  if (hb_ot_layout_has_substitution (c->face))
-    c->plan->substitute (c->font, c->buffer);
+  c->plan->substitute (c->font, c->buffer);
 
   hb_ot_layout_substitute_finish (c->font, c->buffer);
 
@@ -427,12 +452,6 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
 }
 
 static inline void
-hb_ot_position_complex_fallback (hb_ot_shape_context_t *c)
-{
-  _hb_ot_shape_fallback_position (c->plan, c->font, c->buffer);
-}
-
-static inline void
 hb_ot_truetype_kern (hb_ot_shape_context_t *c)
 {
   /* TODO Check for kern=0 */
@@ -458,42 +477,45 @@ hb_ot_truetype_kern (hb_ot_shape_context_t *c)
 }
 
 static inline void
-hb_position_complex_fallback_visual (hb_ot_shape_context_t *c)
-{
-  hb_ot_truetype_kern (c);
-}
-
-static inline void
 hb_ot_position (hb_ot_shape_context_t *c)
 {
   hb_ot_position_default (c);
 
   hb_bool_t fallback = !hb_ot_position_complex (c);
 
-  if (fallback)
-    hb_ot_position_complex_fallback (c);
+  if (fallback && c->plan->shaper->fallback_position)
+    _hb_ot_shape_fallback_position (c->plan, c->font, c->buffer);
 
   if (HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction))
     hb_buffer_reverse (c->buffer);
 
+  /* Visual fallback goes here. */
+
   if (fallback)
-    hb_position_complex_fallback_visual (c);
+    hb_ot_truetype_kern (c);
 }
 
 
 /* Post-process */
 
 static void
-hb_ot_hide_zerowidth (hb_ot_shape_context_t *c)
+hb_ot_hide_default_ignorables (hb_ot_shape_context_t *c)
 {
-  hb_codepoint_t space;
-  if (!c->font->get_glyph (' ', 0, &space))
-    return; /* No point! */
+  if (c->buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES)
+    return;
+
+  hb_codepoint_t space = 0;
 
   unsigned int count = c->buffer->len;
   for (unsigned int i = 0; i < count; i++)
     if (unlikely (!is_a_ligature (c->buffer->info[i]) &&
-                 _hb_glyph_info_is_zero_width (&c->buffer->info[i]))) {
+                 _hb_glyph_info_is_default_ignorable (&c->buffer->info[i])))
+    {
+      if (!space) {
+        /* We assume that the space glyph is not gid0. */
+        if (unlikely (!c->font->get_glyph (' ', 0, &space)) || !space)
+       return; /* No point! */
+      }
       c->buffer->info[i].codepoint = space;
       c->buffer->pos[i].x_advance = 0;
       c->buffer->pos[i].y_advance = 0;
@@ -517,6 +539,7 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
   c->buffer->clear_output ();
 
   hb_set_unicode_props (c->buffer);
+  hb_insert_dotted_circle (c->buffer, c->font);
   hb_form_clusters (c->buffer);
 
   hb_ensure_native_direction (c->buffer);
@@ -524,7 +547,7 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
   hb_ot_substitute (c);
   hb_ot_position (c);
 
-  hb_ot_hide_zerowidth (c);
+  hb_ot_hide_default_ignorables (c);
 
   HB_BUFFER_DEALLOCATE_VAR (c->buffer, unicode_props1);
   HB_BUFFER_DEALLOCATE_VAR (c->buffer, unicode_props0);
@@ -549,16 +572,36 @@ _hb_ot_shape (hb_shape_plan_t    *shape_plan,
 }
 
 
+void
+hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
+                                 hb_tag_t         table_tag,
+                                 hb_set_t        *lookup_indexes /* OUT */)
+{
+  /* XXX Does the first part always succeed? */
+  HB_SHAPER_DATA_GET (shape_plan)->collect_lookups (table_tag, lookup_indexes);
+}
 
-static inline void
-hb_ot_map_glyphs_dumb (hb_font_t    *font,
-                      hb_buffer_t  *buffer)
+
+/* TODO Move this to hb-ot-shape-normalize, make it do decompose, and make it public. */
+static void
+add_char (hb_font_t          *font,
+         hb_unicode_funcs_t *unicode,
+         hb_bool_t           mirror,
+         hb_codepoint_t      u,
+         hb_set_t           *glyphs)
 {
-  unsigned int count = buffer->len;
-  for (unsigned int i = 0; i < count; i++)
-    font->get_glyph (buffer->cur().codepoint, 0, &buffer->cur().codepoint);
+  hb_codepoint_t glyph;
+  if (font->get_glyph (u, 0, &glyph))
+    glyphs->add (glyph);
+  if (mirror)
+  {
+    hb_codepoint_t m = unicode->mirroring (u);
+    if (m != u && font->get_glyph (m, 0, &glyph))
+      glyphs->add (glyph);
+  }
 }
 
+
 void
 hb_ot_shape_glyphs_closure (hb_font_t          *font,
                            hb_buffer_t        *buffer,
@@ -568,29 +611,30 @@ hb_ot_shape_glyphs_closure (hb_font_t          *font,
 {
   hb_ot_shape_plan_t plan;
 
-  buffer->guess_properties ();
+  buffer->guess_segment_properties ();
 
-  /* TODO cache / ensure correct backend, etc. */
-  hb_shape_plan_t *shape_plan = hb_shape_plan_create (font->face, &buffer->props, features, num_features, NULL);
+  const char *shapers[] = {"ot", NULL};
+  hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props,
+                                                            features, num_features, shapers);
 
-  /* TODO: normalization? have shapers do closure()? */
-  /* TODO: Deal with mirrored chars? */
-  hb_ot_map_glyphs_dumb (font, buffer);
+  bool mirror = hb_script_get_horizontal_direction (buffer->props.script) == HB_DIRECTION_RTL;
 
-  /* Seed it.  It's user's responsibility to have cleard glyphs
-   * if that's what they desire. */
   unsigned int count = buffer->len;
   for (unsigned int i = 0; i < count; i++)
-    glyphs->add (buffer->info[i].codepoint);
+    add_char (font, buffer->unicode, mirror, buffer->info[i].codepoint, glyphs);
+
+  hb_set_t lookups;
+  lookups.init ();
+  hb_ot_shape_plan_collect_lookups (shape_plan, HB_OT_TAG_GSUB, &lookups);
 
   /* And find transitive closure. */
   hb_set_t copy;
   copy.init ();
-
   do {
     copy.set (glyphs);
-    HB_SHAPER_DATA_GET (shape_plan)->substitute_closure (font->face, glyphs);
-  } while (!copy.equal (glyphs));
+    for (hb_codepoint_t lookup_index = -1; hb_set_next (&lookups, &lookup_index);)
+      hb_ot_layout_lookup_substitute_closure (font->face, lookup_index, glyphs);
+  } while (!copy.is_equal (glyphs));
 
   hb_shape_plan_destroy (shape_plan);
 }
index ac60e96..91ebec7 100644 (file)
@@ -23,7 +23,7 @@
  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * Red Hat Author(s): Behdad Esfahbod
- * Google Author(s): Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod, Roozbeh Pournader
  */
 
 #include "hb-private.hh"
@@ -38,6 +38,8 @@
 static hb_tag_t
 hb_ot_old_tag_from_script (hb_script_t script)
 {
+  /* This seems to be accurate as of end of 2012. */
+
   switch ((hb_tag_t) script) {
     case HB_SCRIPT_INVALID:            return HB_OT_TAG_DEFAULT_SCRIPT;
 
@@ -91,6 +93,7 @@ hb_ot_new_tag_from_script (hb_script_t script)
     case HB_SCRIPT_ORIYA:              return HB_TAG('o','r','y','2');
     case HB_SCRIPT_TAMIL:              return HB_TAG('t','m','l','2');
     case HB_SCRIPT_TELUGU:             return HB_TAG('t','e','l','2');
+    case HB_SCRIPT_MYANMAR:            return HB_TAG('m','y','m','2');
   }
 
   return HB_OT_TAG_DEFAULT_SCRIPT;
@@ -109,6 +112,7 @@ hb_ot_new_tag_to_script (hb_tag_t tag)
     case HB_TAG('o','r','y','2'):      return HB_SCRIPT_ORIYA;
     case HB_TAG('t','m','l','2'):      return HB_SCRIPT_TAMIL;
     case HB_TAG('t','e','l','2'):      return HB_SCRIPT_TELUGU;
+    case HB_TAG('m','y','m','2'):      return HB_SCRIPT_MYANMAR;
   }
 
   return HB_SCRIPT_UNKNOWN;
@@ -165,7 +169,9 @@ typedef struct {
  * Draft OpenType 1.5 spec, with with the ISO 639-3 codes from
  * 2008/08/04, matching on name, and finally adjusted manually.
  *
- * Many items still missing.  Those are commented out at the end.
+ * Updated on 2012/12/07 with more research into remaining codes.
+ *
+ * Some items still missing.  Those are commented out at the end.
  * Keep sorted for bsearch.
  */
 
@@ -173,43 +179,63 @@ static const LangTag ot_languages[] = {
   {"aa",       HB_TAG('A','F','R',' ')},       /* Afar */
   {"ab",       HB_TAG('A','B','K',' ')},       /* Abkhazian */
   {"abq",      HB_TAG('A','B','A',' ')},       /* Abaza */
+  {"ada",      HB_TAG('D','N','G',' ')},       /* Dangme */
   {"ady",      HB_TAG('A','D','Y',' ')},       /* Adyghe */
   {"af",       HB_TAG('A','F','K',' ')},       /* Afrikaans */
+  {"aii",      HB_TAG('S','W','A',' ')},       /* Swadaya Aramaic */
   {"aiw",      HB_TAG('A','R','I',' ')},       /* Aari */
+  {"alt",      HB_TAG('A','L','T',' ')},       /* [Southern] Altai */
   {"am",       HB_TAG('A','M','H',' ')},       /* Amharic */
+  {"amf",      HB_TAG('H','B','N',' ')},       /* Hammer-Banna */
   {"ar",       HB_TAG('A','R','A',' ')},       /* Arabic */
   {"arn",      HB_TAG('M','A','P',' ')},       /* Mapudungun */
   {"as",       HB_TAG('A','S','M',' ')},       /* Assamese */
+  {"ath",      HB_TAG('A','T','H',' ')},       /* Athapaskan [family] */
+  {"atv",      HB_TAG('A','L','T',' ')},       /* [Northern] Altai */
   {"av",       HB_TAG('A','V','R',' ')},       /* Avaric */
   {"awa",      HB_TAG('A','W','A',' ')},       /* Awadhi */
   {"ay",       HB_TAG('A','Y','M',' ')},       /* Aymara */
   {"az",       HB_TAG('A','Z','E',' ')},       /* Azerbaijani */
   {"ba",       HB_TAG('B','S','H',' ')},       /* Bashkir */
+  {"bai",      HB_TAG('B','M','L',' ')},       /* Bamileke [family] */
   {"bal",      HB_TAG('B','L','I',' ')},       /* Baluchi */
+  {"bci",      HB_TAG('B','A','U',' ')},       /* Baule */
   {"bcq",      HB_TAG('B','C','H',' ')},       /* Bench */
+  {"be",       HB_TAG('B','E','L',' ')},       /* Belarussian */
   {"bem",      HB_TAG('B','E','M',' ')},       /* Bemba (Zambia) */
+  {"ber",      HB_TAG('B','E','R',' ')},       /* Berber [family] */
   {"bfq",      HB_TAG('B','A','D',' ')},       /* Badaga */
   {"bft",      HB_TAG('B','L','T',' ')},       /* Balti */
+  {"bfy",      HB_TAG('B','A','G',' ')},       /* Baghelkhandi */
   {"bg",       HB_TAG('B','G','R',' ')},       /* Bulgarian */
   {"bhb",      HB_TAG('B','H','I',' ')},       /* Bhili */
   {"bho",      HB_TAG('B','H','O',' ')},       /* Bhojpuri */
   {"bik",      HB_TAG('B','I','K',' ')},       /* Bikol */
   {"bin",      HB_TAG('E','D','O',' ')},       /* Bini */
+  {"bjt",      HB_TAG('B','L','N',' ')},       /* Balanta-Ganja */
+  {"bla",      HB_TAG('B','K','F',' ')},       /* Blackfoot */
+  {"ble",      HB_TAG('B','L','N',' ')},       /* Balanta-Kentohe */
   {"bm",       HB_TAG('B','M','B',' ')},       /* Bambara */
   {"bn",       HB_TAG('B','E','N',' ')},       /* Bengali */
   {"bo",       HB_TAG('T','I','B',' ')},       /* Tibetan */
   {"br",       HB_TAG('B','R','E',' ')},       /* Breton */
+  {"bra",      HB_TAG('B','R','I',' ')},       /* Braj Bhasha */
   {"brh",      HB_TAG('B','R','H',' ')},       /* Brahui */
   {"bs",       HB_TAG('B','O','S',' ')},       /* Bosnian */
   {"btb",      HB_TAG('B','T','I',' ')},       /* Beti (Cameroon) */
+  {"bxr",      HB_TAG('R','B','U',' ')},       /* Russian Buriat */
+  {"byn",      HB_TAG('B','I','L',' ')},       /* Bilen */
   {"ca",       HB_TAG('C','A','T',' ')},       /* Catalan */
   {"ce",       HB_TAG('C','H','E',' ')},       /* Chechen */
   {"ceb",      HB_TAG('C','E','B',' ')},       /* Cebuano */
   {"chp",      HB_TAG('C','H','P',' ')},       /* Chipewyan */
   {"chr",      HB_TAG('C','H','R',' ')},       /* Cherokee */
+  {"ckt",      HB_TAG('C','H','K',' ')},       /* Chukchi */
   {"cop",      HB_TAG('C','O','P',' ')},       /* Coptic */
   {"cr",       HB_TAG('C','R','E',' ')},       /* Cree */
   {"crh",      HB_TAG('C','R','T',' ')},       /* Crimean Tatar */
+  {"crj",      HB_TAG('E','C','R',' ')},       /* [Southern] East Cree */
+  {"crl",      HB_TAG('E','C','R',' ')},       /* [Northern] East Cree */
   {"crm",      HB_TAG('M','C','R',' ')},       /* Moose Cree */
   {"crx",      HB_TAG('C','R','R',' ')},       /* Carrier */
   {"cs",       HB_TAG('C','S','Y',' ')},       /* Czech */
@@ -222,10 +248,12 @@ static const LangTag ot_languages[] = {
   {"dar",      HB_TAG('D','A','R',' ')},       /* Dargwa */
   {"de",       HB_TAG('D','E','U',' ')},       /* German */
   {"din",      HB_TAG('D','N','K',' ')},       /* Dinka */
+  {"dje",      HB_TAG('D','J','R',' ')},       /* Djerma */
   {"dng",      HB_TAG('D','U','N',' ')},       /* Dungan */
   {"doi",      HB_TAG('D','G','R',' ')},       /* Dogri */
   {"dsb",      HB_TAG('L','S','B',' ')},       /* Lower Sorbian */
   {"dv",       HB_TAG('D','I','V',' ')},       /* Dhivehi */
+  {"dyu",      HB_TAG('J','U','L',' ')},       /* Jula */
   {"dz",       HB_TAG('D','Z','N',' ')},       /* Dzongkha */
   {"ee",       HB_TAG('E','W','E',' ')},       /* Ewe */
   {"efi",      HB_TAG('E','F','I',' ')},       /* Efik */
@@ -253,20 +281,27 @@ static const LangTag ot_languages[] = {
   {"gag",      HB_TAG('G','A','G',' ')},       /* Gagauz */
   {"gbm",      HB_TAG('G','A','W',' ')},       /* Garhwali */
   {"gd",       HB_TAG('G','A','E',' ')},       /* Scottish Gaelic */
+  {"gez",      HB_TAG('G','E','Z',' ')},       /* Ge'ez */
   {"gl",       HB_TAG('G','A','L',' ')},       /* Galician */
   {"gld",      HB_TAG('N','A','N',' ')},       /* Nanai */
   {"gn",       HB_TAG('G','U','A',' ')},       /* Guarani */
   {"gon",      HB_TAG('G','O','N',' ')},       /* Gondi */
   {"grt",      HB_TAG('G','R','O',' ')},       /* Garo */
+  {"gru",      HB_TAG('S','O','G',' ')},       /* Sodo Gurage */
   {"gu",       HB_TAG('G','U','J',' ')},       /* Gujarati */
   {"guk",      HB_TAG('G','M','Z',' ')},       /* Gumuz */
   {"gv",       HB_TAG('M','N','X',' ')},       /* Manx Gaelic */
   {"ha",       HB_TAG('H','A','U',' ')},       /* Hausa */
   {"har",      HB_TAG('H','R','I',' ')},       /* Harari */
+  {"haw",      HB_TAG('H','A','W',' ')},       /* Hawaiin */
   {"he",       HB_TAG('I','W','R',' ')},       /* Hebrew */
   {"hi",       HB_TAG('H','I','N',' ')},       /* Hindi */
   {"hil",      HB_TAG('H','I','L',' ')},       /* Hiligaynon */
+  {"hnd",      HB_TAG('H','N','D',' ')},       /* [Southern] Hindko */
+  {"hne",      HB_TAG('C','H','H',' ')},       /* Chattisgarhi */
+  {"hno",      HB_TAG('H','N','D',' ')},       /* [Northern] Hindko */
   {"hoc",      HB_TAG('H','O',' ',' ')},       /* Ho */
+  {"hoj",      HB_TAG('H','A','R',' ')},       /* Harauti */
   {"hr",       HB_TAG('H','R','V',' ')},       /* Croatian */
   {"hsb",      HB_TAG('U','S','B',' ')},       /* Upper Sorbian */
   {"ht",       HB_TAG('H','A','I',' ')},       /* Haitian */
@@ -275,6 +310,8 @@ static const LangTag ot_languages[] = {
   {"id",       HB_TAG('I','N','D',' ')},       /* Indonesian */
   {"ig",       HB_TAG('I','B','O',' ')},       /* Igbo */
   {"igb",      HB_TAG('E','B','I',' ')},       /* Ebira */
+  {"ijo",      HB_TAG('I','J','O',' ')},       /* Ijo [family] */
+  {"ilo",      HB_TAG('I','L','O',' ')},       /* Ilokano */
   {"inh",      HB_TAG('I','N','G',' ')},       /* Ingush */
   {"is",       HB_TAG('I','S','L',' ')},       /* Icelandic */
   {"it",       HB_TAG('I','T','A',' ')},       /* Italian */
@@ -282,19 +319,25 @@ static const LangTag ot_languages[] = {
   {"ja",       HB_TAG('J','A','N',' ')},       /* Japanese */
   {"jv",       HB_TAG('J','A','V',' ')},       /* Javanese */
   {"ka",       HB_TAG('K','A','T',' ')},       /* Georgian */
+  {"kaa",      HB_TAG('K','R','K',' ')},       /* Karakalpak */
   {"kam",      HB_TAG('K','M','B',' ')},       /* Kamba (Kenya) */
+  {"kar",      HB_TAG('K','R','N',' ')},       /* Karen [family] */
   {"kbd",      HB_TAG('K','A','B',' ')},       /* Kabardian */
   {"kdr",      HB_TAG('K','R','M',' ')},       /* Karaim */
   {"kdt",      HB_TAG('K','U','Y',' ')},       /* Kuy */
+  {"kex",      HB_TAG('K','K','N',' ')},       /* Kokni */
   {"kfr",      HB_TAG('K','A','C',' ')},       /* Kachchi */
   {"kfy",      HB_TAG('K','M','N',' ')},       /* Kumaoni */
   {"kha",      HB_TAG('K','S','I',' ')},       /* Khasi */
+  {"khb",      HB_TAG('X','B','D',' ')},       /* Tai Lue */
   {"khw",      HB_TAG('K','H','W',' ')},       /* Khowar */
   {"ki",       HB_TAG('K','I','K',' ')},       /* Kikuyu */
+  {"kjh",      HB_TAG('K','H','A',' ')},       /* Khakass */
   {"kk",       HB_TAG('K','A','Z',' ')},       /* Kazakh */
   {"kl",       HB_TAG('G','R','N',' ')},       /* Kalaallisut */
   {"kln",      HB_TAG('K','A','L',' ')},       /* Kalenjin */
   {"km",       HB_TAG('K','H','M',' ')},       /* Central Khmer */
+  {"kmb",      HB_TAG('M','B','N',' ')},       /* [North] Mbundu */
   {"kmw",      HB_TAG('K','M','O',' ')},       /* Komo (Democratic Republic of Congo) */
   {"kn",       HB_TAG('K','A','N',' ')},       /* Kannada */
   {"ko",       HB_TAG('K','O','R',' ')},       /* Korean */
@@ -312,6 +355,7 @@ static const LangTag ot_languages[] = {
   {"ku",       HB_TAG('K','U','R',' ')},       /* Kurdish */
   {"kum",      HB_TAG('K','U','M',' ')},       /* Kumyk */
   {"kvd",      HB_TAG('K','U','I',' ')},       /* Kui (Indonesia) */
+  {"kxc",      HB_TAG('K','M','S',' ')},       /* Komso */
   {"kxu",      HB_TAG('K','U','I',' ')},       /* Kui (India) */
   {"ky",       HB_TAG('K','I','R',' ')},       /* Kirghiz */
   {"la",       HB_TAG('L','A','T',' ')},       /* Latin */
@@ -319,13 +363,19 @@ static const LangTag ot_languages[] = {
   {"lb",       HB_TAG('L','T','Z',' ')},       /* Luxembourgish */
   {"lbe",      HB_TAG('L','A','K',' ')},       /* Lak */
   {"lbj",      HB_TAG('L','D','K',' ')},       /* Ladakhi */
+  {"lez",      HB_TAG('L','E','Z',' ')},       /* Lezgi */
+  {"lg",       HB_TAG('L','U','G',' ')},       /* Luganda */
   {"lif",      HB_TAG('L','M','B',' ')},       /* Limbu */
   {"lld",      HB_TAG('L','A','D',' ')},       /* Ladin */
+  {"lmn",      HB_TAG('L','A','M',' ')},       /* Lambani */
   {"ln",       HB_TAG('L','I','N',' ')},       /* Lingala */
   {"lo",       HB_TAG('L','A','O',' ')},       /* Lao */
   {"lt",       HB_TAG('L','T','H',' ')},       /* Lithuanian */
+  {"lu",       HB_TAG('L','U','B',' ')},       /* Luba-Katanga */
+  {"lua",      HB_TAG('L','U','B',' ')},       /* Luba-Kasai */
   {"luo",      HB_TAG('L','U','O',' ')},       /* Luo (Kenya and Tanzania) */
-  {"luw",      HB_TAG('L','U','O',' ')},       /* Luo (Cameroon) */
+  {"lus",      HB_TAG('M','I','Z',' ')},       /* Mizo */
+  {"luy",      HB_TAG('L','U','H',' ')},       /* Luhya [macrolanguage] */
   {"lv",       HB_TAG('L','V','I',' ')},       /* Latvian */
   {"lzz",      HB_TAG('L','A','Z',' ')},       /* Laz */
   {"mai",      HB_TAG('M','T','H',' ')},       /* Maithili */
@@ -334,6 +384,7 @@ static const LangTag ot_languages[] = {
   {"mdy",      HB_TAG('M','L','E',' ')},       /* Male (Ethiopia) */
   {"men",      HB_TAG('M','D','E',' ')},       /* Mende (Sierra Leone) */
   {"mg",       HB_TAG('M','L','G',' ')},       /* Malagasy */
+  {"mhr",      HB_TAG('L','M','A',' ')},       /* Low Mari */
   {"mi",       HB_TAG('M','R','I',' ')},       /* Maori */
   {"mk",       HB_TAG('M','K','D',' ')},       /* Macedonian */
   {"ml",       HB_TAG('M','L','R',' ')},       /* Malayalam */
@@ -347,14 +398,17 @@ static const LangTag ot_languages[] = {
   {"moh",      HB_TAG('M','O','H',' ')},       /* Mohawk */
   {"mpe",      HB_TAG('M','A','J',' ')},       /* Majang */
   {"mr",       HB_TAG('M','A','R',' ')},       /* Marathi */
+  {"mrj",      HB_TAG('H','M','A',' ')},       /* High Mari */
   {"ms",       HB_TAG('M','L','Y',' ')},       /* Malay */
   {"mt",       HB_TAG('M','T','S',' ')},       /* Maltese */
   {"mwr",      HB_TAG('M','A','W',' ')},       /* Marwari */
   {"my",       HB_TAG('B','R','M',' ')},       /* Burmese */
   {"mym",      HB_TAG('M','E','N',' ')},       /* Me'en */
   {"myv",      HB_TAG('E','R','Z',' ')},       /* Erzya */
+  {"nag",      HB_TAG('N','A','G',' ')},       /* Naga-Assamese */
   {"nb",       HB_TAG('N','O','R',' ')},       /* Norwegian Bokmål */
   {"nco",      HB_TAG('S','I','B',' ')},       /* Sibe */
+  {"nd",       HB_TAG('N','D','B',' ')},       /* [North] Ndebele */
   {"ne",       HB_TAG('N','E','P',' ')},       /* Nepali */
   {"new",      HB_TAG('N','E','W',' ')},       /* Newari */
   {"ng",       HB_TAG('N','D','G',' ')},       /* Ndonga */
@@ -364,33 +418,45 @@ static const LangTag ot_languages[] = {
   {"nl",       HB_TAG('N','L','D',' ')},       /* Dutch */
   {"nn",       HB_TAG('N','Y','N',' ')},       /* Norwegian Nynorsk */
   {"no",       HB_TAG('N','O','R',' ')},       /* Norwegian (deprecated) */
+  {"nod",      HB_TAG('N','T','A',' ')},       /* Northern Tai */
   {"nog",      HB_TAG('N','O','G',' ')},       /* Nogai */
   {"nqo",      HB_TAG('N','K','O',' ')},       /* N'Ko */
+  {"nr",       HB_TAG('N','D','B',' ')},       /* [South] Ndebele */
   {"nsk",      HB_TAG('N','A','S',' ')},       /* Naskapi */
+  {"nso",      HB_TAG('S','O','T',' ')},       /* [Northern] Sotho */
   {"ny",       HB_TAG('C','H','I',' ')},       /* Nyanja */
+  {"nyn",      HB_TAG('N','K','L',' ')},       /* Nkole */
   {"oc",       HB_TAG('O','C','I',' ')},       /* Occitan (post 1500) */
   {"oj",       HB_TAG('O','J','B',' ')},       /* Ojibwa */
+  {"ojs",      HB_TAG('O','C','R',' ')},       /* Oji-Cree */
   {"om",       HB_TAG('O','R','O',' ')},       /* Oromo */
   {"or",       HB_TAG('O','R','I',' ')},       /* Oriya */
   {"os",       HB_TAG('O','S','S',' ')},       /* Ossetian */
   {"pa",       HB_TAG('P','A','N',' ')},       /* Panjabi */
+  {"pce",      HB_TAG('P','L','G',' ')},       /* [Ruching] Palaung */
   {"pi",       HB_TAG('P','A','L',' ')},       /* Pali */
   {"pl",       HB_TAG('P','L','K',' ')},       /* Polish */
+  {"pll",      HB_TAG('P','L','G',' ')},       /* [Shwe] Palaung */
   {"plp",      HB_TAG('P','A','P',' ')},       /* Palpa */
   {"prs",      HB_TAG('D','R','I',' ')},       /* Dari */
   {"ps",       HB_TAG('P','A','S',' ')},       /* Pushto */
   {"pt",       HB_TAG('P','T','G',' ')},       /* Portuguese */
   {"raj",      HB_TAG('R','A','J',' ')},       /* Rajasthani */
+  {"rbb",      HB_TAG('P','L','G',' ')},       /* [Rumai] Palaung */
   {"ria",      HB_TAG('R','I','A',' ')},       /* Riang (India) */
   {"ril",      HB_TAG('R','I','A',' ')},       /* Riang (Myanmar) */
+  {"rki",      HB_TAG('A','R','K',' ')},       /* Arakanese */
+  {"rm",       HB_TAG('R','M','S',' ')},       /* Rhaeto-Romanic */
   {"ro",       HB_TAG('R','O','M',' ')},       /* Romanian */
   {"rom",      HB_TAG('R','O','Y',' ')},       /* Romany */
   {"ru",       HB_TAG('R','U','S',' ')},       /* Russian */
   {"rue",      HB_TAG('R','S','Y',' ')},       /* Rusyn */
+  {"rw",       HB_TAG('R','U','A',' ')},       /* Ruanda */
   {"sa",       HB_TAG('S','A','N',' ')},       /* Sanskrit */
   {"sah",      HB_TAG('Y','A','K',' ')},       /* Yakut */
   {"sat",      HB_TAG('S','A','T',' ')},       /* Santali */
   {"sck",      HB_TAG('S','A','D',' ')},       /* Sadri */
+  {"scs",      HB_TAG('S','L','A',' ')},       /* [North] Slavey */
   {"sd",       HB_TAG('S','N','D',' ')},       /* Sindhi */
   {"se",       HB_TAG('N','S','M',' ')},       /* Northern Sami */
   {"seh",      HB_TAG('S','N','A',' ')},       /* Sena */
@@ -413,6 +479,8 @@ static const LangTag ot_languages[] = {
   {"sq",       HB_TAG('S','Q','I',' ')},       /* Albanian */
   {"sr",       HB_TAG('S','R','B',' ')},       /* Serbian */
   {"srr",      HB_TAG('S','R','R',' ')},       /* Serer */
+  {"ss",       HB_TAG('S','W','Z',' ')},       /* Swazi */
+  {"st",       HB_TAG('S','O','T',' ')},       /* [Southern] Sotho */
   {"suq",      HB_TAG('S','U','R',' ')},       /* Suri */
   {"sv",       HB_TAG('S','V','E',' ')},       /* Swedish */
   {"sva",      HB_TAG('S','V','A',' ')},       /* Svan */
@@ -420,31 +488,34 @@ static const LangTag ot_languages[] = {
   {"swb",      HB_TAG('C','M','R',' ')},       /* Comorian */
   {"syr",      HB_TAG('S','Y','R',' ')},       /* Syriac */
   {"ta",       HB_TAG('T','A','M',' ')},       /* Tamil */
+  {"tab",      HB_TAG('T','A','B',' ')},       /* Tabasaran */
   {"tcy",      HB_TAG('T','U','L',' ')},       /* Tulu */
   {"te",       HB_TAG('T','E','L',' ')},       /* Telugu */
+  {"tem",      HB_TAG('T','M','N',' ')},       /* Temne */
   {"tg",       HB_TAG('T','A','J',' ')},       /* Tajik */
   {"th",       HB_TAG('T','H','A',' ')},       /* Thai */
   {"ti",       HB_TAG('T','G','Y',' ')},       /* Tigrinya */
   {"tig",      HB_TAG('T','G','R',' ')},       /* Tigre */
   {"tk",       HB_TAG('T','K','M',' ')},       /* Turkmen */
   {"tn",       HB_TAG('T','N','A',' ')},       /* Tswana */
-  {"tnz",      HB_TAG('T','N','G',' ')},       /* Tonga (Thailand) */
-  {"to",       HB_TAG('T','N','G',' ')},       /* Tonga (Tonga Islands) */
-  {"tog",      HB_TAG('T','N','G',' ')},       /* Tonga (Nyasa) */
-  {"toi",      HB_TAG('T','N','G',' ')},       /* Tonga (Zambia) */
+  {"to",       HB_TAG('T','G','N',' ')},       /* Tonga (Tonga Islands) */
   {"tr",       HB_TAG('T','R','K',' ')},       /* Turkish */
+  {"tru",      HB_TAG('T','U','A',' ')},       /* Turoyo Aramaic */
   {"ts",       HB_TAG('T','S','G',' ')},       /* Tsonga */
   {"tt",       HB_TAG('T','A','T',' ')},       /* Tatar */
   {"tw",       HB_TAG('T','W','I',' ')},       /* Twi */
   {"ty",       HB_TAG('T','H','T',' ')},       /* Tahitian */
+  {"tyv",      HB_TAG('T','U','V',' ')},       /* Tuvin */
   {"udm",      HB_TAG('U','D','M',' ')},       /* Udmurt */
   {"ug",       HB_TAG('U','Y','G',' ')},       /* Uighur */
   {"uk",       HB_TAG('U','K','R',' ')},       /* Ukrainian */
+  {"umb",      HB_TAG('M','B','N',' ')},       /* [South] Mbundu */
   {"unr",      HB_TAG('M','U','N',' ')},       /* Mundari */
   {"ur",       HB_TAG('U','R','D',' ')},       /* Urdu */
   {"uz",       HB_TAG('U','Z','B',' ')},       /* Uzbek */
   {"ve",       HB_TAG('V','E','N',' ')},       /* Venda */
   {"vi",       HB_TAG('V','I','T',' ')},       /* Vietnamese */
+  {"vmw",      HB_TAG('M','A','K',' ')},       /* Makua */
   {"wbm",      HB_TAG('W','A',' ',' ')},       /* Wa */
   {"wbr",      HB_TAG('W','A','G',' ')},       /* Wagdi */
   {"wo",       HB_TAG('W','L','F',' ')},       /* Wolof */
@@ -458,115 +529,56 @@ static const LangTag ot_languages[] = {
   {"zne",      HB_TAG('Z','N','D',' ')},       /* Zande */
   {"zu",       HB_TAG('Z','U','L',' ')}        /* Zulu */
 
-  /* I couldn't find the language id for these */
-
-/*{"??",       HB_TAG('A','G','W',' ')},*/     /* Agaw */
-/*{"??",       HB_TAG('A','L','S',' ')},*/     /* Alsatian */
-/*{"??",       HB_TAG('A','L','T',' ')},*/     /* Altai */
-/*{"??",       HB_TAG('A','R','K',' ')},*/     /* Arakanese */
-/*{"??",       HB_TAG('A','T','H',' ')},*/     /* Athapaskan */
-/*{"??",       HB_TAG('B','A','G',' ')},*/     /* Baghelkhandi */
-/*{"??",       HB_TAG('B','A','L',' ')},*/     /* Balkar */
-/*{"??",       HB_TAG('B','A','U',' ')},*/     /* Baule */
-/*{"??",       HB_TAG('B','B','R',' ')},*/     /* Berber */
+  /* The corresponding languages IDs for the following IDs are unclear,
+   * overlap, or are architecturally weird. Needs more research. */
+
+/*{"ahg/awn/xan?",     HB_TAG('A','G','W',' ')},*/     /* Agaw */
+/*{"gsw?/gsw-FR?",     HB_TAG('A','L','S',' ')},*/     /* Alsatian */
+/*{"krc",      HB_TAG('B','A','L',' ')},*/     /* Balkar */
 /*{"??",       HB_TAG('B','C','R',' ')},*/     /* Bible Cree */
-/*{"??",       HB_TAG('B','E','L',' ')},*/     /* Belarussian */
-/*{"??",       HB_TAG('B','I','L',' ')},*/     /* Bilen */
-/*{"??",       HB_TAG('B','K','F',' ')},*/     /* Blackfoot */
-/*{"??",       HB_TAG('B','L','N',' ')},*/     /* Balante */
-/*{"??",       HB_TAG('B','M','L',' ')},*/     /* Bamileke */
-/*{"??",       HB_TAG('B','R','I',' ')},*/     /* Braj Bhasha */
-/*{"??",       HB_TAG('C','H','G',' ')},*/     /* Chaha Gurage */
-/*{"??",       HB_TAG('C','H','H',' ')},*/     /* Chattisgarhi */
-/*{"??",       HB_TAG('C','H','K',' ')},*/     /* Chukchi */
-/*{"??",       HB_TAG('D','J','R',' ')},*/     /* Djerma */
-/*{"??",       HB_TAG('D','N','G',' ')},*/     /* Dangme */
-/*{"??",       HB_TAG('E','C','R',' ')},*/     /* Eastern Cree */
-/*{"??",       HB_TAG('F','A','N',' ')},*/     /* French Antillean */
-/*{"??",       HB_TAG('F','L','E',' ')},*/     /* Flemish */
-/*{"??",       HB_TAG('F','N','E',' ')},*/     /* Forest Nenets */
-/*{"??",       HB_TAG('F','T','A',' ')},*/     /* Futa */
-/*{"??",       HB_TAG('G','A','R',' ')},*/     /* Garshuni */
-/*{"??",       HB_TAG('G','E','Z',' ')},*/     /* Ge'ez */
-/*{"??",       HB_TAG('H','A','L',' ')},*/     /* Halam */
-/*{"??",       HB_TAG('H','A','R',' ')},*/     /* Harauti */
-/*{"??",       HB_TAG('H','A','W',' ')},*/     /* Hawaiin */
-/*{"??",       HB_TAG('H','B','N',' ')},*/     /* Hammer-Banna */
-/*{"??",       HB_TAG('H','M','A',' ')},*/     /* High Mari */
-/*{"??",       HB_TAG('H','N','D',' ')},*/     /* Hindko */
-/*{"??",       HB_TAG('I','J','O',' ')},*/     /* Ijo */
-/*{"??",       HB_TAG('I','L','O',' ')},*/     /* Ilokano */
-/*{"??",       HB_TAG('I','R','T',' ')},*/     /* Irish Traditional */
-/*{"??",       HB_TAG('J','U','L',' ')},*/     /* Jula */
-/*{"??",       HB_TAG('K','A','R',' ')},*/     /* Karachay */
-/*{"??",       HB_TAG('K','E','B',' ')},*/     /* Kebena */
-/*{"??",       HB_TAG('K','G','E',' ')},*/     /* Khutsuri Georgian */
-/*{"??",       HB_TAG('K','H','A',' ')},*/     /* Khakass */
-/*{"??",       HB_TAG('K','H','K',' ')},*/     /* Khanty-Kazim */
-/*{"??",       HB_TAG('K','H','S',' ')},*/     /* Khanty-Shurishkar */
-/*{"??",       HB_TAG('K','H','V',' ')},*/     /* Khanty-Vakhi */
-/*{"??",       HB_TAG('K','I','S',' ')},*/     /* Kisii */
-/*{"??",       HB_TAG('K','K','N',' ')},*/     /* Kokni */
-/*{"??",       HB_TAG('K','M','S',' ')},*/     /* Komso */
-/*{"??",       HB_TAG('K','O','D',' ')},*/     /* Kodagu */
-/*{"??",       HB_TAG('K','O','H',' ')},*/     /* Korean Old Hangul */
-/*{"??",       HB_TAG('K','O','N',' ')},*/     /* Kikongo */
-/*{"??",       HB_TAG('K','R','K',' ')},*/     /* Karakalpak */
-/*{"??",       HB_TAG('K','R','N',' ')},*/     /* Karen */
-/*{"??",       HB_TAG('K','U','L',' ')},*/     /* Kulvi */
+/*{"sgw?",     HB_TAG('C','H','G',' ')},*/     /* Chaha Gurage */
+/*{"acf/gcf?", HB_TAG('F','A','N',' ')},*/     /* French Antillean */
+/*{"vls/nl-be",        HB_TAG('F','L','E',' ')},*/     /* Flemish */
+/*{"enf?/yrk?",        HB_TAG('F','N','E',' ')},*/     /* Forest Nenets */
+/*{"fuf?",     HB_TAG('F','T','A',' ')},*/     /* Futa */
+/*{"ar-Syrc?", HB_TAG('G','A','R',' ')},*/     /* Garshuni */
+/*{"cfm/rnl?", HB_TAG('H','A','L',' ')},*/     /* Halam */
+/*{"ga-Latg?/Latg?",   HB_TAG('I','R','T',' ')},*/     /* Irish Traditional */
+/*{"krc",      HB_TAG('K','A','R',' ')},*/     /* Karachay */
+/*{"alw?/ktb?",        HB_TAG('K','E','B',' ')},*/     /* Kebena */
+/*{"Geok",     HB_TAG('K','G','E',' ')},*/     /* Khutsuri Georgian */
+/*{"kca",      HB_TAG('K','H','K',' ')},*/     /* Khanty-Kazim */
+/*{"kca",      HB_TAG('K','H','S',' ')},*/     /* Khanty-Shurishkar */
+/*{"kca",      HB_TAG('K','H','V',' ')},*/     /* Khanty-Vakhi */
+/*{"guz?/kqs?/kss?",   HB_TAG('K','I','S',' ')},*/     /* Kisii */
+/*{"kfa/kfi?/kpb?/xua?/xuj?",  HB_TAG('K','O','D',' ')},*/     /* Kodagu */
+/*{"okm?/oko?",        HB_TAG('K','O','H',' ')},*/     /* Korean Old Hangul */
+/*{"kon?/ktu?/...",    HB_TAG('K','O','N',' ')},*/     /* Kikongo */
+/*{"kfx?",     HB_TAG('K','U','L',' ')},*/     /* Kulvi */
 /*{"??",       HB_TAG('L','A','H',' ')},*/     /* Lahuli */
-/*{"??",       HB_TAG('L','A','M',' ')},*/     /* Lambani */
 /*{"??",       HB_TAG('L','C','R',' ')},*/     /* L-Cree */
-/*{"??",       HB_TAG('L','E','Z',' ')},*/     /* Lezgi */
-/*{"??",       HB_TAG('L','M','A',' ')},*/     /* Low Mari */
-/*{"??",       HB_TAG('L','U','B',' ')},*/     /* Luba */
-/*{"??",       HB_TAG('L','U','G',' ')},*/     /* Luganda */
-/*{"??",       HB_TAG('L','U','H',' ')},*/     /* Luhya */
-/*{"??",       HB_TAG('M','A','K',' ')},*/     /* Makua */
 /*{"??",       HB_TAG('M','A','L',' ')},*/     /* Malayalam Traditional */
-/*{"??",       HB_TAG('M','B','N',' ')},*/     /* Mbundu */
-/*{"??",       HB_TAG('M','I','Z',' ')},*/     /* Mizo */
-/*{"??",       HB_TAG('M','L','N',' ')},*/     /* Malinke */
-/*{"??",       HB_TAG('M','N','K',' ')},*/     /* Maninka */
+/*{"mnk?/mlq?/...",    HB_TAG('M','L','N',' ')},*/     /* Malinke */
+/*{"man?/myq?/mku?/msc?/...",  HB_TAG('M','N','K',' ')},*/     /* Maninka */
 /*{"??",       HB_TAG('M','O','R',' ')},*/     /* Moroccan */
-/*{"??",       HB_TAG('N','A','G',' ')},*/     /* Naga-Assamese */
 /*{"??",       HB_TAG('N','C','R',' ')},*/     /* N-Cree */
-/*{"??",       HB_TAG('N','D','B',' ')},*/     /* Ndebele */
-/*{"??",       HB_TAG('N','G','R',' ')},*/     /* Nagari */
 /*{"??",       HB_TAG('N','H','C',' ')},*/     /* Norway House Cree */
-/*{"??",       HB_TAG('N','K','L',' ')},*/     /* Nkole */
-/*{"??",       HB_TAG('N','T','A',' ')},*/     /* Northern Tai */
-/*{"??",       HB_TAG('O','C','R',' ')},*/     /* Oji-Cree */
-/*{"??",       HB_TAG('P','A','A',' ')},*/     /* Palestinian Aramaic */
-/*{"??",       HB_TAG('P','G','R',' ')},*/     /* Polytonic Greek */
-/*{"??",       HB_TAG('P','L','G',' ')},*/     /* Palaung */
-/*{"??",       HB_TAG('Q','I','N',' ')},*/     /* Chin */
-/*{"??",       HB_TAG('R','B','U',' ')},*/     /* Russian Buriat */
+/*{"jpa?/sam?",        HB_TAG('P','A','A',' ')},*/     /* Palestinian Aramaic */
+/*{"polyton",  HB_TAG('P','G','R',' ')},*/     /* Polytonic Greek */
+/*{"??",       HB_TAG('Q','I','N',' ')},*/     /* Asho Chin */
 /*{"??",       HB_TAG('R','C','R',' ')},*/     /* R-Cree */
-/*{"??",       HB_TAG('R','M','S',' ')},*/     /* Rhaeto-Romanic */
-/*{"??",       HB_TAG('R','U','A',' ')},*/     /* Ruanda */
-/*{"??",       HB_TAG('S','A','Y',' ')},*/     /* Sayisi */
-/*{"??",       HB_TAG('S','E','K',' ')},*/     /* Sekota */
-/*{"??",       HB_TAG('S','I','G',' ')},*/     /* Silte Gurage */
-/*{"??",       HB_TAG('S','L','A',' ')},*/     /* Slavey */
-/*{"??",       HB_TAG('S','O','G',' ')},*/     /* Sodo Gurage */
-/*{"??",       HB_TAG('S','O','T',' ')},*/     /* Sotho */
-/*{"??",       HB_TAG('S','W','A',' ')},*/     /* Swadaya Aramaic */
-/*{"??",       HB_TAG('S','W','Z',' ')},*/     /* Swazi */
-/*{"??",       HB_TAG('S','X','T',' ')},*/     /* Sutu */
-/*{"??",       HB_TAG('T','A','B',' ')},*/     /* Tabasaran */
+/*{"chp?",     HB_TAG('S','A','Y',' ')},*/     /* Sayisi */
+/*{"xan?",     HB_TAG('S','E','K',' ')},*/     /* Sekota */
+/*{"stv/wle?/xst?",    HB_TAG('S','I','G',' ')},*/     /* Silte Gurage */
+/*{"ngo?",     HB_TAG('S','X','T',' ')},*/     /* Sutu */
 /*{"??",       HB_TAG('T','C','R',' ')},*/     /* TH-Cree */
-/*{"??",       HB_TAG('T','G','N',' ')},*/     /* Tongan */
-/*{"??",       HB_TAG('T','M','N',' ')},*/     /* Temne */
-/*{"??",       HB_TAG('T','N','E',' ')},*/     /* Tundra Nenets */
+/*{"tnz?/tog?/toi?",   HB_TAG('T','N','G',' ')},*/     /* Tonga */
+/*{"enh?/yrk?",        HB_TAG('T','N','E',' ')},*/     /* Tundra Nenets */
 /*{"??",       HB_TAG('T','O','D',' ')},*/     /* Todo */
-/*{"??",       HB_TAG('T','U','A',' ')},*/     /* Turoyo Aramaic */
-/*{"??",       HB_TAG('T','U','V',' ')},*/     /* Tuvin */
 /*{"??",       HB_TAG('W','C','R',' ')},*/     /* West-Cree */
-/*{"??",       HB_TAG('X','B','D',' ')},*/     /* Tai Lue */
 /*{"??",       HB_TAG('Y','C','R',' ')},*/     /* Y-Cree */
 /*{"??",       HB_TAG('Y','I','C',' ')},*/     /* Yi Classic */
-/*{"??",       HB_TAG('Y','I','M',' ')},*/     /* Yi Modern */
+/*{"ii?/Yiii?",        HB_TAG('Y','I','M',' ')},*/     /* Yi Modern */
 /*{"??",       HB_TAG('Z','H','P',' ')},*/     /* Chinese Phonetic */
 };
 
index 2d750c3..8073906 100644 (file)
@@ -35,6 +35,7 @@
 
 HB_BEGIN_DECLS
 
+/* TODO remove */
 void
 hb_ot_shape_glyphs_closure (hb_font_t          *font,
                            hb_buffer_t        *buffer,
index 8655020..be0d505 100644 (file)
 #endif
 
 
+/* Void! */
+struct _hb_void_t {};
+typedef const _hb_void_t &hb_void_t;
+#define HB_VOID (* (const _hb_void_t *) NULL)
+
+
 /* Basics */
 
 
@@ -76,7 +82,9 @@ static inline Type MAX (const Type &a, const Type &b) { return a > b ? a : b; }
 
 #undef  ARRAY_LENGTH
 template <typename Type, unsigned int n>
-static inline unsigned int ARRAY_LENGTH (const Type (&a)[n]) { return n; }
+static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
+/* A const version, but does not detect erratically being called on pointers. */
+#define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0])))
 
 #define HB_STMT_START do
 #define HB_STMT_END   while (0)
@@ -501,6 +509,10 @@ static inline uint32_t hb_uint32_swap (const uint32_t v)
 #define hb_be_uint32_get(v)    (uint32_t) ((v[0] << 24) + (v[1] << 16) + (v[2] << 8) + v[3])
 #define hb_be_uint32_eq(a,b)   (a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3])
 
+#define hb_be_uint24_put(v,V)  HB_STMT_START { v[0] = (V>>16); v[1] = (V>>8); v[2] (V); } HB_STMT_END
+#define hb_be_uint24_get(v)    (uint32_t) ((v[0] << 16) + (v[1] << 8) + v[2])
+#define hb_be_uint24_eq(a,b)   (a[0] == b[0] && a[1] == b[1] && a[2] == b[2])
+
 
 /* ASCII tag/character handling */
 
@@ -544,7 +556,7 @@ _hb_debug (unsigned int level,
 #define DEBUG_LEVEL(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT))
 #define DEBUG(WHAT) (DEBUG_LEVEL (WHAT, 0))
 
-template <int max_level> inline void
+template <int max_level> static inline void
 _hb_debug_msg_va (const char *what,
                  const void *obj,
                  const char *func,
@@ -580,13 +592,18 @@ _hb_debug_msg_va (const char *what,
   } else
     fprintf (stderr, "   " VRBAR LBAR);
 
-  if (func) {
-    /* If there's a class name, just write that. */
-    const char *dotdot = strstr (func, "::");
+  if (func)
+  {
+    /* Skip "typename" */
+    if (0 == strncmp (func, "typename ", 9))
+      func += 9;
+    /* Skip return type */
     const char *space = strchr (func, ' ');
-    if (space && dotdot && space < dotdot)
+    if (space)
       func = space + 1;
-    unsigned int func_len = dotdot ? dotdot - func : strlen (func);
+    /* Skip parameter list */
+    const char *paren = strchr (func, '(');
+    unsigned int func_len = paren ? paren - func : strlen (func);
     fprintf (stderr, "%.*s: ", func_len, func);
   }
 
@@ -605,7 +622,7 @@ _hb_debug_msg_va<0> (const char *what HB_UNUSED,
                     const char *message HB_UNUSED,
                     va_list ap HB_UNUSED) {}
 
-template <int max_level> inline void
+template <int max_level> static inline void
 _hb_debug_msg (const char *what,
               const void *obj,
               const char *func,
@@ -614,7 +631,7 @@ _hb_debug_msg (const char *what,
               int level_dir,
               const char *message,
               ...) HB_PRINTF_FUNC(7, 8);
-template <int max_level> inline void
+template <int max_level> static inline void
 _hb_debug_msg (const char *what,
               const void *obj,
               const char *func,
@@ -654,10 +671,39 @@ _hb_debug_msg<0> (const char *what HB_UNUSED,
 
 
 /*
+ * Printer
+ */
+
+template <typename T>
+struct hb_printer_t {};
+
+template <>
+struct hb_printer_t<bool> {
+  const char *print (bool v) { return v ? "true" : "false"; }
+};
+
+template <>
+struct hb_printer_t<hb_void_t> {
+  const char *print (hb_void_t) { return ""; }
+};
+
+
+/*
  * Trace
  */
 
-template <int max_level>
+template <typename T>
+static inline void _hb_warn_no_return (bool returned)
+{
+  if (unlikely (!returned)) {
+    fprintf (stderr, "OUCH, returned with no call to TRACE_RETURN.  This is a bug, please report.\n");
+  }
+}
+template <>
+inline void _hb_warn_no_return<hb_void_t> (bool returned HB_UNUSED)
+{}
+
+template <int max_level, typename ret_t>
 struct hb_auto_trace_t {
   explicit inline hb_auto_trace_t (unsigned int *plevel_,
                                   const char *what_,
@@ -675,23 +721,23 @@ struct hb_auto_trace_t {
   }
   inline ~hb_auto_trace_t (void)
   {
-    if (unlikely (!returned)) {
-      fprintf (stderr, "OUCH, returned with no call to TRACE_RETURN.  This is a bug, please report.  Level was %d.\n", plevel ? *plevel : -1);
+    _hb_warn_no_return<ret_t> (returned);
+    if (!returned) {
       _hb_debug_msg<max_level> (what, obj, NULL, true, plevel ? *plevel : 1, -1, " ");
-      return;
     }
-
     if (plevel) --*plevel;
   }
 
-  inline bool ret (bool v, unsigned int line = 0)
+  inline ret_t ret (ret_t v, unsigned int line = 0)
   {
     if (unlikely (returned)) {
       fprintf (stderr, "OUCH, double calls to TRACE_RETURN.  This is a bug, please report.\n");
       return v;
     }
 
-    _hb_debug_msg<max_level> (what, obj, NULL, true, plevel ? *plevel : 1, -1, "return %s (line %d)", v ? "true" : "false", line);
+    _hb_debug_msg<max_level> (what, obj, NULL, true, plevel ? *plevel : 1, -1,
+                             "return %s (line %d)",
+                             hb_printer_t<ret_t>().print (v), line);
     if (plevel) --*plevel;
     plevel = NULL;
     returned = true;
@@ -700,12 +746,12 @@ struct hb_auto_trace_t {
 
   private:
   unsigned int *plevel;
-  bool returned;
   const char *what;
   const void *obj;
+  bool returned;
 };
-template <> /* Optimize when tracing is disabled */
-struct hb_auto_trace_t<0> {
+template <typename ret_t> /* Optimize when tracing is disabled */
+struct hb_auto_trace_t<0, ret_t> {
   explicit inline hb_auto_trace_t (unsigned int *plevel_ HB_UNUSED,
                                   const char *what HB_UNUSED,
                                   const void *obj HB_UNUSED,
@@ -713,8 +759,7 @@ struct hb_auto_trace_t<0> {
                                   const char *message HB_UNUSED,
                                   ...) {}
 
-  template <typename T>
-  inline T ret (T v, unsigned int line = 0) { return v; }
+  inline ret_t ret (ret_t v, unsigned int line HB_UNUSED = 0) { return v; }
 };
 
 #define TRACE_RETURN(RET) trace.ret (RET, __LINE__)
index 4413579..5e30a7e 100644 (file)
@@ -98,7 +98,7 @@ struct hb_set_digest_lowest_bits_t
 
   private:
 
-  mask_t mask_for (hb_codepoint_t g) const { return ((mask_t) 1) << (g & (sizeof (mask_t) * 8 - 1)); }
+  static inline mask_t mask_for (hb_codepoint_t g) { return ((mask_t) 1) << (g & (sizeof (mask_t) * 8 - 1)); }
   mask_t mask;
 };
 
@@ -137,6 +137,7 @@ struct hb_set_t
 {
   hb_object_header_t header;
   ASSERT_POD ();
+  bool in_error;
 
   inline void init (void) {
     header.init ();
@@ -145,9 +146,12 @@ struct hb_set_t
   inline void fini (void) {
   }
   inline void clear (void) {
+    if (unlikely (hb_object_is_inert (this)))
+      return;
+    in_error = false;
     memset (elts, 0, sizeof elts);
   }
-  inline bool empty (void) const {
+  inline bool is_empty (void) const {
     for (unsigned int i = 0; i < ARRAY_LENGTH (elts); i++)
       if (elts[i])
         return false;
@@ -155,20 +159,31 @@ struct hb_set_t
   }
   inline void add (hb_codepoint_t g)
   {
+    if (unlikely (in_error)) return;
     if (unlikely (g == SENTINEL)) return;
     if (unlikely (g > MAX_G)) return;
     elt (g) |= mask (g);
   }
   inline void add_range (hb_codepoint_t a, hb_codepoint_t b)
   {
+    if (unlikely (in_error)) return;
+    /* TODO Speedup */
     for (unsigned int i = a; i < b + 1; i++)
       add (i);
   }
   inline void del (hb_codepoint_t g)
   {
+    if (unlikely (in_error)) return;
     if (unlikely (g > MAX_G)) return;
     elt (g) &= ~mask (g);
   }
+  inline void del_range (hb_codepoint_t a, hb_codepoint_t b)
+  {
+    if (unlikely (in_error)) return;
+    /* TODO Speedup */
+    for (unsigned int i = a; i < b + 1; i++)
+      del (i);
+  }
   inline bool has (hb_codepoint_t g) const
   {
     if (unlikely (g > MAX_G)) return false;
@@ -185,7 +200,7 @@ struct hb_set_t
         return true;
     return false;
   }
-  inline bool equal (const hb_set_t *other) const
+  inline bool is_equal (const hb_set_t *other) const
   {
     for (unsigned int i = 0; i < ELTS; i++)
       if (elts[i] != other->elts[i])
@@ -194,30 +209,41 @@ struct hb_set_t
   }
   inline void set (const hb_set_t *other)
   {
+    if (unlikely (in_error)) return;
     for (unsigned int i = 0; i < ELTS; i++)
       elts[i] = other->elts[i];
   }
   inline void union_ (const hb_set_t *other)
   {
+    if (unlikely (in_error)) return;
     for (unsigned int i = 0; i < ELTS; i++)
       elts[i] |= other->elts[i];
   }
   inline void intersect (const hb_set_t *other)
   {
+    if (unlikely (in_error)) return;
     for (unsigned int i = 0; i < ELTS; i++)
       elts[i] &= other->elts[i];
   }
   inline void subtract (const hb_set_t *other)
   {
+    if (unlikely (in_error)) return;
     for (unsigned int i = 0; i < ELTS; i++)
       elts[i] &= ~other->elts[i];
   }
   inline void symmetric_difference (const hb_set_t *other)
   {
+    if (unlikely (in_error)) return;
     for (unsigned int i = 0; i < ELTS; i++)
       elts[i] ^= other->elts[i];
   }
-  inline bool next (hb_codepoint_t *codepoint)
+  inline void invert (void)
+  {
+    if (unlikely (in_error)) return;
+    for (unsigned int i = 0; i < ELTS; i++)
+      elts[i] = ~elts[i];
+  }
+  inline bool next (hb_codepoint_t *codepoint) const
   {
     if (unlikely (*codepoint == SENTINEL)) {
       hb_codepoint_t i = get_min ();
@@ -234,6 +260,28 @@ struct hb_set_t
       }
     return false;
   }
+  inline bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
+  {
+    hb_codepoint_t i;
+
+    i = *last;
+    if (!next (&i))
+      return false;
+
+    *last = *first = i;
+    while (next (&i) && i == *last + 1)
+      (*last)++;
+
+    return true;
+  }
+
+  inline unsigned int get_population (void) const
+  {
+    unsigned int count = 0;
+    for (unsigned int i = 0; i < ELTS; i++)
+      count += _hb_popcount32 (elts[i]);
+    return count;
+  }
   inline hb_codepoint_t get_min (void) const
   {
     for (unsigned int i = 0; i < ELTS; i++)
index 4225e3c..5f427a5 100644 (file)
@@ -32,7 +32,7 @@
 
 
 hb_set_t *
-hb_set_create ()
+hb_set_create (void)
 {
   hb_set_t *set;
 
@@ -49,6 +49,7 @@ hb_set_get_empty (void)
 {
   static const hb_set_t _hb_set_nil = {
     HB_OBJECT_HEADER_STATIC,
+    true, /* in_error */
 
     {0} /* elts */
   };
@@ -73,27 +74,27 @@ hb_set_destroy (hb_set_t *set)
 }
 
 hb_bool_t
-hb_set_set_user_data (hb_set_t        *set,
-                        hb_user_data_key_t *key,
-                        void *              data,
-                        hb_destroy_func_t   destroy,
-                        hb_bool_t           replace)
+hb_set_set_user_data (hb_set_t           *set,
+                     hb_user_data_key_t *key,
+                     void *              data,
+                     hb_destroy_func_t   destroy,
+                     hb_bool_t           replace)
 {
   return hb_object_set_user_data (set, key, data, destroy, replace);
 }
 
 void *
-hb_set_get_user_data (hb_set_t        *set,
-                        hb_user_data_key_t *key)
+hb_set_get_user_data (hb_set_t           *set,
+                     hb_user_data_key_t *key)
 {
   return hb_object_get_user_data (set, key);
 }
 
 
 hb_bool_t
-hb_set_allocation_successful (hb_set_t  *set HB_UNUSED)
+hb_set_allocation_successful (const hb_set_t  *set HB_UNUSED)
 {
-  return true;
+  return !set->in_error;
 }
 
 void
@@ -103,13 +104,13 @@ hb_set_clear (hb_set_t *set)
 }
 
 hb_bool_t
-hb_set_empty (hb_set_t *set)
+hb_set_is_empty (const hb_set_t *set)
 {
-  return set->empty ();
+  return set->is_empty ();
 }
 
 hb_bool_t
-hb_set_has (hb_set_t       *set,
+hb_set_has (const hb_set_t *set,
            hb_codepoint_t  codepoint)
 {
   return set->has (codepoint);
@@ -123,69 +124,105 @@ hb_set_add (hb_set_t       *set,
 }
 
 void
+hb_set_add_range (hb_set_t       *set,
+                 hb_codepoint_t  first,
+                 hb_codepoint_t  last)
+{
+  set->add_range (first, last);
+}
+
+void
 hb_set_del (hb_set_t       *set,
            hb_codepoint_t  codepoint)
 {
   set->del (codepoint);
 }
 
+void
+hb_set_del_range (hb_set_t       *set,
+                 hb_codepoint_t  first,
+                 hb_codepoint_t  last)
+{
+  set->del_range (first, last);
+}
+
 hb_bool_t
-hb_set_equal (hb_set_t *set,
-             hb_set_t *other)
+hb_set_is_equal (const hb_set_t *set,
+                const hb_set_t *other)
 {
-  return set->equal (other);
+  return set->is_equal (other);
 }
 
 void
-hb_set_set (hb_set_t *set,
-           hb_set_t *other)
+hb_set_set (hb_set_t       *set,
+           const hb_set_t *other)
 {
   set->set (other);
 }
 
 void
-hb_set_union (hb_set_t *set,
-             hb_set_t *other)
+hb_set_union (hb_set_t       *set,
+             const hb_set_t *other)
 {
   set->union_ (other);
 }
 
 void
-hb_set_intersect (hb_set_t *set,
-                 hb_set_t *other)
+hb_set_intersect (hb_set_t       *set,
+                 const hb_set_t *other)
 {
   set->intersect (other);
 }
 
 void
-hb_set_subtract (hb_set_t *set,
-                hb_set_t *other)
+hb_set_subtract (hb_set_t       *set,
+                const hb_set_t *other)
 {
   set->subtract (other);
 }
 
 void
-hb_set_symmetric_difference (hb_set_t *set,
-                            hb_set_t *other)
+hb_set_symmetric_difference (hb_set_t       *set,
+                            const hb_set_t *other)
 {
   set->symmetric_difference (other);
 }
 
+void
+hb_set_invert (hb_set_t *set)
+{
+  set->invert ();
+}
+
+unsigned int
+hb_set_get_population (const hb_set_t *set)
+{
+  return set->get_population ();
+}
+
 hb_codepoint_t
-hb_set_min (hb_set_t *set)
+hb_set_get_min (const hb_set_t *set)
 {
   return set->get_min ();
 }
 
 hb_codepoint_t
-hb_set_max (hb_set_t *set)
+hb_set_get_max (const hb_set_t *set)
 {
   return set->get_max ();
 }
 
 hb_bool_t
-hb_set_next (hb_set_t       *set,
+hb_set_next (const hb_set_t *set,
             hb_codepoint_t *codepoint)
 {
   return set->next (codepoint);
 }
+
+hb_bool_t
+hb_set_next_range (const hb_set_t *set,
+                  hb_codepoint_t *first,
+                  hb_codepoint_t *last)
+{
+  return set->next_range (first, last);
+}
index 1838889..291e249 100644 (file)
@@ -65,16 +65,16 @@ hb_set_get_user_data (hb_set_t           *set,
 
 /* Returns false if allocation has failed before */
 hb_bool_t
-hb_set_allocation_successful (hb_set_t  *set);
+hb_set_allocation_successful (const hb_set_t *set);
 
 void
 hb_set_clear (hb_set_t *set);
 
 hb_bool_t
-hb_set_empty (hb_set_t *set);
+hb_set_is_empty (const hb_set_t *set);
 
 hb_bool_t
-hb_set_has (hb_set_t       *set,
+hb_set_has (const hb_set_t *set,
            hb_codepoint_t  codepoint);
 
 /* Right now limited to 16-bit integers.  Eventually will do full codepoint range, sans -1
@@ -84,47 +84,67 @@ hb_set_add (hb_set_t       *set,
            hb_codepoint_t  codepoint);
 
 void
+hb_set_add_range (hb_set_t       *set,
+                 hb_codepoint_t  first,
+                 hb_codepoint_t  last);
+
+void
 hb_set_del (hb_set_t       *set,
            hb_codepoint_t  codepoint);
 
+void
+hb_set_del_range (hb_set_t       *set,
+                 hb_codepoint_t  first,
+                 hb_codepoint_t  last);
+
 hb_bool_t
-hb_set_equal (hb_set_t *set,
-             hb_set_t *other);
+hb_set_is_equal (const hb_set_t *set,
+                const hb_set_t *other);
 
 void
-hb_set_set (hb_set_t *set,
-           hb_set_t *other);
+hb_set_set (hb_set_t       *set,
+           const hb_set_t *other);
 
 void
-hb_set_union (hb_set_t *set,
-             hb_set_t *other);
+hb_set_union (hb_set_t       *set,
+             const hb_set_t *other);
 
 void
-hb_set_intersect (hb_set_t *set,
-                 hb_set_t *other);
+hb_set_intersect (hb_set_t       *set,
+                 const hb_set_t *other);
 
 void
-hb_set_subtract (hb_set_t *set,
-                hb_set_t *other);
+hb_set_subtract (hb_set_t       *set,
+                const hb_set_t *other);
 
 void
-hb_set_symmetric_difference (hb_set_t *set,
-                            hb_set_t *other);
+hb_set_symmetric_difference (hb_set_t       *set,
+                            const hb_set_t *other);
+
+void
+hb_set_invert (hb_set_t *set);
+
+unsigned int
+hb_set_get_population (const hb_set_t *set);
 
 /* Returns -1 if set empty. */
 hb_codepoint_t
-hb_set_min (hb_set_t *set);
+hb_set_get_min (const hb_set_t *set);
 
 /* Returns -1 if set empty. */
 hb_codepoint_t
-hb_set_max (hb_set_t *set);
+hb_set_get_max (const hb_set_t *set);
 
 /* Pass -1 in to get started. */
 hb_bool_t
-hb_set_next (hb_set_t       *set,
+hb_set_next (const hb_set_t *set,
             hb_codepoint_t *codepoint);
 
-/* TODO: Add faster iteration API? */
+/* Pass -1 for first and last to get started. */
+hb_bool_t
+hb_set_next_range (const hb_set_t *set,
+                  hb_codepoint_t *first,
+                  hb_codepoint_t *last);
 
 
 HB_END_DECLS
index d6a57d6..dd014e3 100644 (file)
@@ -28,9 +28,8 @@
 #define HB_SHAPE_PLAN_PRIVATE_HH
 
 #include "hb-private.hh"
-
 #include "hb-shape-plan.h"
-
+#include "hb-object-private.hh"
 #include "hb-shaper-private.hh"
 
 
@@ -44,6 +43,7 @@ struct hb_shape_plan_t
   hb_segment_properties_t props;
 
   hb_shape_func_t *shaper_func;
+  const char *shaper_name;
 
   struct hb_shaper_data_t shaper_data;
 };
index 038f6af..22a226f 100644 (file)
@@ -24,8 +24,6 @@
  * Google Author(s): Behdad Esfahbod
  */
 
-#include "hb-private.hh"
-
 #include "hb-shape-plan-private.hh"
 #include "hb-shaper-private.hh"
 #include "hb-font-private.hh"
@@ -51,6 +49,7 @@ hb_shape_plan_plan (hb_shape_plan_t    *shape_plan,
            HB_SHAPER_DATA (shaper, shape_plan) = \
              HB_SHAPER_DATA_CREATE_FUNC (shaper, shape_plan) (shape_plan, user_features, num_user_features); \
            shape_plan->shaper_func = _hb_##shaper##_shape; \
+           shape_plan->shaper_name = #shaper; \
            return; \
          } \
        } HB_STMT_END
@@ -119,9 +118,10 @@ hb_shape_plan_get_empty (void)
 
     true, /* default_shaper_list */
     NULL, /* face */
-    _HB_BUFFER_PROPS_DEFAULT, /* props */
+    HB_SEGMENT_PROPERTIES_DEFAULT, /* props */
 
     NULL, /* shaper_func */
+    NULL, /* shaper_name */
 
     {
 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
@@ -153,9 +153,26 @@ hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
   free (shape_plan);
 }
 
+hb_bool_t
+hb_shape_plan_set_user_data (hb_shape_plan_t    *shape_plan,
+                            hb_user_data_key_t *key,
+                            void *              data,
+                            hb_destroy_func_t   destroy,
+                            hb_bool_t           replace)
+{
+  return hb_object_set_user_data (shape_plan, key, data, destroy, replace);
+}
+
+void *
+hb_shape_plan_get_user_data (hb_shape_plan_t    *shape_plan,
+                            hb_user_data_key_t *key)
+{
+  return hb_object_get_user_data (shape_plan, key);
+}
+
 
 hb_bool_t
-hb_shape_plan_execute (hb_shape_plan      *shape_plan,
+hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
                       hb_font_t          *font,
                       hb_buffer_t        *buffer,
                       const hb_feature_t *features,
@@ -283,3 +300,9 @@ retry:
 
   return hb_shape_plan_reference (shape_plan);
 }
+
+const char *
+hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan)
+{
+  return shape_plan->shaper_name;
+}
index f1a14a9..8f54552 100644 (file)
  * Google Author(s): Behdad Esfahbod
  */
 
+#ifndef HB_H_IN
+#error "Include <hb.h> instead."
+#endif
+
 #ifndef HB_SHAPE_PLAN_H
 #define HB_SHAPE_PLAN_H
 
-/* TODO To become public one day */
-
-#include "hb-private.hh"
-
-#include "hb-buffer-private.hh"
+#include "hb-common.h"
+#include "hb-font.h"
 
+HB_BEGIN_DECLS
 
-typedef struct hb_shape_plan_t hb_shape_plan;
-
-/*
- * hb_shape_plan_t
- */
+typedef struct hb_shape_plan_t hb_shape_plan_t;
 
-HB_INTERNAL hb_shape_plan_t *
+hb_shape_plan_t *
 hb_shape_plan_create (hb_face_t                     *face,
                      const hb_segment_properties_t *props,
                      const hb_feature_t            *user_features,
                      unsigned int                   num_user_features,
                      const char * const            *shaper_list);
 
-HB_INTERNAL hb_shape_plan_t *
+hb_shape_plan_t *
 hb_shape_plan_create_cached (hb_face_t                     *face,
                             const hb_segment_properties_t *props,
                             const hb_feature_t            *user_features,
                             unsigned int                   num_user_features,
                             const char * const            *shaper_list);
 
-HB_INTERNAL hb_shape_plan_t *
+hb_shape_plan_t *
 hb_shape_plan_get_empty (void);
 
-HB_INTERNAL hb_shape_plan_t *
+hb_shape_plan_t *
 hb_shape_plan_reference (hb_shape_plan_t *shape_plan);
 
-HB_INTERNAL void
+void
 hb_shape_plan_destroy (hb_shape_plan_t *shape_plan);
 
+hb_bool_t
+hb_shape_plan_set_user_data (hb_shape_plan_t    *shape_plan,
+                            hb_user_data_key_t *key,
+                            void *              data,
+                            hb_destroy_func_t   destroy,
+                            hb_bool_t           replace);
+
+void *
+hb_shape_plan_get_user_data (hb_shape_plan_t    *shape_plan,
+                            hb_user_data_key_t *key);
+
 
-HB_INTERNAL hb_bool_t
-hb_shape_plan_execute (hb_shape_plan      *shape_plan,
+hb_bool_t
+hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
                       hb_font_t          *font,
                       hb_buffer_t        *buffer,
                       const hb_feature_t *features,
                       unsigned int        num_features);
 
+const char *
+hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan);
+
+
+HB_END_DECLS
 
 #endif /* HB_SHAPE_PLAN_H */
index 5aa587b..389ce3e 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2009  Red Hat, Inc.
+ * Copyright © 2012  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -22,6 +23,7 @@
  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * Red Hat Author(s): Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod
  */
 
 #include "hb-private.hh"
 #include "hb-font-private.hh"
 
 
+static void
+parse_space (const char **pp, const char *end)
+{
+  char c;
+#define ISSPACE(c) ((c)==' '||(c)=='\f'||(c)=='\n'||(c)=='\r'||(c)=='\t'||(c)=='\v')
+  while (*pp < end && (c = **pp, ISSPACE (c)))
+    (*pp)++;
+#undef ISSPACE
+}
+
+static hb_bool_t
+parse_char (const char **pp, const char *end, char c)
+{
+  parse_space (pp, end);
+
+  if (*pp == end || **pp != c)
+    return false;
+
+  (*pp)++;
+  return true;
+}
+
+static hb_bool_t
+parse_uint (const char **pp, const char *end, unsigned int *pv)
+{
+  char buf[32];
+  strncpy (buf, *pp, end - *pp);
+  buf[ARRAY_LENGTH (buf) - 1] = '\0';
+
+  char *p = buf;
+  char *pend = p;
+  unsigned int v;
+
+  v = strtol (p, &pend, 0);
+
+  if (p == pend)
+    return false;
+
+  *pv = v;
+  *pp += pend - p;
+  return true;
+}
+
+static hb_bool_t
+parse_feature_value_prefix (const char **pp, const char *end, hb_feature_t *feature)
+{
+  if (parse_char (pp, end, '-'))
+    feature->value = 0;
+  else {
+    parse_char (pp, end, '+');
+    feature->value = 1;
+  }
+
+  return true;
+}
+
+static hb_bool_t
+parse_feature_tag (const char **pp, const char *end, hb_feature_t *feature)
+{
+  const char *p = *pp;
+  char c;
+
+  parse_space (pp, end);
+
+#define ISALNUM(c) (('a' <= (c) && (c) <= 'z') || ('A' <= (c) && (c) <= 'Z') || ('0' <= (c) && (c) <= '9'))
+  while (*pp < end && (c = **pp, ISALNUM(c)))
+    (*pp)++;
+#undef ISALNUM
+
+  if (p == *pp)
+    return false;
+
+  feature->tag = hb_tag_from_string (p, *pp - p);
+  return true;
+}
+
+static hb_bool_t
+parse_feature_indices (const char **pp, const char *end, hb_feature_t *feature)
+{
+  parse_space (pp, end);
+
+  hb_bool_t has_start;
+
+  feature->start = 0;
+  feature->end = (unsigned int) -1;
+
+  if (!parse_char (pp, end, '['))
+    return true;
+
+  has_start = parse_uint (pp, end, &feature->start);
+
+  if (parse_char (pp, end, ':')) {
+    parse_uint (pp, end, &feature->end);
+  } else {
+    if (has_start)
+      feature->end = feature->start + 1;
+  }
+
+  return parse_char (pp, end, ']');
+}
+
+static hb_bool_t
+parse_feature_value_postfix (const char **pp, const char *end, hb_feature_t *feature)
+{
+  return !parse_char (pp, end, '=') || parse_uint (pp, end, &feature->value);
+}
+
+
+static hb_bool_t
+parse_one_feature (const char **pp, const char *end, hb_feature_t *feature)
+{
+  return parse_feature_value_prefix (pp, end, feature) &&
+        parse_feature_tag (pp, end, feature) &&
+        parse_feature_indices (pp, end, feature) &&
+        parse_feature_value_postfix (pp, end, feature) &&
+        *pp == end;
+}
+
+hb_bool_t
+hb_feature_from_string (const char *str, int len,
+                       hb_feature_t *feature)
+{
+  if (len < 0)
+    len = strlen (str);
+
+  return parse_one_feature (&str, str + len, feature);
+}
+
+void
+hb_feature_to_string (hb_feature_t *feature,
+                     char *buf, unsigned int size)
+{
+  if (unlikely (!size)) return;
+
+  char s[128];
+  unsigned int len = 0;
+  if (feature->value == 0)
+    s[len++] = '-';
+  hb_tag_to_string (feature->tag, s + len);
+  len += 4;
+  while (len && s[len - 1] == ' ')
+    len--;
+  if (feature->start != 0 || feature->end != (unsigned int) -1)
+  {
+    s[len++] = '[';
+    if (feature->start)
+      len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->start);
+    if (feature->end != feature->start + 1) {
+      s[len++] = ':';
+      if (feature->end != (unsigned int) -1)
+       len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->end);
+    }
+    s[len++] = ']';
+  }
+  if (feature->value > 1)
+  {
+    s[len++] = '=';
+    len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->value);
+  }
+  assert (len < ARRAY_LENGTH (s));
+  len = MIN (len, size - 1);
+  memcpy (buf, s, len);
+  s[len] = '\0';
+}
+
+
 static const char **static_shaper_list;
 
 static
@@ -85,11 +253,16 @@ hb_shape_full (hb_font_t          *font,
   if (unlikely (!buffer->len))
     return true;
 
-  buffer->guess_properties ();
+  assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE);
+
+  buffer->guess_segment_properties ();
 
   hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props, features, num_features, shaper_list);
   hb_bool_t res = hb_shape_plan_execute (shape_plan, font, buffer, features, num_features);
   hb_shape_plan_destroy (shape_plan);
+
+  if (res)
+    buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS;
   return res;
 }
 
index 84bf3e7..10a35cb 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2009  Red Hat, Inc.
+ * Copyright © 2012  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -22,6 +23,7 @@
  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * Red Hat Author(s): Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod
  */
 
 #ifndef HB_H_IN
@@ -45,6 +47,17 @@ typedef struct hb_feature_t {
   unsigned int  end;
 } hb_feature_t;
 
+/* len=-1 means str is NUL-terminated */
+hb_bool_t
+hb_feature_from_string (const char *str, int len,
+                       hb_feature_t *feature);
+
+/* Something like 128 bytes is more than enough.
+ * nul-terminates. */
+void
+hb_feature_to_string (hb_feature_t *feature,
+                     char *buf, unsigned int size);
+
 
 void
 hb_shape (hb_font_t           *font,
index 8e67dbd..b9c029e 100644 (file)
 #endif /* HB_SHAPER_LIST_HH */ /* Dummy header guards */
 
 /* v--- Add new shapers in the right place here. */
+
 #ifdef HAVE_GRAPHITE2
+/* Only picks up fonts that have a "Silf" table. */
 HB_SHAPER_IMPLEMENT (graphite2)
 #endif
-#ifdef HAVE_UNISCRIBE
-HB_SHAPER_IMPLEMENT (uniscribe)
-#endif
-#ifdef HAVE_CORETEXT
-HB_SHAPER_IMPLEMENT (coretext)
-#endif
 
 #ifdef HAVE_OT
 HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main OpenType shaper. */
@@ -46,5 +42,14 @@ HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main OpenType shaper. */
 #ifdef HAVE_HB_OLD
 HB_SHAPER_IMPLEMENT (old)
 #endif
+#ifdef HAVE_ICU_LE
+HB_SHAPER_IMPLEMENT (icu_le)
+#endif
+#ifdef HAVE_UNISCRIBE
+HB_SHAPER_IMPLEMENT (uniscribe)
+#endif
+#ifdef HAVE_CORETEXT
+HB_SHAPER_IMPLEMENT (coretext)
+#endif
 
 HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
index 186318d..29c4493 100644 (file)
@@ -29,8 +29,6 @@
 
 #include "hb-private.hh"
 
-#include "hb-shape-plan.h" /* TODO remove */
-
 typedef hb_bool_t hb_shape_func_t (hb_shape_plan_t    *shape_plan,
                                   hb_font_t          *font,
                                   hb_buffer_t        *buffer,
@@ -97,7 +95,10 @@ hb_##shaper##_shaper_##object##_data_ensure (hb_##object##_t *object) \
     if (unlikely (!data)) \
       data = (HB_SHAPER_DATA_TYPE (shaper, object) *) HB_SHAPER_DATA_INVALID; \
     if (!hb_atomic_ptr_cmpexch (&HB_SHAPER_DATA (shaper, object), NULL, data)) { \
-      HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data); \
+      if (data && \
+         data != HB_SHAPER_DATA_INVALID && \
+         data != HB_SHAPER_DATA_SUCCEEDED) \
+       HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data); \
       goto retry; \
     } \
   } \
index a16ffc8..1c1aed9 100644 (file)
@@ -25,8 +25,8 @@
  */
 
 #include "hb-private.hh"
-
 #include "hb-shaper-private.hh"
+#include "hb-atomic-private.hh"
 
 
 static const hb_shaper_pair_t all_shapers[] = {
index b7198ef..c503a40 100644 (file)
@@ -68,7 +68,7 @@ _hb_tt_font_destroy (hb_tt_font_t *tt)
 static inline const hhea&
 _get_hhea (hb_face_t *face)
 {
-//  return likely (face->tt && face->tt->hhea) ? *face->tt->hhea : Null(hhea);
+  return likely (face->tt && face->tt->hhea) ? *face->tt->hhea : Null(hhea);
 }
 
 
diff --git a/src/hb-ucdn.cc b/src/hb-ucdn.cc
new file mode 100644 (file)
index 0000000..61e6ad3
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "hb-private.hh"
+
+#include "hb-unicode-private.hh"
+
+#include "ucdn.h"
+
+static const hb_script_t ucdn_script_translate[] =
+{
+    HB_SCRIPT_COMMON,
+    HB_SCRIPT_LATIN,
+    HB_SCRIPT_GREEK,
+    HB_SCRIPT_CYRILLIC,
+    HB_SCRIPT_ARMENIAN,
+    HB_SCRIPT_HEBREW,
+    HB_SCRIPT_ARABIC,
+    HB_SCRIPT_SYRIAC,
+    HB_SCRIPT_THAANA,
+    HB_SCRIPT_DEVANAGARI,
+    HB_SCRIPT_BENGALI,
+    HB_SCRIPT_GURMUKHI,
+    HB_SCRIPT_GUJARATI,
+    HB_SCRIPT_ORIYA,
+    HB_SCRIPT_TAMIL,
+    HB_SCRIPT_TELUGU,
+    HB_SCRIPT_KANNADA,
+    HB_SCRIPT_MALAYALAM,
+    HB_SCRIPT_SINHALA,
+    HB_SCRIPT_THAI,
+    HB_SCRIPT_LAO,
+    HB_SCRIPT_TIBETAN,
+    HB_SCRIPT_MYANMAR,
+    HB_SCRIPT_GEORGIAN,
+    HB_SCRIPT_HANGUL,
+    HB_SCRIPT_ETHIOPIC,
+    HB_SCRIPT_CHEROKEE,
+    HB_SCRIPT_CANADIAN_ABORIGINAL,
+    HB_SCRIPT_OGHAM,
+    HB_SCRIPT_RUNIC,
+    HB_SCRIPT_KHMER,
+    HB_SCRIPT_MONGOLIAN,
+    HB_SCRIPT_HIRAGANA,
+    HB_SCRIPT_KATAKANA,
+    HB_SCRIPT_BOPOMOFO,
+    HB_SCRIPT_HAN,
+    HB_SCRIPT_YI,
+    HB_SCRIPT_OLD_ITALIC,
+    HB_SCRIPT_GOTHIC,
+    HB_SCRIPT_DESERET,
+    HB_SCRIPT_INHERITED,
+    HB_SCRIPT_TAGALOG,
+    HB_SCRIPT_HANUNOO,
+    HB_SCRIPT_BUHID,
+    HB_SCRIPT_TAGBANWA,
+    HB_SCRIPT_LIMBU,
+    HB_SCRIPT_TAI_LE,
+    HB_SCRIPT_LINEAR_B,
+    HB_SCRIPT_UGARITIC,
+    HB_SCRIPT_SHAVIAN,
+    HB_SCRIPT_OSMANYA,
+    HB_SCRIPT_CYPRIOT,
+    HB_SCRIPT_BRAILLE,
+    HB_SCRIPT_BUGINESE,
+    HB_SCRIPT_COPTIC,
+    HB_SCRIPT_NEW_TAI_LUE,
+    HB_SCRIPT_GLAGOLITIC,
+    HB_SCRIPT_TIFINAGH,
+    HB_SCRIPT_SYLOTI_NAGRI,
+    HB_SCRIPT_OLD_PERSIAN,
+    HB_SCRIPT_KHAROSHTHI,
+    HB_SCRIPT_BALINESE,
+    HB_SCRIPT_CUNEIFORM,
+    HB_SCRIPT_PHOENICIAN,
+    HB_SCRIPT_PHAGS_PA,
+    HB_SCRIPT_NKO,
+    HB_SCRIPT_SUNDANESE,
+    HB_SCRIPT_LEPCHA,
+    HB_SCRIPT_OL_CHIKI,
+    HB_SCRIPT_VAI,
+    HB_SCRIPT_SAURASHTRA,
+    HB_SCRIPT_KAYAH_LI,
+    HB_SCRIPT_REJANG,
+    HB_SCRIPT_LYCIAN,
+    HB_SCRIPT_CARIAN,
+    HB_SCRIPT_LYDIAN,
+    HB_SCRIPT_CHAM,
+    HB_SCRIPT_TAI_THAM,
+    HB_SCRIPT_TAI_VIET,
+    HB_SCRIPT_AVESTAN,
+    HB_SCRIPT_EGYPTIAN_HIEROGLYPHS,
+    HB_SCRIPT_SAMARITAN,
+    HB_SCRIPT_LISU,
+    HB_SCRIPT_BAMUM,
+    HB_SCRIPT_JAVANESE,
+    HB_SCRIPT_MEETEI_MAYEK,
+    HB_SCRIPT_IMPERIAL_ARAMAIC,
+    HB_SCRIPT_OLD_SOUTH_ARABIAN,
+    HB_SCRIPT_INSCRIPTIONAL_PARTHIAN,
+    HB_SCRIPT_INSCRIPTIONAL_PAHLAVI,
+    HB_SCRIPT_OLD_TURKIC,
+    HB_SCRIPT_KAITHI,
+    HB_SCRIPT_BATAK,
+    HB_SCRIPT_BRAHMI,
+    HB_SCRIPT_MANDAIC,
+    HB_SCRIPT_CHAKMA,
+    HB_SCRIPT_MEROITIC_CURSIVE,
+    HB_SCRIPT_MEROITIC_HIEROGLYPHS,
+    HB_SCRIPT_MIAO,
+    HB_SCRIPT_SHARADA,
+    HB_SCRIPT_SORA_SOMPENG,
+    HB_SCRIPT_TAKRI,
+    HB_SCRIPT_UNKNOWN,
+};
+
+static hb_unicode_combining_class_t
+hb_ucdn_combining_class(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+                       void *user_data HB_UNUSED)
+{
+    return (hb_unicode_combining_class_t) ucdn_get_combining_class(unicode);
+}
+
+static unsigned int
+hb_ucdn_eastasian_width(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+                       void *user_data HB_UNUSED)
+{
+    int w = ucdn_get_east_asian_width(unicode);
+    return (w == UCDN_EAST_ASIAN_F || w == UCDN_EAST_ASIAN_W) ? 2 : 1;
+}
+
+static hb_unicode_general_category_t
+hb_ucdn_general_category(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+                        void *user_data HB_UNUSED)
+{
+    return (hb_unicode_general_category_t)ucdn_get_general_category(unicode);
+}
+
+static hb_codepoint_t
+hb_ucdn_mirroring(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+                 void *user_data HB_UNUSED)
+{
+    return ucdn_mirror(unicode);
+}
+
+static hb_script_t
+hb_ucdn_script(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+              void *user_data HB_UNUSED)
+{
+    return ucdn_script_translate[ucdn_get_script(unicode)];
+}
+
+static hb_bool_t
+hb_ucdn_compose(hb_unicode_funcs_t *ufuncs,
+               hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t *ab,
+               void *user_data HB_UNUSED)
+{
+    return ucdn_compose(ab, a, b);
+}
+
+static hb_bool_t
+hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs,
+                 hb_codepoint_t ab, hb_codepoint_t *a, hb_codepoint_t *b,
+                 void *user_data HB_UNUSED)
+{
+    return ucdn_decompose(ab, a, b);
+}
+
+static unsigned int
+hb_ucdn_decompose_compatibility(hb_unicode_funcs_t *ufuncs,
+                               hb_codepoint_t u, hb_codepoint_t *decomposed,
+                               void *user_data HB_UNUSED)
+{
+    return ucdn_compat_decompose(u, decomposed);
+}
+
+extern "C" HB_INTERNAL
+hb_unicode_funcs_t *
+hb_ucdn_get_unicode_funcs (void)
+{
+  static const hb_unicode_funcs_t _hb_ucdn_unicode_funcs = {
+    HB_OBJECT_HEADER_STATIC,
+
+    NULL, /* parent */
+    true, /* immutable */
+    {
+#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_ucdn_##name,
+      HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_UNICODE_FUNC_IMPLEMENT
+    }
+  };
+
+  return const_cast<hb_unicode_funcs_t *> (&_hb_ucdn_unicode_funcs);
+}
+
diff --git a/src/hb-ucdn/COPYING b/src/hb-ucdn/COPYING
new file mode 100644 (file)
index 0000000..be5205c
--- /dev/null
@@ -0,0 +1,13 @@
+The contents of this directory are licensed under the following terms:
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/src/hb-ucdn/Makefile.am b/src/hb-ucdn/Makefile.am
new file mode 100644 (file)
index 0000000..40d6055
--- /dev/null
@@ -0,0 +1,18 @@
+## Process this file with automake to produce Makefile.in
+
+noinst_LTLIBRARIES = libhb-ucdn.la
+
+
+libhb_ucdn_la_SOURCES = \
+       ucdn.h \
+       ucdn.c \
+       unicodedata_db.h
+libhb_ucdn_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/src \
+       -I$(top_builddir)/src
+libhb_ucdn_la_LIBADD =
+
+EXTRA_DIST = README COPYING
+
+-include $(top_srcdir)/git.mk
diff --git a/src/hb-ucdn/Makefile.in b/src/hb-ucdn/Makefile.in
new file mode 100644 (file)
index 0000000..64e16d2
--- /dev/null
@@ -0,0 +1,543 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/hb-ucdn
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       COPYING
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libhb_ucdn_la_DEPENDENCIES =
+am_libhb_ucdn_la_OBJECTS = ucdn.lo
+libhb_ucdn_la_OBJECTS = $(am_libhb_ucdn_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libhb_ucdn_la_SOURCES)
+DIST_SOURCES = $(libhb_ucdn_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_FT_CFLAGS = @CAIRO_FT_CFLAGS@
+CAIRO_FT_LIBS = @CAIRO_FT_LIBS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CORETEXT_CFLAGS = @CORETEXT_CFLAGS@
+CORETEXT_LIBS = @CORETEXT_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
+GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
+GREP = @GREP@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
+HB_VERSION = @HB_VERSION@
+HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
+HB_VERSION_MICRO = @HB_VERSION_MICRO@
+HB_VERSION_MINOR = @HB_VERSION_MINOR@
+ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_LIBS = @ICU_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UNISCRIBE_CFLAGS = @UNISCRIBE_CFLAGS@
+UNISCRIBE_LIBS = @UNISCRIBE_LIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libhb-ucdn.la
+libhb_ucdn_la_SOURCES = \
+       ucdn.h \
+       ucdn.c \
+       unicodedata_db.h
+
+libhb_ucdn_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/src \
+       -I$(top_builddir)/src
+
+libhb_ucdn_la_LIBADD = 
+EXTRA_DIST = README COPYING
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/hb-ucdn/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits src/hb-ucdn/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libhb-ucdn.la: $(libhb_ucdn_la_OBJECTS) $(libhb_ucdn_la_DEPENDENCIES) $(EXTRA_libhb_ucdn_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libhb_ucdn_la_OBJECTS) $(libhb_ucdn_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ucdn.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/hb-ucdn/README b/src/hb-ucdn/README
new file mode 100644 (file)
index 0000000..fcb97b9
--- /dev/null
@@ -0,0 +1,40 @@
+Contents of this directory are derived from UCDN:
+
+  https://github.com/grigorig/ucdn
+
+The original README follows:
+
+
+UCDN - Unicode Database and Normalization
+
+UCDN is a Unicode support library. Currently, it provides access
+to basic character properties contained in the Unicode Character
+Database and low-level normalization functions (pairwise canonical
+composition/decomposition and compatibility decomposition). More
+functionality might be provided in the future, such as additional
+properties, string normalization and encoding conversion.
+
+UCDN uses standard C89 with no particular dependencies or requirements
+except for stdint.h, and can be easily integrated into existing
+projects. However, it can also be used as a standalone library,
+and a CMake build script is provided for this. The first motivation
+behind UCDN development was to provide a standalone set of Unicode
+functions for the HarfBuzz OpenType shaping library. For this purpose,
+a HarfBuzz-specific wrapper is shipped along with it (hb-ucdn.h).
+
+UCDN is published under the ISC license, please see the license header
+in the C source code for more information. The makeunicodata.py script
+required for parsing Unicode database files is licensed under the
+PSF license, please see PYTHON-LICENSE for more information.
+
+UCDN was written by Grigori Goronzy <greg@kinoho.net>.
+
+How to Use
+
+Include ucdn.c, ucdn.h and unicodedata_db.h in your project. Now,
+just use the functions as documented in ucdn.h.
+
+In some cases, it might be necessary to regenerate the Unicode
+database file. The script makeunicodedata.py (Python 3.x required)
+fetches the appropriate files and dumps the compressed database into
+unicodedata_db.h.
diff --git a/src/hb-ucdn/ucdn.c b/src/hb-ucdn/ucdn.c
new file mode 100644 (file)
index 0000000..b61e34a
--- /dev/null
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include "ucdn.h"
+
+typedef struct {
+    unsigned char category;
+    unsigned char combining;
+    unsigned char bidi_class;
+    unsigned char mirrored;
+    unsigned char east_asian_width;
+    unsigned char normalization_check;
+    unsigned char script;
+} UCDRecord;
+
+typedef struct {
+    unsigned short from, to;
+} MirrorPair;
+
+typedef struct {
+    int start;
+    short count, index;
+} Reindex;
+
+#include "unicodedata_db.h"
+
+/* constants required for Hangul (de)composition */
+#define SBASE 0xAC00
+#define LBASE 0x1100
+#define VBASE 0x1161
+#define TBASE 0x11A7
+#define SCOUNT 11172
+#define LCOUNT 19
+#define VCOUNT 21
+#define TCOUNT 28
+#define NCOUNT (VCOUNT * TCOUNT)
+
+static const UCDRecord *get_ucd_record(uint32_t code)
+{
+    int index, offset;
+
+    if (code >= 0x110000)
+        index = 0;
+    else {
+        index  = index0[code >> (SHIFT1+SHIFT2)] << SHIFT1;
+        offset = (code >> SHIFT2) & ((1<<SHIFT1) - 1);
+        index  = index1[index + offset] << SHIFT2;
+        offset = code & ((1<<SHIFT2) - 1);
+        index  = index2[index + offset];
+    }
+
+    return &ucd_records[index];
+}
+
+static const unsigned short *get_decomp_record(uint32_t code)
+{
+    int index, offset;
+
+    if (code >= 0x110000)
+        index = 0;
+    else {
+        index  = decomp_index0[code >> (DECOMP_SHIFT1+DECOMP_SHIFT2)]
+            << DECOMP_SHIFT1;
+        offset = (code >> DECOMP_SHIFT2) & ((1<<DECOMP_SHIFT1) - 1);
+        index  = decomp_index1[index + offset] << DECOMP_SHIFT2;
+        offset = code & ((1<<DECOMP_SHIFT2) - 1);
+        index  = decomp_index2[index + offset];
+    }
+
+    return &decomp_data[index];
+}
+
+static int get_comp_index(uint32_t code, const Reindex *idx)
+{
+    int i;
+
+    for (i = 0; idx[i].start; i++) {
+        const Reindex *cur = &idx[i];
+        if (code < cur->start)
+            return -1;
+        if (code <= cur->start + cur->count) {
+            return cur->index + (code - cur->start);
+        }
+    }
+
+    return -1;
+}
+
+static int compare_mp(const void *a, const void *b)
+{
+    MirrorPair *mpa = (MirrorPair *)a;
+    MirrorPair *mpb = (MirrorPair *)b;
+    return mpa->from - mpb->from;
+}
+
+static int hangul_pair_decompose(uint32_t code, uint32_t *a, uint32_t *b)
+{
+    int si = code - SBASE;
+
+    if (si < 0 || si >= SCOUNT)
+        return 0;
+
+    if (si % TCOUNT) {
+        /* LV,T */
+        *a = SBASE + (si / TCOUNT) * TCOUNT;
+        *b = TBASE + (si % TCOUNT);
+        return 3;
+    } else {
+        /* L,V */
+        *a = LBASE + (si / NCOUNT);
+        *b = VBASE + (si % NCOUNT) / TCOUNT;
+        return 2;
+    }
+}
+
+static int hangul_pair_compose(uint32_t *code, uint32_t a, uint32_t b)
+{
+    if (b < VBASE || b >= (TBASE + TCOUNT))
+        return 0;
+
+    if ((a < LBASE || a >= (LBASE + LCOUNT))
+            && (a < SBASE || a >= (SBASE + SCOUNT)))
+        return 0;
+
+    if (a >= SBASE) {
+        /* LV,T */
+        *code = a + (b - TBASE);
+        return 3;
+    } else {
+        /* L,V */
+        int li = a - LBASE;
+        int vi = b - VBASE;
+        *code = SBASE + li * NCOUNT + vi * TCOUNT;
+        return 2;
+    }
+}
+
+static uint32_t decode_utf16(const unsigned short **code_ptr)
+{
+    const unsigned short *code = *code_ptr;
+
+    if ((code[0] & 0xd800) != 0xd800) {
+        *code_ptr += 1;
+        return (uint32_t)code[0];
+    } else {
+        *code_ptr += 2;
+        return 0x10000 + ((uint32_t)code[1] - 0xdc00) +
+            (((uint32_t)code[0] - 0xd800) << 10);
+    }
+}
+
+const char *ucdn_get_unicode_version(void)
+{
+    return UNIDATA_VERSION;
+}
+
+int ucdn_get_combining_class(uint32_t code)
+{
+    return get_ucd_record(code)->combining;
+}
+
+int ucdn_get_east_asian_width(uint32_t code)
+{
+    return get_ucd_record(code)->east_asian_width;
+}
+
+int ucdn_get_general_category(uint32_t code)
+{
+    return get_ucd_record(code)->category;
+}
+
+int ucdn_get_bidi_class(uint32_t code)
+{
+    return get_ucd_record(code)->bidi_class;
+}
+
+int ucdn_get_mirrored(uint32_t code)
+{
+    return get_ucd_record(code)->mirrored;
+}
+
+int ucdn_get_script(uint32_t code)
+{
+    return get_ucd_record(code)->script;
+}
+
+uint32_t ucdn_mirror(uint32_t code)
+{
+    MirrorPair mp = {0};
+    MirrorPair *res;
+
+    if (get_ucd_record(code)->mirrored == 0)
+        return code;
+
+    mp.from = code;
+    res = bsearch(&mp, mirror_pairs, BIDI_MIRROR_LEN, sizeof(MirrorPair),
+            compare_mp);
+
+    if (res == NULL)
+        return code;
+    else
+        return res->to;
+}
+
+int ucdn_decompose(uint32_t code, uint32_t *a, uint32_t *b)
+{
+    const unsigned short *rec;
+    int len;
+
+    if (hangul_pair_decompose(code, a, b))
+        return 1;
+
+    rec = get_decomp_record(code);
+    len = rec[0] >> 8;
+
+    if ((rec[0] & 0xff) != 0 || len == 0)
+        return 0;
+
+    rec++;
+    *a = decode_utf16(&rec);
+    if (len > 1)
+        *b = decode_utf16(&rec);
+    else
+        *b = 0;
+
+    return 1;
+}
+
+int ucdn_compose(uint32_t *code, uint32_t a, uint32_t b)
+{
+    int l, r, index, indexi, offset;
+
+    if (hangul_pair_compose(code, a, b))
+        return 1;
+
+    l = get_comp_index(a, nfc_first);
+    r = get_comp_index(b, nfc_last);
+
+    if (l < 0 || r < 0)
+        return 0;
+
+    indexi = l * TOTAL_LAST + r;
+    index  = comp_index0[indexi >> (COMP_SHIFT1+COMP_SHIFT2)] << COMP_SHIFT1;
+    offset = (indexi >> COMP_SHIFT2) & ((1<<COMP_SHIFT1) - 1);
+    index  = comp_index1[index + offset] << COMP_SHIFT2;
+    offset = indexi & ((1<<COMP_SHIFT2) - 1);
+    *code  = comp_data[index + offset];
+
+    return *code != 0;
+}
+
+int ucdn_compat_decompose(uint32_t code, uint32_t *decomposed)
+{
+    int i, len;
+    const unsigned short *rec = get_decomp_record(code);
+    len = rec[0] >> 8;
+
+    if (len == 0)
+        return 0;
+
+    rec++;
+    for (i = 0; i < len; i++)
+        decomposed[i] = decode_utf16(&rec);
+
+    return len;
+}
diff --git a/src/hb-ucdn/ucdn.h b/src/hb-ucdn/ucdn.h
new file mode 100644 (file)
index 0000000..802f044
--- /dev/null
@@ -0,0 +1,309 @@
+/*
+ * Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef UCDN_H
+#define UCDN_H
+
+#if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
+# define HB_BEGIN_VISIBILITY _Pragma ("GCC visibility push(hidden)")
+# define HB_END_VISIBILITY _Pragma ("GCC visibility pop")
+#else
+# define HB_BEGIN_VISIBILITY
+# define HB_END_VISIBILITY
+#endif
+#ifdef __cplusplus
+# define HB_BEGIN_HEADER  extern "C" { HB_BEGIN_VISIBILITY
+# define HB_END_HEADER  HB_END_VISIBILITY }
+#else
+# define HB_BEGIN_HEADER  HB_BEGIN_VISIBILITY
+# define HB_END_HEADER  HB_END_VISIBILITY
+#endif
+
+HB_BEGIN_HEADER
+
+#include <stdint.h>
+
+#define UCDN_EAST_ASIAN_F 0
+#define UCDN_EAST_ASIAN_H 1
+#define UCDN_EAST_ASIAN_W 2
+#define UCDN_EAST_ASIAN_NA 3
+#define UCDN_EAST_ASIAN_A 4
+#define UCDN_EAST_ASIAN_N 5
+
+#define UCDN_SCRIPT_COMMON 0
+#define UCDN_SCRIPT_LATIN 1
+#define UCDN_SCRIPT_GREEK 2
+#define UCDN_SCRIPT_CYRILLIC 3
+#define UCDN_SCRIPT_ARMENIAN 4
+#define UCDN_SCRIPT_HEBREW 5
+#define UCDN_SCRIPT_ARABIC 6
+#define UCDN_SCRIPT_SYRIAC 7
+#define UCDN_SCRIPT_THAANA 8
+#define UCDN_SCRIPT_DEVANAGARI 9
+#define UCDN_SCRIPT_BENGALI 10
+#define UCDN_SCRIPT_GURMUKHI 11
+#define UCDN_SCRIPT_GUJARATI 12
+#define UCDN_SCRIPT_ORIYA 13
+#define UCDN_SCRIPT_TAMIL 14
+#define UCDN_SCRIPT_TELUGU 15
+#define UCDN_SCRIPT_KANNADA 16
+#define UCDN_SCRIPT_MALAYALAM 17
+#define UCDN_SCRIPT_SINHALA 18
+#define UCDN_SCRIPT_THAI 19
+#define UCDN_SCRIPT_LAO 20
+#define UCDN_SCRIPT_TIBETAN 21
+#define UCDN_SCRIPT_MYANMAR 22
+#define UCDN_SCRIPT_GEORGIAN 23
+#define UCDN_SCRIPT_HANGUL 24
+#define UCDN_SCRIPT_ETHIOPIC 25
+#define UCDN_SCRIPT_CHEROKEE 26
+#define UCDN_SCRIPT_CANADIAN_ABORIGINAL 27
+#define UCDN_SCRIPT_OGHAM 28
+#define UCDN_SCRIPT_RUNIC 29
+#define UCDN_SCRIPT_KHMER 30
+#define UCDN_SCRIPT_MONGOLIAN 31
+#define UCDN_SCRIPT_HIRAGANA 32
+#define UCDN_SCRIPT_KATAKANA 33
+#define UCDN_SCRIPT_BOPOMOFO 34
+#define UCDN_SCRIPT_HAN 35
+#define UCDN_SCRIPT_YI 36
+#define UCDN_SCRIPT_OLD_ITALIC 37
+#define UCDN_SCRIPT_GOTHIC 38
+#define UCDN_SCRIPT_DESERET 39
+#define UCDN_SCRIPT_INHERITED 40
+#define UCDN_SCRIPT_TAGALOG 41
+#define UCDN_SCRIPT_HANUNOO 42
+#define UCDN_SCRIPT_BUHID 43
+#define UCDN_SCRIPT_TAGBANWA 44
+#define UCDN_SCRIPT_LIMBU 45
+#define UCDN_SCRIPT_TAI_LE 46
+#define UCDN_SCRIPT_LINEAR_B 47
+#define UCDN_SCRIPT_UGARITIC 48
+#define UCDN_SCRIPT_SHAVIAN 49
+#define UCDN_SCRIPT_OSMANYA 50
+#define UCDN_SCRIPT_CYPRIOT 51
+#define UCDN_SCRIPT_BRAILLE 52
+#define UCDN_SCRIPT_BUGINESE 53
+#define UCDN_SCRIPT_COPTIC 54
+#define UCDN_SCRIPT_NEW_TAI_LUE 55
+#define UCDN_SCRIPT_GLAGOLITIC 56
+#define UCDN_SCRIPT_TIFINAGH 57
+#define UCDN_SCRIPT_SYLOTI_NAGRI 58
+#define UCDN_SCRIPT_OLD_PERSIAN 59
+#define UCDN_SCRIPT_KHAROSHTHI 60
+#define UCDN_SCRIPT_BALINESE 61
+#define UCDN_SCRIPT_CUNEIFORM 62
+#define UCDN_SCRIPT_PHOENICIAN 63
+#define UCDN_SCRIPT_PHAGS_PA 64
+#define UCDN_SCRIPT_NKO 65
+#define UCDN_SCRIPT_SUNDANESE 66
+#define UCDN_SCRIPT_LEPCHA 67
+#define UCDN_SCRIPT_OL_CHIKI 68
+#define UCDN_SCRIPT_VAI 69
+#define UCDN_SCRIPT_SAURASHTRA 70
+#define UCDN_SCRIPT_KAYAH_LI 71
+#define UCDN_SCRIPT_REJANG 72
+#define UCDN_SCRIPT_LYCIAN 73
+#define UCDN_SCRIPT_CARIAN 74
+#define UCDN_SCRIPT_LYDIAN 75
+#define UCDN_SCRIPT_CHAM 76
+#define UCDN_SCRIPT_TAI_THAM 77
+#define UCDN_SCRIPT_TAI_VIET 78
+#define UCDN_SCRIPT_AVESTAN 79
+#define UCDN_SCRIPT_EGYPTIAN_HIEROGLYPHS 80
+#define UCDN_SCRIPT_SAMARITAN 81
+#define UCDN_SCRIPT_LISU 82
+#define UCDN_SCRIPT_BAMUM 83
+#define UCDN_SCRIPT_JAVANESE 84
+#define UCDN_SCRIPT_MEETEI_MAYEK 85
+#define UCDN_SCRIPT_IMPERIAL_ARAMAIC 86
+#define UCDN_SCRIPT_OLD_SOUTH_ARABIAN 87
+#define UCDN_SCRIPT_INSCRIPTIONAL_PARTHIAN 88
+#define UCDN_SCRIPT_INSCRIPTIONAL_PAHLAVI 89
+#define UCDN_SCRIPT_OLD_TURKIC 90
+#define UCDN_SCRIPT_KAITHI 91
+#define UCDN_SCRIPT_BATAK 92
+#define UCDN_SCRIPT_BRAHMI 93
+#define UCDN_SCRIPT_MANDAIC 94
+#define UCDN_SCRIPT_CHAKMA 95
+#define UCDN_SCRIPT_MEROITIC_CURSIVE 96
+#define UCDN_SCRIPT_MEROITIC_HIEROGLYPHS 97
+#define UCDN_SCRIPT_MIAO 98
+#define UCDN_SCRIPT_SHARADA 99
+#define UCDN_SCRIPT_SORA_SOMPENG 100
+#define UCDN_SCRIPT_TAKRI 101
+#define UCDN_SCRIPT_UNKNOWN 102
+
+#define UCDN_GENERAL_CATEGORY_CC 0
+#define UCDN_GENERAL_CATEGORY_CF 1
+#define UCDN_GENERAL_CATEGORY_CN 2
+#define UCDN_GENERAL_CATEGORY_CO 3
+#define UCDN_GENERAL_CATEGORY_CS 4
+#define UCDN_GENERAL_CATEGORY_LL 5
+#define UCDN_GENERAL_CATEGORY_LM 6
+#define UCDN_GENERAL_CATEGORY_LO 7
+#define UCDN_GENERAL_CATEGORY_LT 8
+#define UCDN_GENERAL_CATEGORY_LU 9
+#define UCDN_GENERAL_CATEGORY_MC 10
+#define UCDN_GENERAL_CATEGORY_ME 11
+#define UCDN_GENERAL_CATEGORY_MN 12
+#define UCDN_GENERAL_CATEGORY_ND 13
+#define UCDN_GENERAL_CATEGORY_NL 14
+#define UCDN_GENERAL_CATEGORY_NO 15
+#define UCDN_GENERAL_CATEGORY_PC 16
+#define UCDN_GENERAL_CATEGORY_PD 17
+#define UCDN_GENERAL_CATEGORY_PE 18
+#define UCDN_GENERAL_CATEGORY_PF 19
+#define UCDN_GENERAL_CATEGORY_PI 20
+#define UCDN_GENERAL_CATEGORY_PO 21
+#define UCDN_GENERAL_CATEGORY_PS 22
+#define UCDN_GENERAL_CATEGORY_SC 23
+#define UCDN_GENERAL_CATEGORY_SK 24
+#define UCDN_GENERAL_CATEGORY_SM 25
+#define UCDN_GENERAL_CATEGORY_SO 26
+#define UCDN_GENERAL_CATEGORY_ZL 27
+#define UCDN_GENERAL_CATEGORY_ZP 28
+#define UCDN_GENERAL_CATEGORY_ZS 29
+
+#define UCDN_BIDI_CLASS_L 0
+#define UCDN_BIDI_CLASS_LRE 1
+#define UCDN_BIDI_CLASS_LRO 2
+#define UCDN_BIDI_CLASS_R 3
+#define UCDN_BIDI_CLASS_AL 4
+#define UCDN_BIDI_CLASS_RLE 5
+#define UCDN_BIDI_CLASS_RLO 6
+#define UCDN_BIDI_CLASS_PDF 7
+#define UCDN_BIDI_CLASS_EN 8
+#define UCDN_BIDI_CLASS_ES 9
+#define UCDN_BIDI_CLASS_ET 10
+#define UCDN_BIDI_CLASS_AN 11
+#define UCDN_BIDI_CLASS_CS 12
+#define UCDN_BIDI_CLASS_NSM 13
+#define UCDN_BIDI_CLASS_BN 14
+#define UCDN_BIDI_CLASS_B 15
+#define UCDN_BIDI_CLASS_S 16
+#define UCDN_BIDI_CLASS_WS 17
+#define UCDN_BIDI_CLASS_ON 18
+
+/**
+ * Return version of the Unicode database.
+ *
+ * @return Unicode database version
+ */
+const char *ucdn_get_unicode_version(void);
+
+/**
+ * Get combining class of a codepoint.
+ *
+ * @param code Unicode codepoint
+ * @return combining class value, as defined in UAX#44
+ */
+int ucdn_get_combining_class(uint32_t code);
+
+/**
+ * Get east-asian width of a codepoint.
+ *
+ * @param code Unicode codepoint
+ * @return value according to UCDN_EAST_ASIAN_* and as defined in UAX#11.
+ */
+int ucdn_get_east_asian_width(uint32_t code);
+
+/**
+ * Get general category of a codepoint.
+ *
+ * @param code Unicode codepoint
+ * @return value according to UCDN_GENERAL_CATEGORY_* and as defined in
+ * UAX#44.
+ */
+int ucdn_get_general_category(uint32_t code);
+
+/**
+ * Get bidirectional class of a codepoint.
+ *
+ * @param code Unicode codepoint
+ * @return value according to UCDN_BIDI_CLASS_* and as defined in UAX#44.
+ */
+int ucdn_get_bidi_class(uint32_t code);
+
+/**
+ * Get script of a codepoint.
+ *
+ * @param code Unicode codepoint
+ * @return value according to UCDN_SCRIPT_* and as defined in UAX#24.
+ */
+int ucdn_get_script(uint32_t code);
+
+/**
+ * Check if codepoint can be mirrored.
+ *
+ * @param code Unicode codepoint
+ * @return 1 if mirrored character exists, otherwise 0
+ */
+int ucdn_get_mirrored(uint32_t code);
+
+/**
+ * Mirror a codepoint.
+ *
+ * @param code Unicode codepoint
+ * @return mirrored codepoint or the original codepoint if no
+ * mirrored character exists
+ */
+uint32_t ucdn_mirror(uint32_t code);
+
+/**
+ * Pairwise canonical decomposition of a codepoint. This includes
+ * Hangul Jamo decomposition (see chapter 3.12 of the Unicode core
+ * specification).
+ *
+ * Hangul is decomposed into L and V jamos for LV forms, and an
+ * LV precomposed syllable and a T jamo for LVT forms.
+ *
+ * @param code Unicode codepoint
+ * @param a filled with first codepoint of decomposition
+ * @param b filled with second codepoint of decomposition, or 0
+ * @return success
+ */
+int ucdn_decompose(uint32_t code, uint32_t *a, uint32_t *b);
+
+/**
+ * Compatibility decomposition of a codepoint.
+ *
+ * @param code Unicode codepoint
+ * @param decomposed filled with decomposition, must be able to hold 18
+ * characters
+ * @return length of decomposition or 0 in case none exists
+ */
+int ucdn_compat_decompose(uint32_t code, uint32_t *decomposed);
+
+/**
+ * Pairwise canonical composition of two codepoints. This includes
+ * Hangul Jamo composition (see chapter 3.12 of the Unicode core
+ * specification).
+ *
+ * Hangul composition expects either L and V jamos, or an LV
+ * precomposed syllable and a T jamo. This is exactly the inverse
+ * of pairwise Hangul decomposition.
+ *
+ * @param code filled with composition
+ * @param a first codepoint
+ * @param b second codepoint
+ * @return success
+ */
+int ucdn_compose(uint32_t *code, uint32_t a, uint32_t b);
+
+HB_END_HEADER
+
+#endif
diff --git a/src/hb-ucdn/unicodedata_db.h b/src/hb-ucdn/unicodedata_db.h
new file mode 100644 (file)
index 0000000..20244ac
--- /dev/null
@@ -0,0 +1,4754 @@
+/* this file was generated by makeunicodedata.py 3.2 */
+
+#define UNIDATA_VERSION "6.2.0"
+/* a list of unique database records */
+static const UCDRecord ucd_records[] = {
+    {2, 0, 18, 0, 5, 0, 102},
+    {0, 0, 14, 0, 5, 0, 0},
+    {0, 0, 16, 0, 5, 0, 0},
+    {0, 0, 15, 0, 5, 0, 0},
+    {0, 0, 17, 0, 5, 0, 0},
+    {29, 0, 17, 0, 3, 0, 0},
+    {21, 0, 18, 0, 3, 0, 0},
+    {21, 0, 10, 0, 3, 0, 0},
+    {23, 0, 10, 0, 3, 0, 0},
+    {22, 0, 18, 1, 3, 0, 0},
+    {18, 0, 18, 1, 3, 0, 0},
+    {25, 0, 9, 0, 3, 0, 0},
+    {21, 0, 12, 0, 3, 0, 0},
+    {17, 0, 9, 0, 3, 0, 0},
+    {13, 0, 8, 0, 3, 0, 0},
+    {25, 0, 18, 1, 3, 0, 0},
+    {25, 0, 18, 0, 3, 0, 0},
+    {9, 0, 0, 0, 3, 0, 1},
+    {24, 0, 18, 0, 3, 0, 0},
+    {16, 0, 18, 0, 3, 0, 0},
+    {5, 0, 0, 0, 3, 0, 1},
+    {29, 0, 12, 0, 5, 0, 0},
+    {21, 0, 18, 0, 4, 0, 0},
+    {23, 0, 10, 0, 4, 0, 0},
+    {26, 0, 18, 0, 3, 0, 0},
+    {24, 0, 18, 0, 4, 0, 0},
+    {26, 0, 18, 0, 5, 0, 0},
+    {7, 0, 0, 0, 4, 0, 1},
+    {20, 0, 18, 1, 5, 0, 0},
+    {1, 0, 14, 0, 4, 0, 0},
+    {26, 0, 18, 0, 4, 0, 0},
+    {26, 0, 10, 0, 4, 0, 0},
+    {25, 0, 10, 0, 4, 0, 0},
+    {15, 0, 8, 0, 4, 0, 0},
+    {5, 0, 0, 0, 5, 0, 0},
+    {19, 0, 18, 1, 5, 0, 0},
+    {15, 0, 18, 0, 4, 0, 0},
+    {9, 0, 0, 0, 5, 0, 1},
+    {9, 0, 0, 0, 4, 0, 1},
+    {25, 0, 18, 0, 4, 0, 0},
+    {5, 0, 0, 0, 4, 0, 1},
+    {5, 0, 0, 0, 5, 0, 1},
+    {7, 0, 0, 0, 5, 0, 1},
+    {8, 0, 0, 0, 5, 0, 1},
+    {6, 0, 0, 0, 5, 0, 1},
+    {6, 0, 18, 0, 5, 0, 0},
+    {6, 0, 0, 0, 5, 0, 0},
+    {24, 0, 18, 0, 5, 0, 0},
+    {6, 0, 18, 0, 4, 0, 0},
+    {6, 0, 0, 0, 4, 0, 0},
+    {24, 0, 18, 0, 5, 0, 34},
+    {12, 230, 13, 0, 4, 0, 40},
+    {12, 232, 13, 0, 4, 0, 40},
+    {12, 220, 13, 0, 4, 0, 40},
+    {12, 216, 13, 0, 4, 0, 40},
+    {12, 202, 13, 0, 4, 0, 40},
+    {12, 1, 13, 0, 4, 0, 40},
+    {12, 240, 13, 0, 4, 0, 40},
+    {12, 0, 13, 0, 4, 0, 40},
+    {12, 233, 13, 0, 4, 0, 40},
+    {12, 234, 13, 0, 4, 0, 40},
+    {9, 0, 0, 0, 5, 0, 2},
+    {5, 0, 0, 0, 5, 0, 2},
+    {24, 0, 18, 0, 5, 0, 2},
+    {2, 0, 18, 0, 5, 0, 102},
+    {6, 0, 0, 0, 5, 0, 2},
+    {21, 0, 18, 0, 5, 0, 0},
+    {9, 0, 0, 0, 4, 0, 2},
+    {5, 0, 0, 0, 4, 0, 2},
+    {9, 0, 0, 0, 5, 0, 54},
+    {5, 0, 0, 0, 5, 0, 54},
+    {25, 0, 18, 0, 5, 0, 2},
+    {9, 0, 0, 0, 5, 0, 3},
+    {9, 0, 0, 0, 4, 0, 3},
+    {5, 0, 0, 0, 4, 0, 3},
+    {5, 0, 0, 0, 5, 0, 3},
+    {26, 0, 0, 0, 5, 0, 3},
+    {12, 230, 13, 0, 5, 0, 3},
+    {12, 230, 13, 0, 5, 0, 40},
+    {11, 0, 13, 0, 5, 0, 3},
+    {9, 0, 0, 0, 5, 0, 4},
+    {6, 0, 0, 0, 5, 0, 4},
+    {21, 0, 0, 0, 5, 0, 4},
+    {5, 0, 0, 0, 5, 0, 4},
+    {21, 0, 0, 0, 5, 0, 0},
+    {17, 0, 18, 0, 5, 0, 4},
+    {23, 0, 10, 0, 5, 0, 4},
+    {12, 220, 13, 0, 5, 0, 5},
+    {12, 230, 13, 0, 5, 0, 5},
+    {12, 222, 13, 0, 5, 0, 5},
+    {12, 228, 13, 0, 5, 0, 5},
+    {12, 10, 13, 0, 5, 0, 5},
+    {12, 11, 13, 0, 5, 0, 5},
+    {12, 12, 13, 0, 5, 0, 5},
+    {12, 13, 13, 0, 5, 0, 5},
+    {12, 14, 13, 0, 5, 0, 5},
+    {12, 15, 13, 0, 5, 0, 5},
+    {12, 16, 13, 0, 5, 0, 5},
+    {12, 17, 13, 0, 5, 0, 5},
+    {12, 18, 13, 0, 5, 0, 5},
+    {12, 19, 13, 0, 5, 0, 5},
+    {12, 20, 13, 0, 5, 0, 5},
+    {12, 21, 13, 0, 5, 0, 5},
+    {12, 22, 13, 0, 5, 0, 5},
+    {17, 0, 3, 0, 5, 0, 5},
+    {12, 23, 13, 0, 5, 0, 5},
+    {21, 0, 3, 0, 5, 0, 5},
+    {12, 24, 13, 0, 5, 0, 5},
+    {12, 25, 13, 0, 5, 0, 5},
+    {7, 0, 3, 0, 5, 0, 5},
+    {1, 0, 11, 0, 5, 0, 6},
+    {25, 0, 18, 0, 5, 0, 6},
+    {25, 0, 4, 0, 5, 0, 6},
+    {21, 0, 10, 0, 5, 0, 6},
+    {23, 0, 4, 0, 5, 0, 6},
+    {21, 0, 12, 0, 5, 0, 0},
+    {21, 0, 4, 0, 5, 0, 6},
+    {26, 0, 18, 0, 5, 0, 6},
+    {12, 230, 13, 0, 5, 0, 6},
+    {12, 30, 13, 0, 5, 0, 6},
+    {12, 31, 13, 0, 5, 0, 6},
+    {12, 32, 13, 0, 5, 0, 6},
+    {21, 0, 4, 0, 5, 0, 0},
+    {7, 0, 4, 0, 5, 0, 6},
+    {6, 0, 4, 0, 5, 0, 0},
+    {12, 27, 13, 0, 5, 0, 40},
+    {12, 28, 13, 0, 5, 0, 40},
+    {12, 29, 13, 0, 5, 0, 40},
+    {12, 30, 13, 0, 5, 0, 40},
+    {12, 31, 13, 0, 5, 0, 40},
+    {12, 32, 13, 0, 5, 0, 40},
+    {12, 33, 13, 0, 5, 0, 40},
+    {12, 34, 13, 0, 5, 0, 40},
+    {12, 220, 13, 0, 5, 0, 40},
+    {12, 220, 13, 0, 5, 0, 6},
+    {13, 0, 11, 0, 5, 0, 0},
+    {21, 0, 11, 0, 5, 0, 6},
+    {12, 35, 13, 0, 5, 0, 40},
+    {1, 0, 11, 0, 5, 0, 0},
+    {6, 0, 4, 0, 5, 0, 6},
+    {13, 0, 8, 0, 5, 0, 6},
+    {26, 0, 4, 0, 5, 0, 6},
+    {21, 0, 4, 0, 5, 0, 7},
+    {1, 0, 4, 0, 5, 0, 7},
+    {7, 0, 4, 0, 5, 0, 7},
+    {12, 36, 13, 0, 5, 0, 7},
+    {12, 230, 13, 0, 5, 0, 7},
+    {12, 220, 13, 0, 5, 0, 7},
+    {7, 0, 4, 0, 5, 0, 8},
+    {12, 0, 13, 0, 5, 0, 8},
+    {13, 0, 3, 0, 5, 0, 65},
+    {7, 0, 3, 0, 5, 0, 65},
+    {12, 230, 13, 0, 5, 0, 65},
+    {12, 220, 13, 0, 5, 0, 65},
+    {6, 0, 3, 0, 5, 0, 65},
+    {26, 0, 18, 0, 5, 0, 65},
+    {21, 0, 18, 0, 5, 0, 65},
+    {7, 0, 3, 0, 5, 0, 81},
+    {12, 230, 13, 0, 5, 0, 81},
+    {6, 0, 3, 0, 5, 0, 81},
+    {21, 0, 3, 0, 5, 0, 81},
+    {7, 0, 3, 0, 5, 0, 94},
+    {12, 220, 13, 0, 5, 0, 94},
+    {21, 0, 3, 0, 5, 0, 94},
+    {12, 27, 13, 0, 5, 0, 6},
+    {12, 28, 13, 0, 5, 0, 6},
+    {12, 29, 13, 0, 5, 0, 6},
+    {12, 0, 13, 0, 5, 0, 9},
+    {10, 0, 0, 0, 5, 0, 9},
+    {7, 0, 0, 0, 5, 0, 9},
+    {12, 7, 13, 0, 5, 0, 9},
+    {12, 9, 13, 0, 5, 0, 9},
+    {12, 230, 13, 0, 5, 0, 9},
+    {13, 0, 0, 0, 5, 0, 9},
+    {21, 0, 0, 0, 5, 0, 9},
+    {6, 0, 0, 0, 5, 0, 9},
+    {12, 0, 13, 0, 5, 0, 10},
+    {10, 0, 0, 0, 5, 0, 10},
+    {7, 0, 0, 0, 5, 0, 10},
+    {12, 7, 13, 0, 5, 0, 10},
+    {12, 9, 13, 0, 5, 0, 10},
+    {13, 0, 0, 0, 5, 0, 10},
+    {23, 0, 10, 0, 5, 0, 10},
+    {15, 0, 0, 0, 5, 0, 10},
+    {26, 0, 0, 0, 5, 0, 10},
+    {12, 0, 13, 0, 5, 0, 11},
+    {10, 0, 0, 0, 5, 0, 11},
+    {7, 0, 0, 0, 5, 0, 11},
+    {12, 7, 13, 0, 5, 0, 11},
+    {12, 9, 13, 0, 5, 0, 11},
+    {13, 0, 0, 0, 5, 0, 11},
+    {12, 0, 13, 0, 5, 0, 12},
+    {10, 0, 0, 0, 5, 0, 12},
+    {7, 0, 0, 0, 5, 0, 12},
+    {12, 7, 13, 0, 5, 0, 12},
+    {12, 9, 13, 0, 5, 0, 12},
+    {13, 0, 0, 0, 5, 0, 12},
+    {21, 0, 0, 0, 5, 0, 12},
+    {23, 0, 10, 0, 5, 0, 12},
+    {12, 0, 13, 0, 5, 0, 13},
+    {10, 0, 0, 0, 5, 0, 13},
+    {7, 0, 0, 0, 5, 0, 13},
+    {12, 7, 13, 0, 5, 0, 13},
+    {12, 9, 13, 0, 5, 0, 13},
+    {13, 0, 0, 0, 5, 0, 13},
+    {26, 0, 0, 0, 5, 0, 13},
+    {15, 0, 0, 0, 5, 0, 13},
+    {12, 0, 13, 0, 5, 0, 14},
+    {7, 0, 0, 0, 5, 0, 14},
+    {10, 0, 0, 0, 5, 0, 14},
+    {12, 9, 13, 0, 5, 0, 14},
+    {13, 0, 0, 0, 5, 0, 14},
+    {15, 0, 0, 0, 5, 0, 14},
+    {26, 0, 18, 0, 5, 0, 14},
+    {23, 0, 10, 0, 5, 0, 14},
+    {10, 0, 0, 0, 5, 0, 15},
+    {7, 0, 0, 0, 5, 0, 15},
+    {12, 0, 13, 0, 5, 0, 15},
+    {12, 9, 13, 0, 5, 0, 15},
+    {12, 84, 13, 0, 5, 0, 15},
+    {12, 91, 13, 0, 5, 0, 15},
+    {13, 0, 0, 0, 5, 0, 15},
+    {15, 0, 18, 0, 5, 0, 15},
+    {26, 0, 0, 0, 5, 0, 15},
+    {10, 0, 0, 0, 5, 0, 16},
+    {7, 0, 0, 0, 5, 0, 16},
+    {12, 7, 13, 0, 5, 0, 16},
+    {12, 0, 0, 0, 5, 0, 16},
+    {12, 0, 13, 0, 5, 0, 16},
+    {12, 9, 13, 0, 5, 0, 16},
+    {13, 0, 0, 0, 5, 0, 16},
+    {10, 0, 0, 0, 5, 0, 17},
+    {7, 0, 0, 0, 5, 0, 17},
+    {12, 0, 13, 0, 5, 0, 17},
+    {12, 9, 13, 0, 5, 0, 17},
+    {13, 0, 0, 0, 5, 0, 17},
+    {15, 0, 0, 0, 5, 0, 17},
+    {26, 0, 0, 0, 5, 0, 17},
+    {10, 0, 0, 0, 5, 0, 18},
+    {7, 0, 0, 0, 5, 0, 18},
+    {12, 9, 13, 0, 5, 0, 18},
+    {12, 0, 13, 0, 5, 0, 18},
+    {21, 0, 0, 0, 5, 0, 18},
+    {7, 0, 0, 0, 5, 0, 19},
+    {12, 0, 13, 0, 5, 0, 19},
+    {12, 103, 13, 0, 5, 0, 19},
+    {12, 9, 13, 0, 5, 0, 19},
+    {23, 0, 10, 0, 5, 0, 0},
+    {6, 0, 0, 0, 5, 0, 19},
+    {12, 107, 13, 0, 5, 0, 19},
+    {21, 0, 0, 0, 5, 0, 19},
+    {13, 0, 0, 0, 5, 0, 19},
+    {7, 0, 0, 0, 5, 0, 20},
+    {12, 0, 13, 0, 5, 0, 20},
+    {12, 118, 13, 0, 5, 0, 20},
+    {6, 0, 0, 0, 5, 0, 20},
+    {12, 122, 13, 0, 5, 0, 20},
+    {13, 0, 0, 0, 5, 0, 20},
+    {7, 0, 0, 0, 5, 0, 21},
+    {26, 0, 0, 0, 5, 0, 21},
+    {21, 0, 0, 0, 5, 0, 21},
+    {12, 220, 13, 0, 5, 0, 21},
+    {13, 0, 0, 0, 5, 0, 21},
+    {15, 0, 0, 0, 5, 0, 21},
+    {12, 216, 13, 0, 5, 0, 21},
+    {22, 0, 18, 1, 5, 0, 21},
+    {18, 0, 18, 1, 5, 0, 21},
+    {10, 0, 0, 0, 5, 0, 21},
+    {12, 129, 13, 0, 5, 0, 21},
+    {12, 130, 13, 0, 5, 0, 21},
+    {12, 0, 13, 0, 5, 0, 21},
+    {12, 132, 13, 0, 5, 0, 21},
+    {12, 230, 13, 0, 5, 0, 21},
+    {12, 9, 13, 0, 5, 0, 21},
+    {26, 0, 0, 0, 5, 0, 0},
+    {7, 0, 0, 0, 5, 0, 22},
+    {10, 0, 0, 0, 5, 0, 22},
+    {12, 0, 13, 0, 5, 0, 22},
+    {12, 7, 13, 0, 5, 0, 22},
+    {12, 9, 13, 0, 5, 0, 22},
+    {13, 0, 0, 0, 5, 0, 22},
+    {21, 0, 0, 0, 5, 0, 22},
+    {12, 220, 13, 0, 5, 0, 22},
+    {26, 0, 0, 0, 5, 0, 22},
+    {9, 0, 0, 0, 5, 0, 23},
+    {7, 0, 0, 0, 5, 0, 23},
+    {6, 0, 0, 0, 5, 0, 23},
+    {7, 0, 0, 0, 2, 0, 24},
+    {7, 0, 0, 0, 5, 0, 24},
+    {7, 0, 0, 0, 5, 0, 25},
+    {12, 230, 13, 0, 5, 0, 25},
+    {21, 0, 0, 0, 5, 0, 25},
+    {15, 0, 0, 0, 5, 0, 25},
+    {26, 0, 18, 0, 5, 0, 25},
+    {7, 0, 0, 0, 5, 0, 26},
+    {17, 0, 18, 0, 5, 0, 27},
+    {7, 0, 0, 0, 5, 0, 27},
+    {21, 0, 0, 0, 5, 0, 27},
+    {29, 0, 17, 0, 5, 0, 28},
+    {7, 0, 0, 0, 5, 0, 28},
+    {22, 0, 18, 1, 5, 0, 28},
+    {18, 0, 18, 1, 5, 0, 28},
+    {7, 0, 0, 0, 5, 0, 29},
+    {14, 0, 0, 0, 5, 0, 29},
+    {7, 0, 0, 0, 5, 0, 41},
+    {12, 0, 13, 0, 5, 0, 41},
+    {12, 9, 13, 0, 5, 0, 41},
+    {7, 0, 0, 0, 5, 0, 42},
+    {12, 0, 13, 0, 5, 0, 42},
+    {12, 9, 13, 0, 5, 0, 42},
+    {7, 0, 0, 0, 5, 0, 43},
+    {12, 0, 13, 0, 5, 0, 43},
+    {7, 0, 0, 0, 5, 0, 44},
+    {12, 0, 13, 0, 5, 0, 44},
+    {7, 0, 0, 0, 5, 0, 30},
+    {12, 0, 13, 0, 5, 0, 30},
+    {10, 0, 0, 0, 5, 0, 30},
+    {12, 9, 13, 0, 5, 0, 30},
+    {21, 0, 0, 0, 5, 0, 30},
+    {6, 0, 0, 0, 5, 0, 30},
+    {23, 0, 10, 0, 5, 0, 30},
+    {12, 230, 13, 0, 5, 0, 30},
+    {13, 0, 0, 0, 5, 0, 30},
+    {15, 0, 18, 0, 5, 0, 30},
+    {21, 0, 18, 0, 5, 0, 31},
+    {17, 0, 18, 0, 5, 0, 31},
+    {12, 0, 13, 0, 5, 0, 31},
+    {29, 0, 17, 0, 5, 0, 31},
+    {13, 0, 0, 0, 5, 0, 31},
+    {7, 0, 0, 0, 5, 0, 31},
+    {6, 0, 0, 0, 5, 0, 31},
+    {12, 228, 13, 0, 5, 0, 31},
+    {7, 0, 0, 0, 5, 0, 45},
+    {12, 0, 13, 0, 5, 0, 45},
+    {10, 0, 0, 0, 5, 0, 45},
+    {12, 222, 13, 0, 5, 0, 45},
+    {12, 230, 13, 0, 5, 0, 45},
+    {12, 220, 13, 0, 5, 0, 45},
+    {26, 0, 18, 0, 5, 0, 45},
+    {21, 0, 18, 0, 5, 0, 45},
+    {13, 0, 0, 0, 5, 0, 45},
+    {7, 0, 0, 0, 5, 0, 46},
+    {7, 0, 0, 0, 5, 0, 55},
+    {10, 0, 0, 0, 5, 0, 55},
+    {13, 0, 0, 0, 5, 0, 55},
+    {15, 0, 0, 0, 5, 0, 55},
+    {26, 0, 18, 0, 5, 0, 55},
+    {26, 0, 18, 0, 5, 0, 30},
+    {7, 0, 0, 0, 5, 0, 53},
+    {12, 230, 13, 0, 5, 0, 53},
+    {12, 220, 13, 0, 5, 0, 53},
+    {10, 0, 0, 0, 5, 0, 53},
+    {21, 0, 0, 0, 5, 0, 53},
+    {7, 0, 0, 0, 5, 0, 77},
+    {10, 0, 0, 0, 5, 0, 77},
+    {12, 0, 13, 0, 5, 0, 77},
+    {12, 9, 13, 0, 5, 0, 77},
+    {12, 230, 13, 0, 5, 0, 77},
+    {12, 220, 13, 0, 5, 0, 77},
+    {13, 0, 0, 0, 5, 0, 77},
+    {21, 0, 0, 0, 5, 0, 77},
+    {6, 0, 0, 0, 5, 0, 77},
+    {12, 0, 13, 0, 5, 0, 61},
+    {10, 0, 0, 0, 5, 0, 61},
+    {7, 0, 0, 0, 5, 0, 61},
+    {12, 7, 13, 0, 5, 0, 61},
+    {10, 9, 0, 0, 5, 0, 61},
+    {13, 0, 0, 0, 5, 0, 61},
+    {21, 0, 0, 0, 5, 0, 61},
+    {26, 0, 0, 0, 5, 0, 61},
+    {12, 230, 13, 0, 5, 0, 61},
+    {12, 220, 13, 0, 5, 0, 61},
+    {12, 0, 13, 0, 5, 0, 66},
+    {10, 0, 0, 0, 5, 0, 66},
+    {7, 0, 0, 0, 5, 0, 66},
+    {10, 9, 0, 0, 5, 0, 66},
+    {12, 9, 13, 0, 5, 0, 66},
+    {13, 0, 0, 0, 5, 0, 66},
+    {7, 0, 0, 0, 5, 0, 92},
+    {12, 7, 13, 0, 5, 0, 92},
+    {10, 0, 0, 0, 5, 0, 92},
+    {12, 0, 13, 0, 5, 0, 92},
+    {10, 9, 0, 0, 5, 0, 92},
+    {21, 0, 0, 0, 5, 0, 92},
+    {7, 0, 0, 0, 5, 0, 67},
+    {10, 0, 0, 0, 5, 0, 67},
+    {12, 0, 13, 0, 5, 0, 67},
+    {12, 7, 13, 0, 5, 0, 67},
+    {21, 0, 0, 0, 5, 0, 67},
+    {13, 0, 0, 0, 5, 0, 67},
+    {13, 0, 0, 0, 5, 0, 68},
+    {7, 0, 0, 0, 5, 0, 68},
+    {6, 0, 0, 0, 5, 0, 68},
+    {21, 0, 0, 0, 5, 0, 68},
+    {21, 0, 0, 0, 5, 0, 66},
+    {12, 1, 13, 0, 5, 0, 40},
+    {10, 0, 0, 0, 5, 0, 0},
+    {7, 0, 0, 0, 5, 0, 0},
+    {6, 0, 0, 0, 5, 0, 3},
+    {12, 234, 13, 0, 5, 0, 40},
+    {12, 214, 13, 0, 5, 0, 40},
+    {12, 202, 13, 0, 5, 0, 40},
+    {12, 233, 13, 0, 5, 0, 40},
+    {8, 0, 0, 0, 5, 0, 2},
+    {29, 0, 17, 0, 5, 0, 0},
+    {1, 0, 14, 0, 5, 0, 0},
+    {1, 0, 14, 0, 5, 0, 40},
+    {1, 0, 0, 0, 5, 0, 0},
+    {1, 0, 3, 0, 5, 0, 0},
+    {17, 0, 18, 0, 4, 0, 0},
+    {17, 0, 18, 0, 5, 0, 0},
+    {20, 0, 18, 0, 4, 0, 0},
+    {19, 0, 18, 0, 4, 0, 0},
+    {22, 0, 18, 0, 5, 0, 0},
+    {20, 0, 18, 0, 5, 0, 0},
+    {27, 0, 17, 0, 5, 0, 0},
+    {28, 0, 15, 0, 5, 0, 0},
+    {1, 0, 1, 0, 5, 0, 0},
+    {1, 0, 5, 0, 5, 0, 0},
+    {1, 0, 7, 0, 5, 0, 0},
+    {1, 0, 2, 0, 5, 0, 0},
+    {1, 0, 6, 0, 5, 0, 0},
+    {21, 0, 10, 0, 4, 0, 0},
+    {21, 0, 10, 0, 5, 0, 0},
+    {16, 0, 18, 0, 5, 0, 0},
+    {25, 0, 12, 0, 5, 0, 0},
+    {22, 0, 18, 1, 5, 0, 0},
+    {18, 0, 18, 1, 5, 0, 0},
+    {25, 0, 18, 0, 5, 0, 0},
+    {15, 0, 8, 0, 5, 0, 0},
+    {25, 0, 9, 0, 5, 0, 0},
+    {6, 0, 0, 0, 4, 0, 1},
+    {23, 0, 10, 0, 1, 0, 0},
+    {11, 0, 13, 0, 5, 0, 40},
+    {9, 0, 0, 0, 5, 0, 0},
+    {5, 0, 0, 0, 4, 0, 0},
+    {26, 0, 10, 0, 5, 0, 0},
+    {25, 0, 18, 1, 5, 0, 0},
+    {15, 0, 18, 0, 5, 0, 0},
+    {14, 0, 0, 0, 4, 0, 1},
+    {14, 0, 0, 0, 5, 0, 1},
+    {25, 0, 18, 1, 4, 0, 0},
+    {25, 0, 10, 0, 5, 0, 0},
+    {22, 0, 18, 1, 2, 0, 0},
+    {18, 0, 18, 1, 2, 0, 0},
+    {26, 0, 0, 0, 4, 0, 0},
+    {26, 0, 0, 0, 5, 0, 52},
+    {9, 0, 0, 0, 5, 0, 56},
+    {5, 0, 0, 0, 5, 0, 56},
+    {26, 0, 18, 0, 5, 0, 54},
+    {12, 230, 13, 0, 5, 0, 54},
+    {21, 0, 18, 0, 5, 0, 54},
+    {15, 0, 18, 0, 5, 0, 54},
+    {5, 0, 0, 0, 5, 0, 23},
+    {7, 0, 0, 0, 5, 0, 57},
+    {6, 0, 0, 0, 5, 0, 57},
+    {21, 0, 0, 0, 5, 0, 57},
+    {12, 9, 13, 0, 5, 0, 57},
+    {26, 0, 18, 0, 2, 0, 35},
+    {26, 0, 18, 0, 2, 0, 0},
+    {29, 0, 17, 0, 0, 0, 0},
+    {21, 0, 18, 0, 2, 0, 0},
+    {6, 0, 0, 0, 2, 0, 35},
+    {7, 0, 0, 0, 2, 0, 0},
+    {14, 0, 0, 0, 2, 0, 35},
+    {17, 0, 18, 0, 2, 0, 0},
+    {22, 0, 18, 0, 2, 0, 0},
+    {18, 0, 18, 0, 2, 0, 0},
+    {12, 218, 13, 0, 2, 0, 40},
+    {12, 228, 13, 0, 2, 0, 40},
+    {12, 232, 13, 0, 2, 0, 40},
+    {12, 222, 13, 0, 2, 0, 40},
+    {10, 224, 0, 0, 2, 0, 24},
+    {6, 0, 0, 0, 2, 0, 0},
+    {7, 0, 0, 0, 2, 0, 32},
+    {12, 8, 13, 0, 2, 0, 40},
+    {24, 0, 18, 0, 2, 0, 0},
+    {6, 0, 0, 0, 2, 0, 32},
+    {7, 0, 0, 0, 2, 0, 33},
+    {6, 0, 0, 0, 2, 0, 33},
+    {7, 0, 0, 0, 2, 0, 34},
+    {26, 0, 0, 0, 2, 0, 0},
+    {15, 0, 0, 0, 2, 0, 0},
+    {26, 0, 0, 0, 2, 0, 24},
+    {26, 0, 18, 0, 2, 0, 24},
+    {15, 0, 0, 0, 4, 0, 0},
+    {15, 0, 18, 0, 2, 0, 0},
+    {26, 0, 0, 0, 2, 0, 33},
+    {7, 0, 0, 0, 2, 0, 35},
+    {2, 0, 18, 0, 2, 0, 35},
+    {2, 0, 18, 0, 2, 0, 102},
+    {7, 0, 0, 0, 2, 0, 36},
+    {6, 0, 0, 0, 2, 0, 36},
+    {26, 0, 18, 0, 2, 0, 36},
+    {7, 0, 0, 0, 5, 0, 82},
+    {6, 0, 0, 0, 5, 0, 82},
+    {21, 0, 0, 0, 5, 0, 82},
+    {7, 0, 0, 0, 5, 0, 69},
+    {6, 0, 0, 0, 5, 0, 69},
+    {21, 0, 18, 0, 5, 0, 69},
+    {13, 0, 0, 0, 5, 0, 69},
+    {7, 0, 0, 0, 5, 0, 3},
+    {21, 0, 18, 0, 5, 0, 3},
+    {6, 0, 18, 0, 5, 0, 3},
+    {7, 0, 0, 0, 5, 0, 83},
+    {14, 0, 0, 0, 5, 0, 83},
+    {12, 230, 13, 0, 5, 0, 83},
+    {21, 0, 0, 0, 5, 0, 83},
+    {24, 0, 0, 0, 5, 0, 0},
+    {7, 0, 0, 0, 5, 0, 58},
+    {12, 0, 13, 0, 5, 0, 58},
+    {12, 9, 13, 0, 5, 0, 58},
+    {10, 0, 0, 0, 5, 0, 58},
+    {26, 0, 18, 0, 5, 0, 58},
+    {15, 0, 0, 0, 5, 0, 0},
+    {7, 0, 0, 0, 5, 0, 64},
+    {21, 0, 18, 0, 5, 0, 64},
+    {10, 0, 0, 0, 5, 0, 70},
+    {7, 0, 0, 0, 5, 0, 70},
+    {12, 9, 13, 0, 5, 0, 70},
+    {21, 0, 0, 0, 5, 0, 70},
+    {13, 0, 0, 0, 5, 0, 70},
+    {13, 0, 0, 0, 5, 0, 71},
+    {7, 0, 0, 0, 5, 0, 71},
+    {12, 0, 13, 0, 5, 0, 71},
+    {12, 220, 13, 0, 5, 0, 71},
+    {21, 0, 0, 0, 5, 0, 71},
+    {7, 0, 0, 0, 5, 0, 72},
+    {12, 0, 13, 0, 5, 0, 72},
+    {10, 0, 0, 0, 5, 0, 72},
+    {10, 9, 0, 0, 5, 0, 72},
+    {21, 0, 0, 0, 5, 0, 72},
+    {12, 0, 13, 0, 5, 0, 84},
+    {10, 0, 0, 0, 5, 0, 84},
+    {7, 0, 0, 0, 5, 0, 84},
+    {12, 7, 13, 0, 5, 0, 84},
+    {10, 9, 0, 0, 5, 0, 84},
+    {21, 0, 0, 0, 5, 0, 84},
+    {6, 0, 0, 0, 5, 0, 84},
+    {13, 0, 0, 0, 5, 0, 84},
+    {7, 0, 0, 0, 5, 0, 76},
+    {12, 0, 13, 0, 5, 0, 76},
+    {10, 0, 0, 0, 5, 0, 76},
+    {13, 0, 0, 0, 5, 0, 76},
+    {21, 0, 0, 0, 5, 0, 76},
+    {6, 0, 0, 0, 5, 0, 22},
+    {7, 0, 0, 0, 5, 0, 78},
+    {12, 230, 13, 0, 5, 0, 78},
+    {12, 220, 13, 0, 5, 0, 78},
+    {6, 0, 0, 0, 5, 0, 78},
+    {21, 0, 0, 0, 5, 0, 78},
+    {7, 0, 0, 0, 5, 0, 85},
+    {10, 0, 0, 0, 5, 0, 85},
+    {12, 0, 13, 0, 5, 0, 85},
+    {21, 0, 0, 0, 5, 0, 85},
+    {6, 0, 0, 0, 5, 0, 85},
+    {12, 9, 13, 0, 5, 0, 85},
+    {13, 0, 0, 0, 5, 0, 85},
+    {2, 0, 18, 0, 2, 0, 24},
+    {4, 0, 0, 0, 5, 0, 102},
+    {3, 0, 0, 0, 4, 0, 102},
+    {2, 0, 18, 0, 4, 0, 102},
+    {12, 26, 13, 0, 5, 0, 5},
+    {25, 0, 9, 0, 5, 0, 5},
+    {24, 0, 4, 0, 5, 0, 6},
+    {18, 0, 18, 0, 5, 0, 0},
+    {16, 0, 18, 0, 2, 0, 0},
+    {21, 0, 12, 0, 2, 0, 0},
+    {21, 0, 10, 0, 2, 0, 0},
+    {25, 0, 9, 0, 2, 0, 0},
+    {17, 0, 9, 0, 2, 0, 0},
+    {25, 0, 18, 1, 2, 0, 0},
+    {25, 0, 18, 0, 2, 0, 0},
+    {23, 0, 10, 0, 2, 0, 0},
+    {21, 0, 18, 0, 0, 0, 0},
+    {21, 0, 10, 0, 0, 0, 0},
+    {23, 0, 10, 0, 0, 0, 0},
+    {22, 0, 18, 1, 0, 0, 0},
+    {18, 0, 18, 1, 0, 0, 0},
+    {25, 0, 9, 0, 0, 0, 0},
+    {21, 0, 12, 0, 0, 0, 0},
+    {17, 0, 9, 0, 0, 0, 0},
+    {13, 0, 8, 0, 0, 0, 0},
+    {25, 0, 18, 1, 0, 0, 0},
+    {25, 0, 18, 0, 0, 0, 0},
+    {9, 0, 0, 0, 0, 0, 1},
+    {24, 0, 18, 0, 0, 0, 0},
+    {16, 0, 18, 0, 0, 0, 0},
+    {5, 0, 0, 0, 0, 0, 1},
+    {21, 0, 18, 0, 1, 0, 0},
+    {22, 0, 18, 1, 1, 0, 0},
+    {18, 0, 18, 1, 1, 0, 0},
+    {7, 0, 0, 0, 1, 0, 33},
+    {6, 0, 0, 0, 1, 0, 0},
+    {7, 0, 0, 0, 1, 0, 24},
+    {26, 0, 18, 0, 0, 0, 0},
+    {26, 0, 18, 0, 1, 0, 0},
+    {25, 0, 18, 0, 1, 0, 0},
+    {1, 0, 18, 0, 5, 0, 0},
+    {7, 0, 0, 0, 5, 0, 47},
+    {14, 0, 18, 0, 5, 0, 2},
+    {15, 0, 18, 0, 5, 0, 2},
+    {26, 0, 18, 0, 5, 0, 2},
+    {7, 0, 0, 0, 5, 0, 73},
+    {7, 0, 0, 0, 5, 0, 74},
+    {7, 0, 0, 0, 5, 0, 37},
+    {15, 0, 0, 0, 5, 0, 37},
+    {7, 0, 0, 0, 5, 0, 38},
+    {14, 0, 0, 0, 5, 0, 38},
+    {7, 0, 0, 0, 5, 0, 48},
+    {21, 0, 0, 0, 5, 0, 48},
+    {7, 0, 0, 0, 5, 0, 59},
+    {21, 0, 0, 0, 5, 0, 59},
+    {14, 0, 0, 0, 5, 0, 59},
+    {9, 0, 0, 0, 5, 0, 39},
+    {5, 0, 0, 0, 5, 0, 39},
+    {7, 0, 0, 0, 5, 0, 49},
+    {7, 0, 0, 0, 5, 0, 50},
+    {13, 0, 0, 0, 5, 0, 50},
+    {7, 0, 3, 0, 5, 0, 51},
+    {7, 0, 3, 0, 5, 0, 86},
+    {21, 0, 3, 0, 5, 0, 86},
+    {15, 0, 3, 0, 5, 0, 86},
+    {7, 0, 3, 0, 5, 0, 63},
+    {15, 0, 3, 0, 5, 0, 63},
+    {21, 0, 18, 0, 5, 0, 63},
+    {7, 0, 3, 0, 5, 0, 75},
+    {21, 0, 3, 0, 5, 0, 75},
+    {7, 0, 3, 0, 5, 0, 97},
+    {7, 0, 3, 0, 5, 0, 96},
+    {7, 0, 3, 0, 5, 0, 60},
+    {12, 0, 13, 0, 5, 0, 60},
+    {12, 220, 13, 0, 5, 0, 60},
+    {12, 230, 13, 0, 5, 0, 60},
+    {12, 1, 13, 0, 5, 0, 60},
+    {12, 9, 13, 0, 5, 0, 60},
+    {15, 0, 3, 0, 5, 0, 60},
+    {21, 0, 3, 0, 5, 0, 60},
+    {7, 0, 3, 0, 5, 0, 87},
+    {15, 0, 3, 0, 5, 0, 87},
+    {21, 0, 3, 0, 5, 0, 87},
+    {7, 0, 3, 0, 5, 0, 79},
+    {21, 0, 18, 0, 5, 0, 79},
+    {7, 0, 3, 0, 5, 0, 88},
+    {15, 0, 3, 0, 5, 0, 88},
+    {7, 0, 3, 0, 5, 0, 89},
+    {15, 0, 3, 0, 5, 0, 89},
+    {7, 0, 3, 0, 5, 0, 90},
+    {15, 0, 11, 0, 5, 0, 6},
+    {10, 0, 0, 0, 5, 0, 93},
+    {12, 0, 13, 0, 5, 0, 93},
+    {7, 0, 0, 0, 5, 0, 93},
+    {12, 9, 13, 0, 5, 0, 93},
+    {21, 0, 0, 0, 5, 0, 93},
+    {15, 0, 18, 0, 5, 0, 93},
+    {13, 0, 0, 0, 5, 0, 93},
+    {12, 0, 13, 0, 5, 0, 91},
+    {10, 0, 0, 0, 5, 0, 91},
+    {7, 0, 0, 0, 5, 0, 91},
+    {12, 9, 13, 0, 5, 0, 91},
+    {12, 7, 13, 0, 5, 0, 91},
+    {21, 0, 0, 0, 5, 0, 91},
+    {1, 0, 0, 0, 5, 0, 91},
+    {7, 0, 0, 0, 5, 0, 100},
+    {13, 0, 0, 0, 5, 0, 100},
+    {12, 230, 13, 0, 5, 0, 95},
+    {7, 0, 0, 0, 5, 0, 95},
+    {12, 0, 13, 0, 5, 0, 95},
+    {10, 0, 0, 0, 5, 0, 95},
+    {12, 9, 13, 0, 5, 0, 95},
+    {13, 0, 0, 0, 5, 0, 95},
+    {21, 0, 0, 0, 5, 0, 95},
+    {12, 0, 13, 0, 5, 0, 99},
+    {10, 0, 0, 0, 5, 0, 99},
+    {7, 0, 0, 0, 5, 0, 99},
+    {10, 9, 0, 0, 5, 0, 99},
+    {21, 0, 0, 0, 5, 0, 99},
+    {13, 0, 0, 0, 5, 0, 99},
+    {7, 0, 0, 0, 5, 0, 101},
+    {12, 0, 13, 0, 5, 0, 101},
+    {10, 0, 0, 0, 5, 0, 101},
+    {10, 9, 0, 0, 5, 0, 101},
+    {12, 7, 13, 0, 5, 0, 101},
+    {13, 0, 0, 0, 5, 0, 101},
+    {7, 0, 0, 0, 5, 0, 62},
+    {14, 0, 0, 0, 5, 0, 62},
+    {21, 0, 0, 0, 5, 0, 62},
+    {7, 0, 0, 0, 5, 0, 80},
+    {7, 0, 0, 0, 5, 0, 98},
+    {10, 0, 0, 0, 5, 0, 98},
+    {12, 0, 13, 0, 5, 0, 98},
+    {6, 0, 0, 0, 5, 0, 98},
+    {10, 216, 0, 0, 5, 0, 0},
+    {10, 226, 0, 0, 5, 0, 0},
+    {12, 230, 13, 0, 5, 0, 2},
+    {25, 0, 0, 0, 5, 0, 0},
+    {13, 0, 8, 0, 5, 0, 0},
+    {26, 0, 0, 0, 2, 0, 32},
+};
+
+#define BIDI_MIRROR_LEN 364
+static const MirrorPair mirror_pairs[] = {
+    {40, 41},
+    {41, 40},
+    {60, 62},
+    {62, 60},
+    {91, 93},
+    {93, 91},
+    {123, 125},
+    {125, 123},
+    {171, 187},
+    {187, 171},
+    {3898, 3899},
+    {3899, 3898},
+    {3900, 3901},
+    {3901, 3900},
+    {5787, 5788},
+    {5788, 5787},
+    {8249, 8250},
+    {8250, 8249},
+    {8261, 8262},
+    {8262, 8261},
+    {8317, 8318},
+    {8318, 8317},
+    {8333, 8334},
+    {8334, 8333},
+    {8712, 8715},
+    {8713, 8716},
+    {8714, 8717},
+    {8715, 8712},
+    {8716, 8713},
+    {8717, 8714},
+    {8725, 10741},
+    {8764, 8765},
+    {8765, 8764},
+    {8771, 8909},
+    {8786, 8787},
+    {8787, 8786},
+    {8788, 8789},
+    {8789, 8788},
+    {8804, 8805},
+    {8805, 8804},
+    {8806, 8807},
+    {8807, 8806},
+    {8808, 8809},
+    {8809, 8808},
+    {8810, 8811},
+    {8811, 8810},
+    {8814, 8815},
+    {8815, 8814},
+    {8816, 8817},
+    {8817, 8816},
+    {8818, 8819},
+    {8819, 8818},
+    {8820, 8821},
+    {8821, 8820},
+    {8822, 8823},
+    {8823, 8822},
+    {8824, 8825},
+    {8825, 8824},
+    {8826, 8827},
+    {8827, 8826},
+    {8828, 8829},
+    {8829, 8828},
+    {8830, 8831},
+    {8831, 8830},
+    {8832, 8833},
+    {8833, 8832},
+    {8834, 8835},
+    {8835, 8834},
+    {8836, 8837},
+    {8837, 8836},
+    {8838, 8839},
+    {8839, 8838},
+    {8840, 8841},
+    {8841, 8840},
+    {8842, 8843},
+    {8843, 8842},
+    {8847, 8848},
+    {8848, 8847},
+    {8849, 8850},
+    {8850, 8849},
+    {8856, 10680},
+    {8866, 8867},
+    {8867, 8866},
+    {8870, 10974},
+    {8872, 10980},
+    {8873, 10979},
+    {8875, 10981},
+    {8880, 8881},
+    {8881, 8880},
+    {8882, 8883},
+    {8883, 8882},
+    {8884, 8885},
+    {8885, 8884},
+    {8886, 8887},
+    {8887, 8886},
+    {8905, 8906},
+    {8906, 8905},
+    {8907, 8908},
+    {8908, 8907},
+    {8909, 8771},
+    {8912, 8913},
+    {8913, 8912},
+    {8918, 8919},
+    {8919, 8918},
+    {8920, 8921},
+    {8921, 8920},
+    {8922, 8923},
+    {8923, 8922},
+    {8924, 8925},
+    {8925, 8924},
+    {8926, 8927},
+    {8927, 8926},
+    {8928, 8929},
+    {8929, 8928},
+    {8930, 8931},
+    {8931, 8930},
+    {8932, 8933},
+    {8933, 8932},
+    {8934, 8935},
+    {8935, 8934},
+    {8936, 8937},
+    {8937, 8936},
+    {8938, 8939},
+    {8939, 8938},
+    {8940, 8941},
+    {8941, 8940},
+    {8944, 8945},
+    {8945, 8944},
+    {8946, 8954},
+    {8947, 8955},
+    {8948, 8956},
+    {8950, 8957},
+    {8951, 8958},
+    {8954, 8946},
+    {8955, 8947},
+    {8956, 8948},
+    {8957, 8950},
+    {8958, 8951},
+    {8968, 8969},
+    {8969, 8968},
+    {8970, 8971},
+    {8971, 8970},
+    {9001, 9002},
+    {9002, 9001},
+    {10088, 10089},
+    {10089, 10088},
+    {10090, 10091},
+    {10091, 10090},
+    {10092, 10093},
+    {10093, 10092},
+    {10094, 10095},
+    {10095, 10094},
+    {10096, 10097},
+    {10097, 10096},
+    {10098, 10099},
+    {10099, 10098},
+    {10100, 10101},
+    {10101, 10100},
+    {10179, 10180},
+    {10180, 10179},
+    {10181, 10182},
+    {10182, 10181},
+    {10184, 10185},
+    {10185, 10184},
+    {10187, 10189},
+    {10189, 10187},
+    {10197, 10198},
+    {10198, 10197},
+    {10205, 10206},
+    {10206, 10205},
+    {10210, 10211},
+    {10211, 10210},
+    {10212, 10213},
+    {10213, 10212},
+    {10214, 10215},
+    {10215, 10214},
+    {10216, 10217},
+    {10217, 10216},
+    {10218, 10219},
+    {10219, 10218},
+    {10220, 10221},
+    {10221, 10220},
+    {10222, 10223},
+    {10223, 10222},
+    {10627, 10628},
+    {10628, 10627},
+    {10629, 10630},
+    {10630, 10629},
+    {10631, 10632},
+    {10632, 10631},
+    {10633, 10634},
+    {10634, 10633},
+    {10635, 10636},
+    {10636, 10635},
+    {10637, 10640},
+    {10638, 10639},
+    {10639, 10638},
+    {10640, 10637},
+    {10641, 10642},
+    {10642, 10641},
+    {10643, 10644},
+    {10644, 10643},
+    {10645, 10646},
+    {10646, 10645},
+    {10647, 10648},
+    {10648, 10647},
+    {10680, 8856},
+    {10688, 10689},
+    {10689, 10688},
+    {10692, 10693},
+    {10693, 10692},
+    {10703, 10704},
+    {10704, 10703},
+    {10705, 10706},
+    {10706, 10705},
+    {10708, 10709},
+    {10709, 10708},
+    {10712, 10713},
+    {10713, 10712},
+    {10714, 10715},
+    {10715, 10714},
+    {10741, 8725},
+    {10744, 10745},
+    {10745, 10744},
+    {10748, 10749},
+    {10749, 10748},
+    {10795, 10796},
+    {10796, 10795},
+    {10797, 10798},
+    {10798, 10797},
+    {10804, 10805},
+    {10805, 10804},
+    {10812, 10813},
+    {10813, 10812},
+    {10852, 10853},
+    {10853, 10852},
+    {10873, 10874},
+    {10874, 10873},
+    {10877, 10878},
+    {10878, 10877},
+    {10879, 10880},
+    {10880, 10879},
+    {10881, 10882},
+    {10882, 10881},
+    {10883, 10884},
+    {10884, 10883},
+    {10891, 10892},
+    {10892, 10891},
+    {10897, 10898},
+    {10898, 10897},
+    {10899, 10900},
+    {10900, 10899},
+    {10901, 10902},
+    {10902, 10901},
+    {10903, 10904},
+    {10904, 10903},
+    {10905, 10906},
+    {10906, 10905},
+    {10907, 10908},
+    {10908, 10907},
+    {10913, 10914},
+    {10914, 10913},
+    {10918, 10919},
+    {10919, 10918},
+    {10920, 10921},
+    {10921, 10920},
+    {10922, 10923},
+    {10923, 10922},
+    {10924, 10925},
+    {10925, 10924},
+    {10927, 10928},
+    {10928, 10927},
+    {10931, 10932},
+    {10932, 10931},
+    {10939, 10940},
+    {10940, 10939},
+    {10941, 10942},
+    {10942, 10941},
+    {10943, 10944},
+    {10944, 10943},
+    {10945, 10946},
+    {10946, 10945},
+    {10947, 10948},
+    {10948, 10947},
+    {10949, 10950},
+    {10950, 10949},
+    {10957, 10958},
+    {10958, 10957},
+    {10959, 10960},
+    {10960, 10959},
+    {10961, 10962},
+    {10962, 10961},
+    {10963, 10964},
+    {10964, 10963},
+    {10965, 10966},
+    {10966, 10965},
+    {10974, 8870},
+    {10979, 8873},
+    {10980, 8872},
+    {10981, 8875},
+    {10988, 10989},
+    {10989, 10988},
+    {10999, 11000},
+    {11000, 10999},
+    {11001, 11002},
+    {11002, 11001},
+    {11778, 11779},
+    {11779, 11778},
+    {11780, 11781},
+    {11781, 11780},
+    {11785, 11786},
+    {11786, 11785},
+    {11788, 11789},
+    {11789, 11788},
+    {11804, 11805},
+    {11805, 11804},
+    {11808, 11809},
+    {11809, 11808},
+    {11810, 11811},
+    {11811, 11810},
+    {11812, 11813},
+    {11813, 11812},
+    {11814, 11815},
+    {11815, 11814},
+    {11816, 11817},
+    {11817, 11816},
+    {12296, 12297},
+    {12297, 12296},
+    {12298, 12299},
+    {12299, 12298},
+    {12300, 12301},
+    {12301, 12300},
+    {12302, 12303},
+    {12303, 12302},
+    {12304, 12305},
+    {12305, 12304},
+    {12308, 12309},
+    {12309, 12308},
+    {12310, 12311},
+    {12311, 12310},
+    {12312, 12313},
+    {12313, 12312},
+    {12314, 12315},
+    {12315, 12314},
+    {65113, 65114},
+    {65114, 65113},
+    {65115, 65116},
+    {65116, 65115},
+    {65117, 65118},
+    {65118, 65117},
+    {65124, 65125},
+    {65125, 65124},
+    {65288, 65289},
+    {65289, 65288},
+    {65308, 65310},
+    {65310, 65308},
+    {65339, 65341},
+    {65341, 65339},
+    {65371, 65373},
+    {65373, 65371},
+    {65375, 65376},
+    {65376, 65375},
+    {65378, 65379},
+    {65379, 65378},
+};
+
+/* Reindexing of NFC first characters. */
+#define TOTAL_FIRST 372
+#define TOTAL_LAST 56
+static const Reindex nfc_first[] = {
+  { 60, 2, 0},
+  { 65, 15, 3},
+  { 82, 8, 19},
+  { 97, 15, 28},
+  { 114, 8, 44},
+  { 168, 0, 53},
+  { 194, 0, 54},
+  { 196, 3, 55},
+  { 202, 0, 59},
+  { 207, 0, 60},
+  { 212, 2, 61},
+  { 216, 0, 64},
+  { 220, 0, 65},
+  { 226, 0, 66},
+  { 228, 3, 67},
+  { 234, 0, 71},
+  { 239, 0, 72},
+  { 244, 2, 73},
+  { 248, 0, 76},
+  { 252, 0, 77},
+  { 258, 1, 78},
+  { 274, 1, 80},
+  { 332, 1, 82},
+  { 346, 1, 84},
+  { 352, 1, 86},
+  { 360, 3, 88},
+  { 383, 0, 92},
+  { 416, 1, 93},
+  { 431, 1, 95},
+  { 439, 0, 97},
+  { 490, 1, 98},
+  { 550, 3, 100},
+  { 558, 1, 104},
+  { 658, 0, 106},
+  { 913, 0, 107},
+  { 917, 0, 108},
+  { 919, 0, 109},
+  { 921, 0, 110},
+  { 927, 0, 111},
+  { 929, 0, 112},
+  { 933, 0, 113},
+  { 937, 0, 114},
+  { 940, 0, 115},
+  { 942, 0, 116},
+  { 945, 0, 117},
+  { 949, 0, 118},
+  { 951, 0, 119},
+  { 953, 0, 120},
+  { 959, 0, 121},
+  { 961, 0, 122},
+  { 965, 0, 123},
+  { 969, 2, 124},
+  { 974, 0, 127},
+  { 978, 0, 128},
+  { 1030, 0, 129},
+  { 1040, 0, 130},
+  { 1043, 0, 131},
+  { 1045, 3, 132},
+  { 1050, 0, 136},
+  { 1054, 0, 137},
+  { 1059, 0, 138},
+  { 1063, 0, 139},
+  { 1067, 0, 140},
+  { 1069, 0, 141},
+  { 1072, 0, 142},
+  { 1075, 0, 143},
+  { 1077, 3, 144},
+  { 1082, 0, 148},
+  { 1086, 0, 149},
+  { 1091, 0, 150},
+  { 1095, 0, 151},
+  { 1099, 0, 152},
+  { 1101, 0, 153},
+  { 1110, 0, 154},
+  { 1140, 1, 155},
+  { 1240, 1, 157},
+  { 1256, 1, 159},
+  { 1575, 0, 161},
+  { 1608, 0, 162},
+  { 1610, 0, 163},
+  { 1729, 0, 164},
+  { 1746, 0, 165},
+  { 1749, 0, 166},
+  { 2344, 0, 167},
+  { 2352, 0, 168},
+  { 2355, 0, 169},
+  { 2503, 0, 170},
+  { 2887, 0, 171},
+  { 2962, 0, 172},
+  { 3014, 1, 173},
+  { 3142, 0, 175},
+  { 3263, 0, 176},
+  { 3270, 0, 177},
+  { 3274, 0, 178},
+  { 3398, 1, 179},
+  { 3545, 0, 181},
+  { 3548, 0, 182},
+  { 4133, 0, 183},
+  { 6917, 0, 184},
+  { 6919, 0, 185},
+  { 6921, 0, 186},
+  { 6923, 0, 187},
+  { 6925, 0, 188},
+  { 6929, 0, 189},
+  { 6970, 0, 190},
+  { 6972, 0, 191},
+  { 6974, 1, 192},
+  { 6978, 0, 194},
+  { 7734, 1, 195},
+  { 7770, 1, 197},
+  { 7778, 1, 199},
+  { 7840, 1, 201},
+  { 7864, 1, 203},
+  { 7884, 1, 205},
+  { 7936, 17, 207},
+  { 7960, 1, 225},
+  { 7968, 17, 227},
+  { 7992, 1, 245},
+  { 8000, 1, 247},
+  { 8008, 1, 249},
+  { 8016, 1, 251},
+  { 8025, 0, 253},
+  { 8032, 16, 254},
+  { 8052, 0, 271},
+  { 8060, 0, 272},
+  { 8118, 0, 273},
+  { 8127, 0, 274},
+  { 8134, 0, 275},
+  { 8182, 0, 276},
+  { 8190, 0, 277},
+  { 8592, 0, 278},
+  { 8594, 0, 279},
+  { 8596, 0, 280},
+  { 8656, 0, 281},
+  { 8658, 0, 282},
+  { 8660, 0, 283},
+  { 8707, 0, 284},
+  { 8712, 0, 285},
+  { 8715, 0, 286},
+  { 8739, 0, 287},
+  { 8741, 0, 288},
+  { 8764, 0, 289},
+  { 8771, 0, 290},
+  { 8773, 0, 291},
+  { 8776, 0, 292},
+  { 8781, 0, 293},
+  { 8801, 0, 294},
+  { 8804, 1, 295},
+  { 8818, 1, 297},
+  { 8822, 1, 299},
+  { 8826, 3, 301},
+  { 8834, 1, 305},
+  { 8838, 1, 307},
+  { 8849, 1, 309},
+  { 8866, 0, 311},
+  { 8872, 1, 312},
+  { 8875, 0, 314},
+  { 8882, 3, 315},
+  { 12358, 0, 319},
+  { 12363, 0, 320},
+  { 12365, 0, 321},
+  { 12367, 0, 322},
+  { 12369, 0, 323},
+  { 12371, 0, 324},
+  { 12373, 0, 325},
+  { 12375, 0, 326},
+  { 12377, 0, 327},
+  { 12379, 0, 328},
+  { 12381, 0, 329},
+  { 12383, 0, 330},
+  { 12385, 0, 331},
+  { 12388, 0, 332},
+  { 12390, 0, 333},
+  { 12392, 0, 334},
+  { 12399, 0, 335},
+  { 12402, 0, 336},
+  { 12405, 0, 337},
+  { 12408, 0, 338},
+  { 12411, 0, 339},
+  { 12445, 0, 340},
+  { 12454, 0, 341},
+  { 12459, 0, 342},
+  { 12461, 0, 343},
+  { 12463, 0, 344},
+  { 12465, 0, 345},
+  { 12467, 0, 346},
+  { 12469, 0, 347},
+  { 12471, 0, 348},
+  { 12473, 0, 349},
+  { 12475, 0, 350},
+  { 12477, 0, 351},
+  { 12479, 0, 352},
+  { 12481, 0, 353},
+  { 12484, 0, 354},
+  { 12486, 0, 355},
+  { 12488, 0, 356},
+  { 12495, 0, 357},
+  { 12498, 0, 358},
+  { 12501, 0, 359},
+  { 12504, 0, 360},
+  { 12507, 0, 361},
+  { 12527, 3, 362},
+  { 12541, 0, 366},
+  { 69785, 0, 367},
+  { 69787, 0, 368},
+  { 69797, 0, 369},
+  { 69937, 1, 370},
+  {0,0,0}
+};
+
+static const Reindex nfc_last[] = {
+  { 768, 4, 0},
+  { 774, 6, 5},
+  { 783, 0, 12},
+  { 785, 0, 13},
+  { 787, 1, 14},
+  { 795, 0, 16},
+  { 803, 5, 17},
+  { 813, 1, 23},
+  { 816, 1, 25},
+  { 824, 0, 27},
+  { 834, 0, 28},
+  { 837, 0, 29},
+  { 1619, 2, 30},
+  { 2364, 0, 33},
+  { 2494, 0, 34},
+  { 2519, 0, 35},
+  { 2878, 0, 36},
+  { 2902, 1, 37},
+  { 3006, 0, 39},
+  { 3031, 0, 40},
+  { 3158, 0, 41},
+  { 3266, 0, 42},
+  { 3285, 1, 43},
+  { 3390, 0, 45},
+  { 3415, 0, 46},
+  { 3530, 0, 47},
+  { 3535, 0, 48},
+  { 3551, 0, 49},
+  { 4142, 0, 50},
+  { 6965, 0, 51},
+  { 12441, 1, 52},
+  { 69818, 0, 54},
+  { 69927, 0, 55},
+  {0,0,0}
+};
+
+#define UCDN_EAST_ASIAN_F 0
+#define UCDN_EAST_ASIAN_H 1
+#define UCDN_EAST_ASIAN_W 2
+#define UCDN_EAST_ASIAN_NA 3
+#define UCDN_EAST_ASIAN_A 4
+#define UCDN_EAST_ASIAN_N 5
+
+#define UCDN_SCRIPT_COMMON 0
+#define UCDN_SCRIPT_LATIN 1
+#define UCDN_SCRIPT_GREEK 2
+#define UCDN_SCRIPT_CYRILLIC 3
+#define UCDN_SCRIPT_ARMENIAN 4
+#define UCDN_SCRIPT_HEBREW 5
+#define UCDN_SCRIPT_ARABIC 6
+#define UCDN_SCRIPT_SYRIAC 7
+#define UCDN_SCRIPT_THAANA 8
+#define UCDN_SCRIPT_DEVANAGARI 9
+#define UCDN_SCRIPT_BENGALI 10
+#define UCDN_SCRIPT_GURMUKHI 11
+#define UCDN_SCRIPT_GUJARATI 12
+#define UCDN_SCRIPT_ORIYA 13
+#define UCDN_SCRIPT_TAMIL 14
+#define UCDN_SCRIPT_TELUGU 15
+#define UCDN_SCRIPT_KANNADA 16
+#define UCDN_SCRIPT_MALAYALAM 17
+#define UCDN_SCRIPT_SINHALA 18
+#define UCDN_SCRIPT_THAI 19
+#define UCDN_SCRIPT_LAO 20
+#define UCDN_SCRIPT_TIBETAN 21
+#define UCDN_SCRIPT_MYANMAR 22
+#define UCDN_SCRIPT_GEORGIAN 23
+#define UCDN_SCRIPT_HANGUL 24
+#define UCDN_SCRIPT_ETHIOPIC 25
+#define UCDN_SCRIPT_CHEROKEE 26
+#define UCDN_SCRIPT_CANADIAN_ABORIGINAL 27
+#define UCDN_SCRIPT_OGHAM 28
+#define UCDN_SCRIPT_RUNIC 29
+#define UCDN_SCRIPT_KHMER 30
+#define UCDN_SCRIPT_MONGOLIAN 31
+#define UCDN_SCRIPT_HIRAGANA 32
+#define UCDN_SCRIPT_KATAKANA 33
+#define UCDN_SCRIPT_BOPOMOFO 34
+#define UCDN_SCRIPT_HAN 35
+#define UCDN_SCRIPT_YI 36
+#define UCDN_SCRIPT_OLD_ITALIC 37
+#define UCDN_SCRIPT_GOTHIC 38
+#define UCDN_SCRIPT_DESERET 39
+#define UCDN_SCRIPT_INHERITED 40
+#define UCDN_SCRIPT_TAGALOG 41
+#define UCDN_SCRIPT_HANUNOO 42
+#define UCDN_SCRIPT_BUHID 43
+#define UCDN_SCRIPT_TAGBANWA 44
+#define UCDN_SCRIPT_LIMBU 45
+#define UCDN_SCRIPT_TAI_LE 46
+#define UCDN_SCRIPT_LINEAR_B 47
+#define UCDN_SCRIPT_UGARITIC 48
+#define UCDN_SCRIPT_SHAVIAN 49
+#define UCDN_SCRIPT_OSMANYA 50
+#define UCDN_SCRIPT_CYPRIOT 51
+#define UCDN_SCRIPT_BRAILLE 52
+#define UCDN_SCRIPT_BUGINESE 53
+#define UCDN_SCRIPT_COPTIC 54
+#define UCDN_SCRIPT_NEW_TAI_LUE 55
+#define UCDN_SCRIPT_GLAGOLITIC 56
+#define UCDN_SCRIPT_TIFINAGH 57
+#define UCDN_SCRIPT_SYLOTI_NAGRI 58
+#define UCDN_SCRIPT_OLD_PERSIAN 59
+#define UCDN_SCRIPT_KHAROSHTHI 60
+#define UCDN_SCRIPT_BALINESE 61
+#define UCDN_SCRIPT_CUNEIFORM 62
+#define UCDN_SCRIPT_PHOENICIAN 63
+#define UCDN_SCRIPT_PHAGS_PA 64
+#define UCDN_SCRIPT_NKO 65
+#define UCDN_SCRIPT_SUNDANESE 66
+#define UCDN_SCRIPT_LEPCHA 67
+#define UCDN_SCRIPT_OL_CHIKI 68
+#define UCDN_SCRIPT_VAI 69
+#define UCDN_SCRIPT_SAURASHTRA 70
+#define UCDN_SCRIPT_KAYAH_LI 71
+#define UCDN_SCRIPT_REJANG 72
+#define UCDN_SCRIPT_LYCIAN 73
+#define UCDN_SCRIPT_CARIAN 74
+#define UCDN_SCRIPT_LYDIAN 75
+#define UCDN_SCRIPT_CHAM 76
+#define UCDN_SCRIPT_TAI_THAM 77
+#define UCDN_SCRIPT_TAI_VIET 78
+#define UCDN_SCRIPT_AVESTAN 79
+#define UCDN_SCRIPT_EGYPTIAN_HIEROGLYPHS 80
+#define UCDN_SCRIPT_SAMARITAN 81
+#define UCDN_SCRIPT_LISU 82
+#define UCDN_SCRIPT_BAMUM 83
+#define UCDN_SCRIPT_JAVANESE 84
+#define UCDN_SCRIPT_MEETEI_MAYEK 85
+#define UCDN_SCRIPT_IMPERIAL_ARAMAIC 86
+#define UCDN_SCRIPT_OLD_SOUTH_ARABIAN 87
+#define UCDN_SCRIPT_INSCRIPTIONAL_PARTHIAN 88
+#define UCDN_SCRIPT_INSCRIPTIONAL_PAHLAVI 89
+#define UCDN_SCRIPT_OLD_TURKIC 90
+#define UCDN_SCRIPT_KAITHI 91
+#define UCDN_SCRIPT_BATAK 92
+#define UCDN_SCRIPT_BRAHMI 93
+#define UCDN_SCRIPT_MANDAIC 94
+#define UCDN_SCRIPT_CHAKMA 95
+#define UCDN_SCRIPT_MEROITIC_CURSIVE 96
+#define UCDN_SCRIPT_MEROITIC_HIEROGLYPHS 97
+#define UCDN_SCRIPT_MIAO 98
+#define UCDN_SCRIPT_SHARADA 99
+#define UCDN_SCRIPT_SORA_SOMPENG 100
+#define UCDN_SCRIPT_TAKRI 101
+#define UCDN_SCRIPT_UNKNOWN 102
+
+#define UCDN_GENERAL_CATEGORY_CC 0
+#define UCDN_GENERAL_CATEGORY_CF 1
+#define UCDN_GENERAL_CATEGORY_CN 2
+#define UCDN_GENERAL_CATEGORY_CO 3
+#define UCDN_GENERAL_CATEGORY_CS 4
+#define UCDN_GENERAL_CATEGORY_LL 5
+#define UCDN_GENERAL_CATEGORY_LM 6
+#define UCDN_GENERAL_CATEGORY_LO 7
+#define UCDN_GENERAL_CATEGORY_LT 8
+#define UCDN_GENERAL_CATEGORY_LU 9
+#define UCDN_GENERAL_CATEGORY_MC 10
+#define UCDN_GENERAL_CATEGORY_ME 11
+#define UCDN_GENERAL_CATEGORY_MN 12
+#define UCDN_GENERAL_CATEGORY_ND 13
+#define UCDN_GENERAL_CATEGORY_NL 14
+#define UCDN_GENERAL_CATEGORY_NO 15
+#define UCDN_GENERAL_CATEGORY_PC 16
+#define UCDN_GENERAL_CATEGORY_PD 17
+#define UCDN_GENERAL_CATEGORY_PE 18
+#define UCDN_GENERAL_CATEGORY_PF 19
+#define UCDN_GENERAL_CATEGORY_PI 20
+#define UCDN_GENERAL_CATEGORY_PO 21
+#define UCDN_GENERAL_CATEGORY_PS 22
+#define UCDN_GENERAL_CATEGORY_SC 23
+#define UCDN_GENERAL_CATEGORY_SK 24
+#define UCDN_GENERAL_CATEGORY_SM 25
+#define UCDN_GENERAL_CATEGORY_SO 26
+#define UCDN_GENERAL_CATEGORY_ZL 27
+#define UCDN_GENERAL_CATEGORY_ZP 28
+#define UCDN_GENERAL_CATEGORY_ZS 29
+
+#define UCDN_BIDI_CLASS_L 0
+#define UCDN_BIDI_CLASS_LRE 1
+#define UCDN_BIDI_CLASS_LRO 2
+#define UCDN_BIDI_CLASS_R 3
+#define UCDN_BIDI_CLASS_AL 4
+#define UCDN_BIDI_CLASS_RLE 5
+#define UCDN_BIDI_CLASS_RLO 6
+#define UCDN_BIDI_CLASS_PDF 7
+#define UCDN_BIDI_CLASS_EN 8
+#define UCDN_BIDI_CLASS_ES 9
+#define UCDN_BIDI_CLASS_ET 10
+#define UCDN_BIDI_CLASS_AN 11
+#define UCDN_BIDI_CLASS_CS 12
+#define UCDN_BIDI_CLASS_NSM 13
+#define UCDN_BIDI_CLASS_BN 14
+#define UCDN_BIDI_CLASS_B 15
+#define UCDN_BIDI_CLASS_S 16
+#define UCDN_BIDI_CLASS_WS 17
+#define UCDN_BIDI_CLASS_ON 18
+
+/* index tables for the database records */
+#define SHIFT1 5
+#define SHIFT2 3
+static const unsigned char index0[] = {
+    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 
+    21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
+    39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 54, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 55, 56, 57, 57, 57, 58, 
+    59, 60, 61, 62, 63, 64, 65, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 
+    67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 
+    67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 69, 70, 70, 
+    71, 69, 70, 70, 72, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 76, 77, 78, 79, 80, 81, 
+    82, 83, 84, 85, 86, 87, 70, 70, 70, 88, 89, 90, 91, 92, 70, 93, 70, 94, 
+    95, 70, 70, 70, 70, 96, 70, 70, 70, 70, 70, 70, 70, 70, 70, 97, 97, 97, 
+    98, 99, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 100, 100, 100, 100, 
+    101, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 102, 102, 
+    103, 70, 70, 70, 70, 104, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 105, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 106, 107, 108, 109, 110, 
+    111, 112, 113, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 114, 70, 115, 116, 117, 118, 119, 120, 
+    121, 122, 70, 70, 70, 70, 70, 70, 70, 70, 52, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 123, 52, 53, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 124, 125, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 76, 76, 127, 126, 126, 126, 126, 128, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
+    126, 128, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 129, 130, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 73, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 131, 73, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 131, 
+};
+
+static const unsigned short index1[] = {
+    0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 11, 12, 13, 0, 0, 0, 14, 15, 
+    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 29, 31, 32, 
+    33, 34, 35, 27, 30, 29, 27, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 
+    47, 48, 27, 27, 49, 27, 27, 27, 27, 27, 27, 27, 50, 51, 52, 27, 53, 54, 
+    53, 54, 54, 54, 54, 54, 55, 54, 54, 54, 56, 57, 58, 59, 60, 61, 62, 63, 
+    64, 64, 65, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 65, 77, 78, 
+    79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 
+    97, 97, 97, 97, 98, 98, 98, 98, 99, 100, 101, 101, 101, 101, 102, 103, 
+    101, 101, 101, 101, 101, 101, 104, 105, 101, 101, 101, 101, 101, 101, 
+    101, 101, 101, 101, 101, 106, 107, 108, 108, 108, 109, 110, 111, 112, 
+    112, 112, 112, 113, 114, 115, 116, 117, 118, 119, 120, 106, 121, 121, 
+    121, 122, 123, 106, 124, 125, 126, 127, 128, 128, 128, 128, 129, 130, 
+    131, 132, 133, 134, 135, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
+    128, 128, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 145, 145, 
+    146, 147, 148, 149, 128, 128, 128, 128, 128, 128, 150, 150, 150, 150, 
+    151, 152, 153, 106, 154, 155, 156, 156, 156, 157, 158, 159, 160, 160, 
+    161, 162, 163, 164, 165, 166, 167, 167, 167, 168, 106, 106, 106, 106, 
+    106, 106, 106, 106, 169, 170, 106, 106, 106, 106, 106, 106, 171, 172, 
+    173, 174, 175, 176, 176, 176, 176, 176, 176, 177, 178, 179, 180, 176, 
+    181, 182, 183, 184, 185, 186, 187, 188, 188, 189, 190, 191, 192, 193, 
+    194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 203, 204, 205, 206, 
+    207, 208, 209, 210, 211, 212, 213, 106, 214, 215, 216, 217, 217, 218, 
+    219, 220, 221, 222, 223, 106, 224, 225, 226, 106, 227, 228, 229, 230, 
+    230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 106, 241, 242, 
+    243, 244, 245, 242, 246, 247, 248, 249, 250, 106, 251, 252, 253, 254, 
+    255, 256, 257, 258, 258, 257, 259, 260, 261, 262, 263, 264, 265, 266, 
+    106, 267, 268, 269, 270, 271, 271, 270, 272, 273, 274, 275, 276, 277, 
+    278, 279, 280, 106, 281, 282, 283, 284, 284, 284, 284, 285, 286, 287, 
+    288, 106, 289, 290, 291, 292, 293, 294, 295, 296, 294, 294, 297, 298, 
+    295, 299, 300, 301, 106, 106, 302, 106, 303, 304, 304, 304, 304, 304, 
+    305, 306, 307, 308, 309, 310, 106, 106, 106, 106, 311, 312, 313, 314, 
+    315, 316, 317, 318, 319, 320, 321, 322, 106, 106, 106, 106, 323, 324, 
+    325, 326, 327, 328, 329, 330, 331, 332, 331, 331, 331, 333, 334, 335, 
+    336, 337, 338, 339, 338, 338, 338, 340, 341, 342, 343, 344, 106, 106, 
+    106, 106, 345, 345, 345, 345, 345, 346, 347, 348, 349, 350, 351, 352, 
+    353, 354, 355, 345, 356, 357, 349, 358, 359, 359, 359, 359, 360, 361, 
+    362, 362, 362, 362, 362, 363, 364, 364, 364, 364, 364, 364, 364, 364, 
+    364, 364, 364, 364, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 
+    365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 366, 366, 366, 366, 
+    366, 366, 366, 366, 366, 367, 368, 367, 366, 366, 366, 366, 366, 367, 
+    366, 366, 366, 366, 367, 368, 367, 366, 368, 366, 366, 366, 366, 366, 
+    366, 366, 367, 366, 366, 366, 366, 366, 366, 366, 366, 369, 370, 371, 
+    372, 373, 366, 366, 374, 375, 376, 376, 376, 376, 376, 376, 376, 376, 
+    376, 376, 377, 106, 378, 379, 379, 379, 379, 379, 379, 379, 379, 379, 
+    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 
+    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 
+    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 
+    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 
+    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 380, 379, 379, 
+    381, 382, 382, 383, 384, 384, 384, 384, 384, 384, 384, 384, 384, 385, 
+    386, 106, 387, 388, 389, 106, 390, 390, 391, 106, 392, 392, 393, 106, 
+    394, 395, 396, 106, 397, 397, 397, 397, 397, 397, 398, 399, 400, 401, 
+    402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 412, 412, 412, 
+    413, 412, 412, 412, 412, 412, 412, 106, 412, 412, 412, 412, 412, 414, 
+    379, 379, 379, 379, 379, 379, 379, 379, 415, 106, 416, 416, 416, 417, 
+    418, 419, 420, 421, 422, 423, 424, 424, 424, 425, 426, 106, 427, 427, 
+    427, 427, 427, 428, 429, 429, 430, 431, 432, 433, 434, 434, 434, 434, 
+    435, 435, 436, 437, 438, 438, 438, 438, 438, 438, 439, 440, 441, 442, 
+    443, 444, 445, 446, 445, 446, 447, 448, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 449, 450, 450, 450, 450, 450, 451, 452, 453, 454, 
+    455, 456, 457, 458, 459, 460, 461, 462, 462, 462, 463, 464, 465, 466, 
+    467, 467, 467, 467, 468, 469, 470, 471, 472, 472, 472, 472, 473, 474, 
+    475, 476, 477, 478, 479, 480, 481, 481, 481, 482, 106, 106, 106, 106, 
+    106, 106, 106, 106, 483, 106, 484, 485, 486, 487, 488, 106, 54, 54, 54, 
+    54, 489, 490, 56, 56, 56, 56, 56, 491, 492, 493, 54, 494, 54, 54, 54, 
+    495, 56, 56, 56, 496, 497, 498, 499, 500, 501, 106, 106, 502, 27, 27, 27, 
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 503, 504, 27, 
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 505, 506, 507, 508, 505, 506, 
+    505, 506, 507, 508, 505, 509, 505, 506, 505, 507, 505, 510, 505, 510, 
+    505, 510, 511, 512, 513, 514, 515, 516, 505, 517, 518, 519, 520, 521, 
+    522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 
+    536, 537, 56, 538, 539, 540, 539, 541, 106, 106, 542, 543, 544, 545, 546, 
+    106, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 
+    560, 559, 561, 562, 563, 564, 565, 566, 567, 568, 569, 568, 570, 571, 
+    568, 572, 568, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 
+    584, 585, 586, 587, 588, 583, 583, 589, 590, 591, 592, 593, 583, 583, 
+    594, 574, 595, 596, 583, 583, 597, 583, 583, 568, 598, 599, 568, 600, 
+    601, 602, 603, 603, 603, 603, 603, 603, 603, 603, 604, 568, 568, 605, 
+    606, 574, 574, 607, 568, 568, 568, 568, 573, 608, 568, 609, 106, 568, 
+    568, 568, 568, 610, 106, 106, 106, 568, 611, 106, 106, 612, 612, 612, 
+    612, 612, 613, 613, 614, 615, 615, 615, 615, 615, 615, 615, 615, 615, 
+    616, 612, 612, 617, 617, 617, 617, 617, 617, 617, 617, 617, 618, 617, 
+    617, 617, 617, 618, 568, 617, 617, 619, 568, 620, 569, 621, 622, 623, 
+    624, 569, 568, 619, 572, 568, 574, 625, 626, 622, 627, 568, 568, 568, 
+    568, 628, 568, 568, 568, 629, 630, 568, 568, 568, 568, 568, 631, 568, 
+    632, 568, 631, 633, 634, 617, 617, 635, 617, 617, 617, 636, 568, 568, 
+    568, 568, 568, 568, 637, 568, 568, 572, 568, 568, 638, 639, 612, 640, 
+    640, 641, 568, 568, 568, 568, 568, 642, 643, 644, 645, 646, 647, 574, 
+    574, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 
+    648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 
+    648, 648, 648, 648, 648, 574, 574, 574, 574, 574, 574, 574, 574, 574, 
+    574, 574, 574, 574, 574, 574, 574, 649, 650, 650, 651, 583, 583, 574, 
+    652, 597, 653, 654, 655, 656, 657, 658, 659, 574, 660, 583, 661, 662, 
+    663, 664, 645, 574, 574, 586, 652, 664, 665, 666, 667, 583, 583, 583, 
+    583, 668, 669, 583, 583, 583, 583, 670, 671, 672, 645, 673, 674, 568, 
+    568, 568, 568, 568, 568, 574, 574, 675, 676, 677, 678, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 679, 679, 679, 679, 679, 680, 681, 681, 681, 681, 681, 
+    682, 683, 684, 685, 686, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 
+    687, 688, 689, 690, 691, 691, 691, 691, 692, 693, 694, 694, 694, 694, 
+    694, 694, 694, 695, 696, 697, 366, 366, 368, 106, 368, 368, 368, 368, 
+    368, 368, 368, 368, 698, 698, 698, 698, 699, 700, 701, 702, 703, 704, 
+    529, 705, 106, 106, 106, 106, 106, 106, 106, 106, 706, 706, 706, 707, 
+    706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 708, 106, 706, 706, 
+    706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 
+    706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 709, 106, 106, 106, 
+    710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 721, 721, 
+    721, 721, 721, 721, 721, 721, 722, 723, 724, 725, 725, 725, 725, 725, 
+    725, 725, 725, 725, 725, 726, 727, 728, 728, 728, 728, 729, 730, 364, 
+    364, 364, 364, 364, 364, 364, 364, 364, 364, 731, 732, 733, 728, 728, 
+    728, 734, 710, 710, 710, 710, 711, 106, 725, 725, 735, 735, 735, 736, 
+    737, 738, 733, 733, 733, 739, 740, 741, 735, 735, 735, 742, 737, 738, 
+    733, 733, 733, 733, 743, 741, 733, 744, 745, 745, 745, 745, 745, 746, 
+    745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 733, 733, 733, 
+    747, 748, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 749, 
+    733, 733, 733, 747, 750, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 752, 753, 568, 568, 568, 568, 568, 568, 
+    568, 568, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 754, 
+    753, 753, 753, 753, 753, 753, 755, 755, 756, 755, 755, 755, 755, 755, 
+    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 
+    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 
+    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 
+    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 
+    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 
+    755, 755, 755, 757, 758, 758, 758, 758, 758, 758, 759, 106, 760, 760, 
+    760, 760, 760, 761, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 
+    762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 
+    762, 762, 762, 762, 762, 762, 762, 762, 762, 763, 762, 762, 764, 765, 
+    106, 106, 101, 101, 101, 101, 101, 766, 767, 768, 101, 101, 101, 769, 
+    770, 770, 770, 770, 770, 770, 770, 770, 771, 772, 773, 106, 64, 64, 774, 
+    775, 776, 27, 777, 27, 27, 27, 27, 27, 27, 27, 778, 779, 27, 780, 781, 
+    106, 27, 782, 106, 106, 106, 106, 106, 106, 106, 106, 106, 783, 784, 785, 
+    786, 786, 787, 788, 789, 790, 791, 791, 791, 791, 791, 791, 792, 106, 
+    793, 794, 794, 794, 794, 794, 795, 796, 797, 798, 799, 800, 801, 801, 
+    802, 803, 804, 805, 806, 806, 807, 808, 809, 809, 810, 811, 812, 813, 
+    364, 364, 364, 814, 815, 816, 816, 816, 816, 816, 817, 818, 819, 820, 
+    821, 822, 106, 106, 106, 106, 823, 823, 823, 823, 823, 824, 825, 106, 
+    826, 827, 828, 829, 345, 345, 830, 831, 832, 832, 832, 832, 832, 832, 
+    833, 834, 835, 106, 106, 836, 837, 838, 839, 106, 840, 840, 840, 106, 
+    368, 368, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 837, 837, 837, 837, 841, 842, 843, 844, 
+    845, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 
+    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 
+    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 
+    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 
+    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 
+    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 
+    847, 106, 365, 365, 848, 849, 365, 365, 365, 365, 365, 850, 851, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 852, 851, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 852, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 852, 
+    853, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
+    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
+    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
+    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
+    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
+    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
+    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 855, 856, 856, 
+    856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 
+    856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 
+    856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 
+    856, 857, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 
+    856, 858, 753, 753, 753, 753, 859, 106, 860, 861, 121, 862, 863, 864, 
+    865, 121, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
+    866, 867, 868, 106, 869, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
+    128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
+    128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
+    128, 128, 128, 128, 128, 128, 128, 870, 106, 106, 128, 128, 128, 128, 
+    128, 128, 128, 128, 871, 128, 128, 128, 128, 128, 128, 106, 106, 106, 
+    106, 106, 128, 872, 873, 873, 874, 875, 501, 106, 876, 877, 878, 879, 
+    880, 881, 882, 883, 884, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
+    128, 128, 128, 128, 128, 128, 128, 885, 886, 887, 888, 889, 890, 891, 
+    891, 892, 893, 894, 894, 895, 896, 897, 898, 897, 897, 897, 897, 899, 
+    900, 900, 900, 901, 902, 902, 902, 903, 904, 905, 106, 906, 907, 908, 
+    907, 907, 909, 907, 907, 910, 907, 911, 907, 911, 106, 106, 106, 106, 
+    907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 
+    907, 912, 913, 914, 914, 914, 914, 914, 915, 603, 916, 916, 916, 916, 
+    916, 916, 917, 918, 919, 920, 568, 609, 106, 106, 106, 106, 106, 106, 
+    603, 603, 603, 603, 603, 921, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 922, 922, 922, 923, 924, 924, 
+    924, 924, 924, 924, 925, 106, 106, 106, 106, 106, 926, 926, 926, 927, 
+    928, 106, 929, 929, 930, 931, 106, 106, 106, 106, 106, 106, 932, 932, 
+    932, 933, 934, 934, 934, 934, 935, 934, 936, 106, 106, 106, 106, 106, 
+    937, 937, 937, 937, 937, 938, 938, 938, 938, 938, 939, 939, 939, 939, 
+    939, 939, 940, 940, 940, 941, 942, 943, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 944, 945, 946, 946, 946, 946, 947, 948, 949, 949, 
+    950, 951, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 952, 952, 953, 954, 955, 955, 
+    955, 956, 106, 106, 106, 106, 106, 106, 106, 106, 957, 957, 957, 957, 
+    958, 958, 958, 959, 106, 106, 106, 106, 106, 106, 106, 106, 960, 961, 
+    962, 963, 964, 964, 965, 966, 967, 106, 968, 969, 970, 970, 970, 971, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 972, 972, 972, 972, 972, 972, 973, 974, 975, 975, 976, 977, 
+    978, 978, 979, 980, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 981, 981, 981, 981, 981, 981, 981, 981, 
+    981, 982, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 983, 983, 983, 984, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    985, 986, 986, 986, 986, 986, 986, 987, 988, 989, 990, 991, 992, 993, 
+    106, 106, 994, 995, 995, 995, 995, 995, 996, 997, 998, 106, 999, 999, 
+    999, 1000, 1001, 1002, 1003, 1004, 1004, 1004, 1005, 1006, 1007, 1008, 
+    1009, 106, 106, 106, 106, 106, 106, 106, 1010, 1011, 1011, 1011, 1011, 
+    1011, 1012, 1013, 1014, 1015, 1016, 1017, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    1018, 1018, 1018, 1018, 1018, 1019, 1020, 106, 1021, 1022, 106, 106, 106, 
+    106, 106, 106, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 
+    1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 
+    1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 
+    1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 
+    1024, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 
+    1025, 1025, 1025, 1025, 1026, 106, 1027, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 1028, 1028, 1028, 
+    1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 
+    1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 
+    1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1029, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 770, 770, 770, 
+    770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 
+    770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 
+    770, 770, 770, 770, 770, 770, 770, 770, 1030, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 
+    1032, 106, 1033, 1034, 1034, 1034, 1034, 1035, 106, 1036, 1037, 1038, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 1039, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 
+    603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 
+    603, 603, 603, 603, 1040, 106, 603, 603, 603, 603, 1041, 1042, 603, 603, 
+    603, 603, 603, 603, 1043, 1044, 1045, 1046, 1047, 1048, 603, 603, 603, 
+    1049, 603, 603, 603, 603, 603, 1040, 106, 106, 106, 106, 919, 919, 919, 
+    919, 919, 919, 919, 919, 1050, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 610, 106, 914, 
+    914, 1051, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 1052, 1052, 1052, 1053, 1054, 1054, 1055, 1052, 
+    1052, 1056, 1057, 1054, 1054, 1052, 1052, 1052, 1053, 1054, 1054, 1058, 
+    1059, 1060, 1056, 1061, 1062, 1054, 1052, 1052, 1052, 1053, 1054, 1054, 
+    1063, 1064, 1065, 1066, 1054, 1054, 1054, 1067, 1068, 1069, 1070, 1054, 
+    1054, 1055, 1052, 1052, 1056, 1054, 1054, 1054, 1052, 1052, 1052, 1053, 
+    1054, 1054, 1055, 1052, 1052, 1056, 1054, 1054, 1054, 1052, 1052, 1052, 
+    1053, 1054, 1054, 1055, 1052, 1052, 1056, 1054, 1054, 1054, 1052, 1052, 
+    1052, 1053, 1054, 1054, 1071, 1052, 1052, 1052, 1072, 1054, 1054, 1073, 
+    1074, 1052, 1052, 1075, 1054, 1054, 1076, 1055, 1052, 1052, 1077, 1054, 
+    1054, 1078, 1079, 1052, 1052, 1080, 1054, 1054, 1054, 1081, 1052, 1052, 
+    1052, 1072, 1054, 1054, 1073, 1082, 1083, 1083, 1083, 1083, 1083, 1083, 
+    1084, 128, 128, 128, 1085, 1086, 1087, 1088, 1089, 1090, 1085, 1091, 
+    1085, 1087, 1087, 1092, 128, 1093, 128, 1094, 1095, 1093, 128, 1094, 106, 
+    106, 106, 106, 106, 106, 1096, 106, 568, 568, 568, 568, 568, 609, 568, 
+    568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 609, 106, 568, 
+    610, 636, 610, 636, 568, 636, 568, 106, 106, 106, 106, 613, 1097, 615, 
+    615, 615, 1098, 615, 615, 615, 615, 615, 615, 615, 1099, 615, 615, 615, 
+    615, 615, 1100, 106, 106, 106, 106, 106, 106, 106, 106, 1101, 603, 603, 
+    603, 1102, 106, 733, 733, 733, 733, 733, 1103, 733, 1104, 1105, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 568, 568, 568, 568, 1106, 106, 1107, 568, 568, 
+    568, 568, 568, 568, 568, 568, 1108, 568, 568, 609, 106, 568, 568, 568, 
+    568, 1109, 611, 106, 106, 568, 568, 1106, 106, 568, 568, 568, 568, 568, 
+    568, 568, 610, 1110, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 
+    568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 1111, 568, 
+    568, 568, 568, 568, 568, 568, 1112, 609, 106, 568, 568, 568, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    106, 106, 1113, 568, 568, 568, 568, 568, 568, 568, 568, 1114, 568, 106, 
+    106, 106, 106, 106, 106, 568, 568, 568, 568, 568, 568, 568, 568, 1112, 
+    106, 106, 106, 106, 106, 106, 106, 568, 568, 568, 568, 568, 568, 568, 
+    568, 568, 568, 568, 568, 568, 568, 609, 106, 106, 106, 106, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 1115, 753, 753, 753, 753, 
+    753, 751, 751, 751, 751, 751, 751, 754, 753, 750, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
+    751, 751, 751, 751, 751, 751, 751, 751, 752, 753, 753, 753, 753, 753, 
+    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
+    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
+    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
+    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 856, 
+    856, 856, 857, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
+    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
+    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
+    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
+    753, 753, 753, 753, 753, 753, 1116, 1117, 106, 106, 106, 1118, 1118, 
+    1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 106, 106, 
+    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
+    873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 
+    873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 
+    873, 873, 106, 106, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
+    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
+    854, 854, 854, 854, 854, 854, 854, 1119, 
+};
+
+static const unsigned short index2[] = {
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2, 
+    5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, 12, 14, 14, 14, 14, 14, 
+    14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, 17, 17, 17, 17, 17, 17, 
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 
+    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 9, 16, 
+    10, 16, 1, 1, 1, 1, 1, 1, 3, 1, 1, 21, 22, 8, 8, 23, 8, 24, 22, 25, 26, 
+    27, 28, 16, 29, 30, 18, 31, 32, 33, 33, 25, 34, 22, 22, 25, 33, 27, 35, 
+    36, 36, 36, 22, 37, 37, 37, 37, 37, 37, 38, 37, 37, 37, 37, 37, 37, 37, 
+    37, 37, 38, 37, 37, 37, 37, 37, 37, 39, 38, 37, 37, 37, 37, 37, 38, 40, 
+    40, 40, 41, 41, 41, 41, 40, 41, 40, 40, 40, 41, 40, 40, 41, 41, 40, 41, 
+    40, 40, 41, 41, 41, 39, 40, 40, 40, 41, 40, 41, 40, 41, 37, 40, 37, 41, 
+    37, 41, 37, 41, 37, 41, 37, 41, 37, 41, 37, 41, 37, 40, 37, 40, 37, 41, 
+    37, 41, 37, 41, 37, 40, 37, 41, 37, 41, 37, 41, 37, 41, 37, 41, 38, 40, 
+    37, 40, 38, 40, 37, 41, 37, 41, 40, 37, 41, 37, 41, 37, 41, 38, 40, 38, 
+    40, 37, 40, 37, 41, 37, 40, 40, 38, 40, 37, 40, 37, 41, 37, 41, 38, 40, 
+    37, 41, 37, 41, 37, 37, 41, 37, 41, 37, 41, 41, 41, 37, 37, 41, 37, 41, 
+    37, 37, 41, 37, 37, 37, 41, 41, 37, 37, 37, 37, 41, 37, 37, 41, 37, 37, 
+    37, 41, 41, 41, 37, 37, 41, 37, 37, 41, 37, 41, 37, 41, 37, 37, 41, 37, 
+    41, 41, 37, 41, 37, 37, 41, 37, 37, 37, 41, 37, 41, 37, 37, 41, 41, 42, 
+    37, 41, 41, 41, 42, 42, 42, 42, 37, 43, 41, 37, 43, 41, 37, 43, 41, 37, 
+    40, 37, 40, 37, 40, 37, 40, 37, 40, 37, 40, 37, 40, 37, 40, 41, 37, 41, 
+    41, 37, 43, 41, 37, 41, 37, 37, 37, 41, 37, 41, 41, 41, 41, 41, 41, 41, 
+    37, 37, 41, 37, 37, 41, 41, 37, 41, 37, 37, 37, 37, 41, 41, 40, 41, 41, 
+    41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 
+    41, 41, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 46, 46, 46, 46, 46, 
+    46, 46, 47, 47, 25, 47, 45, 48, 45, 48, 48, 48, 45, 48, 45, 45, 49, 46, 
+    47, 47, 47, 47, 47, 47, 25, 25, 25, 25, 47, 25, 47, 25, 44, 44, 44, 44, 
+    44, 47, 47, 47, 47, 47, 50, 50, 45, 47, 46, 47, 47, 47, 47, 47, 47, 47, 
+    47, 47, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 53, 53, 
+    53, 53, 52, 54, 53, 53, 53, 53, 53, 55, 55, 53, 53, 53, 53, 55, 55, 53, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 56, 56, 56, 56, 56, 53, 53, 53, 
+    53, 51, 51, 51, 51, 51, 51, 51, 51, 57, 51, 53, 53, 53, 51, 51, 51, 53, 
+    53, 58, 51, 51, 51, 53, 53, 53, 53, 51, 52, 53, 53, 51, 59, 60, 60, 59, 
+    60, 60, 59, 51, 51, 51, 51, 51, 61, 62, 61, 62, 45, 63, 61, 62, 64, 64, 
+    65, 62, 62, 62, 66, 64, 64, 64, 64, 64, 63, 47, 61, 66, 61, 61, 61, 64, 
+    61, 64, 61, 61, 62, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 
+    67, 67, 67, 67, 64, 67, 67, 67, 67, 67, 67, 67, 61, 61, 62, 62, 62, 62, 
+    62, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
+    62, 68, 68, 68, 68, 68, 68, 68, 62, 62, 62, 62, 62, 61, 62, 62, 61, 61, 
+    61, 62, 62, 62, 61, 62, 61, 62, 61, 62, 61, 62, 61, 62, 69, 70, 69, 70, 
+    69, 70, 69, 70, 69, 70, 69, 70, 69, 70, 62, 62, 62, 62, 61, 62, 71, 61, 
+    62, 61, 61, 62, 62, 61, 61, 61, 72, 73, 72, 72, 72, 72, 72, 72, 72, 72, 
+    72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 
+    74, 74, 74, 74, 75, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 
+    75, 75, 72, 75, 72, 75, 72, 75, 72, 75, 72, 75, 76, 77, 77, 78, 78, 77, 
+    79, 79, 72, 75, 72, 75, 72, 75, 72, 72, 75, 72, 75, 72, 75, 72, 75, 72, 
+    75, 72, 75, 72, 75, 75, 64, 64, 64, 64, 64, 64, 64, 64, 64, 80, 80, 80, 
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
+    80, 64, 64, 81, 82, 82, 82, 82, 82, 82, 64, 83, 83, 83, 83, 83, 83, 83, 
+    83, 83, 83, 83, 83, 83, 83, 83, 64, 84, 85, 64, 64, 64, 64, 86, 64, 87, 
+    88, 88, 88, 88, 87, 88, 88, 88, 89, 87, 88, 88, 88, 88, 88, 88, 87, 87, 
+    87, 87, 87, 87, 88, 88, 87, 88, 88, 89, 90, 88, 91, 92, 93, 94, 95, 96, 
+    97, 98, 99, 100, 100, 101, 102, 103, 104, 105, 106, 107, 108, 106, 88, 
+    87, 106, 99, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 64, 
+    64, 64, 64, 64, 109, 109, 109, 106, 106, 64, 64, 64, 110, 110, 110, 110, 
+    110, 64, 111, 111, 112, 113, 113, 114, 115, 116, 117, 117, 118, 118, 118, 
+    118, 118, 118, 118, 118, 119, 120, 121, 122, 64, 64, 116, 122, 123, 123, 
+    123, 123, 123, 123, 123, 123, 124, 123, 123, 123, 123, 123, 123, 123, 
+    123, 123, 123, 125, 126, 127, 128, 129, 130, 131, 132, 78, 78, 133, 134, 
+    118, 118, 118, 118, 118, 134, 118, 118, 134, 135, 135, 135, 135, 135, 
+    135, 135, 135, 135, 135, 113, 136, 136, 116, 123, 123, 137, 123, 123, 
+    123, 123, 123, 123, 123, 123, 123, 123, 123, 116, 123, 118, 118, 118, 
+    118, 118, 118, 118, 138, 117, 118, 118, 118, 118, 134, 118, 139, 139, 
+    118, 118, 117, 134, 118, 118, 134, 123, 123, 140, 140, 140, 140, 140, 
+    140, 140, 140, 140, 140, 123, 123, 123, 141, 141, 123, 142, 142, 142, 
+    142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 64, 143, 144, 145, 
+    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 
+    146, 147, 146, 146, 147, 146, 146, 147, 147, 147, 146, 147, 147, 146, 
+    147, 146, 146, 146, 147, 146, 147, 146, 147, 146, 147, 146, 146, 64, 64, 
+    144, 144, 144, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 
+    148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 
+    148, 64, 64, 64, 64, 64, 64, 150, 150, 150, 150, 150, 150, 150, 150, 150, 
+    150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 
+    151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 153, 152, 154, 
+    154, 155, 156, 156, 156, 154, 64, 64, 64, 64, 64, 157, 157, 157, 157, 
+    157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 
+    159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 158, 158, 158, 
+    159, 158, 158, 158, 158, 158, 64, 64, 160, 160, 160, 160, 160, 160, 160, 
+    160, 160, 160, 160, 160, 160, 160, 160, 64, 161, 161, 161, 161, 161, 161, 
+    161, 161, 161, 162, 162, 162, 64, 64, 163, 64, 123, 64, 123, 123, 123, 
+    123, 123, 123, 123, 123, 123, 123, 123, 64, 64, 64, 64, 64, 64, 64, 118, 
+    118, 134, 118, 118, 134, 118, 118, 118, 134, 134, 134, 164, 165, 166, 
+    118, 118, 118, 134, 118, 118, 134, 134, 118, 118, 118, 118, 64, 167, 167, 
+    167, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 
+    169, 169, 167, 168, 170, 169, 168, 168, 168, 167, 167, 167, 167, 167, 
+    167, 167, 167, 168, 168, 168, 168, 171, 168, 168, 169, 78, 133, 172, 172, 
+    167, 167, 167, 169, 169, 167, 167, 84, 84, 173, 173, 173, 173, 173, 173, 
+    173, 173, 173, 173, 174, 175, 169, 169, 169, 169, 169, 169, 64, 169, 169, 
+    169, 169, 169, 169, 169, 64, 176, 177, 177, 64, 178, 178, 178, 178, 178, 
+    178, 178, 178, 64, 64, 178, 178, 64, 64, 178, 178, 178, 178, 178, 178, 
+    178, 178, 178, 178, 178, 178, 178, 178, 64, 178, 178, 178, 178, 178, 178, 
+    178, 64, 178, 64, 64, 64, 178, 178, 178, 178, 64, 64, 179, 178, 177, 177, 
+    177, 176, 176, 176, 176, 64, 64, 177, 177, 64, 64, 177, 177, 180, 178, 
+    64, 64, 64, 64, 64, 64, 64, 64, 177, 64, 64, 64, 64, 178, 178, 64, 178, 
+    178, 178, 176, 176, 64, 64, 181, 181, 181, 181, 181, 181, 181, 181, 181, 
+    181, 178, 178, 182, 182, 183, 183, 183, 183, 183, 183, 184, 182, 64, 64, 
+    64, 64, 64, 185, 185, 186, 64, 187, 187, 187, 187, 187, 187, 64, 64, 64, 
+    64, 187, 187, 64, 64, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 
+    187, 187, 187, 187, 64, 187, 187, 187, 187, 187, 187, 187, 64, 187, 187, 
+    64, 187, 187, 64, 187, 187, 64, 64, 188, 64, 186, 186, 186, 185, 185, 64, 
+    64, 64, 64, 185, 185, 64, 64, 185, 185, 189, 64, 64, 64, 185, 64, 64, 64, 
+    64, 64, 64, 64, 187, 187, 187, 187, 64, 187, 64, 64, 64, 64, 64, 64, 64, 
+    190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 185, 185, 187, 187, 
+    187, 185, 64, 64, 64, 191, 191, 192, 64, 193, 193, 193, 193, 193, 193, 
+    193, 193, 193, 64, 193, 193, 193, 64, 193, 193, 193, 193, 193, 193, 193, 
+    193, 193, 193, 193, 193, 193, 193, 64, 193, 193, 193, 193, 193, 193, 193, 
+    64, 193, 193, 64, 193, 193, 193, 193, 193, 64, 64, 194, 193, 192, 192, 
+    192, 191, 191, 191, 191, 191, 64, 191, 191, 192, 64, 192, 192, 195, 64, 
+    64, 193, 64, 64, 64, 64, 64, 64, 64, 193, 193, 191, 191, 64, 64, 196, 
+    196, 196, 196, 196, 196, 196, 196, 196, 196, 197, 198, 64, 64, 64, 64, 
+    64, 64, 64, 199, 200, 200, 64, 201, 201, 201, 201, 201, 201, 201, 201, 
+    64, 64, 201, 201, 64, 64, 201, 201, 201, 201, 201, 201, 201, 201, 201, 
+    201, 201, 201, 201, 201, 64, 201, 201, 201, 201, 201, 201, 201, 64, 201, 
+    201, 64, 201, 201, 201, 201, 201, 64, 64, 202, 201, 200, 199, 200, 199, 
+    199, 199, 199, 64, 64, 200, 200, 64, 64, 200, 200, 203, 64, 64, 64, 64, 
+    64, 64, 64, 64, 199, 200, 64, 64, 64, 64, 201, 201, 64, 201, 201, 201, 
+    199, 199, 64, 64, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 205, 
+    201, 206, 206, 206, 206, 206, 206, 64, 64, 207, 208, 64, 208, 208, 208, 
+    208, 208, 208, 64, 64, 64, 208, 208, 208, 64, 208, 208, 208, 208, 64, 64, 
+    64, 208, 208, 64, 208, 64, 208, 208, 64, 64, 64, 208, 208, 64, 64, 64, 
+    208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 64, 64, 64, 64, 209, 
+    209, 207, 209, 209, 64, 64, 64, 209, 209, 209, 64, 209, 209, 209, 210, 
+    64, 64, 208, 64, 64, 64, 64, 64, 64, 209, 64, 64, 64, 64, 64, 64, 211, 
+    211, 211, 211, 211, 211, 211, 211, 211, 211, 212, 212, 212, 213, 213, 
+    213, 213, 213, 213, 214, 213, 64, 64, 64, 64, 64, 64, 215, 215, 215, 64, 
+    216, 216, 216, 216, 216, 216, 216, 216, 64, 216, 216, 216, 64, 216, 216, 
+    216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 
+    216, 216, 64, 216, 216, 216, 216, 216, 64, 64, 64, 216, 217, 217, 217, 
+    215, 215, 215, 215, 64, 217, 217, 217, 64, 217, 217, 217, 218, 64, 64, 
+    64, 64, 64, 64, 64, 219, 220, 64, 216, 216, 64, 64, 64, 64, 64, 64, 216, 
+    216, 217, 217, 64, 64, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 
+    222, 222, 222, 222, 222, 222, 222, 223, 64, 64, 224, 224, 64, 225, 225, 
+    225, 225, 225, 225, 225, 225, 64, 225, 225, 225, 64, 225, 225, 225, 225, 
+    225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 64, 
+    225, 225, 225, 225, 225, 64, 64, 226, 225, 224, 227, 224, 224, 224, 224, 
+    224, 64, 227, 224, 224, 64, 224, 224, 228, 229, 64, 64, 64, 64, 64, 64, 
+    64, 224, 224, 64, 64, 64, 64, 64, 64, 64, 225, 64, 225, 225, 228, 228, 
+    64, 64, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 64, 225, 225, 
+    64, 64, 64, 64, 64, 64, 64, 231, 231, 64, 232, 232, 232, 232, 232, 232, 
+    232, 232, 64, 232, 232, 232, 64, 232, 232, 232, 232, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 232, 232, 232, 232, 64, 64, 232, 231, 231, 231, 
+    233, 233, 233, 233, 64, 231, 231, 231, 64, 231, 231, 231, 234, 232, 64, 
+    64, 64, 64, 64, 64, 64, 64, 231, 232, 232, 233, 233, 64, 64, 235, 235, 
+    235, 235, 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 236, 236, 64, 
+    64, 64, 237, 232, 232, 232, 232, 232, 232, 64, 64, 238, 238, 64, 239, 
+    239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 
+    239, 239, 239, 64, 64, 64, 239, 239, 239, 239, 239, 239, 239, 239, 64, 
+    239, 239, 239, 239, 239, 239, 239, 239, 239, 64, 239, 64, 64, 64, 64, 
+    240, 64, 64, 64, 64, 238, 238, 238, 241, 241, 241, 64, 241, 64, 238, 238, 
+    238, 238, 238, 238, 238, 238, 64, 64, 238, 238, 242, 64, 64, 64, 64, 243, 
+    243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 
+    243, 244, 243, 243, 244, 244, 244, 244, 245, 245, 246, 64, 64, 64, 64, 
+    247, 243, 243, 243, 243, 243, 243, 248, 244, 249, 249, 249, 249, 244, 
+    244, 244, 250, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 250, 
+    250, 64, 64, 64, 64, 64, 252, 252, 64, 252, 64, 64, 252, 252, 64, 252, 
+    64, 64, 252, 64, 64, 64, 64, 64, 64, 252, 252, 252, 252, 64, 252, 252, 
+    252, 252, 252, 252, 252, 64, 252, 252, 252, 64, 252, 64, 252, 64, 64, 
+    252, 252, 64, 252, 252, 252, 252, 253, 252, 252, 253, 253, 253, 253, 254, 
+    254, 64, 253, 253, 252, 64, 64, 252, 252, 252, 252, 252, 64, 255, 64, 
+    256, 256, 256, 256, 253, 253, 64, 64, 257, 257, 257, 257, 257, 257, 257, 
+    257, 257, 257, 64, 64, 252, 252, 252, 252, 258, 259, 259, 259, 260, 260, 
+    260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 259, 
+    260, 259, 259, 259, 261, 261, 259, 259, 259, 259, 259, 259, 262, 262, 
+    262, 262, 262, 262, 262, 262, 262, 262, 263, 263, 263, 263, 263, 263, 
+    263, 263, 263, 263, 259, 261, 259, 261, 259, 264, 265, 266, 265, 266, 
+    267, 267, 258, 258, 258, 258, 258, 258, 258, 258, 64, 258, 258, 258, 258, 
+    258, 258, 258, 258, 258, 258, 258, 258, 64, 64, 64, 64, 268, 269, 270, 
+    271, 270, 270, 270, 270, 270, 269, 269, 269, 269, 270, 267, 269, 270, 
+    272, 272, 273, 260, 272, 272, 258, 258, 258, 258, 258, 270, 270, 270, 
+    270, 270, 270, 270, 270, 270, 270, 270, 64, 270, 270, 270, 270, 270, 270, 
+    270, 270, 270, 270, 270, 270, 64, 259, 259, 259, 259, 259, 259, 259, 259, 
+    261, 259, 259, 259, 259, 259, 259, 64, 259, 259, 260, 260, 260, 260, 260, 
+    274, 274, 274, 274, 260, 260, 64, 64, 64, 64, 64, 275, 275, 275, 275, 
+    275, 275, 275, 275, 275, 275, 275, 276, 276, 277, 277, 277, 277, 276, 
+    277, 277, 277, 277, 277, 278, 276, 279, 279, 276, 276, 277, 277, 275, 
+    280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 
+    281, 281, 275, 275, 275, 275, 275, 275, 276, 276, 277, 277, 275, 275, 
+    275, 275, 277, 277, 277, 275, 276, 276, 276, 275, 275, 276, 276, 276, 
+    276, 276, 276, 276, 275, 275, 275, 277, 277, 277, 277, 275, 275, 275, 
+    275, 275, 277, 276, 276, 277, 277, 276, 276, 276, 276, 276, 276, 282, 
+    275, 276, 280, 280, 276, 276, 276, 277, 283, 283, 284, 284, 284, 284, 
+    284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 64, 284, 64, 64, 64, 
+    64, 64, 284, 64, 64, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 
+    285, 84, 286, 285, 285, 285, 287, 287, 287, 287, 287, 287, 287, 287, 288, 
+    288, 288, 288, 288, 288, 288, 288, 289, 289, 289, 289, 289, 289, 289, 
+    289, 289, 64, 289, 289, 289, 289, 64, 64, 289, 289, 289, 289, 289, 289, 
+    289, 64, 289, 289, 289, 64, 64, 290, 290, 290, 291, 291, 291, 291, 291, 
+    291, 291, 291, 291, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 
+    292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 64, 64, 64, 293, 293, 
+    293, 293, 293, 293, 293, 293, 293, 293, 64, 64, 64, 64, 64, 64, 294, 294, 
+    294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 64, 64, 64, 295, 
+    296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 
+    296, 296, 296, 296, 296, 296, 297, 297, 296, 298, 299, 299, 299, 299, 
+    299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 
+    300, 301, 64, 64, 64, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 
+    302, 84, 84, 84, 303, 303, 303, 64, 64, 64, 64, 64, 64, 64, 304, 304, 
+    304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 64, 304, 304, 304, 
+    304, 305, 305, 306, 64, 64, 64, 307, 307, 307, 307, 307, 307, 307, 307, 
+    307, 307, 308, 308, 309, 84, 84, 64, 310, 310, 310, 310, 310, 310, 310, 
+    310, 310, 310, 311, 311, 64, 64, 64, 64, 312, 312, 312, 312, 312, 312, 
+    312, 312, 312, 312, 312, 312, 312, 64, 312, 312, 312, 64, 313, 313, 64, 
+    64, 64, 64, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 
+    315, 315, 316, 315, 315, 315, 315, 315, 315, 315, 316, 316, 316, 316, 
+    316, 316, 316, 316, 315, 316, 316, 315, 315, 315, 315, 315, 315, 315, 
+    315, 315, 317, 315, 318, 318, 318, 319, 318, 318, 318, 320, 314, 321, 64, 
+    64, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 64, 64, 64, 64, 64, 
+    64, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 64, 64, 64, 64, 64, 
+    64, 324, 324, 66, 66, 324, 66, 325, 324, 324, 324, 324, 326, 326, 326, 
+    327, 64, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 64, 64, 64, 
+    64, 64, 64, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 330, 
+    329, 329, 329, 329, 329, 331, 329, 64, 64, 64, 64, 64, 296, 296, 296, 
+    296, 296, 296, 64, 64, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 
+    332, 332, 332, 64, 64, 64, 333, 333, 333, 334, 334, 334, 334, 333, 333, 
+    334, 334, 334, 64, 64, 64, 64, 334, 334, 333, 334, 334, 334, 334, 334, 
+    334, 335, 336, 337, 64, 64, 64, 64, 338, 64, 64, 64, 339, 339, 340, 340, 
+    340, 340, 340, 340, 340, 340, 340, 340, 341, 341, 341, 341, 341, 341, 
+    341, 341, 341, 341, 341, 341, 341, 341, 64, 64, 341, 341, 341, 341, 341, 
+    64, 64, 64, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 
+    64, 64, 64, 64, 343, 343, 343, 343, 343, 343, 343, 343, 343, 342, 342, 
+    342, 342, 342, 342, 342, 343, 343, 64, 64, 64, 64, 64, 64, 344, 344, 344, 
+    344, 344, 344, 344, 344, 344, 344, 345, 64, 64, 64, 346, 346, 347, 347, 
+    347, 347, 347, 347, 347, 347, 348, 348, 348, 348, 348, 348, 348, 348, 
+    348, 348, 348, 348, 348, 348, 348, 349, 350, 351, 351, 351, 64, 64, 352, 
+    352, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 
+    354, 355, 354, 355, 355, 355, 355, 355, 355, 355, 64, 356, 354, 355, 354, 
+    354, 355, 355, 355, 355, 355, 355, 355, 355, 354, 354, 354, 354, 354, 
+    354, 355, 355, 357, 357, 357, 357, 357, 357, 357, 357, 64, 64, 358, 359, 
+    359, 359, 359, 359, 359, 359, 359, 359, 359, 64, 64, 64, 64, 64, 64, 360, 
+    360, 360, 360, 360, 360, 360, 361, 360, 360, 360, 360, 360, 360, 64, 64, 
+    362, 362, 362, 362, 363, 364, 364, 364, 364, 364, 364, 364, 364, 364, 
+    364, 364, 364, 364, 364, 364, 365, 363, 362, 362, 362, 362, 362, 363, 
+    362, 363, 363, 363, 363, 363, 362, 363, 366, 364, 364, 364, 364, 364, 
+    364, 364, 64, 64, 64, 64, 367, 367, 367, 367, 367, 367, 367, 367, 367, 
+    367, 368, 368, 368, 368, 368, 368, 368, 369, 369, 369, 369, 369, 369, 
+    369, 369, 369, 369, 370, 371, 370, 370, 370, 370, 370, 370, 370, 369, 
+    369, 369, 369, 369, 369, 369, 369, 369, 64, 64, 64, 372, 372, 373, 374, 
+    374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 373, 
+    372, 372, 372, 372, 373, 373, 372, 372, 375, 376, 373, 373, 374, 374, 
+    377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 374, 374, 374, 374, 
+    374, 374, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 
+    378, 378, 379, 380, 381, 381, 380, 380, 380, 381, 380, 381, 381, 381, 
+    382, 382, 64, 64, 64, 64, 64, 64, 64, 64, 383, 383, 383, 383, 384, 384, 
+    384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 385, 385, 385, 385, 
+    385, 385, 385, 385, 386, 386, 386, 386, 386, 386, 386, 386, 385, 385, 
+    386, 387, 64, 64, 64, 388, 388, 388, 388, 388, 389, 389, 389, 389, 389, 
+    389, 389, 389, 389, 389, 64, 64, 64, 384, 384, 384, 390, 390, 390, 390, 
+    390, 390, 390, 390, 390, 390, 391, 391, 391, 391, 391, 391, 391, 391, 
+    391, 391, 391, 391, 391, 391, 392, 392, 392, 392, 392, 392, 393, 393, 
+    394, 394, 394, 394, 394, 394, 394, 394, 78, 78, 78, 84, 395, 133, 133, 
+    133, 133, 133, 78, 78, 133, 133, 133, 133, 78, 396, 395, 395, 395, 395, 
+    395, 395, 395, 397, 397, 397, 397, 133, 397, 397, 397, 397, 396, 396, 78, 
+    397, 397, 64, 41, 41, 41, 41, 41, 41, 62, 62, 62, 62, 62, 75, 44, 44, 44, 
+    44, 44, 44, 44, 44, 44, 65, 65, 65, 65, 65, 44, 44, 44, 44, 65, 65, 65, 
+    65, 65, 41, 41, 41, 41, 41, 398, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 65, 78, 78, 133, 78, 78, 
+    78, 78, 78, 78, 78, 133, 78, 78, 399, 400, 133, 401, 78, 78, 78, 78, 78, 
+    78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 64, 
+    64, 64, 64, 64, 402, 133, 78, 133, 37, 41, 37, 41, 37, 41, 41, 41, 41, 
+    41, 41, 41, 41, 41, 37, 41, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 
+    61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 64, 64, 61, 61, 61, 61, 61, 
+    61, 64, 64, 64, 61, 64, 61, 64, 61, 64, 61, 403, 403, 403, 403, 403, 403, 
+    403, 403, 62, 62, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 403, 63, 62, 
+    63, 63, 63, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 403, 63, 63, 63, 62, 
+    62, 62, 62, 64, 64, 62, 62, 61, 61, 61, 61, 64, 63, 63, 63, 61, 61, 61, 
+    61, 61, 63, 63, 63, 64, 64, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 403, 
+    63, 63, 64, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 405, 
+    406, 406, 407, 408, 409, 410, 410, 409, 409, 409, 22, 66, 411, 412, 413, 
+    414, 411, 412, 413, 414, 22, 22, 22, 66, 22, 22, 22, 22, 415, 416, 417, 
+    418, 419, 420, 421, 21, 422, 423, 422, 422, 423, 22, 66, 66, 66, 28, 35, 
+    22, 66, 66, 22, 424, 424, 66, 66, 66, 425, 426, 427, 66, 66, 66, 66, 66, 
+    66, 66, 66, 66, 66, 66, 428, 66, 424, 66, 66, 66, 66, 66, 66, 66, 66, 66, 
+    66, 404, 405, 405, 405, 405, 405, 64, 64, 64, 64, 64, 405, 405, 405, 405, 
+    405, 405, 429, 44, 64, 64, 33, 429, 429, 429, 429, 429, 430, 430, 428, 
+    426, 427, 431, 429, 33, 33, 33, 33, 429, 429, 429, 429, 429, 430, 430, 
+    428, 426, 427, 64, 44, 44, 44, 44, 44, 64, 64, 64, 247, 247, 247, 247, 
+    247, 247, 247, 247, 247, 432, 247, 247, 23, 247, 247, 247, 247, 247, 247, 
+    64, 64, 64, 64, 64, 78, 78, 395, 395, 78, 78, 78, 78, 395, 395, 395, 78, 
+    78, 433, 433, 433, 433, 78, 433, 433, 433, 395, 395, 78, 133, 78, 395, 
+    395, 133, 133, 133, 133, 78, 64, 64, 64, 64, 64, 64, 64, 26, 26, 434, 30, 
+    26, 30, 26, 434, 26, 30, 34, 434, 434, 434, 34, 34, 434, 434, 434, 435, 
+    26, 434, 30, 26, 428, 434, 434, 434, 434, 434, 26, 26, 26, 30, 30, 26, 
+    434, 26, 67, 26, 434, 26, 37, 38, 434, 434, 436, 34, 434, 434, 37, 434, 
+    34, 397, 397, 397, 397, 34, 26, 26, 34, 34, 434, 434, 437, 428, 428, 428, 
+    428, 434, 34, 34, 34, 34, 26, 428, 26, 26, 41, 274, 438, 438, 438, 36, 
+    36, 438, 438, 438, 438, 438, 438, 36, 36, 36, 36, 438, 439, 439, 439, 
+    439, 439, 439, 439, 439, 439, 439, 439, 439, 440, 440, 440, 440, 439, 
+    439, 440, 440, 440, 440, 440, 440, 440, 440, 440, 37, 41, 440, 440, 440, 
+    440, 36, 64, 64, 64, 64, 64, 64, 39, 39, 39, 39, 39, 30, 30, 30, 30, 30, 
+    428, 428, 26, 26, 26, 26, 428, 26, 26, 428, 26, 26, 428, 26, 26, 26, 26, 
+    26, 26, 26, 428, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 428, 428, 26, 26, 39, 26, 39, 26, 26, 
+    26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 428, 428, 428, 428, 
+    428, 428, 428, 428, 428, 428, 428, 428, 39, 437, 441, 441, 437, 428, 428, 
+    39, 441, 437, 437, 441, 437, 437, 428, 39, 428, 441, 430, 442, 428, 441, 
+    437, 428, 428, 428, 441, 437, 437, 441, 39, 441, 441, 437, 437, 39, 437, 
+    39, 437, 39, 39, 39, 39, 441, 441, 437, 441, 437, 437, 437, 437, 437, 39, 
+    39, 39, 39, 428, 437, 428, 437, 441, 441, 437, 437, 437, 437, 437, 437, 
+    437, 437, 437, 437, 441, 437, 437, 437, 441, 428, 428, 428, 428, 428, 
+    441, 437, 437, 437, 428, 428, 428, 428, 428, 428, 428, 428, 428, 437, 
+    441, 39, 437, 428, 441, 441, 441, 441, 437, 437, 441, 441, 428, 428, 441, 
+    441, 437, 437, 441, 441, 437, 437, 441, 441, 437, 437, 437, 437, 437, 
+    428, 428, 437, 437, 437, 437, 428, 428, 39, 428, 428, 437, 39, 428, 428, 
+    428, 428, 428, 428, 428, 428, 437, 437, 428, 39, 437, 437, 437, 428, 428, 
+    428, 428, 428, 437, 441, 428, 437, 437, 437, 437, 437, 428, 428, 437, 
+    437, 428, 428, 428, 428, 437, 437, 437, 437, 437, 437, 437, 437, 428, 
+    428, 437, 437, 437, 437, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 
+    437, 437, 26, 26, 26, 26, 26, 26, 26, 443, 444, 26, 26, 26, 26, 26, 26, 
+    26, 26, 26, 26, 26, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 26, 428, 26, 26, 26, 26, 26, 26, 26, 26, 274, 26, 26, 26, 
+    26, 26, 428, 428, 428, 428, 428, 428, 428, 428, 428, 26, 26, 26, 26, 428, 
+    428, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 64, 64, 64, 64, 26, 26, 26, 
+    26, 26, 26, 26, 64, 26, 26, 26, 64, 64, 64, 64, 64, 36, 36, 36, 36, 36, 
+    36, 36, 36, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 445, 445, 
+    445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 438, 36, 36, 
+    36, 36, 36, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 
+    26, 26, 26, 30, 30, 30, 30, 26, 26, 30, 30, 26, 30, 30, 30, 30, 30, 26, 
+    26, 30, 30, 26, 26, 30, 39, 26, 26, 26, 26, 30, 30, 26, 26, 30, 39, 26, 
+    26, 26, 26, 30, 30, 30, 26, 26, 30, 26, 26, 30, 30, 26, 26, 26, 26, 26, 
+    30, 30, 26, 26, 30, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 30, 26, 30, 
+    26, 30, 26, 30, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 26, 30, 30, 
+    30, 30, 26, 30, 30, 26, 39, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 
+    26, 274, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
+    30, 26, 30, 30, 30, 26, 30, 26, 26, 26, 26, 64, 26, 26, 26, 26, 26, 26, 
+    26, 26, 26, 26, 26, 26, 30, 26, 26, 426, 427, 426, 427, 426, 427, 426, 
+    427, 426, 427, 426, 427, 426, 427, 36, 36, 438, 438, 438, 438, 438, 438, 
+    438, 438, 438, 438, 438, 438, 26, 26, 26, 26, 437, 428, 428, 437, 437, 
+    426, 427, 428, 437, 437, 428, 437, 437, 437, 428, 428, 428, 428, 428, 
+    437, 437, 437, 437, 428, 428, 428, 428, 428, 437, 437, 437, 428, 428, 
+    428, 437, 437, 437, 437, 9, 10, 9, 10, 9, 10, 9, 10, 426, 427, 446, 446, 
+    446, 446, 446, 446, 446, 446, 428, 428, 428, 426, 427, 9, 10, 426, 427, 
+    426, 427, 426, 427, 426, 427, 426, 427, 428, 428, 437, 437, 437, 437, 
+    437, 437, 428, 428, 428, 428, 428, 428, 428, 428, 437, 428, 428, 428, 
+    428, 437, 437, 437, 437, 437, 428, 437, 437, 428, 428, 426, 427, 426, 
+    427, 437, 428, 428, 428, 428, 437, 428, 437, 437, 437, 428, 428, 437, 
+    437, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 437, 437, 437, 
+    437, 437, 437, 428, 428, 426, 427, 428, 428, 428, 428, 437, 437, 437, 
+    437, 437, 437, 437, 437, 437, 437, 437, 428, 437, 437, 437, 437, 428, 
+    428, 437, 428, 437, 428, 428, 437, 428, 437, 437, 437, 437, 428, 428, 
+    428, 428, 428, 437, 437, 428, 428, 428, 428, 437, 437, 437, 437, 428, 
+    437, 437, 428, 428, 437, 437, 428, 428, 428, 428, 437, 437, 437, 437, 
+    437, 437, 437, 437, 437, 437, 437, 428, 428, 437, 437, 437, 437, 437, 
+    437, 437, 437, 428, 437, 437, 437, 437, 437, 437, 437, 437, 428, 428, 
+    428, 428, 428, 437, 428, 437, 428, 428, 428, 437, 437, 437, 437, 437, 
+    428, 428, 428, 428, 437, 428, 428, 428, 437, 437, 437, 437, 437, 428, 
+    437, 428, 428, 428, 428, 428, 428, 428, 26, 26, 428, 428, 428, 428, 428, 
+    428, 64, 64, 64, 26, 26, 26, 26, 26, 30, 30, 30, 30, 30, 64, 64, 64, 64, 
+    64, 64, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 
+    447, 447, 64, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 
+    448, 448, 448, 64, 37, 41, 37, 37, 37, 41, 41, 37, 41, 37, 41, 37, 41, 
+    37, 37, 37, 37, 41, 37, 41, 41, 37, 41, 41, 41, 41, 41, 41, 44, 44, 37, 
+    37, 69, 70, 69, 70, 70, 449, 449, 449, 449, 449, 449, 69, 70, 69, 70, 
+    450, 450, 450, 69, 70, 64, 64, 64, 64, 64, 451, 451, 451, 451, 452, 451, 
+    451, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 
+    453, 64, 453, 64, 64, 64, 64, 64, 453, 64, 64, 454, 454, 454, 454, 454, 
+    454, 454, 454, 64, 64, 64, 64, 64, 64, 64, 455, 456, 64, 64, 64, 64, 64, 
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 457, 77, 77, 77, 77, 77, 77, 77, 77, 
+    66, 66, 28, 35, 28, 35, 66, 66, 66, 28, 35, 66, 28, 35, 66, 66, 66, 66, 
+    66, 66, 66, 66, 66, 410, 66, 66, 410, 66, 28, 35, 66, 66, 28, 35, 426, 
+    427, 426, 427, 426, 427, 426, 427, 66, 66, 66, 66, 66, 45, 66, 66, 410, 
+    410, 64, 64, 64, 64, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 
+    64, 458, 458, 458, 458, 458, 458, 458, 458, 458, 64, 64, 64, 64, 458, 
+    458, 458, 458, 458, 458, 64, 64, 459, 459, 459, 459, 459, 459, 459, 459, 
+    459, 459, 459, 459, 64, 64, 64, 64, 460, 461, 461, 461, 459, 462, 463, 
+    464, 443, 444, 443, 444, 443, 444, 443, 444, 443, 444, 459, 459, 443, 
+    444, 443, 444, 443, 444, 443, 444, 465, 466, 467, 467, 459, 464, 464, 
+    464, 464, 464, 464, 464, 464, 464, 468, 469, 470, 471, 472, 472, 465, 
+    473, 473, 473, 473, 473, 459, 459, 464, 464, 464, 462, 463, 461, 459, 26, 
+    64, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 
+    474, 474, 474, 474, 474, 474, 474, 474, 64, 64, 475, 475, 476, 476, 477, 
+    477, 474, 465, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 
+    478, 478, 478, 478, 478, 478, 478, 461, 473, 479, 479, 478, 64, 64, 64, 
+    64, 64, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 
+    480, 480, 480, 480, 64, 64, 64, 287, 287, 287, 287, 287, 287, 287, 287, 
+    287, 287, 287, 287, 287, 287, 64, 481, 481, 482, 482, 482, 482, 481, 481, 
+    481, 481, 481, 481, 481, 481, 481, 481, 480, 480, 480, 64, 64, 64, 64, 
+    64, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 484, 
+    484, 64, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 481, 481, 481, 
+    481, 481, 481, 485, 485, 485, 485, 485, 485, 485, 485, 459, 486, 486, 
+    486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 483, 
+    483, 483, 483, 484, 484, 484, 481, 481, 486, 486, 486, 486, 486, 486, 
+    486, 481, 481, 481, 481, 459, 459, 459, 459, 487, 487, 487, 487, 487, 
+    487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 64, 481, 481, 481, 481, 
+    481, 481, 481, 459, 459, 459, 459, 481, 481, 481, 481, 481, 481, 481, 
+    481, 481, 481, 481, 459, 459, 488, 489, 489, 489, 489, 489, 489, 489, 
+    489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 488, 
+    490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 489, 489, 489, 489, 
+    488, 490, 490, 490, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 
+    491, 491, 491, 492, 491, 491, 491, 491, 491, 491, 491, 64, 64, 64, 493, 
+    493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 64, 
+    494, 494, 494, 494, 494, 494, 494, 494, 495, 495, 495, 495, 495, 495, 
+    496, 496, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 
+    498, 499, 499, 499, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 
+    497, 497, 64, 64, 64, 64, 72, 75, 72, 75, 72, 75, 501, 77, 79, 79, 79, 
+    502, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 502, 503, 64, 64, 64, 64, 
+    64, 64, 64, 77, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 
+    504, 504, 504, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 506, 
+    506, 507, 507, 507, 507, 507, 507, 47, 47, 47, 47, 47, 47, 47, 45, 45, 
+    45, 45, 45, 45, 45, 45, 45, 47, 47, 37, 41, 37, 41, 37, 41, 41, 41, 37, 
+    41, 37, 41, 37, 41, 44, 41, 41, 41, 41, 41, 41, 41, 41, 37, 41, 37, 41, 
+    37, 37, 41, 45, 508, 508, 37, 41, 37, 41, 64, 37, 41, 37, 41, 64, 64, 64, 
+    64, 37, 41, 37, 64, 64, 64, 64, 64, 44, 44, 41, 42, 42, 42, 42, 42, 509, 
+    509, 510, 509, 509, 509, 511, 509, 509, 509, 509, 510, 509, 509, 509, 
+    509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 512, 512, 
+    510, 510, 512, 513, 513, 513, 513, 64, 64, 64, 64, 514, 514, 514, 514, 
+    514, 514, 274, 274, 247, 436, 64, 64, 64, 64, 64, 64, 515, 515, 515, 515, 
+    515, 515, 515, 515, 515, 515, 515, 515, 516, 516, 516, 516, 517, 517, 
+    518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 
+    518, 518, 518, 518, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 
+    517, 517, 517, 517, 517, 517, 519, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
+    520, 520, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 64, 64, 64, 
+    64, 64, 64, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 169, 169, 
+    169, 169, 169, 169, 174, 174, 174, 169, 64, 64, 64, 64, 522, 522, 522, 
+    522, 522, 522, 522, 522, 522, 522, 523, 523, 523, 523, 523, 523, 523, 
+    523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 524, 
+    524, 524, 524, 524, 525, 525, 525, 526, 526, 527, 527, 527, 527, 527, 
+    527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 528, 528, 528, 528, 
+    528, 528, 528, 528, 528, 528, 528, 529, 530, 64, 64, 64, 64, 64, 64, 64, 
+    64, 64, 64, 64, 531, 287, 287, 287, 287, 287, 64, 64, 64, 532, 532, 532, 
+    533, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 
+    534, 534, 535, 533, 533, 532, 532, 532, 532, 533, 533, 532, 533, 533, 
+    533, 536, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 
+    537, 64, 538, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 64, 64, 
+    64, 64, 537, 537, 540, 540, 540, 540, 540, 540, 540, 540, 540, 541, 541, 
+    541, 541, 541, 541, 542, 542, 541, 541, 542, 542, 541, 541, 64, 540, 540, 
+    540, 541, 540, 540, 540, 540, 540, 540, 540, 540, 541, 542, 64, 64, 543, 
+    543, 543, 543, 543, 543, 543, 543, 543, 543, 64, 64, 544, 544, 544, 544, 
+    545, 275, 275, 275, 275, 275, 275, 283, 283, 283, 275, 276, 64, 64, 64, 
+    64, 546, 546, 546, 546, 546, 546, 546, 546, 547, 546, 547, 547, 548, 546, 
+    546, 547, 547, 546, 546, 546, 546, 546, 547, 547, 546, 547, 546, 64, 64, 
+    64, 64, 64, 64, 64, 64, 546, 546, 549, 550, 550, 551, 551, 551, 551, 551, 
+    551, 551, 551, 551, 551, 551, 552, 553, 553, 552, 552, 554, 554, 551, 
+    555, 555, 552, 556, 64, 64, 289, 289, 289, 289, 289, 289, 64, 551, 551, 
+    551, 552, 552, 553, 552, 552, 553, 552, 552, 554, 552, 556, 64, 64, 557, 
+    557, 557, 557, 557, 557, 557, 557, 557, 557, 64, 64, 64, 64, 64, 64, 287, 
+    558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 
+    558, 558, 558, 558, 287, 64, 64, 64, 64, 288, 288, 288, 288, 288, 288, 
+    288, 64, 64, 64, 64, 288, 288, 288, 288, 288, 288, 288, 288, 288, 64, 64, 
+    64, 64, 559, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 559, 
+    560, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 
+    561, 561, 561, 561, 561, 561, 561, 561, 561, 560, 488, 488, 488, 488, 
+    488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 490, 490, 488, 488, 
+    490, 490, 490, 490, 490, 490, 41, 41, 41, 41, 41, 41, 41, 64, 64, 64, 64, 
+    83, 83, 83, 83, 83, 64, 64, 64, 64, 64, 109, 562, 109, 109, 563, 109, 
+    109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 64, 109, 109, 
+    109, 109, 109, 64, 109, 64, 109, 109, 64, 109, 109, 64, 109, 109, 123, 
+    123, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 
+    564, 564, 564, 64, 64, 64, 64, 64, 64, 64, 64, 64, 123, 123, 123, 123, 
+    123, 123, 123, 123, 123, 123, 123, 413, 565, 64, 64, 123, 123, 123, 123, 
+    123, 123, 123, 123, 123, 123, 114, 26, 64, 64, 58, 58, 58, 58, 58, 58, 
+    58, 58, 461, 461, 461, 461, 461, 461, 461, 466, 467, 461, 64, 64, 64, 64, 
+    64, 64, 461, 465, 465, 566, 566, 466, 467, 466, 467, 466, 467, 466, 467, 
+    466, 467, 466, 467, 466, 467, 466, 467, 461, 461, 466, 467, 461, 461, 
+    461, 461, 566, 566, 566, 567, 461, 567, 64, 461, 567, 461, 461, 465, 443, 
+    444, 443, 444, 443, 444, 568, 461, 461, 569, 570, 571, 571, 572, 64, 461, 
+    573, 568, 461, 64, 64, 64, 64, 123, 123, 123, 123, 123, 64, 123, 123, 
+    123, 123, 123, 123, 123, 64, 64, 405, 64, 574, 574, 575, 576, 575, 574, 
+    574, 577, 578, 574, 579, 580, 581, 580, 580, 582, 582, 582, 582, 582, 
+    582, 582, 582, 582, 582, 580, 574, 583, 584, 583, 574, 574, 585, 585, 
+    585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 
+    585, 585, 577, 574, 578, 586, 587, 586, 588, 588, 588, 588, 588, 588, 
+    588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 577, 584, 
+    578, 584, 577, 578, 589, 590, 591, 589, 589, 592, 592, 592, 592, 592, 
+    592, 592, 592, 592, 592, 593, 592, 592, 592, 592, 592, 592, 592, 592, 
+    592, 592, 592, 592, 592, 593, 593, 594, 594, 594, 594, 594, 594, 594, 
+    594, 594, 594, 594, 594, 594, 594, 594, 64, 64, 64, 594, 594, 594, 594, 
+    594, 594, 64, 64, 594, 594, 594, 64, 64, 64, 576, 576, 584, 586, 595, 
+    576, 576, 64, 596, 597, 597, 597, 597, 596, 596, 64, 64, 598, 598, 598, 
+    26, 30, 64, 64, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 
+    599, 64, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 64, 599, 599, 
+    599, 64, 599, 599, 64, 599, 599, 599, 599, 599, 599, 599, 64, 64, 599, 
+    599, 599, 64, 64, 64, 64, 64, 84, 66, 84, 64, 64, 64, 64, 514, 514, 514, 
+    514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 64, 64, 64, 274, 600, 
+    600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 601, 601, 
+    601, 601, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 
+    602, 602, 602, 602, 602, 601, 64, 64, 64, 64, 64, 274, 274, 274, 274, 
+    274, 133, 64, 64, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 
+    603, 603, 64, 64, 64, 604, 604, 604, 604, 604, 604, 604, 604, 604, 64, 
+    64, 64, 64, 64, 64, 64, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 
+    605, 605, 605, 605, 605, 64, 606, 606, 606, 606, 64, 64, 64, 64, 607, 
+    607, 607, 607, 607, 607, 607, 607, 607, 608, 607, 607, 607, 607, 607, 
+    607, 607, 607, 608, 64, 64, 64, 64, 64, 609, 609, 609, 609, 609, 609, 
+    609, 609, 609, 609, 609, 609, 609, 609, 64, 610, 611, 611, 611, 611, 611, 
+    611, 611, 611, 611, 611, 611, 611, 64, 64, 64, 64, 612, 613, 613, 613, 
+    613, 613, 64, 64, 614, 614, 614, 614, 614, 614, 614, 614, 615, 615, 615, 
+    615, 615, 615, 615, 615, 616, 616, 616, 616, 616, 616, 616, 616, 617, 
+    617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 64, 64, 
+    618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 64, 64, 64, 64, 64, 64, 
+    619, 619, 619, 619, 619, 619, 64, 64, 619, 64, 619, 619, 619, 619, 619, 
+    619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 
+    619, 64, 619, 619, 64, 64, 64, 619, 64, 64, 619, 620, 620, 620, 620, 620, 
+    620, 620, 620, 620, 620, 620, 620, 620, 620, 64, 621, 622, 622, 622, 622, 
+    622, 622, 622, 622, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 
+    623, 623, 623, 623, 624, 624, 624, 624, 624, 624, 64, 64, 64, 625, 626, 
+    626, 626, 626, 626, 626, 626, 626, 626, 626, 64, 64, 64, 64, 64, 627, 
+    628, 628, 628, 628, 628, 628, 628, 628, 629, 629, 629, 629, 629, 629, 
+    629, 629, 64, 64, 64, 64, 64, 64, 629, 629, 630, 631, 631, 631, 64, 631, 
+    631, 64, 64, 64, 64, 64, 631, 632, 631, 633, 630, 630, 630, 630, 64, 630, 
+    630, 630, 64, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 
+    630, 630, 630, 630, 630, 630, 630, 64, 64, 64, 64, 633, 634, 632, 64, 64, 
+    64, 64, 635, 636, 636, 636, 636, 636, 636, 636, 636, 637, 637, 637, 637, 
+    637, 637, 637, 637, 637, 64, 64, 64, 64, 64, 64, 64, 638, 638, 638, 638, 
+    638, 638, 638, 638, 638, 638, 638, 638, 638, 639, 639, 640, 641, 641, 
+    641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 64, 64, 64, 
+    642, 642, 642, 642, 642, 642, 642, 643, 643, 643, 643, 643, 643, 643, 
+    643, 643, 643, 643, 643, 643, 643, 64, 64, 644, 644, 644, 644, 644, 644, 
+    644, 644, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 64, 64, 
+    64, 64, 64, 646, 646, 646, 646, 646, 646, 646, 646, 647, 647, 647, 647, 
+    647, 647, 647, 647, 647, 64, 64, 64, 64, 64, 64, 64, 648, 648, 648, 648, 
+    648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 64, 649, 650, 649, 
+    651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 650, 
+    650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 652, 
+    653, 653, 653, 653, 653, 653, 653, 64, 64, 64, 64, 654, 654, 654, 654, 
+    654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 
+    654, 654, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 656, 656, 
+    657, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 
+    657, 657, 657, 656, 656, 656, 656, 657, 657, 659, 660, 661, 661, 662, 
+    661, 661, 661, 661, 64, 64, 64, 64, 64, 64, 663, 663, 663, 663, 663, 663, 
+    663, 663, 663, 64, 64, 64, 64, 64, 64, 64, 664, 664, 664, 664, 664, 664, 
+    664, 664, 664, 664, 64, 64, 64, 64, 64, 64, 665, 665, 665, 666, 666, 666, 
+    666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 
+    666, 666, 666, 667, 667, 667, 667, 667, 668, 667, 667, 667, 667, 667, 
+    667, 669, 669, 64, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 671, 
+    671, 671, 671, 64, 64, 64, 64, 672, 672, 673, 674, 674, 674, 674, 674, 
+    674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 673, 673, 673, 
+    672, 672, 672, 672, 672, 672, 672, 672, 672, 673, 675, 674, 674, 674, 
+    674, 676, 676, 676, 676, 64, 64, 64, 64, 64, 64, 64, 677, 677, 677, 677, 
+    677, 677, 677, 677, 677, 677, 64, 64, 64, 64, 64, 64, 678, 678, 678, 678, 
+    678, 678, 678, 678, 678, 678, 678, 679, 680, 679, 680, 680, 679, 679, 
+    679, 679, 679, 679, 681, 682, 683, 683, 683, 683, 683, 683, 683, 683, 
+    683, 683, 64, 64, 64, 64, 64, 64, 684, 684, 684, 684, 684, 684, 684, 684, 
+    684, 684, 684, 684, 684, 684, 684, 64, 685, 685, 685, 685, 685, 685, 685, 
+    685, 685, 685, 685, 64, 64, 64, 64, 64, 686, 686, 686, 686, 64, 64, 64, 
+    64, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 
+    687, 64, 504, 64, 64, 64, 64, 64, 64, 64, 688, 688, 688, 688, 688, 688, 
+    688, 688, 688, 688, 688, 688, 688, 64, 64, 64, 688, 689, 689, 689, 689, 
+    689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 
+    689, 689, 689, 689, 64, 64, 64, 64, 64, 64, 64, 64, 690, 690, 690, 690, 
+    691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 478, 
+    474, 64, 64, 64, 64, 64, 64, 274, 274, 274, 274, 274, 274, 64, 64, 274, 
+    274, 274, 274, 274, 274, 274, 64, 64, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 692, 692, 395, 395, 395, 274, 274, 274, 693, 
+    692, 692, 692, 692, 692, 405, 405, 405, 405, 405, 405, 405, 405, 133, 
+    133, 133, 133, 133, 133, 133, 133, 274, 274, 78, 78, 78, 78, 78, 133, 
+    133, 274, 274, 274, 274, 274, 274, 78, 78, 78, 78, 274, 274, 602, 602, 
+    694, 694, 694, 602, 64, 64, 514, 514, 64, 64, 64, 64, 64, 64, 434, 434, 
+    434, 434, 434, 434, 434, 434, 434, 434, 34, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 434, 434, 434, 434, 434, 434, 
+    434, 434, 434, 434, 34, 34, 34, 34, 34, 34, 34, 64, 34, 34, 34, 34, 34, 
+    34, 434, 64, 434, 434, 64, 64, 434, 64, 64, 434, 434, 64, 64, 434, 434, 
+    434, 434, 64, 434, 434, 34, 34, 64, 34, 64, 34, 34, 34, 34, 34, 34, 34, 
+    64, 34, 34, 34, 34, 34, 34, 34, 434, 434, 64, 434, 434, 434, 434, 64, 64, 
+    434, 434, 434, 434, 434, 434, 434, 434, 64, 434, 434, 434, 434, 434, 434, 
+    434, 64, 34, 34, 434, 434, 64, 434, 434, 434, 434, 64, 434, 434, 434, 
+    434, 434, 64, 434, 64, 64, 64, 434, 434, 434, 434, 434, 434, 434, 64, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 64, 64, 434, 695, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 437, 34, 34, 34, 34, 34, 34, 434, 434, 434, 434, 
+    434, 434, 434, 434, 434, 695, 34, 34, 34, 34, 34, 34, 34, 34, 34, 437, 
+    34, 34, 434, 434, 434, 434, 434, 695, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
+    437, 34, 34, 34, 34, 34, 34, 434, 434, 434, 434, 434, 434, 434, 434, 434, 
+    695, 34, 437, 34, 34, 34, 34, 34, 34, 34, 34, 434, 34, 64, 64, 696, 696, 
+    696, 696, 696, 696, 696, 696, 696, 696, 123, 123, 123, 123, 64, 123, 123, 
+    123, 64, 123, 123, 64, 123, 64, 64, 123, 64, 123, 123, 123, 123, 123, 
+    123, 123, 123, 123, 123, 64, 123, 123, 123, 123, 64, 123, 64, 123, 64, 
+    64, 64, 64, 64, 64, 123, 64, 64, 64, 64, 123, 64, 123, 64, 123, 64, 123, 
+    123, 123, 64, 123, 64, 123, 64, 123, 64, 123, 64, 123, 123, 123, 123, 64, 
+    123, 64, 123, 123, 64, 123, 123, 123, 123, 123, 123, 123, 123, 123, 64, 
+    64, 64, 64, 64, 123, 123, 123, 64, 123, 123, 123, 111, 111, 64, 64, 64, 
+    64, 64, 64, 33, 33, 33, 64, 64, 64, 64, 64, 445, 445, 445, 445, 445, 445, 
+    274, 64, 445, 445, 26, 26, 64, 64, 64, 64, 445, 445, 445, 64, 64, 64, 64, 
+    64, 64, 64, 64, 64, 64, 64, 274, 274, 697, 481, 481, 64, 64, 64, 64, 64, 
+    481, 481, 481, 64, 64, 64, 64, 64, 481, 64, 64, 64, 64, 64, 64, 64, 481, 
+    481, 64, 64, 64, 64, 64, 64, 26, 64, 64, 64, 64, 64, 64, 64, 26, 26, 26, 
+    26, 26, 26, 64, 26, 26, 26, 26, 26, 26, 64, 64, 64, 26, 26, 26, 26, 26, 
+    64, 26, 26, 26, 64, 26, 26, 26, 26, 26, 26, 64, 26, 26, 26, 26, 64, 64, 
+    64, 26, 26, 26, 26, 26, 26, 64, 64, 64, 64, 64, 26, 26, 26, 26, 26, 26, 
+    64, 64, 64, 64, 26, 26, 26, 489, 489, 489, 489, 489, 489, 488, 490, 490, 
+    490, 490, 490, 490, 490, 64, 64, 64, 405, 64, 64, 64, 64, 64, 64, 405, 
+    405, 405, 405, 405, 405, 405, 405, 561, 561, 561, 561, 561, 560, 64, 64, 
+};
+
+/* decomposition data */
+static const unsigned short decomp_data[] = {
+    0, 257, 32, 514, 32, 776, 259, 97, 514, 32, 772, 259, 50, 259, 51, 514, 
+    32, 769, 258, 956, 514, 32, 807, 259, 49, 259, 111, 772, 49, 8260, 52, 
+    772, 49, 8260, 50, 772, 51, 8260, 52, 512, 65, 768, 512, 65, 769, 512, 
+    65, 770, 512, 65, 771, 512, 65, 776, 512, 65, 778, 512, 67, 807, 512, 69, 
+    768, 512, 69, 769, 512, 69, 770, 512, 69, 776, 512, 73, 768, 512, 73, 
+    769, 512, 73, 770, 512, 73, 776, 512, 78, 771, 512, 79, 768, 512, 79, 
+    769, 512, 79, 770, 512, 79, 771, 512, 79, 776, 512, 85, 768, 512, 85, 
+    769, 512, 85, 770, 512, 85, 776, 512, 89, 769, 512, 97, 768, 512, 97, 
+    769, 512, 97, 770, 512, 97, 771, 512, 97, 776, 512, 97, 778, 512, 99, 
+    807, 512, 101, 768, 512, 101, 769, 512, 101, 770, 512, 101, 776, 512, 
+    105, 768, 512, 105, 769, 512, 105, 770, 512, 105, 776, 512, 110, 771, 
+    512, 111, 768, 512, 111, 769, 512, 111, 770, 512, 111, 771, 512, 111, 
+    776, 512, 117, 768, 512, 117, 769, 512, 117, 770, 512, 117, 776, 512, 
+    121, 769, 512, 121, 776, 512, 65, 772, 512, 97, 772, 512, 65, 774, 512, 
+    97, 774, 512, 65, 808, 512, 97, 808, 512, 67, 769, 512, 99, 769, 512, 67, 
+    770, 512, 99, 770, 512, 67, 775, 512, 99, 775, 512, 67, 780, 512, 99, 
+    780, 512, 68, 780, 512, 100, 780, 512, 69, 772, 512, 101, 772, 512, 69, 
+    774, 512, 101, 774, 512, 69, 775, 512, 101, 775, 512, 69, 808, 512, 101, 
+    808, 512, 69, 780, 512, 101, 780, 512, 71, 770, 512, 103, 770, 512, 71, 
+    774, 512, 103, 774, 512, 71, 775, 512, 103, 775, 512, 71, 807, 512, 103, 
+    807, 512, 72, 770, 512, 104, 770, 512, 73, 771, 512, 105, 771, 512, 73, 
+    772, 512, 105, 772, 512, 73, 774, 512, 105, 774, 512, 73, 808, 512, 105, 
+    808, 512, 73, 775, 514, 73, 74, 514, 105, 106, 512, 74, 770, 512, 106, 
+    770, 512, 75, 807, 512, 107, 807, 512, 76, 769, 512, 108, 769, 512, 76, 
+    807, 512, 108, 807, 512, 76, 780, 512, 108, 780, 514, 76, 183, 514, 108, 
+    183, 512, 78, 769, 512, 110, 769, 512, 78, 807, 512, 110, 807, 512, 78, 
+    780, 512, 110, 780, 514, 700, 110, 512, 79, 772, 512, 111, 772, 512, 79, 
+    774, 512, 111, 774, 512, 79, 779, 512, 111, 779, 512, 82, 769, 512, 114, 
+    769, 512, 82, 807, 512, 114, 807, 512, 82, 780, 512, 114, 780, 512, 83, 
+    769, 512, 115, 769, 512, 83, 770, 512, 115, 770, 512, 83, 807, 512, 115, 
+    807, 512, 83, 780, 512, 115, 780, 512, 84, 807, 512, 116, 807, 512, 84, 
+    780, 512, 116, 780, 512, 85, 771, 512, 117, 771, 512, 85, 772, 512, 117, 
+    772, 512, 85, 774, 512, 117, 774, 512, 85, 778, 512, 117, 778, 512, 85, 
+    779, 512, 117, 779, 512, 85, 808, 512, 117, 808, 512, 87, 770, 512, 119, 
+    770, 512, 89, 770, 512, 121, 770, 512, 89, 776, 512, 90, 769, 512, 122, 
+    769, 512, 90, 775, 512, 122, 775, 512, 90, 780, 512, 122, 780, 258, 115, 
+    512, 79, 795, 512, 111, 795, 512, 85, 795, 512, 117, 795, 514, 68, 381, 
+    514, 68, 382, 514, 100, 382, 514, 76, 74, 514, 76, 106, 514, 108, 106, 
+    514, 78, 74, 514, 78, 106, 514, 110, 106, 512, 65, 780, 512, 97, 780, 
+    512, 73, 780, 512, 105, 780, 512, 79, 780, 512, 111, 780, 512, 85, 780, 
+    512, 117, 780, 512, 220, 772, 512, 252, 772, 512, 220, 769, 512, 252, 
+    769, 512, 220, 780, 512, 252, 780, 512, 220, 768, 512, 252, 768, 512, 
+    196, 772, 512, 228, 772, 512, 550, 772, 512, 551, 772, 512, 198, 772, 
+    512, 230, 772, 512, 71, 780, 512, 103, 780, 512, 75, 780, 512, 107, 780, 
+    512, 79, 808, 512, 111, 808, 512, 490, 772, 512, 491, 772, 512, 439, 780, 
+    512, 658, 780, 512, 106, 780, 514, 68, 90, 514, 68, 122, 514, 100, 122, 
+    512, 71, 769, 512, 103, 769, 512, 78, 768, 512, 110, 768, 512, 197, 769, 
+    512, 229, 769, 512, 198, 769, 512, 230, 769, 512, 216, 769, 512, 248, 
+    769, 512, 65, 783, 512, 97, 783, 512, 65, 785, 512, 97, 785, 512, 69, 
+    783, 512, 101, 783, 512, 69, 785, 512, 101, 785, 512, 73, 783, 512, 105, 
+    783, 512, 73, 785, 512, 105, 785, 512, 79, 783, 512, 111, 783, 512, 79, 
+    785, 512, 111, 785, 512, 82, 783, 512, 114, 783, 512, 82, 785, 512, 114, 
+    785, 512, 85, 783, 512, 117, 783, 512, 85, 785, 512, 117, 785, 512, 83, 
+    806, 512, 115, 806, 512, 84, 806, 512, 116, 806, 512, 72, 780, 512, 104, 
+    780, 512, 65, 775, 512, 97, 775, 512, 69, 807, 512, 101, 807, 512, 214, 
+    772, 512, 246, 772, 512, 213, 772, 512, 245, 772, 512, 79, 775, 512, 111, 
+    775, 512, 558, 772, 512, 559, 772, 512, 89, 772, 512, 121, 772, 259, 104, 
+    259, 614, 259, 106, 259, 114, 259, 633, 259, 635, 259, 641, 259, 119, 
+    259, 121, 514, 32, 774, 514, 32, 775, 514, 32, 778, 514, 32, 808, 514, 
+    32, 771, 514, 32, 779, 259, 611, 259, 108, 259, 115, 259, 120, 259, 661, 
+    256, 768, 256, 769, 256, 787, 512, 776, 769, 256, 697, 514, 32, 837, 256, 
+    59, 514, 32, 769, 512, 168, 769, 512, 913, 769, 256, 183, 512, 917, 769, 
+    512, 919, 769, 512, 921, 769, 512, 927, 769, 512, 933, 769, 512, 937, 
+    769, 512, 970, 769, 512, 921, 776, 512, 933, 776, 512, 945, 769, 512, 
+    949, 769, 512, 951, 769, 512, 953, 769, 512, 971, 769, 512, 953, 776, 
+    512, 965, 776, 512, 959, 769, 512, 965, 769, 512, 969, 769, 258, 946, 
+    258, 952, 258, 933, 512, 978, 769, 512, 978, 776, 258, 966, 258, 960, 
+    258, 954, 258, 961, 258, 962, 258, 920, 258, 949, 258, 931, 512, 1045, 
+    768, 512, 1045, 776, 512, 1043, 769, 512, 1030, 776, 512, 1050, 769, 512, 
+    1048, 768, 512, 1059, 774, 512, 1048, 774, 512, 1080, 774, 512, 1077, 
+    768, 512, 1077, 776, 512, 1075, 769, 512, 1110, 776, 512, 1082, 769, 512, 
+    1080, 768, 512, 1091, 774, 512, 1140, 783, 512, 1141, 783, 512, 1046, 
+    774, 512, 1078, 774, 512, 1040, 774, 512, 1072, 774, 512, 1040, 776, 512, 
+    1072, 776, 512, 1045, 774, 512, 1077, 774, 512, 1240, 776, 512, 1241, 
+    776, 512, 1046, 776, 512, 1078, 776, 512, 1047, 776, 512, 1079, 776, 512, 
+    1048, 772, 512, 1080, 772, 512, 1048, 776, 512, 1080, 776, 512, 1054, 
+    776, 512, 1086, 776, 512, 1256, 776, 512, 1257, 776, 512, 1069, 776, 512, 
+    1101, 776, 512, 1059, 772, 512, 1091, 772, 512, 1059, 776, 512, 1091, 
+    776, 512, 1059, 779, 512, 1091, 779, 512, 1063, 776, 512, 1095, 776, 512, 
+    1067, 776, 512, 1099, 776, 514, 1381, 1410, 512, 1575, 1619, 512, 1575, 
+    1620, 512, 1608, 1620, 512, 1575, 1621, 512, 1610, 1620, 514, 1575, 1652, 
+    514, 1608, 1652, 514, 1735, 1652, 514, 1610, 1652, 512, 1749, 1620, 512, 
+    1729, 1620, 512, 1746, 1620, 512, 2344, 2364, 512, 2352, 2364, 512, 2355, 
+    2364, 512, 2325, 2364, 512, 2326, 2364, 512, 2327, 2364, 512, 2332, 2364, 
+    512, 2337, 2364, 512, 2338, 2364, 512, 2347, 2364, 512, 2351, 2364, 512, 
+    2503, 2494, 512, 2503, 2519, 512, 2465, 2492, 512, 2466, 2492, 512, 2479, 
+    2492, 512, 2610, 2620, 512, 2616, 2620, 512, 2582, 2620, 512, 2583, 2620, 
+    512, 2588, 2620, 512, 2603, 2620, 512, 2887, 2902, 512, 2887, 2878, 512, 
+    2887, 2903, 512, 2849, 2876, 512, 2850, 2876, 512, 2962, 3031, 512, 3014, 
+    3006, 512, 3015, 3006, 512, 3014, 3031, 512, 3142, 3158, 512, 3263, 3285, 
+    512, 3270, 3285, 512, 3270, 3286, 512, 3270, 3266, 512, 3274, 3285, 512, 
+    3398, 3390, 512, 3399, 3390, 512, 3398, 3415, 512, 3545, 3530, 512, 3545, 
+    3535, 512, 3548, 3530, 512, 3545, 3551, 514, 3661, 3634, 514, 3789, 3762, 
+    514, 3755, 3737, 514, 3755, 3745, 257, 3851, 512, 3906, 4023, 512, 3916, 
+    4023, 512, 3921, 4023, 512, 3926, 4023, 512, 3931, 4023, 512, 3904, 4021, 
+    512, 3953, 3954, 512, 3953, 3956, 512, 4018, 3968, 514, 4018, 3969, 512, 
+    4019, 3968, 514, 4019, 3969, 512, 3953, 3968, 512, 3986, 4023, 512, 3996, 
+    4023, 512, 4001, 4023, 512, 4006, 4023, 512, 4011, 4023, 512, 3984, 4021, 
+    512, 4133, 4142, 259, 4316, 512, 6917, 6965, 512, 6919, 6965, 512, 6921, 
+    6965, 512, 6923, 6965, 512, 6925, 6965, 512, 6929, 6965, 512, 6970, 6965, 
+    512, 6972, 6965, 512, 6974, 6965, 512, 6975, 6965, 512, 6978, 6965, 259, 
+    65, 259, 198, 259, 66, 259, 68, 259, 69, 259, 398, 259, 71, 259, 72, 259, 
+    73, 259, 74, 259, 75, 259, 76, 259, 77, 259, 78, 259, 79, 259, 546, 259, 
+    80, 259, 82, 259, 84, 259, 85, 259, 87, 259, 97, 259, 592, 259, 593, 259, 
+    7426, 259, 98, 259, 100, 259, 101, 259, 601, 259, 603, 259, 604, 259, 
+    103, 259, 107, 259, 109, 259, 331, 259, 111, 259, 596, 259, 7446, 259, 
+    7447, 259, 112, 259, 116, 259, 117, 259, 7453, 259, 623, 259, 118, 259, 
+    7461, 259, 946, 259, 947, 259, 948, 259, 966, 259, 967, 261, 105, 261, 
+    114, 261, 117, 261, 118, 261, 946, 261, 947, 261, 961, 261, 966, 261, 
+    967, 259, 1085, 259, 594, 259, 99, 259, 597, 259, 240, 259, 604, 259, 
+    102, 259, 607, 259, 609, 259, 613, 259, 616, 259, 617, 259, 618, 259, 
+    7547, 259, 669, 259, 621, 259, 7557, 259, 671, 259, 625, 259, 624, 259, 
+    626, 259, 627, 259, 628, 259, 629, 259, 632, 259, 642, 259, 643, 259, 
+    427, 259, 649, 259, 650, 259, 7452, 259, 651, 259, 652, 259, 122, 259, 
+    656, 259, 657, 259, 658, 259, 952, 512, 65, 805, 512, 97, 805, 512, 66, 
+    775, 512, 98, 775, 512, 66, 803, 512, 98, 803, 512, 66, 817, 512, 98, 
+    817, 512, 199, 769, 512, 231, 769, 512, 68, 775, 512, 100, 775, 512, 68, 
+    803, 512, 100, 803, 512, 68, 817, 512, 100, 817, 512, 68, 807, 512, 100, 
+    807, 512, 68, 813, 512, 100, 813, 512, 274, 768, 512, 275, 768, 512, 274, 
+    769, 512, 275, 769, 512, 69, 813, 512, 101, 813, 512, 69, 816, 512, 101, 
+    816, 512, 552, 774, 512, 553, 774, 512, 70, 775, 512, 102, 775, 512, 71, 
+    772, 512, 103, 772, 512, 72, 775, 512, 104, 775, 512, 72, 803, 512, 104, 
+    803, 512, 72, 776, 512, 104, 776, 512, 72, 807, 512, 104, 807, 512, 72, 
+    814, 512, 104, 814, 512, 73, 816, 512, 105, 816, 512, 207, 769, 512, 239, 
+    769, 512, 75, 769, 512, 107, 769, 512, 75, 803, 512, 107, 803, 512, 75, 
+    817, 512, 107, 817, 512, 76, 803, 512, 108, 803, 512, 7734, 772, 512, 
+    7735, 772, 512, 76, 817, 512, 108, 817, 512, 76, 813, 512, 108, 813, 512, 
+    77, 769, 512, 109, 769, 512, 77, 775, 512, 109, 775, 512, 77, 803, 512, 
+    109, 803, 512, 78, 775, 512, 110, 775, 512, 78, 803, 512, 110, 803, 512, 
+    78, 817, 512, 110, 817, 512, 78, 813, 512, 110, 813, 512, 213, 769, 512, 
+    245, 769, 512, 213, 776, 512, 245, 776, 512, 332, 768, 512, 333, 768, 
+    512, 332, 769, 512, 333, 769, 512, 80, 769, 512, 112, 769, 512, 80, 775, 
+    512, 112, 775, 512, 82, 775, 512, 114, 775, 512, 82, 803, 512, 114, 803, 
+    512, 7770, 772, 512, 7771, 772, 512, 82, 817, 512, 114, 817, 512, 83, 
+    775, 512, 115, 775, 512, 83, 803, 512, 115, 803, 512, 346, 775, 512, 347, 
+    775, 512, 352, 775, 512, 353, 775, 512, 7778, 775, 512, 7779, 775, 512, 
+    84, 775, 512, 116, 775, 512, 84, 803, 512, 116, 803, 512, 84, 817, 512, 
+    116, 817, 512, 84, 813, 512, 116, 813, 512, 85, 804, 512, 117, 804, 512, 
+    85, 816, 512, 117, 816, 512, 85, 813, 512, 117, 813, 512, 360, 769, 512, 
+    361, 769, 512, 362, 776, 512, 363, 776, 512, 86, 771, 512, 118, 771, 512, 
+    86, 803, 512, 118, 803, 512, 87, 768, 512, 119, 768, 512, 87, 769, 512, 
+    119, 769, 512, 87, 776, 512, 119, 776, 512, 87, 775, 512, 119, 775, 512, 
+    87, 803, 512, 119, 803, 512, 88, 775, 512, 120, 775, 512, 88, 776, 512, 
+    120, 776, 512, 89, 775, 512, 121, 775, 512, 90, 770, 512, 122, 770, 512, 
+    90, 803, 512, 122, 803, 512, 90, 817, 512, 122, 817, 512, 104, 817, 512, 
+    116, 776, 512, 119, 778, 512, 121, 778, 514, 97, 702, 512, 383, 775, 512, 
+    65, 803, 512, 97, 803, 512, 65, 777, 512, 97, 777, 512, 194, 769, 512, 
+    226, 769, 512, 194, 768, 512, 226, 768, 512, 194, 777, 512, 226, 777, 
+    512, 194, 771, 512, 226, 771, 512, 7840, 770, 512, 7841, 770, 512, 258, 
+    769, 512, 259, 769, 512, 258, 768, 512, 259, 768, 512, 258, 777, 512, 
+    259, 777, 512, 258, 771, 512, 259, 771, 512, 7840, 774, 512, 7841, 774, 
+    512, 69, 803, 512, 101, 803, 512, 69, 777, 512, 101, 777, 512, 69, 771, 
+    512, 101, 771, 512, 202, 769, 512, 234, 769, 512, 202, 768, 512, 234, 
+    768, 512, 202, 777, 512, 234, 777, 512, 202, 771, 512, 234, 771, 512, 
+    7864, 770, 512, 7865, 770, 512, 73, 777, 512, 105, 777, 512, 73, 803, 
+    512, 105, 803, 512, 79, 803, 512, 111, 803, 512, 79, 777, 512, 111, 777, 
+    512, 212, 769, 512, 244, 769, 512, 212, 768, 512, 244, 768, 512, 212, 
+    777, 512, 244, 777, 512, 212, 771, 512, 244, 771, 512, 7884, 770, 512, 
+    7885, 770, 512, 416, 769, 512, 417, 769, 512, 416, 768, 512, 417, 768, 
+    512, 416, 777, 512, 417, 777, 512, 416, 771, 512, 417, 771, 512, 416, 
+    803, 512, 417, 803, 512, 85, 803, 512, 117, 803, 512, 85, 777, 512, 117, 
+    777, 512, 431, 769, 512, 432, 769, 512, 431, 768, 512, 432, 768, 512, 
+    431, 777, 512, 432, 777, 512, 431, 771, 512, 432, 771, 512, 431, 803, 
+    512, 432, 803, 512, 89, 768, 512, 121, 768, 512, 89, 803, 512, 121, 803, 
+    512, 89, 777, 512, 121, 777, 512, 89, 771, 512, 121, 771, 512, 945, 787, 
+    512, 945, 788, 512, 7936, 768, 512, 7937, 768, 512, 7936, 769, 512, 7937, 
+    769, 512, 7936, 834, 512, 7937, 834, 512, 913, 787, 512, 913, 788, 512, 
+    7944, 768, 512, 7945, 768, 512, 7944, 769, 512, 7945, 769, 512, 7944, 
+    834, 512, 7945, 834, 512, 949, 787, 512, 949, 788, 512, 7952, 768, 512, 
+    7953, 768, 512, 7952, 769, 512, 7953, 769, 512, 917, 787, 512, 917, 788, 
+    512, 7960, 768, 512, 7961, 768, 512, 7960, 769, 512, 7961, 769, 512, 951, 
+    787, 512, 951, 788, 512, 7968, 768, 512, 7969, 768, 512, 7968, 769, 512, 
+    7969, 769, 512, 7968, 834, 512, 7969, 834, 512, 919, 787, 512, 919, 788, 
+    512, 7976, 768, 512, 7977, 768, 512, 7976, 769, 512, 7977, 769, 512, 
+    7976, 834, 512, 7977, 834, 512, 953, 787, 512, 953, 788, 512, 7984, 768, 
+    512, 7985, 768, 512, 7984, 769, 512, 7985, 769, 512, 7984, 834, 512, 
+    7985, 834, 512, 921, 787, 512, 921, 788, 512, 7992, 768, 512, 7993, 768, 
+    512, 7992, 769, 512, 7993, 769, 512, 7992, 834, 512, 7993, 834, 512, 959, 
+    787, 512, 959, 788, 512, 8000, 768, 512, 8001, 768, 512, 8000, 769, 512, 
+    8001, 769, 512, 927, 787, 512, 927, 788, 512, 8008, 768, 512, 8009, 768, 
+    512, 8008, 769, 512, 8009, 769, 512, 965, 787, 512, 965, 788, 512, 8016, 
+    768, 512, 8017, 768, 512, 8016, 769, 512, 8017, 769, 512, 8016, 834, 512, 
+    8017, 834, 512, 933, 788, 512, 8025, 768, 512, 8025, 769, 512, 8025, 834, 
+    512, 969, 787, 512, 969, 788, 512, 8032, 768, 512, 8033, 768, 512, 8032, 
+    769, 512, 8033, 769, 512, 8032, 834, 512, 8033, 834, 512, 937, 787, 512, 
+    937, 788, 512, 8040, 768, 512, 8041, 768, 512, 8040, 769, 512, 8041, 769, 
+    512, 8040, 834, 512, 8041, 834, 512, 945, 768, 256, 940, 512, 949, 768, 
+    256, 941, 512, 951, 768, 256, 942, 512, 953, 768, 256, 943, 512, 959, 
+    768, 256, 972, 512, 965, 768, 256, 973, 512, 969, 768, 256, 974, 512, 
+    7936, 837, 512, 7937, 837, 512, 7938, 837, 512, 7939, 837, 512, 7940, 
+    837, 512, 7941, 837, 512, 7942, 837, 512, 7943, 837, 512, 7944, 837, 512, 
+    7945, 837, 512, 7946, 837, 512, 7947, 837, 512, 7948, 837, 512, 7949, 
+    837, 512, 7950, 837, 512, 7951, 837, 512, 7968, 837, 512, 7969, 837, 512, 
+    7970, 837, 512, 7971, 837, 512, 7972, 837, 512, 7973, 837, 512, 7974, 
+    837, 512, 7975, 837, 512, 7976, 837, 512, 7977, 837, 512, 7978, 837, 512, 
+    7979, 837, 512, 7980, 837, 512, 7981, 837, 512, 7982, 837, 512, 7983, 
+    837, 512, 8032, 837, 512, 8033, 837, 512, 8034, 837, 512, 8035, 837, 512, 
+    8036, 837, 512, 8037, 837, 512, 8038, 837, 512, 8039, 837, 512, 8040, 
+    837, 512, 8041, 837, 512, 8042, 837, 512, 8043, 837, 512, 8044, 837, 512, 
+    8045, 837, 512, 8046, 837, 512, 8047, 837, 512, 945, 774, 512, 945, 772, 
+    512, 8048, 837, 512, 945, 837, 512, 940, 837, 512, 945, 834, 512, 8118, 
+    837, 512, 913, 774, 512, 913, 772, 512, 913, 768, 256, 902, 512, 913, 
+    837, 514, 32, 787, 256, 953, 514, 32, 787, 514, 32, 834, 512, 168, 834, 
+    512, 8052, 837, 512, 951, 837, 512, 942, 837, 512, 951, 834, 512, 8134, 
+    837, 512, 917, 768, 256, 904, 512, 919, 768, 256, 905, 512, 919, 837, 
+    512, 8127, 768, 512, 8127, 769, 512, 8127, 834, 512, 953, 774, 512, 953, 
+    772, 512, 970, 768, 256, 912, 512, 953, 834, 512, 970, 834, 512, 921, 
+    774, 512, 921, 772, 512, 921, 768, 256, 906, 512, 8190, 768, 512, 8190, 
+    769, 512, 8190, 834, 512, 965, 774, 512, 965, 772, 512, 971, 768, 256, 
+    944, 512, 961, 787, 512, 961, 788, 512, 965, 834, 512, 971, 834, 512, 
+    933, 774, 512, 933, 772, 512, 933, 768, 256, 910, 512, 929, 788, 512, 
+    168, 768, 256, 901, 256, 96, 512, 8060, 837, 512, 969, 837, 512, 974, 
+    837, 512, 969, 834, 512, 8182, 837, 512, 927, 768, 256, 908, 512, 937, 
+    768, 256, 911, 512, 937, 837, 256, 180, 514, 32, 788, 256, 8194, 256, 
+    8195, 258, 32, 258, 32, 258, 32, 258, 32, 258, 32, 257, 32, 258, 32, 258, 
+    32, 258, 32, 257, 8208, 514, 32, 819, 258, 46, 514, 46, 46, 770, 46, 46, 
+    46, 257, 32, 514, 8242, 8242, 770, 8242, 8242, 8242, 514, 8245, 8245, 
+    770, 8245, 8245, 8245, 514, 33, 33, 514, 32, 773, 514, 63, 63, 514, 63, 
+    33, 514, 33, 63, 1026, 8242, 8242, 8242, 8242, 258, 32, 259, 48, 259, 
+    105, 259, 52, 259, 53, 259, 54, 259, 55, 259, 56, 259, 57, 259, 43, 259, 
+    8722, 259, 61, 259, 40, 259, 41, 259, 110, 261, 48, 261, 49, 261, 50, 
+    261, 51, 261, 52, 261, 53, 261, 54, 261, 55, 261, 56, 261, 57, 261, 43, 
+    261, 8722, 261, 61, 261, 40, 261, 41, 261, 97, 261, 101, 261, 111, 261, 
+    120, 261, 601, 261, 104, 261, 107, 261, 108, 261, 109, 261, 110, 261, 
+    112, 261, 115, 261, 116, 514, 82, 115, 770, 97, 47, 99, 770, 97, 47, 115, 
+    262, 67, 514, 176, 67, 770, 99, 47, 111, 770, 99, 47, 117, 258, 400, 514, 
+    176, 70, 262, 103, 262, 72, 262, 72, 262, 72, 262, 104, 262, 295, 262, 
+    73, 262, 73, 262, 76, 262, 108, 262, 78, 514, 78, 111, 262, 80, 262, 81, 
+    262, 82, 262, 82, 262, 82, 515, 83, 77, 770, 84, 69, 76, 515, 84, 77, 
+    262, 90, 256, 937, 262, 90, 256, 75, 256, 197, 262, 66, 262, 67, 262, 
+    101, 262, 69, 262, 70, 262, 77, 262, 111, 258, 1488, 258, 1489, 258, 
+    1490, 258, 1491, 262, 105, 770, 70, 65, 88, 262, 960, 262, 947, 262, 915, 
+    262, 928, 262, 8721, 262, 68, 262, 100, 262, 101, 262, 105, 262, 106, 
+    772, 49, 8260, 55, 772, 49, 8260, 57, 1028, 49, 8260, 49, 48, 772, 49, 
+    8260, 51, 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, 
+    51, 8260, 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, 
+    772, 49, 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, 
+    56, 516, 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, 
+    258, 86, 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, 
+    258, 88, 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, 
+    77, 258, 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, 
+    514, 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, 
+    120, 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, 
+    100, 258, 109, 772, 48, 8260, 51, 512, 8592, 824, 512, 8594, 824, 512, 
+    8596, 824, 512, 8656, 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 
+    824, 512, 8712, 824, 512, 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 
+    8747, 8747, 770, 8747, 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 
+    8750, 512, 8764, 824, 512, 8771, 824, 512, 8773, 824, 512, 8776, 824, 
+    512, 61, 824, 512, 8801, 824, 512, 8781, 824, 512, 60, 824, 512, 62, 824, 
+    512, 8804, 824, 512, 8805, 824, 512, 8818, 824, 512, 8819, 824, 512, 
+    8822, 824, 512, 8823, 824, 512, 8826, 824, 512, 8827, 824, 512, 8834, 
+    824, 512, 8835, 824, 512, 8838, 824, 512, 8839, 824, 512, 8866, 824, 512, 
+    8872, 824, 512, 8873, 824, 512, 8875, 824, 512, 8828, 824, 512, 8829, 
+    824, 512, 8849, 824, 512, 8850, 824, 512, 8882, 824, 512, 8883, 824, 512, 
+    8884, 824, 512, 8885, 824, 256, 12296, 256, 12297, 263, 49, 263, 50, 263, 
+    51, 263, 52, 263, 53, 263, 54, 263, 55, 263, 56, 263, 57, 519, 49, 48, 
+    519, 49, 49, 519, 49, 50, 519, 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 
+    54, 519, 49, 55, 519, 49, 56, 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 
+    770, 40, 50, 41, 770, 40, 51, 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 
+    40, 54, 41, 770, 40, 55, 41, 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 
+    49, 48, 41, 1026, 40, 49, 49, 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 
+    41, 1026, 40, 49, 52, 41, 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 
+    1026, 40, 49, 55, 41, 1026, 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 
+    40, 50, 48, 41, 514, 49, 46, 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 
+    53, 46, 514, 54, 46, 514, 55, 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 
+    46, 770, 49, 49, 46, 770, 49, 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 
+    770, 49, 53, 46, 770, 49, 54, 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 
+    49, 57, 46, 770, 50, 48, 46, 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 
+    99, 41, 770, 40, 100, 41, 770, 40, 101, 41, 770, 40, 102, 41, 770, 40, 
+    103, 41, 770, 40, 104, 41, 770, 40, 105, 41, 770, 40, 106, 41, 770, 40, 
+    107, 41, 770, 40, 108, 41, 770, 40, 109, 41, 770, 40, 110, 41, 770, 40, 
+    111, 41, 770, 40, 112, 41, 770, 40, 113, 41, 770, 40, 114, 41, 770, 40, 
+    115, 41, 770, 40, 116, 41, 770, 40, 117, 41, 770, 40, 118, 41, 770, 40, 
+    119, 41, 770, 40, 120, 41, 770, 40, 121, 41, 770, 40, 122, 41, 263, 65, 
+    263, 66, 263, 67, 263, 68, 263, 69, 263, 70, 263, 71, 263, 72, 263, 73, 
+    263, 74, 263, 75, 263, 76, 263, 77, 263, 78, 263, 79, 263, 80, 263, 81, 
+    263, 82, 263, 83, 263, 84, 263, 85, 263, 86, 263, 87, 263, 88, 263, 89, 
+    263, 90, 263, 97, 263, 98, 263, 99, 263, 100, 263, 101, 263, 102, 263, 
+    103, 263, 104, 263, 105, 263, 106, 263, 107, 263, 108, 263, 109, 263, 
+    110, 263, 111, 263, 112, 263, 113, 263, 114, 263, 115, 263, 116, 263, 
+    117, 263, 118, 263, 119, 263, 120, 263, 121, 263, 122, 263, 48, 1026, 
+    8747, 8747, 8747, 8747, 770, 58, 58, 61, 514, 61, 61, 770, 61, 61, 61, 
+    512, 10973, 824, 261, 106, 259, 86, 259, 11617, 258, 27597, 258, 40863, 
+    258, 19968, 258, 20008, 258, 20022, 258, 20031, 258, 20057, 258, 20101, 
+    258, 20108, 258, 20128, 258, 20154, 258, 20799, 258, 20837, 258, 20843, 
+    258, 20866, 258, 20886, 258, 20907, 258, 20960, 258, 20981, 258, 20992, 
+    258, 21147, 258, 21241, 258, 21269, 258, 21274, 258, 21304, 258, 21313, 
+    258, 21340, 258, 21353, 258, 21378, 258, 21430, 258, 21448, 258, 21475, 
+    258, 22231, 258, 22303, 258, 22763, 258, 22786, 258, 22794, 258, 22805, 
+    258, 22823, 258, 22899, 258, 23376, 258, 23424, 258, 23544, 258, 23567, 
+    258, 23586, 258, 23608, 258, 23662, 258, 23665, 258, 24027, 258, 24037, 
+    258, 24049, 258, 24062, 258, 24178, 258, 24186, 258, 24191, 258, 24308, 
+    258, 24318, 258, 24331, 258, 24339, 258, 24400, 258, 24417, 258, 24435, 
+    258, 24515, 258, 25096, 258, 25142, 258, 25163, 258, 25903, 258, 25908, 
+    258, 25991, 258, 26007, 258, 26020, 258, 26041, 258, 26080, 258, 26085, 
+    258, 26352, 258, 26376, 258, 26408, 258, 27424, 258, 27490, 258, 27513, 
+    258, 27571, 258, 27595, 258, 27604, 258, 27611, 258, 27663, 258, 27668, 
+    258, 27700, 258, 28779, 258, 29226, 258, 29238, 258, 29243, 258, 29247, 
+    258, 29255, 258, 29273, 258, 29275, 258, 29356, 258, 29572, 258, 29577, 
+    258, 29916, 258, 29926, 258, 29976, 258, 29983, 258, 29992, 258, 30000, 
+    258, 30091, 258, 30098, 258, 30326, 258, 30333, 258, 30382, 258, 30399, 
+    258, 30446, 258, 30683, 258, 30690, 258, 30707, 258, 31034, 258, 31160, 
+    258, 31166, 258, 31348, 258, 31435, 258, 31481, 258, 31859, 258, 31992, 
+    258, 32566, 258, 32593, 258, 32650, 258, 32701, 258, 32769, 258, 32780, 
+    258, 32786, 258, 32819, 258, 32895, 258, 32905, 258, 33251, 258, 33258, 
+    258, 33267, 258, 33276, 258, 33292, 258, 33307, 258, 33311, 258, 33390, 
+    258, 33394, 258, 33400, 258, 34381, 258, 34411, 258, 34880, 258, 34892, 
+    258, 34915, 258, 35198, 258, 35211, 258, 35282, 258, 35328, 258, 35895, 
+    258, 35910, 258, 35925, 258, 35960, 258, 35997, 258, 36196, 258, 36208, 
+    258, 36275, 258, 36523, 258, 36554, 258, 36763, 258, 36784, 258, 36789, 
+    258, 37009, 258, 37193, 258, 37318, 258, 37324, 258, 37329, 258, 38263, 
+    258, 38272, 258, 38428, 258, 38582, 258, 38585, 258, 38632, 258, 38737, 
+    258, 38750, 258, 38754, 258, 38761, 258, 38859, 258, 38893, 258, 38899, 
+    258, 38913, 258, 39080, 258, 39131, 258, 39135, 258, 39318, 258, 39321, 
+    258, 39340, 258, 39592, 258, 39640, 258, 39647, 258, 39717, 258, 39727, 
+    258, 39730, 258, 39740, 258, 39770, 258, 40165, 258, 40565, 258, 40575, 
+    258, 40613, 258, 40635, 258, 40643, 258, 40653, 258, 40657, 258, 40697, 
+    258, 40701, 258, 40718, 258, 40723, 258, 40736, 258, 40763, 258, 40778, 
+    258, 40786, 258, 40845, 258, 40860, 258, 40864, 264, 32, 258, 12306, 258, 
+    21313, 258, 21316, 258, 21317, 512, 12363, 12441, 512, 12365, 12441, 512, 
+    12367, 12441, 512, 12369, 12441, 512, 12371, 12441, 512, 12373, 12441, 
+    512, 12375, 12441, 512, 12377, 12441, 512, 12379, 12441, 512, 12381, 
+    12441, 512, 12383, 12441, 512, 12385, 12441, 512, 12388, 12441, 512, 
+    12390, 12441, 512, 12392, 12441, 512, 12399, 12441, 512, 12399, 12442, 
+    512, 12402, 12441, 512, 12402, 12442, 512, 12405, 12441, 512, 12405, 
+    12442, 512, 12408, 12441, 512, 12408, 12442, 512, 12411, 12441, 512, 
+    12411, 12442, 512, 12358, 12441, 514, 32, 12441, 514, 32, 12442, 512, 
+    12445, 12441, 521, 12424, 12426, 512, 12459, 12441, 512, 12461, 12441, 
+    512, 12463, 12441, 512, 12465, 12441, 512, 12467, 12441, 512, 12469, 
+    12441, 512, 12471, 12441, 512, 12473, 12441, 512, 12475, 12441, 512, 
+    12477, 12441, 512, 12479, 12441, 512, 12481, 12441, 512, 12484, 12441, 
+    512, 12486, 12441, 512, 12488, 12441, 512, 12495, 12441, 512, 12495, 
+    12442, 512, 12498, 12441, 512, 12498, 12442, 512, 12501, 12441, 512, 
+    12501, 12442, 512, 12504, 12441, 512, 12504, 12442, 512, 12507, 12441, 
+    512, 12507, 12442, 512, 12454, 12441, 512, 12527, 12441, 512, 12528, 
+    12441, 512, 12529, 12441, 512, 12530, 12441, 512, 12541, 12441, 521, 
+    12467, 12488, 258, 4352, 258, 4353, 258, 4522, 258, 4354, 258, 4524, 258, 
+    4525, 258, 4355, 258, 4356, 258, 4357, 258, 4528, 258, 4529, 258, 4530, 
+    258, 4531, 258, 4532, 258, 4533, 258, 4378, 258, 4358, 258, 4359, 258, 
+    4360, 258, 4385, 258, 4361, 258, 4362, 258, 4363, 258, 4364, 258, 4365, 
+    258, 4366, 258, 4367, 258, 4368, 258, 4369, 258, 4370, 258, 4449, 258, 
+    4450, 258, 4451, 258, 4452, 258, 4453, 258, 4454, 258, 4455, 258, 4456, 
+    258, 4457, 258, 4458, 258, 4459, 258, 4460, 258, 4461, 258, 4462, 258, 
+    4463, 258, 4464, 258, 4465, 258, 4466, 258, 4467, 258, 4468, 258, 4469, 
+    258, 4448, 258, 4372, 258, 4373, 258, 4551, 258, 4552, 258, 4556, 258, 
+    4558, 258, 4563, 258, 4567, 258, 4569, 258, 4380, 258, 4573, 258, 4575, 
+    258, 4381, 258, 4382, 258, 4384, 258, 4386, 258, 4387, 258, 4391, 258, 
+    4393, 258, 4395, 258, 4396, 258, 4397, 258, 4398, 258, 4399, 258, 4402, 
+    258, 4406, 258, 4416, 258, 4423, 258, 4428, 258, 4593, 258, 4594, 258, 
+    4439, 258, 4440, 258, 4441, 258, 4484, 258, 4485, 258, 4488, 258, 4497, 
+    258, 4498, 258, 4500, 258, 4510, 258, 4513, 259, 19968, 259, 20108, 259, 
+    19977, 259, 22235, 259, 19978, 259, 20013, 259, 19979, 259, 30002, 259, 
+    20057, 259, 19993, 259, 19969, 259, 22825, 259, 22320, 259, 20154, 770, 
+    40, 4352, 41, 770, 40, 4354, 41, 770, 40, 4355, 41, 770, 40, 4357, 41, 
+    770, 40, 4358, 41, 770, 40, 4359, 41, 770, 40, 4361, 41, 770, 40, 4363, 
+    41, 770, 40, 4364, 41, 770, 40, 4366, 41, 770, 40, 4367, 41, 770, 40, 
+    4368, 41, 770, 40, 4369, 41, 770, 40, 4370, 41, 1026, 40, 4352, 4449, 41, 
+    1026, 40, 4354, 4449, 41, 1026, 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 
+    41, 1026, 40, 4358, 4449, 41, 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 
+    4449, 41, 1026, 40, 4363, 4449, 41, 1026, 40, 4364, 4449, 41, 1026, 40, 
+    4366, 4449, 41, 1026, 40, 4367, 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 
+    40, 4369, 4449, 41, 1026, 40, 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 
+    1794, 40, 4363, 4457, 4364, 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 
+    4462, 41, 770, 40, 19968, 41, 770, 40, 20108, 41, 770, 40, 19977, 41, 
+    770, 40, 22235, 41, 770, 40, 20116, 41, 770, 40, 20845, 41, 770, 40, 
+    19971, 41, 770, 40, 20843, 41, 770, 40, 20061, 41, 770, 40, 21313, 41, 
+    770, 40, 26376, 41, 770, 40, 28779, 41, 770, 40, 27700, 41, 770, 40, 
+    26408, 41, 770, 40, 37329, 41, 770, 40, 22303, 41, 770, 40, 26085, 41, 
+    770, 40, 26666, 41, 770, 40, 26377, 41, 770, 40, 31038, 41, 770, 40, 
+    21517, 41, 770, 40, 29305, 41, 770, 40, 36001, 41, 770, 40, 31069, 41, 
+    770, 40, 21172, 41, 770, 40, 20195, 41, 770, 40, 21628, 41, 770, 40, 
+    23398, 41, 770, 40, 30435, 41, 770, 40, 20225, 41, 770, 40, 36039, 41, 
+    770, 40, 21332, 41, 770, 40, 31085, 41, 770, 40, 20241, 41, 770, 40, 
+    33258, 41, 770, 40, 33267, 41, 263, 21839, 263, 24188, 263, 25991, 263, 
+    31631, 778, 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 
+    52, 519, 50, 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 
+    51, 48, 519, 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 
+    263, 4352, 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 
+    4361, 263, 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 
+    263, 4370, 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 
+    4449, 519, 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 
+    519, 4364, 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 
+    4369, 4449, 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 
+    4364, 4462, 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 
+    19977, 263, 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 
+    20061, 263, 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 
+    37329, 263, 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 
+    21517, 263, 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 
+    30007, 263, 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 
+    38917, 263, 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 
+    19979, 263, 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 
+    30435, 263, 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 
+    51, 55, 519, 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 
+    519, 52, 51, 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 
+    56, 519, 52, 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 
+    26376, 514, 52, 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 
+    514, 56, 26376, 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 
+    770, 49, 50, 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 
+    76, 84, 68, 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 
+    263, 12459, 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 
+    263, 12471, 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 
+    263, 12484, 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 
+    263, 12493, 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 
+    263, 12507, 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 
+    263, 12516, 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 
+    263, 12524, 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 
+    1034, 12450, 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, 
+    12450, 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, 
+    12531, 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, 
+    12456, 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, 
+    12458, 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, 
+    1034, 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, 
+    12460, 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, 
+    12462, 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, 
+    12523, 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, 
+    12512, 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, 
+    12525, 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, 
+    12512, 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, 
+    12463, 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, 
+    12490, 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, 
+    12469, 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, 
+    12475, 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, 
+    522, 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, 
+    12494, 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, 
+    12540, 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, 
+    12524, 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, 
+    12523, 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, 
+    12483, 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, 
+    12471, 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, 
+    12540, 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, 
+    12523, 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, 
+    12505, 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, 
+    12488, 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, 
+    12523, 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, 
+    12510, 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, 
+    1290, 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, 
+    12531, 522, 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, 
+    12513, 12460, 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, 
+    12488, 12523, 778, 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, 
+    12518, 12450, 12531, 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, 
+    778, 12523, 12500, 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, 
+    12512, 1290, 12524, 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, 
+    514, 48, 28857, 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, 
+    28857, 514, 53, 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, 
+    514, 57, 28857, 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, 
+    28857, 770, 49, 51, 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, 
+    49, 54, 28857, 770, 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, 
+    28857, 770, 50, 48, 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, 
+    50, 51, 28857, 770, 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, 
+    65, 85, 778, 98, 97, 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, 
+    100, 109, 178, 778, 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, 
+    26157, 21644, 522, 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, 
+    20250, 31038, 522, 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, 
+    522, 107, 65, 522, 75, 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, 
+    1034, 107, 99, 97, 108, 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, 
+    956, 103, 522, 109, 103, 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, 
+    778, 77, 72, 122, 778, 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, 
+    522, 109, 8467, 522, 100, 8467, 522, 107, 8467, 522, 102, 109, 522, 110, 
+    109, 522, 956, 109, 522, 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, 
+    109, 178, 778, 99, 109, 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, 
+    109, 179, 778, 99, 109, 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, 
+    8725, 115, 1034, 109, 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, 
+    77, 80, 97, 778, 71, 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, 
+    115, 1546, 114, 97, 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, 
+    522, 956, 115, 522, 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, 
+    522, 109, 86, 522, 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, 
+    956, 87, 522, 109, 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, 
+    937, 1034, 97, 46, 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, 
+    1034, 67, 8725, 107, 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, 
+    522, 104, 97, 522, 72, 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, 
+    107, 116, 522, 108, 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, 
+    120, 522, 109, 98, 778, 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, 
+    1034, 112, 46, 109, 46, 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, 
+    83, 118, 522, 87, 98, 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, 
+    26085, 514, 50, 26085, 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, 
+    514, 54, 26085, 514, 55, 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, 
+    48, 26085, 770, 49, 49, 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, 
+    770, 49, 52, 26085, 770, 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, 
+    26085, 770, 49, 56, 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, 
+    50, 49, 26085, 770, 50, 50, 26085, 770, 50, 51, 26085, 770, 50, 52, 
+    26085, 770, 50, 53, 26085, 770, 50, 54, 26085, 770, 50, 55, 26085, 770, 
+    50, 56, 26085, 770, 50, 57, 26085, 770, 51, 48, 26085, 770, 51, 49, 
+    26085, 778, 103, 97, 108, 259, 42863, 259, 294, 259, 339, 256, 35912, 
+    256, 26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018, 256, 21477, 
+    256, 40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895, 256, 22856, 
+    256, 25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746, 256, 35064, 
+    256, 37007, 256, 27138, 256, 27931, 256, 28889, 256, 29662, 256, 33853, 
+    256, 37226, 256, 39409, 256, 20098, 256, 21365, 256, 27396, 256, 29211, 
+    256, 34349, 256, 40478, 256, 23888, 256, 28651, 256, 34253, 256, 35172, 
+    256, 25289, 256, 33240, 256, 34847, 256, 24266, 256, 26391, 256, 28010, 
+    256, 29436, 256, 37070, 256, 20358, 256, 20919, 256, 21214, 256, 25796, 
+    256, 27347, 256, 29200, 256, 30439, 256, 32769, 256, 34310, 256, 34396, 
+    256, 36335, 256, 38706, 256, 39791, 256, 40442, 256, 30860, 256, 31103, 
+    256, 32160, 256, 33737, 256, 37636, 256, 40575, 256, 35542, 256, 22751, 
+    256, 24324, 256, 31840, 256, 32894, 256, 29282, 256, 30922, 256, 36034, 
+    256, 38647, 256, 22744, 256, 23650, 256, 27155, 256, 28122, 256, 28431, 
+    256, 32047, 256, 32311, 256, 38475, 256, 21202, 256, 32907, 256, 20956, 
+    256, 20940, 256, 31260, 256, 32190, 256, 33777, 256, 38517, 256, 35712, 
+    256, 25295, 256, 27138, 256, 35582, 256, 20025, 256, 23527, 256, 24594, 
+    256, 29575, 256, 30064, 256, 21271, 256, 30971, 256, 20415, 256, 24489, 
+    256, 19981, 256, 27852, 256, 25976, 256, 32034, 256, 21443, 256, 22622, 
+    256, 30465, 256, 33865, 256, 35498, 256, 27578, 256, 36784, 256, 27784, 
+    256, 25342, 256, 33509, 256, 25504, 256, 30053, 256, 20142, 256, 20841, 
+    256, 20937, 256, 26753, 256, 31975, 256, 33391, 256, 35538, 256, 37327, 
+    256, 21237, 256, 21570, 256, 22899, 256, 24300, 256, 26053, 256, 28670, 
+    256, 31018, 256, 38317, 256, 39530, 256, 40599, 256, 40654, 256, 21147, 
+    256, 26310, 256, 27511, 256, 36706, 256, 24180, 256, 24976, 256, 25088, 
+    256, 25754, 256, 28451, 256, 29001, 256, 29833, 256, 31178, 256, 32244, 
+    256, 32879, 256, 36646, 256, 34030, 256, 36899, 256, 37706, 256, 21015, 
+    256, 21155, 256, 21693, 256, 28872, 256, 35010, 256, 35498, 256, 24265, 
+    256, 24565, 256, 25467, 256, 27566, 256, 31806, 256, 29557, 256, 20196, 
+    256, 22265, 256, 23527, 256, 23994, 256, 24604, 256, 29618, 256, 29801, 
+    256, 32666, 256, 32838, 256, 37428, 256, 38646, 256, 38728, 256, 38936, 
+    256, 20363, 256, 31150, 256, 37300, 256, 38584, 256, 24801, 256, 20102, 
+    256, 20698, 256, 23534, 256, 23615, 256, 26009, 256, 27138, 256, 29134, 
+    256, 30274, 256, 34044, 256, 36988, 256, 40845, 256, 26248, 256, 38446, 
+    256, 21129, 256, 26491, 256, 26611, 256, 27969, 256, 28316, 256, 29705, 
+    256, 30041, 256, 30827, 256, 32016, 256, 39006, 256, 20845, 256, 25134, 
+    256, 38520, 256, 20523, 256, 23833, 256, 28138, 256, 36650, 256, 24459, 
+    256, 24900, 256, 26647, 256, 29575, 256, 38534, 256, 21033, 256, 21519, 
+    256, 23653, 256, 26131, 256, 26446, 256, 26792, 256, 27877, 256, 29702, 
+    256, 30178, 256, 32633, 256, 35023, 256, 35041, 256, 37324, 256, 38626, 
+    256, 21311, 256, 28346, 256, 21533, 256, 29136, 256, 29848, 256, 34298, 
+    256, 38563, 256, 40023, 256, 40607, 256, 26519, 256, 28107, 256, 33256, 
+    256, 31435, 256, 31520, 256, 31890, 256, 29376, 256, 28825, 256, 35672, 
+    256, 20160, 256, 33590, 256, 21050, 256, 20999, 256, 24230, 256, 25299, 
+    256, 31958, 256, 23429, 256, 27934, 256, 26292, 256, 36667, 256, 34892, 
+    256, 38477, 256, 35211, 256, 24275, 256, 20800, 256, 21952, 256, 22618, 
+    256, 26228, 256, 20958, 256, 29482, 256, 30410, 256, 31036, 256, 31070, 
+    256, 31077, 256, 31119, 256, 38742, 256, 31934, 256, 32701, 256, 34322, 
+    256, 35576, 256, 36920, 256, 37117, 256, 39151, 256, 39164, 256, 39208, 
+    256, 40372, 256, 37086, 256, 38583, 256, 20398, 256, 20711, 256, 20813, 
+    256, 21193, 256, 21220, 256, 21329, 256, 21917, 256, 22022, 256, 22120, 
+    256, 22592, 256, 22696, 256, 23652, 256, 23662, 256, 24724, 256, 24936, 
+    256, 24974, 256, 25074, 256, 25935, 256, 26082, 256, 26257, 256, 26757, 
+    256, 28023, 256, 28186, 256, 28450, 256, 29038, 256, 29227, 256, 29730, 
+    256, 30865, 256, 31038, 256, 31049, 256, 31048, 256, 31056, 256, 31062, 
+    256, 31069, 256, 31117, 256, 31118, 256, 31296, 256, 31361, 256, 31680, 
+    256, 32244, 256, 32265, 256, 32321, 256, 32626, 256, 32773, 256, 33261, 
+    256, 33401, 256, 33401, 256, 33879, 256, 35088, 256, 35222, 256, 35585, 
+    256, 35641, 256, 36051, 256, 36104, 256, 36790, 256, 36920, 256, 38627, 
+    256, 38911, 256, 38971, 256, 24693, 256, 55376, 57070, 256, 33304, 256, 
+    20006, 256, 20917, 256, 20840, 256, 20352, 256, 20805, 256, 20864, 256, 
+    21191, 256, 21242, 256, 21917, 256, 21845, 256, 21913, 256, 21986, 256, 
+    22618, 256, 22707, 256, 22852, 256, 22868, 256, 23138, 256, 23336, 256, 
+    24274, 256, 24281, 256, 24425, 256, 24493, 256, 24792, 256, 24910, 256, 
+    24840, 256, 24974, 256, 24928, 256, 25074, 256, 25140, 256, 25540, 256, 
+    25628, 256, 25682, 256, 25942, 256, 26228, 256, 26391, 256, 26395, 256, 
+    26454, 256, 27513, 256, 27578, 256, 27969, 256, 28379, 256, 28363, 256, 
+    28450, 256, 28702, 256, 29038, 256, 30631, 256, 29237, 256, 29359, 256, 
+    29482, 256, 29809, 256, 29958, 256, 30011, 256, 30237, 256, 30239, 256, 
+    30410, 256, 30427, 256, 30452, 256, 30538, 256, 30528, 256, 30924, 256, 
+    31409, 256, 31680, 256, 31867, 256, 32091, 256, 32244, 256, 32574, 256, 
+    32773, 256, 33618, 256, 33775, 256, 34681, 256, 35137, 256, 35206, 256, 
+    35222, 256, 35519, 256, 35576, 256, 35531, 256, 35585, 256, 35582, 256, 
+    35565, 256, 35641, 256, 35722, 256, 36104, 256, 36664, 256, 36978, 256, 
+    37273, 256, 37494, 256, 38524, 256, 38627, 256, 38742, 256, 38875, 256, 
+    38911, 256, 38923, 256, 38971, 256, 39698, 256, 40860, 256, 55370, 56394, 
+    256, 55370, 56388, 256, 55372, 57301, 256, 15261, 256, 16408, 256, 16441, 
+    256, 55380, 56905, 256, 55383, 56528, 256, 55391, 57043, 256, 40771, 256, 
+    40846, 514, 102, 102, 514, 102, 105, 514, 102, 108, 770, 102, 102, 105, 
+    770, 102, 102, 108, 514, 383, 116, 514, 115, 116, 514, 1396, 1398, 514, 
+    1396, 1381, 514, 1396, 1387, 514, 1406, 1398, 514, 1396, 1389, 512, 1497, 
+    1460, 512, 1522, 1463, 262, 1506, 262, 1488, 262, 1491, 262, 1492, 262, 
+    1499, 262, 1500, 262, 1501, 262, 1512, 262, 1514, 262, 43, 512, 1513, 
+    1473, 512, 1513, 1474, 512, 64329, 1473, 512, 64329, 1474, 512, 1488, 
+    1463, 512, 1488, 1464, 512, 1488, 1468, 512, 1489, 1468, 512, 1490, 1468, 
+    512, 1491, 1468, 512, 1492, 1468, 512, 1493, 1468, 512, 1494, 1468, 512, 
+    1496, 1468, 512, 1497, 1468, 512, 1498, 1468, 512, 1499, 1468, 512, 1500, 
+    1468, 512, 1502, 1468, 512, 1504, 1468, 512, 1505, 1468, 512, 1507, 1468, 
+    512, 1508, 1468, 512, 1510, 1468, 512, 1511, 1468, 512, 1512, 1468, 512, 
+    1513, 1468, 512, 1514, 1468, 512, 1493, 1465, 512, 1489, 1471, 512, 1499, 
+    1471, 512, 1508, 1471, 514, 1488, 1500, 267, 1649, 268, 1649, 267, 1659, 
+    268, 1659, 269, 1659, 270, 1659, 267, 1662, 268, 1662, 269, 1662, 270, 
+    1662, 267, 1664, 268, 1664, 269, 1664, 270, 1664, 267, 1658, 268, 1658, 
+    269, 1658, 270, 1658, 267, 1663, 268, 1663, 269, 1663, 270, 1663, 267, 
+    1657, 268, 1657, 269, 1657, 270, 1657, 267, 1700, 268, 1700, 269, 1700, 
+    270, 1700, 267, 1702, 268, 1702, 269, 1702, 270, 1702, 267, 1668, 268, 
+    1668, 269, 1668, 270, 1668, 267, 1667, 268, 1667, 269, 1667, 270, 1667, 
+    267, 1670, 268, 1670, 269, 1670, 270, 1670, 267, 1671, 268, 1671, 269, 
+    1671, 270, 1671, 267, 1677, 268, 1677, 267, 1676, 268, 1676, 267, 1678, 
+    268, 1678, 267, 1672, 268, 1672, 267, 1688, 268, 1688, 267, 1681, 268, 
+    1681, 267, 1705, 268, 1705, 269, 1705, 270, 1705, 267, 1711, 268, 1711, 
+    269, 1711, 270, 1711, 267, 1715, 268, 1715, 269, 1715, 270, 1715, 267, 
+    1713, 268, 1713, 269, 1713, 270, 1713, 267, 1722, 268, 1722, 267, 1723, 
+    268, 1723, 269, 1723, 270, 1723, 267, 1728, 268, 1728, 267, 1729, 268, 
+    1729, 269, 1729, 270, 1729, 267, 1726, 268, 1726, 269, 1726, 270, 1726, 
+    267, 1746, 268, 1746, 267, 1747, 268, 1747, 267, 1709, 268, 1709, 269, 
+    1709, 270, 1709, 267, 1735, 268, 1735, 267, 1734, 268, 1734, 267, 1736, 
+    268, 1736, 267, 1655, 267, 1739, 268, 1739, 267, 1733, 268, 1733, 267, 
+    1737, 268, 1737, 267, 1744, 268, 1744, 269, 1744, 270, 1744, 269, 1609, 
+    270, 1609, 523, 1574, 1575, 524, 1574, 1575, 523, 1574, 1749, 524, 1574, 
+    1749, 523, 1574, 1608, 524, 1574, 1608, 523, 1574, 1735, 524, 1574, 1735, 
+    523, 1574, 1734, 524, 1574, 1734, 523, 1574, 1736, 524, 1574, 1736, 523, 
+    1574, 1744, 524, 1574, 1744, 525, 1574, 1744, 523, 1574, 1609, 524, 1574, 
+    1609, 525, 1574, 1609, 267, 1740, 268, 1740, 269, 1740, 270, 1740, 523, 
+    1574, 1580, 523, 1574, 1581, 523, 1574, 1605, 523, 1574, 1609, 523, 1574, 
+    1610, 523, 1576, 1580, 523, 1576, 1581, 523, 1576, 1582, 523, 1576, 1605, 
+    523, 1576, 1609, 523, 1576, 1610, 523, 1578, 1580, 523, 1578, 1581, 523, 
+    1578, 1582, 523, 1578, 1605, 523, 1578, 1609, 523, 1578, 1610, 523, 1579, 
+    1580, 523, 1579, 1605, 523, 1579, 1609, 523, 1579, 1610, 523, 1580, 1581, 
+    523, 1580, 1605, 523, 1581, 1580, 523, 1581, 1605, 523, 1582, 1580, 523, 
+    1582, 1581, 523, 1582, 1605, 523, 1587, 1580, 523, 1587, 1581, 523, 1587, 
+    1582, 523, 1587, 1605, 523, 1589, 1581, 523, 1589, 1605, 523, 1590, 1580, 
+    523, 1590, 1581, 523, 1590, 1582, 523, 1590, 1605, 523, 1591, 1581, 523, 
+    1591, 1605, 523, 1592, 1605, 523, 1593, 1580, 523, 1593, 1605, 523, 1594, 
+    1580, 523, 1594, 1605, 523, 1601, 1580, 523, 1601, 1581, 523, 1601, 1582, 
+    523, 1601, 1605, 523, 1601, 1609, 523, 1601, 1610, 523, 1602, 1581, 523, 
+    1602, 1605, 523, 1602, 1609, 523, 1602, 1610, 523, 1603, 1575, 523, 1603, 
+    1580, 523, 1603, 1581, 523, 1603, 1582, 523, 1603, 1604, 523, 1603, 1605, 
+    523, 1603, 1609, 523, 1603, 1610, 523, 1604, 1580, 523, 1604, 1581, 523, 
+    1604, 1582, 523, 1604, 1605, 523, 1604, 1609, 523, 1604, 1610, 523, 1605, 
+    1580, 523, 1605, 1581, 523, 1605, 1582, 523, 1605, 1605, 523, 1605, 1609, 
+    523, 1605, 1610, 523, 1606, 1580, 523, 1606, 1581, 523, 1606, 1582, 523, 
+    1606, 1605, 523, 1606, 1609, 523, 1606, 1610, 523, 1607, 1580, 523, 1607, 
+    1605, 523, 1607, 1609, 523, 1607, 1610, 523, 1610, 1580, 523, 1610, 1581, 
+    523, 1610, 1582, 523, 1610, 1605, 523, 1610, 1609, 523, 1610, 1610, 523, 
+    1584, 1648, 523, 1585, 1648, 523, 1609, 1648, 779, 32, 1612, 1617, 779, 
+    32, 1613, 1617, 779, 32, 1614, 1617, 779, 32, 1615, 1617, 779, 32, 1616, 
+    1617, 779, 32, 1617, 1648, 524, 1574, 1585, 524, 1574, 1586, 524, 1574, 
+    1605, 524, 1574, 1606, 524, 1574, 1609, 524, 1574, 1610, 524, 1576, 1585, 
+    524, 1576, 1586, 524, 1576, 1605, 524, 1576, 1606, 524, 1576, 1609, 524, 
+    1576, 1610, 524, 1578, 1585, 524, 1578, 1586, 524, 1578, 1605, 524, 1578, 
+    1606, 524, 1578, 1609, 524, 1578, 1610, 524, 1579, 1585, 524, 1579, 1586, 
+    524, 1579, 1605, 524, 1579, 1606, 524, 1579, 1609, 524, 1579, 1610, 524, 
+    1601, 1609, 524, 1601, 1610, 524, 1602, 1609, 524, 1602, 1610, 524, 1603, 
+    1575, 524, 1603, 1604, 524, 1603, 1605, 524, 1603, 1609, 524, 1603, 1610, 
+    524, 1604, 1605, 524, 1604, 1609, 524, 1604, 1610, 524, 1605, 1575, 524, 
+    1605, 1605, 524, 1606, 1585, 524, 1606, 1586, 524, 1606, 1605, 524, 1606, 
+    1606, 524, 1606, 1609, 524, 1606, 1610, 524, 1609, 1648, 524, 1610, 1585, 
+    524, 1610, 1586, 524, 1610, 1605, 524, 1610, 1606, 524, 1610, 1609, 524, 
+    1610, 1610, 525, 1574, 1580, 525, 1574, 1581, 525, 1574, 1582, 525, 1574, 
+    1605, 525, 1574, 1607, 525, 1576, 1580, 525, 1576, 1581, 525, 1576, 1582, 
+    525, 1576, 1605, 525, 1576, 1607, 525, 1578, 1580, 525, 1578, 1581, 525, 
+    1578, 1582, 525, 1578, 1605, 525, 1578, 1607, 525, 1579, 1605, 525, 1580, 
+    1581, 525, 1580, 1605, 525, 1581, 1580, 525, 1581, 1605, 525, 1582, 1580, 
+    525, 1582, 1605, 525, 1587, 1580, 525, 1587, 1581, 525, 1587, 1582, 525, 
+    1587, 1605, 525, 1589, 1581, 525, 1589, 1582, 525, 1589, 1605, 525, 1590, 
+    1580, 525, 1590, 1581, 525, 1590, 1582, 525, 1590, 1605, 525, 1591, 1581, 
+    525, 1592, 1605, 525, 1593, 1580, 525, 1593, 1605, 525, 1594, 1580, 525, 
+    1594, 1605, 525, 1601, 1580, 525, 1601, 1581, 525, 1601, 1582, 525, 1601, 
+    1605, 525, 1602, 1581, 525, 1602, 1605, 525, 1603, 1580, 525, 1603, 1581, 
+    525, 1603, 1582, 525, 1603, 1604, 525, 1603, 1605, 525, 1604, 1580, 525, 
+    1604, 1581, 525, 1604, 1582, 525, 1604, 1605, 525, 1604, 1607, 525, 1605, 
+    1580, 525, 1605, 1581, 525, 1605, 1582, 525, 1605, 1605, 525, 1606, 1580, 
+    525, 1606, 1581, 525, 1606, 1582, 525, 1606, 1605, 525, 1606, 1607, 525, 
+    1607, 1580, 525, 1607, 1605, 525, 1607, 1648, 525, 1610, 1580, 525, 1610, 
+    1581, 525, 1610, 1582, 525, 1610, 1605, 525, 1610, 1607, 526, 1574, 1605, 
+    526, 1574, 1607, 526, 1576, 1605, 526, 1576, 1607, 526, 1578, 1605, 526, 
+    1578, 1607, 526, 1579, 1605, 526, 1579, 1607, 526, 1587, 1605, 526, 1587, 
+    1607, 526, 1588, 1605, 526, 1588, 1607, 526, 1603, 1604, 526, 1603, 1605, 
+    526, 1604, 1605, 526, 1606, 1605, 526, 1606, 1607, 526, 1610, 1605, 526, 
+    1610, 1607, 782, 1600, 1614, 1617, 782, 1600, 1615, 1617, 782, 1600, 
+    1616, 1617, 523, 1591, 1609, 523, 1591, 1610, 523, 1593, 1609, 523, 1593, 
+    1610, 523, 1594, 1609, 523, 1594, 1610, 523, 1587, 1609, 523, 1587, 1610, 
+    523, 1588, 1609, 523, 1588, 1610, 523, 1581, 1609, 523, 1581, 1610, 523, 
+    1580, 1609, 523, 1580, 1610, 523, 1582, 1609, 523, 1582, 1610, 523, 1589, 
+    1609, 523, 1589, 1610, 523, 1590, 1609, 523, 1590, 1610, 523, 1588, 1580, 
+    523, 1588, 1581, 523, 1588, 1582, 523, 1588, 1605, 523, 1588, 1585, 523, 
+    1587, 1585, 523, 1589, 1585, 523, 1590, 1585, 524, 1591, 1609, 524, 1591, 
+    1610, 524, 1593, 1609, 524, 1593, 1610, 524, 1594, 1609, 524, 1594, 1610, 
+    524, 1587, 1609, 524, 1587, 1610, 524, 1588, 1609, 524, 1588, 1610, 524, 
+    1581, 1609, 524, 1581, 1610, 524, 1580, 1609, 524, 1580, 1610, 524, 1582, 
+    1609, 524, 1582, 1610, 524, 1589, 1609, 524, 1589, 1610, 524, 1590, 1609, 
+    524, 1590, 1610, 524, 1588, 1580, 524, 1588, 1581, 524, 1588, 1582, 524, 
+    1588, 1605, 524, 1588, 1585, 524, 1587, 1585, 524, 1589, 1585, 524, 1590, 
+    1585, 525, 1588, 1580, 525, 1588, 1581, 525, 1588, 1582, 525, 1588, 1605, 
+    525, 1587, 1607, 525, 1588, 1607, 525, 1591, 1605, 526, 1587, 1580, 526, 
+    1587, 1581, 526, 1587, 1582, 526, 1588, 1580, 526, 1588, 1581, 526, 1588, 
+    1582, 526, 1591, 1605, 526, 1592, 1605, 524, 1575, 1611, 523, 1575, 1611, 
+    781, 1578, 1580, 1605, 780, 1578, 1581, 1580, 781, 1578, 1581, 1580, 781, 
+    1578, 1581, 1605, 781, 1578, 1582, 1605, 781, 1578, 1605, 1580, 781, 
+    1578, 1605, 1581, 781, 1578, 1605, 1582, 780, 1580, 1605, 1581, 781, 
+    1580, 1605, 1581, 780, 1581, 1605, 1610, 780, 1581, 1605, 1609, 781, 
+    1587, 1581, 1580, 781, 1587, 1580, 1581, 780, 1587, 1580, 1609, 780, 
+    1587, 1605, 1581, 781, 1587, 1605, 1581, 781, 1587, 1605, 1580, 780, 
+    1587, 1605, 1605, 781, 1587, 1605, 1605, 780, 1589, 1581, 1581, 781, 
+    1589, 1581, 1581, 780, 1589, 1605, 1605, 780, 1588, 1581, 1605, 781, 
+    1588, 1581, 1605, 780, 1588, 1580, 1610, 780, 1588, 1605, 1582, 781, 
+    1588, 1605, 1582, 780, 1588, 1605, 1605, 781, 1588, 1605, 1605, 780, 
+    1590, 1581, 1609, 780, 1590, 1582, 1605, 781, 1590, 1582, 1605, 780, 
+    1591, 1605, 1581, 781, 1591, 1605, 1581, 781, 1591, 1605, 1605, 780, 
+    1591, 1605, 1610, 780, 1593, 1580, 1605, 780, 1593, 1605, 1605, 781, 
+    1593, 1605, 1605, 780, 1593, 1605, 1609, 780, 1594, 1605, 1605, 780, 
+    1594, 1605, 1610, 780, 1594, 1605, 1609, 780, 1601, 1582, 1605, 781, 
+    1601, 1582, 1605, 780, 1602, 1605, 1581, 780, 1602, 1605, 1605, 780, 
+    1604, 1581, 1605, 780, 1604, 1581, 1610, 780, 1604, 1581, 1609, 781, 
+    1604, 1580, 1580, 780, 1604, 1580, 1580, 780, 1604, 1582, 1605, 781, 
+    1604, 1582, 1605, 780, 1604, 1605, 1581, 781, 1604, 1605, 1581, 781, 
+    1605, 1581, 1580, 781, 1605, 1581, 1605, 780, 1605, 1581, 1610, 781, 
+    1605, 1580, 1581, 781, 1605, 1580, 1605, 781, 1605, 1582, 1580, 781, 
+    1605, 1582, 1605, 781, 1605, 1580, 1582, 781, 1607, 1605, 1580, 781, 
+    1607, 1605, 1605, 781, 1606, 1581, 1605, 780, 1606, 1581, 1609, 780, 
+    1606, 1580, 1605, 781, 1606, 1580, 1605, 780, 1606, 1580, 1609, 780, 
+    1606, 1605, 1610, 780, 1606, 1605, 1609, 780, 1610, 1605, 1605, 781, 
+    1610, 1605, 1605, 780, 1576, 1582, 1610, 780, 1578, 1580, 1610, 780, 
+    1578, 1580, 1609, 780, 1578, 1582, 1610, 780, 1578, 1582, 1609, 780, 
+    1578, 1605, 1610, 780, 1578, 1605, 1609, 780, 1580, 1605, 1610, 780, 
+    1580, 1581, 1609, 780, 1580, 1605, 1609, 780, 1587, 1582, 1609, 780, 
+    1589, 1581, 1610, 780, 1588, 1581, 1610, 780, 1590, 1581, 1610, 780, 
+    1604, 1580, 1610, 780, 1604, 1605, 1610, 780, 1610, 1581, 1610, 780, 
+    1610, 1580, 1610, 780, 1610, 1605, 1610, 780, 1605, 1605, 1610, 780, 
+    1602, 1605, 1610, 780, 1606, 1581, 1610, 781, 1602, 1605, 1581, 781, 
+    1604, 1581, 1605, 780, 1593, 1605, 1610, 780, 1603, 1605, 1610, 781, 
+    1606, 1580, 1581, 780, 1605, 1582, 1610, 781, 1604, 1580, 1605, 780, 
+    1603, 1605, 1605, 780, 1604, 1580, 1605, 780, 1606, 1580, 1581, 780, 
+    1580, 1581, 1610, 780, 1581, 1580, 1610, 780, 1605, 1580, 1610, 780, 
+    1601, 1605, 1610, 780, 1576, 1581, 1610, 781, 1603, 1605, 1605, 781, 
+    1593, 1580, 1605, 781, 1589, 1605, 1605, 780, 1587, 1582, 1610, 780, 
+    1606, 1580, 1610, 779, 1589, 1604, 1746, 779, 1602, 1604, 1746, 1035, 
+    1575, 1604, 1604, 1607, 1035, 1575, 1603, 1576, 1585, 1035, 1605, 1581, 
+    1605, 1583, 1035, 1589, 1604, 1593, 1605, 1035, 1585, 1587, 1608, 1604, 
+    1035, 1593, 1604, 1610, 1607, 1035, 1608, 1587, 1604, 1605, 779, 1589, 
+    1604, 1609, 4619, 1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, 32, 1593, 
+    1604, 1610, 1607, 32, 1608, 1587, 1604, 1605, 2059, 1580, 1604, 32, 1580, 
+    1604, 1575, 1604, 1607, 1035, 1585, 1740, 1575, 1604, 265, 44, 265, 
+    12289, 265, 12290, 265, 58, 265, 59, 265, 33, 265, 63, 265, 12310, 265, 
+    12311, 265, 8230, 265, 8229, 265, 8212, 265, 8211, 265, 95, 265, 95, 265, 
+    40, 265, 41, 265, 123, 265, 125, 265, 12308, 265, 12309, 265, 12304, 265, 
+    12305, 265, 12298, 265, 12299, 265, 12296, 265, 12297, 265, 12300, 265, 
+    12301, 265, 12302, 265, 12303, 265, 91, 265, 93, 258, 8254, 258, 8254, 
+    258, 8254, 258, 8254, 258, 95, 258, 95, 258, 95, 271, 44, 271, 12289, 
+    271, 46, 271, 59, 271, 58, 271, 63, 271, 33, 271, 8212, 271, 40, 271, 41, 
+    271, 123, 271, 125, 271, 12308, 271, 12309, 271, 35, 271, 38, 271, 42, 
+    271, 43, 271, 45, 271, 60, 271, 62, 271, 61, 271, 92, 271, 36, 271, 37, 
+    271, 64, 523, 32, 1611, 526, 1600, 1611, 523, 32, 1612, 523, 32, 1613, 
+    523, 32, 1614, 526, 1600, 1614, 523, 32, 1615, 526, 1600, 1615, 523, 32, 
+    1616, 526, 1600, 1616, 523, 32, 1617, 526, 1600, 1617, 523, 32, 1618, 
+    526, 1600, 1618, 267, 1569, 267, 1570, 268, 1570, 267, 1571, 268, 1571, 
+    267, 1572, 268, 1572, 267, 1573, 268, 1573, 267, 1574, 268, 1574, 269, 
+    1574, 270, 1574, 267, 1575, 268, 1575, 267, 1576, 268, 1576, 269, 1576, 
+    270, 1576, 267, 1577, 268, 1577, 267, 1578, 268, 1578, 269, 1578, 270, 
+    1578, 267, 1579, 268, 1579, 269, 1579, 270, 1579, 267, 1580, 268, 1580, 
+    269, 1580, 270, 1580, 267, 1581, 268, 1581, 269, 1581, 270, 1581, 267, 
+    1582, 268, 1582, 269, 1582, 270, 1582, 267, 1583, 268, 1583, 267, 1584, 
+    268, 1584, 267, 1585, 268, 1585, 267, 1586, 268, 1586, 267, 1587, 268, 
+    1587, 269, 1587, 270, 1587, 267, 1588, 268, 1588, 269, 1588, 270, 1588, 
+    267, 1589, 268, 1589, 269, 1589, 270, 1589, 267, 1590, 268, 1590, 269, 
+    1590, 270, 1590, 267, 1591, 268, 1591, 269, 1591, 270, 1591, 267, 1592, 
+    268, 1592, 269, 1592, 270, 1592, 267, 1593, 268, 1593, 269, 1593, 270, 
+    1593, 267, 1594, 268, 1594, 269, 1594, 270, 1594, 267, 1601, 268, 1601, 
+    269, 1601, 270, 1601, 267, 1602, 268, 1602, 269, 1602, 270, 1602, 267, 
+    1603, 268, 1603, 269, 1603, 270, 1603, 267, 1604, 268, 1604, 269, 1604, 
+    270, 1604, 267, 1605, 268, 1605, 269, 1605, 270, 1605, 267, 1606, 268, 
+    1606, 269, 1606, 270, 1606, 267, 1607, 268, 1607, 269, 1607, 270, 1607, 
+    267, 1608, 268, 1608, 267, 1609, 268, 1609, 267, 1610, 268, 1610, 269, 
+    1610, 270, 1610, 523, 1604, 1570, 524, 1604, 1570, 523, 1604, 1571, 524, 
+    1604, 1571, 523, 1604, 1573, 524, 1604, 1573, 523, 1604, 1575, 524, 1604, 
+    1575, 264, 33, 264, 34, 264, 35, 264, 36, 264, 37, 264, 38, 264, 39, 264, 
+    40, 264, 41, 264, 42, 264, 43, 264, 44, 264, 45, 264, 46, 264, 47, 264, 
+    48, 264, 49, 264, 50, 264, 51, 264, 52, 264, 53, 264, 54, 264, 55, 264, 
+    56, 264, 57, 264, 58, 264, 59, 264, 60, 264, 61, 264, 62, 264, 63, 264, 
+    64, 264, 65, 264, 66, 264, 67, 264, 68, 264, 69, 264, 70, 264, 71, 264, 
+    72, 264, 73, 264, 74, 264, 75, 264, 76, 264, 77, 264, 78, 264, 79, 264, 
+    80, 264, 81, 264, 82, 264, 83, 264, 84, 264, 85, 264, 86, 264, 87, 264, 
+    88, 264, 89, 264, 90, 264, 91, 264, 92, 264, 93, 264, 94, 264, 95, 264, 
+    96, 264, 97, 264, 98, 264, 99, 264, 100, 264, 101, 264, 102, 264, 103, 
+    264, 104, 264, 105, 264, 106, 264, 107, 264, 108, 264, 109, 264, 110, 
+    264, 111, 264, 112, 264, 113, 264, 114, 264, 115, 264, 116, 264, 117, 
+    264, 118, 264, 119, 264, 120, 264, 121, 264, 122, 264, 123, 264, 124, 
+    264, 125, 264, 126, 264, 10629, 264, 10630, 272, 12290, 272, 12300, 272, 
+    12301, 272, 12289, 272, 12539, 272, 12530, 272, 12449, 272, 12451, 272, 
+    12453, 272, 12455, 272, 12457, 272, 12515, 272, 12517, 272, 12519, 272, 
+    12483, 272, 12540, 272, 12450, 272, 12452, 272, 12454, 272, 12456, 272, 
+    12458, 272, 12459, 272, 12461, 272, 12463, 272, 12465, 272, 12467, 272, 
+    12469, 272, 12471, 272, 12473, 272, 12475, 272, 12477, 272, 12479, 272, 
+    12481, 272, 12484, 272, 12486, 272, 12488, 272, 12490, 272, 12491, 272, 
+    12492, 272, 12493, 272, 12494, 272, 12495, 272, 12498, 272, 12501, 272, 
+    12504, 272, 12507, 272, 12510, 272, 12511, 272, 12512, 272, 12513, 272, 
+    12514, 272, 12516, 272, 12518, 272, 12520, 272, 12521, 272, 12522, 272, 
+    12523, 272, 12524, 272, 12525, 272, 12527, 272, 12531, 272, 12441, 272, 
+    12442, 272, 12644, 272, 12593, 272, 12594, 272, 12595, 272, 12596, 272, 
+    12597, 272, 12598, 272, 12599, 272, 12600, 272, 12601, 272, 12602, 272, 
+    12603, 272, 12604, 272, 12605, 272, 12606, 272, 12607, 272, 12608, 272, 
+    12609, 272, 12610, 272, 12611, 272, 12612, 272, 12613, 272, 12614, 272, 
+    12615, 272, 12616, 272, 12617, 272, 12618, 272, 12619, 272, 12620, 272, 
+    12621, 272, 12622, 272, 12623, 272, 12624, 272, 12625, 272, 12626, 272, 
+    12627, 272, 12628, 272, 12629, 272, 12630, 272, 12631, 272, 12632, 272, 
+    12633, 272, 12634, 272, 12635, 272, 12636, 272, 12637, 272, 12638, 272, 
+    12639, 272, 12640, 272, 12641, 272, 12642, 272, 12643, 264, 162, 264, 
+    163, 264, 172, 264, 175, 264, 166, 264, 165, 264, 8361, 272, 9474, 272, 
+    8592, 272, 8593, 272, 8594, 272, 8595, 272, 9632, 272, 9675, 512, 55300, 
+    56473, 55300, 56506, 512, 55300, 56475, 55300, 56506, 512, 55300, 56485, 
+    55300, 56506, 512, 55300, 56625, 55300, 56615, 512, 55300, 56626, 55300, 
+    56615, 512, 55348, 56663, 55348, 56677, 512, 55348, 56664, 55348, 56677, 
+    512, 55348, 56671, 55348, 56686, 512, 55348, 56671, 55348, 56687, 512, 
+    55348, 56671, 55348, 56688, 512, 55348, 56671, 55348, 56689, 512, 55348, 
+    56671, 55348, 56690, 512, 55348, 56761, 55348, 56677, 512, 55348, 56762, 
+    55348, 56677, 512, 55348, 56763, 55348, 56686, 512, 55348, 56764, 55348, 
+    56686, 512, 55348, 56763, 55348, 56687, 512, 55348, 56764, 55348, 56687, 
+    262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 
+    262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 
+    262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 
+    262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 
+    102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 
+    109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 
+    116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 
+    262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 
+    262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 
+    262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 
+    262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 
+    103, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 
+    111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 
+    118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 
+    262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 
+    262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 
+    262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 
+    262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 
+    105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 
+    112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 
+    119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 67, 262, 68, 262, 71, 
+    262, 74, 262, 75, 262, 78, 262, 79, 262, 80, 262, 81, 262, 83, 262, 84, 
+    262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 
+    262, 99, 262, 100, 262, 102, 262, 104, 262, 105, 262, 106, 262, 107, 262, 
+    108, 262, 109, 262, 110, 262, 112, 262, 113, 262, 114, 262, 115, 262, 
+    116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 
+    262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 
+    262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 
+    262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 
+    262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 
+    103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 
+    110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 
+    117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 
+    262, 68, 262, 69, 262, 70, 262, 71, 262, 74, 262, 75, 262, 76, 262, 77, 
+    262, 78, 262, 79, 262, 80, 262, 81, 262, 83, 262, 84, 262, 85, 262, 86, 
+    262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 
+    262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 
+    262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 
+    262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 
+    262, 65, 262, 66, 262, 68, 262, 69, 262, 70, 262, 71, 262, 73, 262, 74, 
+    262, 75, 262, 76, 262, 77, 262, 79, 262, 83, 262, 84, 262, 85, 262, 86, 
+    262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 
+    262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 
+    262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 
+    262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 
+    262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 
+    262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 
+    262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 
+    262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 
+    102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 
+    109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 
+    116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 
+    262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 
+    262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 
+    262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 
+    262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 
+    103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 
+    110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 
+    117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 
+    262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 
+    262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 
+    262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 
+    262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 
+    104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 
+    111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 
+    118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 
+    262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 
+    262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 
+    262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 
+    262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 
+    105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 
+    112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 
+    119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 
+    262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 
+    262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 
+    262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 
+    262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 
+    106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 
+    113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 
+    120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 
+    262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 
+    262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 
+    262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 
+    262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 
+    262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 
+    262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 
+    262, 121, 262, 122, 262, 305, 262, 567, 262, 913, 262, 914, 262, 915, 
+    262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 922, 
+    262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 929, 
+    262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 936, 
+    262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, 949, 
+    262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 
+    262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 
+    262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 
+    262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 
+    262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 
+    262, 921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 
+    262, 928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 
+    262, 935, 262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 
+    262, 948, 262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 
+    262, 955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 
+    262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 
+    262, 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 
+    262, 982, 262, 913, 262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 
+    262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 262, 924, 262, 925, 
+    262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, 932, 
+    262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, 945, 
+    262, 946, 262, 947, 262, 948, 262, 949, 262, 950, 262, 951, 262, 952, 
+    262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 262, 958, 262, 959, 
+    262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 
+    262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 
+    262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 262, 915, 262, 916, 
+    262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 
+    262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 
+    262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 
+    262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, 949, 262, 950, 
+    262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 
+    262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 
+    262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 
+    262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 
+    262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 
+    262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 
+    262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 
+    262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 
+    262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 
+    262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 
+    262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 
+    262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 
+    262, 988, 262, 989, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 
+    262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 
+    262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 
+    262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 
+    262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 
+    262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 
+    262, 54, 262, 55, 262, 56, 262, 57, 262, 1575, 262, 1576, 262, 1580, 262, 
+    1583, 262, 1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1603, 
+    262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 
+    1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 
+    262, 1584, 262, 1590, 262, 1592, 262, 1594, 262, 1646, 262, 1722, 262, 
+    1697, 262, 1647, 262, 1576, 262, 1580, 262, 1607, 262, 1581, 262, 1610, 
+    262, 1603, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 
+    1601, 262, 1589, 262, 1602, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 
+    262, 1590, 262, 1594, 262, 1580, 262, 1581, 262, 1610, 262, 1604, 262, 
+    1606, 262, 1587, 262, 1593, 262, 1589, 262, 1602, 262, 1588, 262, 1582, 
+    262, 1590, 262, 1594, 262, 1722, 262, 1647, 262, 1576, 262, 1580, 262, 
+    1607, 262, 1581, 262, 1591, 262, 1610, 262, 1603, 262, 1605, 262, 1606, 
+    262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1588, 262, 
+    1578, 262, 1579, 262, 1582, 262, 1590, 262, 1592, 262, 1594, 262, 1646, 
+    262, 1697, 262, 1575, 262, 1576, 262, 1580, 262, 1583, 262, 1607, 262, 
+    1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1604, 262, 1605, 
+    262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 
+    1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 
+    262, 1592, 262, 1594, 262, 1576, 262, 1580, 262, 1583, 262, 1608, 262, 
+    1586, 262, 1581, 262, 1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 
+    262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 
+    1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 
+    262, 1594, 514, 48, 46, 514, 48, 44, 514, 49, 44, 514, 50, 44, 514, 51, 
+    44, 514, 52, 44, 514, 53, 44, 514, 54, 44, 514, 55, 44, 514, 56, 44, 514, 
+    57, 44, 770, 40, 65, 41, 770, 40, 66, 41, 770, 40, 67, 41, 770, 40, 68, 
+    41, 770, 40, 69, 41, 770, 40, 70, 41, 770, 40, 71, 41, 770, 40, 72, 41, 
+    770, 40, 73, 41, 770, 40, 74, 41, 770, 40, 75, 41, 770, 40, 76, 41, 770, 
+    40, 77, 41, 770, 40, 78, 41, 770, 40, 79, 41, 770, 40, 80, 41, 770, 40, 
+    81, 41, 770, 40, 82, 41, 770, 40, 83, 41, 770, 40, 84, 41, 770, 40, 85, 
+    41, 770, 40, 86, 41, 770, 40, 87, 41, 770, 40, 88, 41, 770, 40, 89, 41, 
+    770, 40, 90, 41, 770, 12308, 83, 12309, 263, 67, 263, 82, 519, 67, 68, 
+    519, 87, 90, 266, 65, 266, 66, 266, 67, 266, 68, 266, 69, 266, 70, 266, 
+    71, 266, 72, 266, 73, 266, 74, 266, 75, 266, 76, 266, 77, 266, 78, 266, 
+    79, 266, 80, 266, 81, 266, 82, 266, 83, 266, 84, 266, 85, 266, 86, 266, 
+    87, 266, 88, 266, 89, 266, 90, 522, 72, 86, 522, 77, 86, 522, 83, 68, 
+    522, 83, 83, 778, 80, 80, 86, 522, 87, 67, 515, 77, 67, 515, 77, 68, 522, 
+    68, 74, 522, 12411, 12363, 522, 12467, 12467, 266, 12469, 266, 25163, 
+    266, 23383, 266, 21452, 266, 12487, 266, 20108, 266, 22810, 266, 35299, 
+    266, 22825, 266, 20132, 266, 26144, 266, 28961, 266, 26009, 266, 21069, 
+    266, 24460, 266, 20877, 266, 26032, 266, 21021, 266, 32066, 266, 29983, 
+    266, 36009, 266, 22768, 266, 21561, 266, 28436, 266, 25237, 266, 25429, 
+    266, 19968, 266, 19977, 266, 36938, 266, 24038, 266, 20013, 266, 21491, 
+    266, 25351, 266, 36208, 266, 25171, 266, 31105, 266, 31354, 266, 21512, 
+    266, 28288, 266, 26377, 266, 26376, 266, 30003, 266, 21106, 266, 21942, 
+    770, 12308, 26412, 12309, 770, 12308, 19977, 12309, 770, 12308, 20108, 
+    12309, 770, 12308, 23433, 12309, 770, 12308, 28857, 12309, 770, 12308, 
+    25171, 12309, 770, 12308, 30423, 12309, 770, 12308, 21213, 12309, 770, 
+    12308, 25943, 12309, 263, 24471, 263, 21487, 256, 20029, 256, 20024, 256, 
+    20033, 256, 55360, 56610, 256, 20320, 256, 20398, 256, 20411, 256, 20482, 
+    256, 20602, 256, 20633, 256, 20711, 256, 20687, 256, 13470, 256, 55361, 
+    56890, 256, 20813, 256, 20820, 256, 20836, 256, 20855, 256, 55361, 56604, 
+    256, 13497, 256, 20839, 256, 20877, 256, 55361, 56651, 256, 20887, 256, 
+    20900, 256, 20172, 256, 20908, 256, 20917, 256, 55396, 56799, 256, 20981, 
+    256, 20995, 256, 13535, 256, 21051, 256, 21062, 256, 21106, 256, 21111, 
+    256, 13589, 256, 21191, 256, 21193, 256, 21220, 256, 21242, 256, 21253, 
+    256, 21254, 256, 21271, 256, 21321, 256, 21329, 256, 21338, 256, 21363, 
+    256, 21373, 256, 21375, 256, 21375, 256, 21375, 256, 55362, 56876, 256, 
+    28784, 256, 21450, 256, 21471, 256, 55362, 57187, 256, 21483, 256, 21489, 
+    256, 21510, 256, 21662, 256, 21560, 256, 21576, 256, 21608, 256, 21666, 
+    256, 21750, 256, 21776, 256, 21843, 256, 21859, 256, 21892, 256, 21892, 
+    256, 21913, 256, 21931, 256, 21939, 256, 21954, 256, 22294, 256, 22022, 
+    256, 22295, 256, 22097, 256, 22132, 256, 20999, 256, 22766, 256, 22478, 
+    256, 22516, 256, 22541, 256, 22411, 256, 22578, 256, 22577, 256, 22700, 
+    256, 55365, 56548, 256, 22770, 256, 22775, 256, 22790, 256, 22810, 256, 
+    22818, 256, 22882, 256, 55365, 57000, 256, 55365, 57066, 256, 23020, 256, 
+    23067, 256, 23079, 256, 23000, 256, 23142, 256, 14062, 256, 14076, 256, 
+    23304, 256, 23358, 256, 23358, 256, 55366, 56776, 256, 23491, 256, 23512, 
+    256, 23527, 256, 23539, 256, 55366, 57112, 256, 23551, 256, 23558, 256, 
+    24403, 256, 23586, 256, 14209, 256, 23648, 256, 23662, 256, 23744, 256, 
+    23693, 256, 55367, 56804, 256, 23875, 256, 55367, 56806, 256, 23918, 256, 
+    23915, 256, 23932, 256, 24033, 256, 24034, 256, 14383, 256, 24061, 256, 
+    24104, 256, 24125, 256, 24169, 256, 14434, 256, 55368, 56707, 256, 14460, 
+    256, 24240, 256, 24243, 256, 24246, 256, 24266, 256, 55400, 57234, 256, 
+    24318, 256, 55368, 57137, 256, 55368, 57137, 256, 33281, 256, 24354, 256, 
+    24354, 256, 14535, 256, 55372, 57016, 256, 55384, 56794, 256, 24418, 256, 
+    24427, 256, 14563, 256, 24474, 256, 24525, 256, 24535, 256, 24569, 256, 
+    24705, 256, 14650, 256, 14620, 256, 24724, 256, 55369, 57044, 256, 24775, 
+    256, 24904, 256, 24908, 256, 24910, 256, 24908, 256, 24954, 256, 24974, 
+    256, 25010, 256, 24996, 256, 25007, 256, 25054, 256, 25074, 256, 25078, 
+    256, 25104, 256, 25115, 256, 25181, 256, 25265, 256, 25300, 256, 25424, 
+    256, 55370, 57100, 256, 25405, 256, 25340, 256, 25448, 256, 25475, 256, 
+    25572, 256, 55370, 57329, 256, 25634, 256, 25541, 256, 25513, 256, 14894, 
+    256, 25705, 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256, 25935, 
+    256, 25964, 256, 55372, 56330, 256, 26083, 256, 26360, 256, 26185, 256, 
+    15129, 256, 26257, 256, 15112, 256, 15076, 256, 20882, 256, 20885, 256, 
+    26368, 256, 26268, 256, 32941, 256, 17369, 256, 26391, 256, 26395, 256, 
+    26401, 256, 26462, 256, 26451, 256, 55372, 57283, 256, 15177, 256, 26618, 
+    256, 26501, 256, 26706, 256, 26757, 256, 55373, 56429, 256, 26766, 256, 
+    26655, 256, 26900, 256, 15261, 256, 26946, 256, 27043, 256, 27114, 256, 
+    27304, 256, 55373, 56995, 256, 27355, 256, 15384, 256, 27425, 256, 55374, 
+    56487, 256, 27476, 256, 15438, 256, 27506, 256, 27551, 256, 27578, 256, 
+    27579, 256, 55374, 56973, 256, 55367, 56587, 256, 55374, 57082, 256, 
+    27726, 256, 55375, 56508, 256, 27839, 256, 27853, 256, 27751, 256, 27926, 
+    256, 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024, 256, 28037, 
+    256, 55375, 56606, 256, 27956, 256, 28207, 256, 28270, 256, 15667, 256, 
+    28363, 256, 28359, 256, 55375, 57041, 256, 28153, 256, 28526, 256, 55375, 
+    57182, 256, 55375, 57230, 256, 28614, 256, 28729, 256, 28702, 256, 28699, 
+    256, 15766, 256, 28746, 256, 28797, 256, 28791, 256, 28845, 256, 55361, 
+    56613, 256, 28997, 256, 55376, 56931, 256, 29084, 256, 55376, 57259, 256, 
+    29224, 256, 29237, 256, 29264, 256, 55377, 56840, 256, 29312, 256, 29333, 
+    256, 55377, 57141, 256, 55378, 56340, 256, 29562, 256, 29579, 256, 16044, 
+    256, 29605, 256, 16056, 256, 16056, 256, 29767, 256, 29788, 256, 29809, 
+    256, 29829, 256, 29898, 256, 16155, 256, 29988, 256, 55379, 56374, 256, 
+    30014, 256, 55379, 56466, 256, 30064, 256, 55368, 56735, 256, 30224, 256, 
+    55379, 57249, 256, 55379, 57272, 256, 55380, 56388, 256, 16380, 256, 
+    16392, 256, 30452, 256, 55380, 56563, 256, 55380, 56562, 256, 55380, 
+    56601, 256, 55380, 56627, 256, 30494, 256, 30495, 256, 30495, 256, 30538, 
+    256, 16441, 256, 30603, 256, 16454, 256, 16534, 256, 55381, 56349, 256, 
+    30798, 256, 30860, 256, 30924, 256, 16611, 256, 55381, 56870, 256, 31062, 
+    256, 55381, 56986, 256, 55381, 57029, 256, 31119, 256, 31211, 256, 16687, 
+    256, 31296, 256, 31306, 256, 31311, 256, 55382, 56700, 256, 55382, 56999, 
+    256, 55382, 56999, 256, 31470, 256, 16898, 256, 55382, 57259, 256, 31686, 
+    256, 31689, 256, 16935, 256, 55383, 56448, 256, 31954, 256, 17056, 256, 
+    31976, 256, 31971, 256, 32000, 256, 55383, 57222, 256, 32099, 256, 17153, 
+    256, 32199, 256, 32258, 256, 32325, 256, 17204, 256, 55384, 56872, 256, 
+    55384, 56903, 256, 17241, 256, 55384, 57049, 256, 32634, 256, 55384, 
+    57150, 256, 32661, 256, 32762, 256, 32773, 256, 55385, 56538, 256, 55385, 
+    56611, 256, 32864, 256, 55385, 56744, 256, 32880, 256, 55372, 57183, 256, 
+    17365, 256, 32946, 256, 33027, 256, 17419, 256, 33086, 256, 23221, 256, 
+    55385, 57255, 256, 55385, 57269, 256, 55372, 57235, 256, 55372, 57244, 
+    256, 33281, 256, 33284, 256, 36766, 256, 17515, 256, 33425, 256, 33419, 
+    256, 33437, 256, 21171, 256, 33457, 256, 33459, 256, 33469, 256, 33510, 
+    256, 55386, 57148, 256, 33509, 256, 33565, 256, 33635, 256, 33709, 256, 
+    33571, 256, 33725, 256, 33767, 256, 33879, 256, 33619, 256, 33738, 256, 
+    33740, 256, 33756, 256, 55387, 56374, 256, 55387, 56683, 256, 55387, 
+    56533, 256, 17707, 256, 34033, 256, 34035, 256, 34070, 256, 55388, 57290, 
+    256, 34148, 256, 55387, 57132, 256, 17757, 256, 17761, 256, 55387, 57265, 
+    256, 55388, 56530, 256, 17771, 256, 34384, 256, 34396, 256, 34407, 256, 
+    34409, 256, 34473, 256, 34440, 256, 34574, 256, 34530, 256, 34681, 256, 
+    34600, 256, 34667, 256, 34694, 256, 17879, 256, 34785, 256, 34817, 256, 
+    17913, 256, 34912, 256, 34915, 256, 55389, 56935, 256, 35031, 256, 35038, 
+    256, 17973, 256, 35066, 256, 13499, 256, 55390, 56494, 256, 55390, 56678, 
+    256, 18110, 256, 18119, 256, 35488, 256, 35565, 256, 35722, 256, 35925, 
+    256, 55391, 56488, 256, 36011, 256, 36033, 256, 36123, 256, 36215, 256, 
+    55391, 57135, 256, 55362, 56324, 256, 36299, 256, 36284, 256, 36336, 256, 
+    55362, 56542, 256, 36564, 256, 36664, 256, 55393, 56786, 256, 55393, 
+    56813, 256, 37012, 256, 37105, 256, 37137, 256, 55393, 57134, 256, 37147, 
+    256, 37432, 256, 37591, 256, 37592, 256, 37500, 256, 37881, 256, 37909, 
+    256, 55394, 57338, 256, 38283, 256, 18837, 256, 38327, 256, 55395, 56695, 
+    256, 18918, 256, 38595, 256, 23986, 256, 38691, 256, 55396, 56645, 256, 
+    55396, 56858, 256, 19054, 256, 19062, 256, 38880, 256, 55397, 56330, 256, 
+    19122, 256, 55397, 56470, 256, 38923, 256, 38923, 256, 38953, 256, 55397, 
+    56758, 256, 39138, 256, 19251, 256, 39209, 256, 39335, 256, 39362, 256, 
+    39422, 256, 19406, 256, 55398, 57136, 256, 39698, 256, 40000, 256, 40189, 
+    256, 19662, 256, 19693, 256, 40295, 256, 55400, 56526, 256, 19704, 256, 
+    55400, 56581, 256, 55400, 56846, 256, 55400, 56977, 256, 40635, 256, 
+    19798, 256, 40697, 256, 40702, 256, 40709, 256, 40719, 256, 40726, 256, 
+    40763, 256, 55401, 56832, 
+};
+
+/* index tables for the decomposition data */
+#define DECOMP_SHIFT1 6
+#define DECOMP_SHIFT2 4
+static const unsigned char decomp_index0[] = {
+    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 14, 15, 5, 5, 5, 5, 16, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 18, 
+    5, 5, 5, 5, 5, 19, 20, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    21, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+};
+
+static const unsigned short decomp_index1[] = {
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
+    14, 0, 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 
+    25, 0, 26, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 30, 31, 32, 33, 34, 35, 0, 
+    36, 37, 38, 0, 39, 0, 40, 0, 41, 0, 0, 0, 0, 42, 43, 44, 45, 0, 0, 0, 0, 
+    0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, 
+    0, 49, 50, 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, 0, 0, 0, 0, 51, 52, 0, 53, 0, 0, 0, 0, 
+    0, 0, 54, 55, 0, 0, 0, 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 58, 59, 0, 0, 0, 60, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 
+    0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 
+    0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 69, 0, 0, 0, 70, 
+    71, 72, 73, 74, 75, 76, 77, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 79, 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, 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, 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, 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, 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, 80, 81, 0, 
+    82, 83, 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, 84, 85, 86, 87, 88, 89, 0, 90, 91, 92, 0, 0, 0, 0, 
+    93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 
+    109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 
+    123, 124, 125, 126, 127, 128, 129, 130, 0, 131, 132, 133, 134, 0, 0, 0, 
+    0, 0, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 0, 146, 0, 
+    0, 0, 147, 0, 148, 149, 150, 0, 151, 152, 153, 0, 154, 0, 0, 0, 155, 0, 
+    0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 
+    158, 159, 160, 161, 162, 163, 164, 165, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 
+    0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 168, 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, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    171, 0, 0, 0, 0, 0, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 
+    182, 183, 184, 185, 186, 0, 0, 187, 0, 0, 188, 189, 190, 191, 192, 0, 
+    193, 194, 195, 196, 197, 0, 198, 0, 0, 0, 199, 200, 201, 202, 203, 204, 
+    205, 0, 0, 0, 0, 0, 0, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 
+    216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 
+    230, 231, 232, 233, 234, 235, 236, 237, 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, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 
+    0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 
+    241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 
+    255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 
+    269, 0, 0, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 0, 
+    282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 
+    296, 297, 298, 299, 300, 301, 302, 303, 304, 0, 305, 306, 307, 308, 309, 
+    310, 311, 312, 0, 0, 313, 0, 314, 0, 315, 316, 317, 318, 319, 320, 321, 
+    322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 
+    336, 337, 338, 339, 340, 341, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 
+    344, 0, 0, 0, 0, 0, 0, 0, 345, 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, 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, 0, 0, 346, 347, 0, 0, 0, 0, 348, 349, 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, 0, 0, 
+    0, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 
+    364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 
+    378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 
+    392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 
+    406, 407, 408, 409, 410, 411, 412, 413, 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, 414, 415, 
+    416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 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, 
+    0, 0, 0, 0, 426, 427, 428, 429, 430, 0, 431, 0, 0, 432, 0, 0, 0, 0, 0, 0, 
+    433, 434, 435, 436, 437, 438, 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, 439, 440, 441, 442, 443, 444, 445, 
+    446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 
+    460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 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, 
+};
+
+static const unsigned short decomp_index2[] = {
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+    3, 0, 6, 0, 0, 0, 0, 8, 0, 0, 11, 13, 15, 18, 0, 0, 20, 23, 25, 0, 27, 
+    31, 35, 0, 39, 42, 45, 48, 51, 54, 0, 57, 60, 63, 66, 69, 72, 75, 78, 81, 
+    0, 84, 87, 90, 93, 96, 99, 0, 0, 102, 105, 108, 111, 114, 0, 0, 117, 120, 
+    123, 126, 129, 132, 0, 135, 138, 141, 144, 147, 150, 153, 156, 159, 0, 
+    162, 165, 168, 171, 174, 177, 0, 0, 180, 183, 186, 189, 192, 0, 195, 198, 
+    201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 
+    243, 0, 0, 246, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 
+    282, 285, 288, 291, 294, 297, 300, 303, 0, 0, 306, 309, 312, 315, 318, 
+    321, 324, 327, 330, 0, 333, 336, 339, 342, 345, 348, 0, 351, 354, 357, 
+    360, 363, 366, 369, 372, 0, 0, 375, 378, 381, 384, 387, 390, 393, 0, 0, 
+    396, 399, 402, 405, 408, 411, 0, 0, 414, 417, 420, 423, 426, 429, 432, 
+    435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 0, 0, 468, 471, 
+    474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 
+    516, 519, 522, 525, 528, 531, 534, 537, 539, 542, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 545, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 
+    590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 0, 626, 629, 
+    632, 635, 638, 641, 0, 0, 644, 647, 650, 653, 656, 659, 662, 665, 668, 
+    671, 674, 677, 680, 683, 686, 689, 0, 0, 692, 695, 698, 701, 704, 707, 
+    710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 
+    752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 
+    794, 797, 0, 0, 800, 803, 0, 0, 0, 0, 0, 0, 806, 809, 812, 815, 818, 821, 
+    824, 827, 830, 833, 836, 839, 842, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 848, 850, 852, 854, 856, 858, 860, 862, 864, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 866, 869, 872, 875, 878, 881, 0, 0, 884, 886, 888, 
+    890, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 894, 896, 0, 898, 900, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, 0, 905, 0, 0, 0, 
+    908, 0, 0, 0, 0, 0, 910, 913, 916, 919, 921, 924, 927, 0, 930, 0, 933, 
+    936, 939, 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, 942, 945, 948, 951, 954, 957, 960, 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, 963, 966, 969, 972, 975, 
+    0, 978, 980, 982, 984, 987, 990, 992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 994, 
+    996, 998, 0, 1000, 1002, 0, 0, 0, 1004, 0, 0, 0, 0, 0, 0, 1006, 1009, 0, 
+    1012, 0, 0, 0, 1015, 0, 0, 0, 0, 1018, 1021, 1024, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 1027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1030, 0, 0, 
+    0, 0, 0, 0, 1033, 1036, 0, 1039, 0, 0, 0, 1042, 0, 0, 0, 0, 1045, 1048, 
+    1051, 0, 0, 0, 0, 0, 0, 0, 1054, 1057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1060, 
+    1063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1066, 1069, 1072, 1075, 0, 
+    0, 1078, 1081, 0, 0, 1084, 1087, 1090, 1093, 1096, 1099, 0, 0, 1102, 
+    1105, 1108, 1111, 1114, 1117, 0, 0, 1120, 1123, 1126, 1129, 1132, 1135, 
+    1138, 1141, 1144, 1147, 1150, 1153, 0, 0, 1156, 1159, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1165, 1168, 
+    1171, 1174, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1180, 1183, 
+    1186, 1189, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 1204, 0, 0, 1207, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1210, 1213, 1216, 
+    1219, 1222, 1225, 1228, 1231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 
+    1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 1243, 0, 1246, 
+    0, 0, 0, 1249, 0, 0, 1252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 1255, 1258, 1261, 0, 0, 1264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1267, 
+    0, 0, 1270, 1273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1276, 
+    1279, 0, 0, 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 1285, 1288, 1291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    1294, 0, 0, 0, 0, 0, 0, 0, 1297, 0, 0, 0, 0, 0, 0, 1300, 1303, 0, 1306, 
+    1309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1312, 1315, 1318, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1321, 0, 1324, 1327, 1330, 0, 0, 0, 0, 
+    1333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1336, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, 1342, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1345, 0, 0, 0, 0, 0, 0, 1347, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 1350, 0, 0, 0, 0, 1353, 0, 0, 0, 0, 1356, 0, 0, 
+    0, 0, 1359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1362, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 1365, 0, 1368, 1371, 1374, 1377, 1380, 0, 0, 0, 0, 0, 0, 0, 
+    1383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1386, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 1389, 0, 0, 0, 0, 1392, 0, 0, 0, 0, 1395, 0, 0, 0, 0, 
+    1398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1401, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 1404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1409, 0, 1412, 0, 1415, 0, 
+    1418, 0, 1421, 0, 0, 0, 1424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1427, 0, 1430, 0, 0, 1433, 1436, 0, 1439, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    1442, 1444, 1446, 0, 1448, 1450, 1452, 1454, 1456, 1458, 1460, 1462, 
+    1464, 1466, 1468, 0, 1470, 1472, 1474, 1476, 1478, 1480, 1482, 1484, 
+    1486, 1488, 1490, 1492, 1494, 1496, 1498, 1500, 1502, 1504, 0, 1506, 
+    1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1530, 
+    1532, 1534, 1536, 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1552, 1554, 
+    1556, 1558, 1560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1562, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1564, 1566, 1568, 1570, 
+    1572, 1574, 1576, 1578, 1580, 1582, 1584, 1586, 1588, 1590, 1592, 1594, 
+    1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, 
+    1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1641, 1644, 
+    1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 
+    1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 
+    1719, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1743, 1746, 1749, 1752, 
+    1755, 1758, 1761, 1764, 1767, 1770, 1773, 1776, 1779, 1782, 1785, 1788, 
+    1791, 1794, 1797, 1800, 1803, 1806, 1809, 1812, 1815, 1818, 1821, 1824, 
+    1827, 1830, 1833, 1836, 1839, 1842, 1845, 1848, 1851, 1854, 1857, 1860, 
+    1863, 1866, 1869, 1872, 1875, 1878, 1881, 1884, 1887, 1890, 1893, 1896, 
+    1899, 1902, 1905, 1908, 1911, 1914, 1917, 1920, 1923, 1926, 1929, 1932, 
+    1935, 1938, 1941, 1944, 1947, 1950, 1953, 1956, 1959, 1962, 1965, 1968, 
+    1971, 1974, 1977, 1980, 1983, 1986, 1989, 1992, 1995, 1998, 2001, 2004, 
+    2007, 2010, 2013, 2016, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 
+    2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 
+    2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 0, 0, 0, 0, 2106, 
+    2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 
+    2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 
+    2181, 2184, 2187, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 
+    2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 
+    2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 
+    2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 
+    2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 
+    2361, 2364, 2367, 2370, 2373, 0, 0, 0, 0, 0, 0, 2376, 2379, 2382, 2385, 
+    2388, 2391, 2394, 2397, 2400, 2403, 2406, 2409, 2412, 2415, 2418, 2421, 
+    2424, 2427, 2430, 2433, 2436, 2439, 0, 0, 2442, 2445, 2448, 2451, 2454, 
+    2457, 0, 0, 2460, 2463, 2466, 2469, 2472, 2475, 2478, 2481, 2484, 2487, 
+    2490, 2493, 2496, 2499, 2502, 2505, 2508, 2511, 2514, 2517, 2520, 2523, 
+    2526, 2529, 2532, 2535, 2538, 2541, 2544, 2547, 2550, 2553, 2556, 2559, 
+    2562, 2565, 2568, 2571, 0, 0, 2574, 2577, 2580, 2583, 2586, 2589, 0, 0, 
+    2592, 2595, 2598, 2601, 2604, 2607, 2610, 2613, 0, 2616, 0, 2619, 0, 
+    2622, 0, 2625, 2628, 2631, 2634, 2637, 2640, 2643, 2646, 2649, 2652, 
+    2655, 2658, 2661, 2664, 2667, 2670, 2673, 2676, 2679, 2681, 2684, 2686, 
+    2689, 2691, 2694, 2696, 2699, 2701, 2704, 2706, 2709, 0, 0, 2711, 2714, 
+    2717, 2720, 2723, 2726, 2729, 2732, 2735, 2738, 2741, 2744, 2747, 2750, 
+    2753, 2756, 2759, 2762, 2765, 2768, 2771, 2774, 2777, 2780, 2783, 2786, 
+    2789, 2792, 2795, 2798, 2801, 2804, 2807, 2810, 2813, 2816, 2819, 2822, 
+    2825, 2828, 2831, 2834, 2837, 2840, 2843, 2846, 2849, 2852, 2855, 2858, 
+    2861, 2864, 2867, 0, 2870, 2873, 2876, 2879, 2882, 2885, 2887, 2890, 
+    2893, 2895, 2898, 2901, 2904, 2907, 2910, 0, 2913, 2916, 2919, 2922, 
+    2924, 2927, 2929, 2932, 2935, 2938, 2941, 2944, 2947, 2950, 0, 0, 2952, 
+    2955, 2958, 2961, 2964, 2967, 0, 2969, 2972, 2975, 2978, 2981, 2984, 
+    2987, 2989, 2992, 2995, 2998, 3001, 3004, 3007, 3010, 3012, 3015, 3018, 
+    3020, 0, 0, 3022, 3025, 3028, 0, 3031, 3034, 3037, 3040, 3042, 3045, 
+    3047, 3050, 3052, 0, 3055, 3057, 3059, 3061, 3063, 3065, 3067, 3069, 
+    3071, 3073, 3075, 0, 0, 0, 0, 0, 0, 3077, 0, 0, 0, 0, 0, 3079, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 3082, 3084, 3087, 0, 0, 0, 0, 0, 0, 0, 0, 
+    3091, 0, 0, 0, 3093, 3096, 0, 3100, 3103, 0, 0, 0, 0, 3107, 0, 3110, 0, 
+    0, 0, 0, 0, 0, 0, 0, 3113, 3116, 3119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 3122, 0, 0, 0, 0, 0, 0, 0, 3127, 3129, 3131, 0, 0, 3133, 3135, 
+    3137, 3139, 3141, 3143, 3145, 3147, 3149, 3151, 3153, 3155, 3157, 3159, 
+    3161, 3163, 3165, 3167, 3169, 3171, 3173, 3175, 3177, 3179, 3181, 3183, 
+    3185, 0, 3187, 3189, 3191, 3193, 3195, 3197, 3199, 3201, 3203, 3205, 
+    3207, 3209, 3211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3213, 0, 0, 0, 0, 0, 
+    0, 0, 3216, 3220, 3224, 3226, 0, 3229, 3233, 3237, 0, 3239, 3242, 3244, 
+    3246, 3248, 3250, 3252, 3254, 3256, 3258, 3260, 0, 3262, 3264, 0, 0, 
+    3267, 3269, 3271, 3273, 3275, 0, 0, 3277, 3280, 3284, 0, 3287, 0, 3289, 
+    0, 3291, 0, 3293, 3295, 3297, 3299, 0, 3301, 3303, 3305, 0, 3307, 3309, 
+    3311, 3313, 3315, 3317, 3319, 0, 3321, 3325, 3327, 3329, 3331, 3333, 0, 
+    0, 0, 0, 3335, 3337, 3339, 3341, 3343, 0, 0, 0, 0, 0, 0, 3345, 3349, 
+    3353, 3358, 3362, 3366, 3370, 3374, 3378, 3382, 3386, 3390, 3394, 3398, 
+    3402, 3406, 3409, 3411, 3414, 3418, 3421, 3423, 3426, 3430, 3435, 3438, 
+    3440, 3443, 3447, 3449, 3451, 3453, 3455, 3457, 3460, 3464, 3467, 3469, 
+    3472, 3476, 3481, 3484, 3486, 3489, 3493, 3495, 3497, 3499, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 3501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    3505, 3508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3511, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3514, 3517, 3520, 0, 0, 0, 0, 
+    3523, 0, 0, 0, 0, 3526, 0, 0, 3529, 0, 0, 0, 0, 0, 0, 0, 3532, 0, 3535, 
+    0, 0, 0, 0, 0, 3538, 3541, 0, 3545, 3548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 3552, 0, 0, 3555, 0, 0, 3558, 0, 3561, 0, 0, 0, 0, 0, 
+    0, 3564, 0, 3567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3570, 3573, 3576, 3579, 
+    3582, 0, 0, 3585, 3588, 0, 0, 3591, 3594, 0, 0, 0, 0, 0, 0, 3597, 3600, 
+    0, 0, 3603, 3606, 0, 0, 3609, 3612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 3615, 3618, 3621, 3624, 3627, 3630, 3633, 3636, 0, 0, 
+    0, 0, 0, 0, 3639, 3642, 3645, 3648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    3651, 3653, 0, 0, 0, 0, 0, 3655, 3657, 3659, 3661, 3663, 3665, 3667, 
+    3669, 3671, 3673, 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697, 3700, 
+    3703, 3706, 3710, 3714, 3718, 3722, 3726, 3730, 3734, 3738, 3742, 3747, 
+    3752, 3757, 3762, 3767, 3772, 3777, 3782, 3787, 3792, 3797, 3800, 3803, 
+    3806, 3809, 3812, 3815, 3818, 3821, 3824, 3828, 3832, 3836, 3840, 3844, 
+    3848, 3852, 3856, 3860, 3864, 3868, 3872, 3876, 3880, 3884, 3888, 3892, 
+    3896, 3900, 3904, 3908, 3912, 3916, 3920, 3924, 3928, 3932, 3936, 3940, 
+    3944, 3948, 3952, 3956, 3960, 3964, 3968, 3972, 3974, 3976, 3978, 3980, 
+    3982, 3984, 3986, 3988, 3990, 3992, 3994, 3996, 3998, 4000, 4002, 4004, 
+    4006, 4008, 4010, 4012, 4014, 4016, 4018, 4020, 4022, 4024, 4026, 4028, 
+    4030, 4032, 4034, 4036, 4038, 4040, 4042, 4044, 4046, 4048, 4050, 4052, 
+    4054, 4056, 4058, 4060, 4062, 4064, 4066, 4068, 4070, 4072, 4074, 4076, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4078, 0, 0, 0, 0, 0, 
+    0, 0, 4083, 4087, 4090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 4094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4097, 
+    4099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4101, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4103, 0, 0, 0, 4105, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 4107, 4109, 4111, 4113, 4115, 4117, 4119, 4121, 
+    4123, 4125, 4127, 4129, 4131, 4133, 4135, 4137, 4139, 4141, 4143, 4145, 
+    4147, 4149, 4151, 4153, 4155, 4157, 4159, 4161, 4163, 4165, 4167, 4169, 
+    4171, 4173, 4175, 4177, 4179, 4181, 4183, 4185, 4187, 4189, 4191, 4193, 
+    4195, 4197, 4199, 4201, 4203, 4205, 4207, 4209, 4211, 4213, 4215, 4217, 
+    4219, 4221, 4223, 4225, 4227, 4229, 4231, 4233, 4235, 4237, 4239, 4241, 
+    4243, 4245, 4247, 4249, 4251, 4253, 4255, 4257, 4259, 4261, 4263, 4265, 
+    4267, 4269, 4271, 4273, 4275, 4277, 4279, 4281, 4283, 4285, 4287, 4289, 
+    4291, 4293, 4295, 4297, 4299, 4301, 4303, 4305, 4307, 4309, 4311, 4313, 
+    4315, 4317, 4319, 4321, 4323, 4325, 4327, 4329, 4331, 4333, 4335, 4337, 
+    4339, 4341, 4343, 4345, 4347, 4349, 4351, 4353, 4355, 4357, 4359, 4361, 
+    4363, 4365, 4367, 4369, 4371, 4373, 4375, 4377, 4379, 4381, 4383, 4385, 
+    4387, 4389, 4391, 4393, 4395, 4397, 4399, 4401, 4403, 4405, 4407, 4409, 
+    4411, 4413, 4415, 4417, 4419, 4421, 4423, 4425, 4427, 4429, 4431, 4433, 
+    4435, 4437, 4439, 4441, 4443, 4445, 4447, 4449, 4451, 4453, 4455, 4457, 
+    4459, 4461, 4463, 4465, 4467, 4469, 4471, 4473, 4475, 4477, 4479, 4481, 
+    4483, 4485, 4487, 4489, 4491, 4493, 4495, 4497, 4499, 4501, 4503, 4505, 
+    4507, 4509, 4511, 4513, 4515, 4517, 4519, 4521, 4523, 4525, 4527, 4529, 
+    4531, 4533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4535, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4537, 0, 4539, 4541, 4543, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4545, 0, 4548, 0, 4551, 0, 
+    4554, 0, 4557, 0, 4560, 0, 4563, 0, 4566, 0, 4569, 0, 4572, 0, 4575, 0, 
+    4578, 0, 0, 4581, 0, 4584, 0, 4587, 0, 0, 0, 0, 0, 0, 4590, 4593, 0, 
+    4596, 4599, 0, 4602, 4605, 0, 4608, 4611, 0, 4614, 4617, 0, 0, 0, 0, 0, 
+    0, 4620, 0, 0, 0, 0, 0, 0, 4623, 4626, 0, 4629, 4632, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 4635, 0, 4638, 0, 4641, 0, 4644, 0, 4647, 0, 4650, 0, 
+    4653, 0, 4656, 0, 4659, 0, 4662, 0, 4665, 0, 4668, 0, 0, 4671, 0, 4674, 
+    0, 4677, 0, 0, 0, 0, 0, 0, 4680, 4683, 0, 4686, 4689, 0, 4692, 4695, 0, 
+    4698, 4701, 0, 4704, 4707, 0, 0, 0, 0, 0, 0, 4710, 0, 0, 4713, 4716, 
+    4719, 4722, 0, 0, 0, 4725, 4728, 0, 4731, 4733, 4735, 4737, 4739, 4741, 
+    4743, 4745, 4747, 4749, 4751, 4753, 4755, 4757, 4759, 4761, 4763, 4765, 
+    4767, 4769, 4771, 4773, 4775, 4777, 4779, 4781, 4783, 4785, 4787, 4789, 
+    4791, 4793, 4795, 4797, 4799, 4801, 4803, 4805, 4807, 4809, 4811, 4813, 
+    4815, 4817, 4819, 4821, 4823, 4825, 4827, 4829, 4831, 4833, 4835, 4837, 
+    4839, 4841, 4843, 4845, 4847, 4849, 4851, 4853, 4855, 4857, 4859, 4861, 
+    4863, 4865, 4867, 4869, 4871, 4873, 4875, 4877, 4879, 4881, 4883, 4885, 
+    4887, 4889, 4891, 4893, 4895, 4897, 4899, 4901, 4903, 4905, 4907, 4909, 
+    4911, 4913, 4915, 4917, 0, 0, 0, 4919, 4921, 4923, 4925, 4927, 4929, 
+    4931, 4933, 4935, 4937, 4939, 4941, 4943, 4945, 4947, 4951, 4955, 4959, 
+    4963, 4967, 4971, 4975, 4979, 4983, 4987, 4991, 4995, 4999, 5003, 5008, 
+    5013, 5018, 5023, 5028, 5033, 5038, 5043, 5048, 5053, 5058, 5063, 5068, 
+    5073, 5078, 5086, 0, 5093, 5097, 5101, 5105, 5109, 5113, 5117, 5121, 
+    5125, 5129, 5133, 5137, 5141, 5145, 5149, 5153, 5157, 5161, 5165, 5169, 
+    5173, 5177, 5181, 5185, 5189, 5193, 5197, 5201, 5205, 5209, 5213, 5217, 
+    5221, 5225, 5229, 5233, 5237, 5239, 5241, 5243, 0, 0, 0, 0, 0, 0, 0, 0, 
+    5245, 5249, 5252, 5255, 5258, 5261, 5264, 5267, 5270, 5273, 5276, 5279, 
+    5282, 5285, 5288, 5291, 5294, 5296, 5298, 5300, 5302, 5304, 5306, 5308, 
+    5310, 5312, 5314, 5316, 5318, 5320, 5322, 5325, 5328, 5331, 5334, 5337, 
+    5340, 5343, 5346, 5349, 5352, 5355, 5358, 5361, 5364, 5370, 5375, 0, 
+    5378, 5380, 5382, 5384, 5386, 5388, 5390, 5392, 5394, 5396, 5398, 5400, 
+    5402, 5404, 5406, 5408, 5410, 5412, 5414, 5416, 5418, 5420, 5422, 5424, 
+    5426, 5428, 5430, 5432, 5434, 5436, 5438, 5440, 5442, 5444, 5446, 5448, 
+    5450, 5452, 5454, 5456, 5458, 5460, 5462, 5464, 5466, 5468, 5470, 5472, 
+    5474, 5476, 5479, 5482, 5485, 5488, 5491, 5494, 5497, 5500, 5503, 5506, 
+    5509, 5512, 5515, 5518, 5521, 5524, 5527, 5530, 5533, 5536, 5539, 5542, 
+    5545, 5548, 5552, 5556, 5560, 5563, 5567, 5570, 5574, 5576, 5578, 5580, 
+    5582, 5584, 5586, 5588, 5590, 5592, 5594, 5596, 5598, 5600, 5602, 5604, 
+    5606, 5608, 5610, 5612, 5614, 5616, 5618, 5620, 5622, 5624, 5626, 5628, 
+    5630, 5632, 5634, 5636, 5638, 5640, 5642, 5644, 5646, 5648, 5650, 5652, 
+    5654, 5656, 5658, 5660, 5662, 5664, 5666, 0, 5668, 5673, 5678, 5683, 
+    5687, 5692, 5696, 5700, 5706, 5711, 5715, 5719, 5723, 5728, 5733, 5737, 
+    5741, 5744, 5748, 5753, 5758, 5761, 5767, 5774, 5780, 5784, 5790, 5796, 
+    5801, 5805, 5809, 5813, 5818, 5824, 5829, 5833, 5837, 5841, 5844, 5847, 
+    5850, 5853, 5857, 5861, 5867, 5871, 5876, 5882, 5886, 5889, 5892, 5898, 
+    5903, 5909, 5913, 5919, 5922, 5926, 5930, 5934, 5938, 5942, 5947, 5951, 
+    5954, 5958, 5962, 5966, 5971, 5975, 5979, 5983, 5989, 5994, 5997, 6003, 
+    6006, 6011, 6016, 6020, 6024, 6028, 6033, 6036, 6040, 6045, 6048, 6054, 
+    6058, 6061, 6064, 6067, 6070, 6073, 6076, 6079, 6082, 6085, 6088, 6092, 
+    6096, 6100, 6104, 6108, 6112, 6116, 6120, 6124, 6128, 6132, 6136, 6140, 
+    6144, 6148, 6152, 6155, 6158, 6162, 6165, 6168, 6171, 6175, 6179, 6182, 
+    6185, 6188, 6191, 6194, 6199, 6202, 6205, 6208, 6211, 6214, 6217, 6220, 
+    6223, 6227, 6232, 6235, 6238, 6241, 6244, 6247, 6250, 6253, 6257, 6261, 
+    6265, 6269, 6272, 6275, 6278, 6281, 6284, 6287, 6290, 6293, 6296, 6299, 
+    6303, 6307, 6310, 6314, 6318, 6322, 6325, 6329, 6333, 6338, 6341, 6345, 
+    6349, 6353, 6357, 6363, 6370, 6373, 6376, 6379, 6382, 6385, 6388, 6391, 
+    6394, 6397, 6400, 6403, 6406, 6409, 6412, 6415, 6418, 6421, 6424, 6429, 
+    6432, 6435, 6438, 6443, 6447, 6450, 6453, 6456, 6459, 6462, 6465, 6468, 
+    6471, 6474, 6477, 6481, 6484, 6487, 6491, 6495, 6498, 6503, 6507, 6510, 
+    6513, 6516, 6519, 6523, 6527, 6530, 6533, 6536, 6539, 6542, 6545, 6548, 
+    6551, 6554, 6558, 6562, 6566, 6570, 6574, 6578, 6582, 6586, 6590, 6594, 
+    6598, 6602, 6606, 6610, 6614, 6618, 6622, 6626, 6630, 6634, 6638, 6642, 
+    6646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 6648, 6650, 0, 0, 0, 0, 0, 0, 6652, 6654, 6656, 6658, 6660, 6662, 
+    6664, 6666, 6668, 6670, 6672, 6674, 6676, 6678, 6680, 6682, 6684, 6686, 
+    6688, 6690, 6692, 6694, 6696, 6698, 6700, 6702, 6704, 6706, 6708, 6710, 
+    6712, 6714, 6716, 6718, 6720, 6722, 6724, 6726, 6728, 6730, 6732, 6734, 
+    6736, 6738, 6740, 6742, 6744, 6746, 6748, 6750, 6752, 6754, 6756, 6758, 
+    6760, 6762, 6764, 6766, 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782, 
+    6784, 6786, 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 6806, 
+    6808, 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, 6828, 6830, 
+    6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, 6848, 6850, 6852, 6854, 
+    6856, 6858, 6860, 6862, 6864, 6866, 6868, 6870, 6872, 6874, 6876, 6878, 
+    6880, 6882, 6884, 6886, 6888, 6890, 6892, 6894, 6896, 6898, 6900, 6902, 
+    6904, 6906, 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, 6924, 6926, 
+    6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, 6948, 6950, 
+    6952, 6954, 6956, 6958, 6960, 6962, 6964, 6966, 6968, 6970, 6972, 6974, 
+    6976, 6978, 6980, 6982, 6984, 6986, 6988, 6990, 6992, 6994, 6996, 6998, 
+    7000, 7002, 7004, 7006, 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7022, 
+    7024, 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 7046, 
+    7048, 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, 7068, 7070, 
+    7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, 7088, 7090, 7092, 7094, 
+    7096, 7098, 7100, 7102, 7104, 7106, 7108, 7110, 7112, 7114, 7116, 7118, 
+    7120, 7122, 7124, 7126, 7128, 7130, 7132, 7134, 7136, 7138, 7140, 7142, 
+    7144, 7146, 7148, 7150, 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166, 
+    7168, 7170, 7172, 7174, 7176, 7178, 7180, 7182, 7184, 7186, 7188, 7190, 
+    0, 0, 7192, 0, 7194, 0, 0, 7196, 7198, 7200, 7202, 7204, 7206, 7208, 
+    7210, 7212, 7214, 0, 7216, 0, 7218, 0, 0, 7220, 7222, 0, 0, 0, 7224, 
+    7226, 7228, 7230, 7232, 7234, 7236, 7238, 7240, 7242, 7244, 7246, 7248, 
+    7250, 7252, 7254, 7256, 7258, 7260, 7262, 7264, 7266, 7268, 7270, 7272, 
+    7274, 7276, 7278, 7280, 7282, 7284, 7286, 7288, 7290, 7292, 7294, 7296, 
+    7298, 7300, 7302, 7304, 7306, 7308, 7310, 7312, 7314, 7316, 7318, 7320, 
+    7322, 7324, 7326, 7328, 7330, 7332, 7334, 7336, 7338, 7340, 7342, 7344, 
+    7346, 7348, 7350, 7352, 7354, 7356, 7359, 0, 0, 7361, 7363, 7365, 7367, 
+    7369, 7371, 7373, 7375, 7377, 7379, 7381, 7383, 7385, 7387, 7389, 7391, 
+    7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, 7409, 7411, 7413, 7415, 
+    7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, 7433, 7435, 7437, 7439, 
+    7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, 7457, 7459, 7461, 7463, 
+    7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, 7481, 7483, 7485, 7487, 
+    7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, 7505, 7507, 7509, 7511, 
+    7513, 7515, 7517, 7519, 7521, 7523, 7525, 7527, 7529, 7531, 7533, 7535, 
+    7537, 7539, 7541, 7543, 7545, 7547, 7549, 7551, 7554, 7557, 7560, 7562, 
+    7564, 7566, 7569, 7572, 7575, 7577, 0, 0, 0, 0, 0, 0, 7579, 7582, 7585, 
+    7588, 7592, 7596, 7599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7602, 7605, 
+    7608, 7611, 7614, 0, 0, 0, 0, 0, 7617, 0, 7620, 7623, 7625, 7627, 7629, 
+    7631, 7633, 7635, 7637, 7639, 7641, 7643, 7646, 7649, 7652, 7655, 7658, 
+    7661, 7664, 7667, 7670, 7673, 7676, 7679, 0, 7682, 7685, 7688, 7691, 
+    7694, 0, 7697, 0, 7700, 7703, 0, 7706, 7709, 0, 7712, 7715, 7718, 7721, 
+    7724, 7727, 7730, 7733, 7736, 7739, 7742, 7744, 7746, 7748, 7750, 7752, 
+    7754, 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 
+    7778, 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 
+    7802, 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 
+    7826, 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 
+    7850, 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 
+    7874, 7876, 7878, 7880, 7882, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 
+    7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 7920, 
+    7922, 7924, 7926, 7928, 7930, 7932, 7934, 7936, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 7938, 7940, 7942, 7944, 7946, 7948, 7950, 
+    7952, 7954, 7956, 7958, 7960, 7962, 7964, 7966, 7968, 7970, 7972, 7974, 
+    7976, 7978, 7980, 7982, 7984, 7987, 7990, 7993, 7996, 7999, 8002, 8005, 
+    8008, 8011, 8014, 8017, 8020, 8023, 8026, 8029, 8032, 8035, 8038, 8040, 
+    8042, 8044, 8046, 8049, 8052, 8055, 8058, 8061, 8064, 8067, 8070, 8073, 
+    8076, 8079, 8082, 8085, 8088, 8091, 8094, 8097, 8100, 8103, 8106, 8109, 
+    8112, 8115, 8118, 8121, 8124, 8127, 8130, 8133, 8136, 8139, 8142, 8145, 
+    8148, 8151, 8154, 8157, 8160, 8163, 8166, 8169, 8172, 8175, 8178, 8181, 
+    8184, 8187, 8190, 8193, 8196, 8199, 8202, 8205, 8208, 8211, 8214, 8217, 
+    8220, 8223, 8226, 8229, 8232, 8235, 8238, 8241, 8244, 8247, 8250, 8253, 
+    8256, 8259, 8262, 8265, 8268, 8271, 8274, 8277, 8280, 8283, 8286, 8289, 
+    8292, 8295, 8298, 8301, 8304, 8307, 8310, 8313, 8316, 8319, 8322, 8325, 
+    8328, 8332, 8336, 8340, 8344, 8348, 8352, 8355, 8358, 8361, 8364, 8367, 
+    8370, 8373, 8376, 8379, 8382, 8385, 8388, 8391, 8394, 8397, 8400, 8403, 
+    8406, 8409, 8412, 8415, 8418, 8421, 8424, 8427, 8430, 8433, 8436, 8439, 
+    8442, 8445, 8448, 8451, 8454, 8457, 8460, 8463, 8466, 8469, 8472, 8475, 
+    8478, 8481, 8484, 8487, 8490, 8493, 8496, 8499, 8502, 8505, 8508, 8511, 
+    8514, 8517, 8520, 8523, 8526, 8529, 8532, 8535, 8538, 8541, 8544, 8547, 
+    8550, 8553, 8556, 8559, 8562, 8565, 8568, 8571, 8574, 8577, 8580, 8583, 
+    8586, 8589, 8592, 8595, 8598, 8601, 8604, 8607, 8610, 8613, 8616, 8619, 
+    8622, 8625, 8628, 8631, 8634, 8637, 8640, 8643, 8646, 8649, 8652, 8655, 
+    8658, 8661, 8664, 8667, 8670, 8673, 8676, 8679, 8682, 8685, 8688, 8691, 
+    8694, 8697, 8700, 8703, 8706, 8709, 8712, 8715, 8718, 8721, 8724, 8727, 
+    8730, 8733, 8736, 8739, 8742, 8745, 8748, 8751, 8754, 8757, 8760, 8763, 
+    8766, 8769, 8772, 8775, 8778, 8782, 8786, 8790, 8793, 8796, 8799, 8802, 
+    8805, 8808, 8811, 8814, 8817, 8820, 8823, 8826, 8829, 8832, 8835, 8838, 
+    8841, 8844, 8847, 8850, 8853, 8856, 8859, 8862, 8865, 8868, 8871, 8874, 
+    8877, 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904, 8907, 8910, 
+    8913, 8916, 8919, 8922, 8925, 8928, 8931, 8934, 8937, 8940, 8943, 8946, 
+    8949, 8952, 8955, 8958, 8961, 8964, 8967, 8970, 8973, 8976, 8979, 8982, 
+    8985, 8988, 8991, 8994, 8997, 9000, 9003, 9006, 0, 0, 9009, 9013, 9017, 
+    9021, 9025, 9029, 9033, 9037, 9041, 9045, 9049, 9053, 9057, 9061, 9065, 
+    9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097, 9101, 9105, 9109, 9113, 
+    9117, 9121, 9125, 9129, 9133, 9137, 9141, 9145, 9149, 9153, 9157, 9161, 
+    9165, 9169, 9173, 9177, 9181, 9185, 9189, 9193, 9197, 9201, 9205, 9209, 
+    9213, 9217, 9221, 9225, 9229, 9233, 9237, 9241, 9245, 9249, 9253, 9257, 
+    9261, 0, 0, 9265, 9269, 9273, 9277, 9281, 9285, 9289, 9293, 9297, 9301, 
+    9305, 9309, 9313, 9317, 9321, 9325, 9329, 9333, 9337, 9341, 9345, 9349, 
+    9353, 9357, 9361, 9365, 9369, 9373, 9377, 9381, 9385, 9389, 9393, 9397, 
+    9401, 9405, 9409, 9413, 9417, 9421, 9425, 9429, 9433, 9437, 9441, 9445, 
+    9449, 9453, 9457, 9461, 9465, 9469, 9473, 9477, 0, 0, 0, 0, 0, 0, 0, 0, 
+    9481, 9485, 9489, 9494, 9499, 9504, 9509, 9514, 9519, 9524, 9528, 9547, 
+    9556, 0, 0, 0, 9561, 9563, 9565, 9567, 9569, 9571, 9573, 9575, 9577, 
+    9579, 0, 0, 0, 0, 0, 0, 9581, 9583, 9585, 9587, 9589, 9591, 9593, 9595, 
+    9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, 9619, 
+    9621, 0, 0, 9623, 9625, 9627, 9629, 9631, 9633, 9635, 9637, 9639, 9641, 
+    9643, 9645, 0, 9647, 9649, 9651, 9653, 9655, 9657, 9659, 9661, 9663, 
+    9665, 9667, 9669, 9671, 9673, 9675, 9677, 9679, 9681, 9683, 0, 9685, 
+    9687, 9689, 9691, 0, 0, 0, 0, 9693, 9696, 9699, 0, 9702, 0, 9705, 9708, 
+    9711, 9714, 9717, 9720, 9723, 9726, 9729, 9732, 9735, 9737, 9739, 9741, 
+    9743, 9745, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 
+    9767, 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 
+    9791, 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 
+    9815, 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 
+    9839, 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 
+    9863, 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 
+    9887, 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9909, 
+    9911, 9913, 9915, 9917, 9919, 9921, 9923, 9925, 9927, 9929, 9931, 9933, 
+    9935, 9937, 9939, 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 
+    9959, 9961, 9963, 9965, 9967, 9969, 9972, 9975, 9978, 9981, 9984, 9987, 
+    9990, 0, 0, 0, 0, 9993, 9995, 9997, 9999, 10001, 10003, 10005, 10007, 
+    10009, 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 
+    10029, 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 
+    10049, 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 
+    10069, 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 
+    10089, 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 
+    10109, 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 
+    10129, 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 
+    10149, 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 
+    10169, 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 
+    10189, 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 
+    10209, 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 
+    10229, 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 
+    10249, 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 
+    10269, 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 
+    10289, 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 
+    10309, 10311, 10313, 10315, 10317, 10319, 10321, 10323, 10325, 10327, 
+    10329, 10331, 10333, 10335, 10337, 10339, 10341, 10343, 10345, 10347, 
+    10349, 10351, 10353, 10355, 10357, 10359, 10361, 10363, 10365, 10367, 
+    10369, 10371, 0, 0, 0, 10373, 10375, 10377, 10379, 10381, 10383, 0, 0, 
+    10385, 10387, 10389, 10391, 10393, 10395, 0, 0, 10397, 10399, 10401, 
+    10403, 10405, 10407, 0, 0, 10409, 10411, 10413, 0, 0, 0, 10415, 10417, 
+    10419, 10421, 10423, 10425, 10427, 0, 10429, 10431, 10433, 10435, 10437, 
+    10439, 10441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10443, 0, 10448, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 10458, 10463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 10468, 10473, 10478, 10483, 10488, 10493, 10498, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10503, 10508, 10513, 10518, 
+    10523, 10528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10533, 10535, 
+    10537, 10539, 10541, 10543, 10545, 10547, 10549, 10551, 10553, 10555, 
+    10557, 10559, 10561, 10563, 10565, 10567, 10569, 10571, 10573, 10575, 
+    10577, 10579, 10581, 10583, 10585, 10587, 10589, 10591, 10593, 10595, 
+    10597, 10599, 10601, 10603, 10605, 10607, 10609, 10611, 10613, 10615, 
+    10617, 10619, 10621, 10623, 10625, 10627, 10629, 10631, 10633, 10635, 
+    10637, 10639, 10641, 10643, 10645, 10647, 10649, 10651, 10653, 10655, 
+    10657, 10659, 10661, 10663, 10665, 10667, 10669, 10671, 10673, 10675, 
+    10677, 10679, 10681, 10683, 10685, 10687, 10689, 10691, 10693, 10695, 
+    10697, 10699, 10701, 0, 10703, 10705, 10707, 10709, 10711, 10713, 10715, 
+    10717, 10719, 10721, 10723, 10725, 10727, 10729, 10731, 10733, 10735, 
+    10737, 10739, 10741, 10743, 10745, 10747, 10749, 10751, 10753, 10755, 
+    10757, 10759, 10761, 10763, 10765, 10767, 10769, 10771, 10773, 10775, 
+    10777, 10779, 10781, 10783, 10785, 10787, 10789, 10791, 10793, 10795, 
+    10797, 10799, 10801, 10803, 10805, 10807, 10809, 10811, 10813, 10815, 
+    10817, 10819, 10821, 10823, 10825, 10827, 10829, 10831, 10833, 10835, 
+    10837, 10839, 10841, 10843, 0, 10845, 10847, 0, 0, 10849, 0, 0, 10851, 
+    10853, 0, 0, 10855, 10857, 10859, 10861, 0, 10863, 10865, 10867, 10869, 
+    10871, 10873, 10875, 10877, 10879, 10881, 10883, 10885, 0, 10887, 0, 
+    10889, 10891, 10893, 10895, 10897, 10899, 10901, 0, 10903, 10905, 10907, 
+    10909, 10911, 10913, 10915, 10917, 10919, 10921, 10923, 10925, 10927, 
+    10929, 10931, 10933, 10935, 10937, 10939, 10941, 10943, 10945, 10947, 
+    10949, 10951, 10953, 10955, 10957, 10959, 10961, 10963, 10965, 10967, 
+    10969, 10971, 10973, 10975, 10977, 10979, 10981, 10983, 10985, 10987, 
+    10989, 10991, 10993, 10995, 10997, 10999, 11001, 11003, 11005, 11007, 
+    11009, 11011, 11013, 11015, 11017, 11019, 11021, 11023, 11025, 11027, 
+    11029, 11031, 0, 11033, 11035, 11037, 11039, 0, 0, 11041, 11043, 11045, 
+    11047, 11049, 11051, 11053, 11055, 0, 11057, 11059, 11061, 11063, 11065, 
+    11067, 11069, 0, 11071, 11073, 11075, 11077, 11079, 11081, 11083, 11085, 
+    11087, 11089, 11091, 11093, 11095, 11097, 11099, 11101, 11103, 11105, 
+    11107, 11109, 11111, 11113, 11115, 11117, 11119, 11121, 11123, 11125, 0, 
+    11127, 11129, 11131, 11133, 0, 11135, 11137, 11139, 11141, 11143, 0, 
+    11145, 0, 0, 0, 11147, 11149, 11151, 11153, 11155, 11157, 11159, 0, 
+    11161, 11163, 11165, 11167, 11169, 11171, 11173, 11175, 11177, 11179, 
+    11181, 11183, 11185, 11187, 11189, 11191, 11193, 11195, 11197, 11199, 
+    11201, 11203, 11205, 11207, 11209, 11211, 11213, 11215, 11217, 11219, 
+    11221, 11223, 11225, 11227, 11229, 11231, 11233, 11235, 11237, 11239, 
+    11241, 11243, 11245, 11247, 11249, 11251, 11253, 11255, 11257, 11259, 
+    11261, 11263, 11265, 11267, 11269, 11271, 11273, 11275, 11277, 11279, 
+    11281, 11283, 11285, 11287, 11289, 11291, 11293, 11295, 11297, 11299, 
+    11301, 11303, 11305, 11307, 11309, 11311, 11313, 11315, 11317, 11319, 
+    11321, 11323, 11325, 11327, 11329, 11331, 11333, 11335, 11337, 11339, 
+    11341, 11343, 11345, 11347, 11349, 11351, 11353, 11355, 11357, 11359, 
+    11361, 11363, 11365, 11367, 11369, 11371, 11373, 11375, 11377, 11379, 
+    11381, 11383, 11385, 11387, 11389, 11391, 11393, 11395, 11397, 11399, 
+    11401, 11403, 11405, 11407, 11409, 11411, 11413, 11415, 11417, 11419, 
+    11421, 11423, 11425, 11427, 11429, 11431, 11433, 11435, 11437, 11439, 
+    11441, 11443, 11445, 11447, 11449, 11451, 11453, 11455, 11457, 11459, 
+    11461, 11463, 11465, 11467, 11469, 11471, 11473, 11475, 11477, 11479, 
+    11481, 11483, 11485, 11487, 11489, 11491, 11493, 11495, 11497, 11499, 
+    11501, 11503, 11505, 11507, 11509, 11511, 11513, 11515, 11517, 11519, 
+    11521, 11523, 11525, 11527, 11529, 11531, 11533, 11535, 11537, 11539, 
+    11541, 11543, 11545, 11547, 11549, 11551, 11553, 11555, 11557, 11559, 
+    11561, 11563, 11565, 11567, 11569, 11571, 11573, 11575, 11577, 11579, 
+    11581, 11583, 11585, 11587, 11589, 11591, 11593, 11595, 11597, 11599, 
+    11601, 11603, 11605, 11607, 11609, 11611, 11613, 11615, 11617, 11619, 
+    11621, 11623, 11625, 11627, 11629, 11631, 11633, 11635, 11637, 11639, 
+    11641, 11643, 11645, 11647, 11649, 11651, 11653, 11655, 11657, 11659, 
+    11661, 11663, 11665, 11667, 11669, 11671, 11673, 11675, 11677, 11679, 
+    11681, 11683, 11685, 11687, 11689, 11691, 11693, 11695, 11697, 11699, 
+    11701, 11703, 11705, 11707, 11709, 11711, 11713, 11715, 11717, 11719, 
+    11721, 11723, 11725, 11727, 11729, 11731, 11733, 11735, 11737, 11739, 
+    11741, 11743, 11745, 11747, 11749, 11751, 11753, 11755, 11757, 11759, 
+    11761, 11763, 11765, 11767, 11769, 11771, 11773, 11775, 11777, 11779, 
+    11781, 11783, 11785, 11787, 11789, 11791, 11793, 11795, 11797, 11799, 
+    11801, 11803, 11805, 11807, 11809, 11811, 11813, 11815, 11817, 11819, 
+    11821, 11823, 11825, 11827, 11829, 11831, 11833, 11835, 11837, 11839, 0, 
+    0, 11841, 11843, 11845, 11847, 11849, 11851, 11853, 11855, 11857, 11859, 
+    11861, 11863, 11865, 11867, 11869, 11871, 11873, 11875, 11877, 11879, 
+    11881, 11883, 11885, 11887, 11889, 11891, 11893, 11895, 11897, 11899, 
+    11901, 11903, 11905, 11907, 11909, 11911, 11913, 11915, 11917, 11919, 
+    11921, 11923, 11925, 11927, 11929, 11931, 11933, 11935, 11937, 11939, 
+    11941, 11943, 11945, 11947, 11949, 11951, 11953, 11955, 11957, 11959, 
+    11961, 11963, 11965, 11967, 11969, 11971, 11973, 11975, 11977, 11979, 
+    11981, 11983, 11985, 11987, 11989, 11991, 11993, 11995, 11997, 11999, 
+    12001, 12003, 12005, 12007, 12009, 12011, 12013, 12015, 12017, 12019, 
+    12021, 12023, 12025, 12027, 12029, 12031, 12033, 12035, 12037, 12039, 
+    12041, 12043, 12045, 12047, 12049, 12051, 12053, 12055, 12057, 12059, 
+    12061, 12063, 12065, 12067, 12069, 12071, 12073, 12075, 12077, 12079, 
+    12081, 12083, 12085, 12087, 12089, 12091, 12093, 12095, 12097, 12099, 
+    12101, 12103, 12105, 12107, 12109, 12111, 12113, 12115, 12117, 12119, 
+    12121, 12123, 12125, 12127, 12129, 12131, 12133, 12135, 12137, 12139, 
+    12141, 12143, 12145, 12147, 12149, 12151, 12153, 12155, 12157, 12159, 
+    12161, 12163, 12165, 12167, 12169, 12171, 12173, 12175, 12177, 12179, 
+    12181, 12183, 12185, 12187, 12189, 12191, 12193, 12195, 12197, 12199, 
+    12201, 12203, 12205, 12207, 12209, 12211, 12213, 12215, 12217, 12219, 
+    12221, 12223, 12225, 12227, 12229, 12231, 12233, 12235, 12237, 12239, 
+    12241, 12243, 12245, 12247, 12249, 12251, 12253, 12255, 12257, 12259, 
+    12261, 12263, 12265, 12267, 12269, 12271, 12273, 12275, 12277, 12279, 
+    12281, 12283, 12285, 12287, 12289, 12291, 12293, 12295, 12297, 12299, 
+    12301, 12303, 12305, 12307, 12309, 12311, 12313, 12315, 12317, 12319, 
+    12321, 12323, 12325, 12327, 12329, 12331, 12333, 12335, 12337, 12339, 
+    12341, 12343, 12345, 12347, 12349, 12351, 12353, 12355, 12357, 12359, 
+    12361, 12363, 12365, 12367, 12369, 12371, 12373, 12375, 12377, 12379, 
+    12381, 12383, 12385, 12387, 12389, 12391, 12393, 12395, 12397, 12399, 
+    12401, 12403, 12405, 12407, 12409, 12411, 12413, 12415, 12417, 12419, 
+    12421, 12423, 0, 0, 12425, 12427, 12429, 12431, 12433, 12435, 12437, 
+    12439, 12441, 12443, 12445, 12447, 12449, 12451, 12453, 12455, 12457, 
+    12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477, 
+    12479, 12481, 12483, 12485, 12487, 12489, 12491, 12493, 12495, 12497, 
+    12499, 12501, 12503, 12505, 12507, 12509, 12511, 12513, 12515, 12517, 
+    12519, 12521, 12523, 12525, 12527, 12529, 12531, 0, 12533, 12535, 12537, 
+    12539, 12541, 12543, 12545, 12547, 12549, 12551, 12553, 12555, 12557, 
+    12559, 12561, 12563, 12565, 12567, 12569, 12571, 12573, 12575, 12577, 
+    12579, 12581, 12583, 12585, 0, 12587, 12589, 0, 12591, 0, 0, 12593, 0, 
+    12595, 12597, 12599, 12601, 12603, 12605, 12607, 12609, 12611, 12613, 0, 
+    12615, 12617, 12619, 12621, 0, 12623, 0, 12625, 0, 0, 0, 0, 0, 0, 12627, 
+    0, 0, 0, 0, 12629, 0, 12631, 0, 12633, 0, 12635, 12637, 12639, 0, 12641, 
+    12643, 0, 12645, 0, 0, 12647, 0, 12649, 0, 12651, 0, 12653, 0, 12655, 0, 
+    12657, 12659, 0, 12661, 0, 0, 12663, 12665, 12667, 12669, 0, 12671, 
+    12673, 12675, 12677, 12679, 12681, 12683, 0, 12685, 12687, 12689, 12691, 
+    0, 12693, 12695, 12697, 12699, 0, 12701, 0, 12703, 12705, 12707, 12709, 
+    12711, 12713, 12715, 12717, 12719, 12721, 0, 12723, 12725, 12727, 12729, 
+    12731, 12733, 12735, 12737, 12739, 12741, 12743, 12745, 12747, 12749, 
+    12751, 12753, 12755, 0, 0, 0, 0, 0, 12757, 12759, 12761, 0, 12763, 12765, 
+    12767, 12769, 12771, 0, 12773, 12775, 12777, 12779, 12781, 12783, 12785, 
+    12787, 12789, 12791, 12793, 12795, 12797, 12799, 12801, 12803, 12805, 0, 
+    0, 0, 0, 12807, 12810, 12813, 12816, 12819, 12822, 12825, 12828, 12831, 
+    12834, 12837, 0, 0, 0, 0, 0, 12840, 12844, 12848, 12852, 12856, 12860, 
+    12864, 12868, 12872, 12876, 12880, 12884, 12888, 12892, 12896, 12900, 
+    12904, 12908, 12912, 12916, 12920, 12924, 12928, 12932, 12936, 12940, 
+    12944, 12948, 12950, 12952, 12955, 0, 12958, 12960, 12962, 12964, 12966, 
+    12968, 12970, 12972, 12974, 12976, 12978, 12980, 12982, 12984, 12986, 
+    12988, 12990, 12992, 12994, 12996, 12998, 13000, 13002, 13004, 13006, 
+    13008, 13010, 13013, 13016, 13019, 13022, 13026, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 13029, 13032, 0, 0, 0, 0, 13035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 13038, 13041, 13044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    13046, 13048, 13050, 13052, 13054, 13056, 13058, 13060, 13062, 13064, 
+    13066, 13068, 13070, 13072, 13074, 13076, 13078, 13080, 13082, 13084, 
+    13086, 13088, 13090, 13092, 13094, 13096, 13098, 13100, 13102, 13104, 
+    13106, 13108, 13110, 13112, 13114, 13116, 13118, 13120, 13122, 13124, 
+    13126, 13128, 13130, 0, 0, 0, 0, 0, 13132, 13136, 13140, 13144, 13148, 
+    13152, 13156, 13160, 13164, 0, 0, 0, 0, 0, 0, 0, 13168, 13170, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13172, 13174, 13176, 13178, 13181, 
+    13183, 13185, 13187, 13189, 13191, 13193, 13195, 13197, 13199, 13202, 
+    13204, 13206, 13208, 13210, 13213, 13215, 13217, 13219, 13222, 13224, 
+    13226, 13228, 13230, 13232, 13235, 13237, 13239, 13241, 13243, 13245, 
+    13247, 13249, 13251, 13253, 13255, 13257, 13259, 13261, 13263, 13265, 
+    13267, 13269, 13271, 13273, 13275, 13277, 13279, 13281, 13284, 13286, 
+    13288, 13290, 13293, 13295, 13297, 13299, 13301, 13303, 13305, 13307, 
+    13309, 13311, 13313, 13315, 13317, 13319, 13321, 13323, 13325, 13327, 
+    13329, 13331, 13333, 13335, 13337, 13339, 13341, 13343, 13345, 13347, 
+    13349, 13351, 13353, 13355, 13357, 13360, 13362, 13364, 13366, 13368, 
+    13370, 13372, 13375, 13378, 13380, 13382, 13384, 13386, 13388, 13390, 
+    13392, 13394, 13396, 13398, 13401, 13403, 13405, 13407, 13409, 13412, 
+    13414, 13416, 13418, 13420, 13422, 13424, 13426, 13428, 13430, 13433, 
+    13435, 13438, 13440, 13442, 13444, 13446, 13448, 13450, 13452, 13454, 
+    13456, 13458, 13460, 13463, 13465, 13467, 13469, 13471, 13473, 13476, 
+    13478, 13481, 13484, 13486, 13488, 13490, 13492, 13495, 13498, 13500, 
+    13502, 13504, 13506, 13508, 13510, 13512, 13514, 13516, 13518, 13520, 
+    13523, 13525, 13527, 13529, 13531, 13533, 13535, 13537, 13539, 13541, 
+    13543, 13545, 13547, 13549, 13551, 13553, 13555, 13557, 13559, 13561, 
+    13564, 13566, 13568, 13570, 13572, 13574, 13577, 13579, 13581, 13583, 
+    13585, 13587, 13589, 13591, 13593, 13595, 13597, 13599, 13602, 13604, 
+    13606, 13608, 13610, 13612, 13614, 13616, 13618, 13620, 13622, 13624, 
+    13626, 13628, 13630, 13632, 13634, 13636, 13638, 13641, 13643, 13645, 
+    13647, 13649, 13651, 13654, 13656, 13658, 13660, 13662, 13664, 13666, 
+    13668, 13670, 13673, 13675, 13677, 13679, 13682, 13684, 13686, 13688, 
+    13690, 13692, 13694, 13697, 13700, 13703, 13705, 13708, 13710, 13712, 
+    13714, 13716, 13718, 13720, 13722, 13724, 13726, 13728, 13731, 13733, 
+    13735, 13737, 13739, 13741, 13743, 13746, 13748, 13750, 13753, 13756, 
+    13758, 13760, 13762, 13764, 13766, 13768, 13770, 13772, 13774, 13777, 
+    13779, 13782, 13784, 13787, 13789, 13791, 13793, 13796, 13798, 13800, 
+    13803, 13806, 13808, 13810, 13812, 13814, 13816, 13818, 13820, 13822, 
+    13824, 13826, 13828, 13830, 13832, 13835, 13837, 13840, 13842, 13845, 
+    13847, 13850, 13853, 13856, 13858, 13860, 13862, 13865, 13868, 13871, 
+    13874, 13876, 13878, 13880, 13882, 13884, 13886, 13888, 13890, 13893, 
+    13895, 13897, 13899, 13901, 13904, 13906, 13909, 13912, 13914, 13916, 
+    13918, 13920, 13922, 13924, 13927, 13930, 13933, 13935, 13937, 13940, 
+    13942, 13944, 13946, 13949, 13951, 13953, 13955, 13957, 13959, 13962, 
+    13964, 13966, 13968, 13970, 13972, 13974, 13977, 13980, 13982, 13985, 
+    13987, 13990, 13992, 13994, 13996, 13999, 14002, 14004, 14007, 14009, 
+    14012, 14014, 14016, 14018, 14020, 14022, 14024, 14027, 14030, 14033, 
+    14036, 14038, 14040, 14042, 14044, 14046, 14048, 14050, 14052, 14054, 
+    14056, 14058, 14060, 14063, 14065, 14067, 14069, 14071, 14073, 14075, 
+    14077, 14079, 14081, 14083, 14085, 14087, 14090, 14093, 14096, 14098, 
+    14100, 14102, 14104, 14107, 14109, 14112, 14114, 14116, 14119, 14122, 
+    14124, 14126, 14128, 14130, 14132, 14134, 14136, 14138, 14140, 14142, 
+    14144, 14146, 14148, 14150, 14152, 14154, 14156, 14158, 14160, 14163, 
+    14165, 14167, 14169, 14171, 14173, 14176, 14179, 14181, 14183, 14185, 
+    14187, 14189, 14191, 14194, 14196, 14198, 14200, 14202, 14205, 14208, 
+    14210, 14212, 14214, 14217, 14219, 14221, 14224, 14227, 14229, 14231, 
+    14233, 14236, 14238, 14240, 14242, 14244, 14246, 14248, 14250, 14253, 
+    14255, 14257, 14259, 14262, 14264, 14266, 14268, 14270, 14273, 14276, 
+    14278, 14280, 14282, 14285, 14287, 14290, 14292, 14294, 14296, 14299, 
+    14301, 14303, 14305, 14307, 14309, 14311, 14313, 14316, 14318, 14320, 
+    14322, 14324, 14326, 14328, 14331, 14333, 14336, 14339, 14342, 14344, 
+    14346, 14348, 14350, 14352, 14354, 14356, 14358, 0, 0, 
+};
+
+/* NFC pairs */
+#define COMP_SHIFT1 2
+#define COMP_SHIFT2 1
+static const unsigned short comp_index0[] = {
+    0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 
+    0, 0, 0, 0, 7, 0, 8, 9, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 13, 14, 15, 16, 
+    0, 0, 0, 17, 18, 19, 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 
+    0, 0, 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, 0, 0, 0, 33, 0, 0, 0, 0, 
+    0, 0, 34, 35, 36, 37, 0, 0, 0, 38, 39, 40, 41, 0, 0, 0, 42, 0, 43, 0, 0, 
+    0, 0, 44, 45, 46, 47, 0, 0, 0, 48, 49, 50, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 
+    0, 52, 53, 54, 55, 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 
+    0, 63, 64, 65, 66, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 
+    71, 0, 0, 0, 0, 0, 0, 72, 73, 74, 0, 0, 0, 0, 75, 76, 77, 78, 0, 0, 0, 
+    79, 80, 81, 0, 0, 0, 0, 82, 0, 83, 84, 0, 0, 0, 85, 86, 87, 0, 0, 0, 0, 
+    88, 89, 90, 91, 0, 0, 0, 92, 93, 94, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 
+    97, 98, 99, 0, 0, 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, 105, 106, 107, 
+    0, 0, 0, 108, 109, 0, 0, 0, 0, 0, 110, 111, 112, 113, 0, 0, 0, 114, 115, 
+    116, 117, 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 120, 121, 122, 123, 0, 0, 0, 
+    124, 125, 126, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 128, 129, 130, 131, 0, 
+    0, 0, 132, 133, 134, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 0, 139, 140, 
+    141, 142, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 145, 146, 147, 0, 0, 0, 0, 
+    148, 0, 0, 0, 0, 0, 0, 149, 150, 151, 0, 0, 0, 0, 152, 153, 154, 155, 0, 
+    0, 0, 156, 0, 0, 157, 0, 0, 0, 158, 159, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 
+    0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 
+    0, 164, 165, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 167, 168, 0, 0, 0, 0, 
+    0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 
+    172, 173, 0, 0, 0, 0, 0, 174, 175, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 
+    177, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 180, 
+    181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, 185, 
+    0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 188, 189, 
+    0, 0, 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0, 194, 0, 
+    0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 197, 0, 0, 
+    0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 
+    0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 
+    0, 0, 204, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 
+    0, 207, 208, 209, 0, 0, 0, 0, 210, 211, 212, 0, 0, 0, 0, 213, 214, 215, 
+    0, 0, 0, 0, 216, 217, 218, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 
+    0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 
+    0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 
+    0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 229, 230, 0, 231, 0, 
+    0, 0, 232, 233, 0, 0, 0, 0, 0, 234, 235, 0, 236, 0, 0, 0, 237, 238, 0, 0, 
+    0, 0, 0, 239, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 242, 243, 0, 0, 
+    0, 0, 0, 244, 245, 0, 246, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 248, 
+    0, 0, 0, 249, 250, 0, 251, 0, 0, 0, 252, 253, 0, 0, 0, 0, 0, 254, 255, 0, 
+    256, 0, 0, 0, 257, 258, 0, 259, 0, 0, 0, 260, 261, 0, 0, 0, 0, 0, 0, 262, 
+    0, 0, 0, 0, 0, 263, 264, 0, 265, 0, 0, 0, 266, 267, 0, 268, 0, 0, 0, 269, 
+    0, 0, 270, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 274, 
+    0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 277, 0, 
+    0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, 
+    0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 
+    0, 0, 0, 284, 285, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 
+    0, 0, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 
+    0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 
+    294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 297, 
+    298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 
+    0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 304, 0, 
+    0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 
+    0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, 0, 0, 311, 0, 
+    0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 
+    0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 
+    0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 
+    0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 
+    0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 
+    0, 0, 328, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 
+    0, 331, 332, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 
+    0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 
+    338, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 
+    0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 344, 0, 
+    0, 0, 0, 0, 0, 345, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 
+    0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 
+    0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 
+    0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 
+    0, 0, 358, 0, 0, 359, 0, 0, 0, 360, 0, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 
+    0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 
+    0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 
+    370, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 
+    0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 
+    0, 377, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 
+    0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 384, 0, 0, 
+    385, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 388, 
+    0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 391, 0, 
+    0, 0, 392, 0, 0, 393, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 
+    0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 
+    0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 
+    404, 0, 0, 405, 0, 0, 0, 406, 0, 0, 407, 0, 0, 0, 408, 0, 0, 409, 0, 0, 
+    0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 
+    413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 
+    418, 0, 0, 419, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 422, 0, 0, 423, 0, 0, 
+    0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 
+    0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 430, 
+    0, 0, 431, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 
+    0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 
+    438, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 441, 
+    0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 445, 0, 
+    0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 449, 0, 0, 
+    0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 
+    0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 
+    0, 0, 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 
+    0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 
+    462, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 
+    0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 
+    0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 471, 0, 0, 
+    0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 
+    0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 
+    0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 
+    0, 481, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 
+    484, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 487, 
+    0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 
+    493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 
+    0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 
+    0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 
+    0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 
+    0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 
+    0, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 
+    0, 512, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 
+    515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 
+    0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 
+    0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 0, 
+    0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 
+    0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 
+    0, 0, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 
+    0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 
+    537, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 540, 
+    0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 
+};
+
+static const unsigned short comp_index1[] = {
+    0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 4, 5, 6, 7, 8, 9, 10, 0, 
+    11, 12, 0, 13, 0, 0, 0, 14, 15, 0, 0, 0, 0, 16, 0, 0, 17, 18, 0, 19, 0, 
+    20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 23, 0, 0, 24, 0, 25, 26, 0, 27, 0, 
+    0, 28, 29, 30, 31, 32, 33, 34, 0, 35, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 
+    39, 40, 41, 42, 43, 0, 44, 0, 0, 0, 0, 45, 0, 0, 46, 0, 47, 0, 48, 0, 0, 
+    49, 0, 50, 0, 51, 0, 0, 0, 52, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 
+    61, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 65, 0, 66, 0, 0, 67, 
+    0, 0, 68, 0, 0, 0, 0, 69, 0, 0, 70, 0, 71, 72, 0, 73, 0, 0, 74, 0, 0, 75, 
+    76, 0, 0, 0, 77, 78, 0, 79, 0, 80, 0, 0, 81, 0, 82, 83, 0, 84, 0, 0, 85, 
+    86, 87, 88, 89, 90, 91, 0, 92, 0, 0, 93, 94, 0, 0, 95, 96, 0, 0, 97, 0, 
+    98, 99, 0, 100, 0, 101, 0, 0, 102, 0, 0, 103, 104, 0, 105, 0, 106, 0, 0, 
+    107, 0, 108, 0, 0, 0, 0, 109, 0, 110, 0, 0, 111, 0, 112, 113, 0, 114, 0, 
+    0, 115, 116, 117, 118, 119, 120, 121, 0, 122, 123, 0, 124, 125, 0, 0, 0, 
+    0, 126, 0, 0, 127, 0, 0, 0, 128, 129, 0, 130, 131, 0, 0, 0, 0, 0, 0, 132, 
+    133, 134, 135, 136, 137, 0, 0, 0, 138, 0, 0, 0, 139, 140, 0, 141, 0, 142, 
+    0, 0, 143, 0, 0, 0, 0, 144, 0, 0, 145, 146, 147, 148, 149, 150, 151, 0, 
+    152, 153, 0, 154, 0, 0, 0, 155, 156, 0, 0, 0, 0, 157, 0, 0, 158, 159, 0, 
+    160, 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 164, 0, 0, 165, 0, 166, 
+    167, 0, 168, 0, 0, 169, 170, 171, 172, 173, 174, 175, 0, 176, 0, 177, 
+    178, 179, 0, 0, 0, 0, 0, 0, 180, 181, 182, 183, 184, 0, 185, 0, 0, 0, 0, 
+    186, 0, 0, 187, 0, 188, 0, 189, 0, 0, 190, 0, 191, 0, 192, 193, 0, 0, 
+    194, 195, 196, 197, 198, 199, 200, 0, 201, 0, 0, 202, 203, 0, 0, 0, 0, 
+    204, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, 0, 
+    210, 0, 0, 211, 0, 0, 0, 0, 212, 0, 0, 213, 0, 214, 215, 0, 216, 0, 0, 
+    217, 0, 0, 218, 219, 0, 0, 0, 220, 221, 0, 222, 0, 223, 0, 0, 224, 0, 
+    225, 226, 0, 227, 0, 0, 228, 229, 230, 231, 232, 233, 234, 0, 235, 0, 0, 
+    236, 237, 0, 0, 238, 239, 0, 0, 240, 0, 241, 242, 0, 243, 0, 244, 0, 0, 
+    245, 0, 0, 246, 247, 0, 248, 0, 249, 0, 0, 250, 0, 251, 0, 0, 0, 0, 252, 
+    0, 253, 0, 0, 254, 0, 255, 256, 0, 257, 0, 0, 258, 259, 260, 261, 262, 
+    263, 264, 0, 265, 266, 0, 267, 268, 0, 0, 0, 0, 269, 0, 0, 270, 0, 0, 0, 
+    271, 272, 0, 273, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 277, 278, 
+    279, 280, 281, 0, 0, 0, 282, 0, 0, 0, 283, 284, 0, 285, 0, 286, 0, 0, 
+    287, 0, 0, 0, 0, 288, 0, 0, 289, 0, 0, 0, 0, 0, 290, 0, 291, 292, 0, 0, 
+    293, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 0, 296, 0, 297, 0, 298, 0, 0, 0, 
+    299, 300, 0, 0, 301, 0, 0, 0, 302, 0, 0, 0, 303, 304, 0, 0, 305, 0, 0, 0, 
+    306, 0, 307, 308, 0, 0, 309, 0, 310, 0, 0, 0, 311, 0, 312, 0, 0, 313, 0, 
+    0, 314, 315, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 318, 0, 0, 0, 319, 0, 320, 
+    0, 321, 0, 0, 0, 322, 323, 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 326, 327, 0, 
+    0, 328, 0, 0, 0, 329, 0, 330, 331, 0, 0, 332, 0, 333, 0, 0, 0, 334, 0, 
+    335, 0, 0, 336, 0, 0, 337, 338, 0, 0, 339, 0, 0, 0, 340, 341, 0, 0, 342, 
+    0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 
+    347, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 350, 351, 0, 0, 0, 352, 0, 0, 
+    0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 356, 357, 0, 0, 358, 0, 0, 
+    0, 359, 0, 0, 0, 360, 361, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 364, 365, 0, 
+    0, 366, 0, 0, 0, 367, 0, 0, 0, 368, 369, 0, 0, 370, 0, 0, 0, 371, 0, 0, 
+    0, 0, 372, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, 376, 0, 
+    0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 381, 0, 0, 
+    382, 0, 383, 0, 0, 0, 0, 384, 0, 0, 385, 0, 386, 0, 0, 0, 0, 0, 0, 387, 
+    388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 392, 393, 0, 0, 0, 394, 
+    395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 397, 398, 0, 399, 400, 0, 0, 0, 401, 
+    402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 406, 0, 
+    407, 0, 408, 0, 0, 0, 0, 409, 0, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 412, 
+    413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 416, 0, 417, 418, 0, 0, 0, 419, 
+    0, 0, 420, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 423, 424, 0, 425, 426, 
+    0, 0, 0, 427, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 
+    432, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 0, 0, 0, 435, 0, 0, 0, 436, 0, 
+    437, 0, 0, 438, 0, 0, 0, 439, 0, 0, 440, 441, 442, 0, 0, 0, 443, 0, 444, 
+    445, 0, 0, 446, 447, 0, 0, 0, 448, 449, 0, 450, 451, 452, 0, 0, 0, 0, 0, 
+    0, 453, 0, 0, 454, 455, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 
+    0, 459, 0, 0, 460, 461, 462, 0, 0, 0, 463, 0, 464, 465, 0, 0, 466, 467, 
+    0, 0, 0, 468, 469, 0, 470, 471, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 474, 
+    475, 0, 476, 0, 0, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 
+    480, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, 0, 484, 0, 0, 0, 
+    485, 0, 0, 0, 486, 0, 0, 0, 487, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 
+    490, 0, 0, 0, 491, 0, 0, 0, 492, 0, 0, 0, 493, 494, 0, 0, 0, 495, 0, 0, 
+    0, 496, 0, 0, 0, 0, 497, 0, 0, 0, 0, 498, 499, 500, 0, 0, 0, 0, 0, 0, 
+    501, 502, 0, 0, 0, 0, 0, 0, 503, 504, 0, 0, 0, 0, 505, 0, 0, 0, 506, 507, 
+    0, 0, 508, 0, 0, 0, 0, 509, 510, 0, 0, 511, 0, 0, 0, 0, 512, 513, 0, 0, 
+    0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 
+    0, 519, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 0, 
+    524, 0, 0, 0, 525, 0, 0, 0, 526, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 0, 
+    529, 0, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, 0, 532, 0, 533, 534, 0, 0, 535, 
+    536, 0, 0, 537, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 541, 0, 
+    0, 0, 0, 0, 542, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 
+    0, 0, 0, 547, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 0, 550, 0, 551, 0, 0, 0, 
+    0, 0, 552, 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 555, 0, 0, 0, 556, 0, 0, 
+    0, 557, 0, 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 560, 0, 561, 0, 0, 0, 562, 
+    0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 0, 0, 566, 0, 567, 0, 
+    0, 0, 0, 0, 568, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 571, 0, 0, 0, 572, 
+    0, 0, 0, 573, 0, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, 
+    0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 
+    0, 583, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 
+    588, 0, 589, 0, 0, 0, 0, 0, 590, 0, 591, 0, 0, 0, 0, 0, 592, 0, 593, 0, 
+    0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 0, 0, 0, 598, 
+    0, 599, 0, 0, 0, 0, 0, 600, 0, 601, 0, 0, 0, 0, 0, 602, 0, 603, 0, 0, 0, 
+    0, 0, 604, 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, 
+    0, 609, 0, 0, 0, 610, 0, 0, 0, 611, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 0, 
+    614, 0, 615, 0, 0, 0, 0, 0, 616, 0, 0, 0, 617, 0, 0, 0, 618, 0, 0, 0, 
+    619, 0, 0, 0, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 
+    624, 0, 0, 0, 625, 0, 0, 0, 626, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 0, 
+    629, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 0, 0, 634, 
+    0, 0, 0, 635, 0, 0, 0, 636, 0, 0, 0, 637, 0, 0, 0, 638, 0, 0, 0, 639, 0, 
+    0, 0, 640, 0, 0, 0, 641, 0, 0, 0, 642, 0, 0, 0, 643, 0, 0, 0, 644, 0, 0, 
+    0, 645, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 0, 
+    650, 0, 0, 0, 651, 0, 0, 0, 652, 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 0, 
+    655, 0, 0, 0, 656, 0, 0, 0, 657, 0, 0, 0, 658, 0, 0, 0, 659, 0, 0, 0, 
+    660, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 663, 0, 0, 0, 664, 0, 0, 0, 
+    665, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 669, 0, 0, 0, 
+    670, 0, 0, 0, 671, 0, 0, 0, 672, 0, 0, 0, 673, 0, 0, 0, 0, 674, 0, 0, 0, 
+    675, 0, 0, 0, 676, 0, 0, 0, 677, 0, 0, 0, 678, 0, 0, 0, 679, 0, 0, 0, 
+    680, 0, 0, 0, 681, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 
+    685, 0, 0, 0, 686, 0, 0, 0, 687, 0, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, 
+    690, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 0, 693, 0, 0, 0, 694, 0, 0, 0, 
+    695, 0, 0, 0, 696, 0, 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 699, 0, 0, 0, 
+    700, 0, 0, 0, 701, 0, 0, 0, 702, 0, 0, 0, 703, 0, 0, 0, 704, 0, 0, 0, 
+    705, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, 708, 0, 0, 0, 709, 0, 0, 0, 
+    710, 0, 0, 0, 711, 0, 0, 0, 712, 0, 0, 0, 713, 0, 0, 0, 714, 0, 0, 0, 
+    715, 0, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 
+    720, 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 724, 0, 0, 0, 
+    725, 0, 0, 0, 726, 
+};
+
+static const unsigned int comp_data[] = {
+    0, 0, 0, 8814, 0, 8800, 0, 8815, 192, 193, 194, 195, 256, 258, 550, 196, 
+    7842, 197, 0, 461, 512, 514, 0, 7840, 0, 7680, 260, 0, 7682, 0, 0, 7684, 
+    7686, 0, 0, 262, 264, 0, 266, 0, 0, 268, 0, 199, 7690, 0, 0, 270, 0, 
+    7692, 0, 7696, 0, 7698, 7694, 0, 200, 201, 202, 7868, 274, 276, 278, 203, 
+    7866, 0, 0, 282, 516, 518, 0, 7864, 0, 552, 280, 7704, 0, 7706, 7710, 0, 
+    0, 500, 284, 0, 7712, 286, 288, 0, 0, 486, 0, 290, 292, 0, 7714, 7718, 0, 
+    542, 0, 7716, 0, 7720, 7722, 0, 204, 205, 206, 296, 298, 300, 304, 207, 
+    7880, 0, 0, 463, 520, 522, 0, 7882, 302, 0, 0, 7724, 308, 0, 0, 7728, 0, 
+    488, 0, 7730, 0, 310, 7732, 0, 0, 313, 0, 317, 0, 7734, 0, 315, 0, 7740, 
+    7738, 0, 0, 7742, 7744, 0, 0, 7746, 504, 323, 0, 209, 7748, 0, 0, 327, 0, 
+    7750, 0, 325, 0, 7754, 7752, 0, 210, 211, 212, 213, 332, 334, 558, 214, 
+    7886, 0, 336, 465, 524, 526, 416, 7884, 490, 0, 0, 7764, 7766, 0, 0, 340, 
+    7768, 0, 0, 344, 528, 530, 0, 7770, 0, 342, 7774, 0, 0, 346, 348, 0, 
+    7776, 0, 0, 352, 0, 7778, 536, 350, 7786, 0, 0, 356, 0, 7788, 538, 354, 
+    0, 7792, 7790, 0, 217, 218, 219, 360, 362, 364, 0, 220, 7910, 366, 368, 
+    467, 532, 534, 431, 7908, 7794, 0, 370, 7798, 0, 7796, 0, 7804, 0, 7806, 
+    7808, 7810, 372, 0, 7814, 7812, 0, 7816, 7818, 7820, 7922, 221, 374, 
+    7928, 562, 0, 7822, 376, 7926, 0, 0, 7924, 0, 377, 7824, 0, 379, 0, 0, 
+    381, 0, 7826, 7828, 0, 224, 225, 226, 227, 257, 259, 551, 228, 7843, 229, 
+    0, 462, 513, 515, 0, 7841, 0, 7681, 261, 0, 7683, 0, 0, 7685, 7687, 0, 0, 
+    263, 265, 0, 267, 0, 0, 269, 0, 231, 7691, 0, 0, 271, 0, 7693, 0, 7697, 
+    0, 7699, 7695, 0, 232, 233, 234, 7869, 275, 277, 279, 235, 7867, 0, 0, 
+    283, 517, 519, 0, 7865, 0, 553, 281, 7705, 0, 7707, 7711, 0, 0, 501, 285, 
+    0, 7713, 287, 289, 0, 0, 487, 0, 291, 293, 0, 7715, 7719, 0, 543, 0, 
+    7717, 0, 7721, 7723, 0, 7830, 0, 236, 237, 238, 297, 299, 301, 0, 239, 
+    7881, 0, 0, 464, 521, 523, 0, 7883, 303, 0, 0, 7725, 309, 0, 0, 496, 0, 
+    7729, 0, 489, 0, 7731, 0, 311, 7733, 0, 0, 314, 0, 318, 0, 7735, 0, 316, 
+    0, 7741, 7739, 0, 0, 7743, 7745, 0, 0, 7747, 505, 324, 0, 241, 7749, 0, 
+    0, 328, 0, 7751, 0, 326, 0, 7755, 7753, 0, 242, 243, 244, 245, 333, 335, 
+    559, 246, 7887, 0, 337, 466, 525, 527, 417, 7885, 491, 0, 0, 7765, 7767, 
+    0, 0, 341, 7769, 0, 0, 345, 529, 531, 0, 7771, 0, 343, 7775, 0, 0, 347, 
+    349, 0, 7777, 0, 0, 353, 0, 7779, 537, 351, 7787, 7831, 0, 357, 0, 7789, 
+    539, 355, 0, 7793, 7791, 0, 249, 250, 251, 361, 363, 365, 0, 252, 7911, 
+    367, 369, 468, 533, 535, 432, 7909, 7795, 0, 371, 7799, 0, 7797, 0, 7805, 
+    0, 7807, 7809, 7811, 373, 0, 7815, 7813, 0, 7832, 0, 7817, 7819, 7821, 
+    7923, 253, 375, 7929, 563, 0, 7823, 255, 7927, 7833, 0, 7925, 0, 378, 
+    7825, 0, 380, 0, 0, 382, 0, 7827, 7829, 0, 8173, 901, 8129, 0, 7846, 
+    7844, 0, 7850, 7848, 0, 478, 0, 0, 506, 0, 508, 482, 0, 0, 7688, 7872, 
+    7870, 0, 7876, 7874, 0, 0, 7726, 7890, 7888, 0, 7894, 7892, 0, 0, 7756, 
+    556, 0, 0, 7758, 554, 0, 0, 510, 475, 471, 469, 0, 0, 473, 7847, 7845, 0, 
+    7851, 7849, 0, 479, 0, 0, 507, 0, 509, 483, 0, 0, 7689, 7873, 7871, 0, 
+    7877, 7875, 0, 0, 7727, 7891, 7889, 0, 7895, 7893, 0, 0, 7757, 557, 0, 0, 
+    7759, 555, 0, 0, 511, 476, 472, 470, 0, 0, 474, 7856, 7854, 0, 7860, 
+    7858, 0, 7857, 7855, 0, 7861, 7859, 0, 7700, 7702, 7701, 7703, 7760, 
+    7762, 7761, 7763, 7780, 0, 7781, 0, 7782, 0, 7783, 0, 0, 7800, 0, 7801, 
+    0, 7802, 0, 7803, 7835, 0, 7900, 7898, 0, 7904, 7902, 0, 0, 7906, 7901, 
+    7899, 0, 7905, 7903, 0, 0, 7907, 7914, 7912, 0, 7918, 7916, 0, 0, 7920, 
+    7915, 7913, 0, 7919, 7917, 0, 0, 7921, 0, 494, 492, 0, 493, 0, 480, 0, 
+    481, 0, 0, 7708, 0, 7709, 560, 0, 561, 0, 0, 495, 8122, 902, 8121, 8120, 
+    7944, 7945, 0, 8124, 8136, 904, 7960, 7961, 8138, 905, 7976, 7977, 0, 
+    8140, 8154, 906, 8153, 8152, 0, 938, 7992, 7993, 8184, 908, 8008, 8009, 
+    0, 8172, 8170, 910, 8169, 8168, 0, 939, 0, 8025, 8186, 911, 8040, 8041, 
+    0, 8188, 0, 8116, 0, 8132, 8048, 940, 8113, 8112, 7936, 7937, 8118, 8115, 
+    8050, 941, 7952, 7953, 8052, 942, 7968, 7969, 8134, 8131, 8054, 943, 
+    8145, 8144, 0, 970, 7984, 7985, 8150, 0, 8056, 972, 8000, 8001, 8164, 
+    8165, 8058, 973, 8161, 8160, 0, 971, 8016, 8017, 8166, 0, 8060, 974, 
+    8032, 8033, 8182, 8179, 8146, 912, 8151, 0, 8162, 944, 8167, 0, 0, 8180, 
+    0, 979, 0, 980, 0, 1031, 0, 1232, 0, 1234, 0, 1027, 1024, 0, 0, 1238, 0, 
+    1025, 0, 1217, 0, 1244, 0, 1246, 1037, 0, 1250, 1049, 0, 1252, 0, 1036, 
+    0, 1254, 1262, 1038, 0, 1264, 1266, 0, 0, 1268, 0, 1272, 0, 1260, 0, 
+    1233, 0, 1235, 0, 1107, 1104, 0, 0, 1239, 0, 1105, 0, 1218, 0, 1245, 0, 
+    1247, 1117, 0, 1251, 1081, 0, 1253, 0, 1116, 0, 1255, 1263, 1118, 0, 
+    1265, 1267, 0, 0, 1269, 0, 1273, 0, 1261, 0, 1111, 1142, 0, 1143, 0, 0, 
+    1242, 0, 1243, 0, 1258, 0, 1259, 1570, 1571, 1573, 0, 0, 1572, 0, 1574, 
+    0, 1730, 0, 1747, 0, 1728, 0, 2345, 0, 2353, 0, 2356, 2507, 2508, 2891, 
+    2888, 2892, 0, 2964, 0, 0, 3018, 3020, 0, 0, 3019, 0, 3144, 0, 3264, 
+    3274, 3271, 3272, 0, 0, 3275, 0, 3402, 3404, 0, 0, 3403, 0, 3546, 3548, 
+    3550, 0, 3549, 4134, 0, 0, 6918, 0, 6920, 0, 6922, 0, 6924, 0, 6926, 0, 
+    6930, 0, 6971, 0, 6973, 0, 6976, 0, 6977, 0, 6979, 7736, 0, 7737, 0, 
+    7772, 0, 7773, 0, 7784, 0, 7785, 0, 7852, 0, 0, 7862, 7853, 0, 0, 7863, 
+    7878, 0, 7879, 0, 7896, 0, 7897, 0, 7938, 7940, 7942, 8064, 7939, 7941, 
+    7943, 8065, 0, 8066, 0, 8067, 0, 8068, 0, 8069, 0, 8070, 0, 8071, 7946, 
+    7948, 7950, 8072, 7947, 7949, 7951, 8073, 0, 8074, 0, 8075, 0, 8076, 0, 
+    8077, 0, 8078, 0, 8079, 7954, 7956, 7955, 7957, 7962, 7964, 7963, 7965, 
+    7970, 7972, 7974, 8080, 7971, 7973, 7975, 8081, 0, 8082, 0, 8083, 0, 
+    8084, 0, 8085, 0, 8086, 0, 8087, 7978, 7980, 7982, 8088, 7979, 7981, 
+    7983, 8089, 0, 8090, 0, 8091, 0, 8092, 0, 8093, 0, 8094, 0, 8095, 7986, 
+    7988, 7990, 0, 7987, 7989, 7991, 0, 7994, 7996, 7998, 0, 7995, 7997, 
+    7999, 0, 8002, 8004, 8003, 8005, 8010, 8012, 8011, 8013, 8018, 8020, 
+    8022, 0, 8019, 8021, 8023, 0, 8027, 8029, 8031, 0, 8034, 8036, 8038, 
+    8096, 8035, 8037, 8039, 8097, 0, 8098, 0, 8099, 0, 8100, 0, 8101, 0, 
+    8102, 0, 8103, 8042, 8044, 8046, 8104, 8043, 8045, 8047, 8105, 0, 8106, 
+    0, 8107, 0, 8108, 0, 8109, 0, 8110, 0, 8111, 0, 8114, 0, 8130, 0, 8178, 
+    0, 8119, 8141, 8142, 8143, 0, 0, 8135, 0, 8183, 8157, 8158, 8159, 0, 0, 
+    8602, 0, 8603, 0, 8622, 0, 8653, 0, 8655, 0, 8654, 0, 8708, 0, 8713, 0, 
+    8716, 0, 8740, 0, 8742, 0, 8769, 0, 8772, 0, 8775, 0, 8777, 0, 8813, 0, 
+    8802, 0, 8816, 0, 8817, 0, 8820, 0, 8821, 0, 8824, 0, 8825, 0, 8832, 0, 
+    8833, 0, 8928, 0, 8929, 0, 8836, 0, 8837, 0, 8840, 0, 8841, 0, 8930, 0, 
+    8931, 0, 8876, 0, 8877, 0, 8878, 0, 8879, 0, 8938, 0, 8939, 0, 8940, 0, 
+    8941, 12436, 0, 12364, 0, 12366, 0, 12368, 0, 12370, 0, 12372, 0, 12374, 
+    0, 12376, 0, 12378, 0, 12380, 0, 12382, 0, 12384, 0, 12386, 0, 12389, 0, 
+    12391, 0, 12393, 0, 12400, 12401, 12403, 12404, 12406, 12407, 12409, 
+    12410, 12412, 12413, 12446, 0, 12532, 0, 12460, 0, 12462, 0, 12464, 0, 
+    12466, 0, 12468, 0, 12470, 0, 12472, 0, 12474, 0, 12476, 0, 12478, 0, 
+    12480, 0, 12482, 0, 12485, 0, 12487, 0, 12489, 0, 12496, 12497, 12499, 
+    12500, 12502, 12503, 12505, 12506, 12508, 12509, 12535, 0, 12536, 0, 
+    12537, 0, 12538, 0, 12542, 0, 69786, 0, 69788, 0, 69803, 0, 0, 69934, 0, 
+    69935, 
+};
+
index 7ef5820..7be4b04 100644 (file)
@@ -119,47 +119,73 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
                                                   0xE0100, 0xE01EF));  /* VARIATION SELECTOR-17..256 */
   }
 
-  /* Zero-Width invisible characters:
+  /* Default_Ignorable codepoints:
    *
-   *  00AD  SOFT HYPHEN
-   *  034F  COMBINING GRAPHEME JOINER
+   * Note that as of Oct 2012 (Unicode 6.2), U+180E MONGOLIAN VOWEL SEPARATOR
+   * is NOT Default_Ignorable, but it really behaves in a way that it should
+   * be.  That has been reported to the Unicode Technical Committee for
+   * consideration.  As such, we include it here, since Uniscribe removes it.
    *
-   *  180E  MONGOLIAN VOWEL SEPARATOR
+   * Gathered from:
+   * http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:DI:]&abb=on&ucd=on&esc=on
    *
-   *  200B  ZERO WIDTH SPACE
-   *  200C  ZERO WIDTH NON-JOINER
-   *  200D  ZERO WIDTH JOINER
-   *  200E  LEFT-TO-RIGHT MARK
-   *  200F  RIGHT-TO-LEFT MARK
+   * Last updated to the page with the following versions:
+   * Version 3.6; ICU version: 50.0.1.0; Unicode version: 6.1.0.0
    *
-   *  2028  LINE SEPARATOR
+   * 4,167 Code Points
    *
-   *  202A  LEFT-TO-RIGHT EMBEDDING
-   *  202B  RIGHT-TO-LEFT EMBEDDING
-   *  202C  POP DIRECTIONAL FORMATTING
-   *  202D  LEFT-TO-RIGHT OVERRIDE
-   *  202E  RIGHT-TO-LEFT OVERRIDE
+   * [\u00AD\u034F\u115F\u1160\u17B4\u17B5\u180B-\u180D\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8\U0001D173-\U0001D17A\U000E0000-\U000E0FFF]
    *
-   *  2060  WORD JOINER
-   *  2061  FUNCTION APPLICATION
-   *  2062  INVISIBLE TIMES
-   *  2063  INVISIBLE SEPARATOR
-   *
-   *  FEFF  ZERO WIDTH NO-BREAK SPACE
+   * 00AD ;SOFT HYPHEN
+   * 034F ;COMBINING GRAPHEME JOINER
+   * 115F ;HANGUL CHOSEONG FILLER
+   * 1160 ;HANGUL JUNGSEONG FILLER
+   * 17B4 ;KHMER VOWEL INHERENT AQ
+   * 17B5 ;KHMER VOWEL INHERENT AA
+   * 180B..180D ;MONGOLIAN FREE VARIATION SELECTOR THREE
+   * 200B..200F ;RIGHT-TO-LEFT MARK
+   * 202A..202E ;RIGHT-TO-LEFT OVERRIDE
+   * 2060..206F ;NOMINAL DIGIT SHAPES
+   * 3164 ;HANGUL FILLER
+   * FE00..FE0F ;VARIATION SELECTOR-16
+   * FEFF ;ZERO WIDTH NO-BREAK SPACE
+   * FFA0 ;HALFWIDTH HANGUL FILLER
+   * FFF0..FFF8 ;<unassigned-FFF8>
+   * 1D173..1D17A ;MUSICAL SYMBOL END PHRASE
+   * E0000..E0FFF ;<unassigned-E0FFF>
    */
   inline hb_bool_t
-  is_zero_width (hb_codepoint_t ch)
+  is_default_ignorable (hb_codepoint_t ch)
   {
-    return ((ch & ~0x007F) == 0x2000 && (hb_in_ranges<hb_codepoint_t> (ch,
-                                                                      0x200B, 0x200F,
-                                                                      0x202A, 0x202E,
-                                                                      0x2060, 0x2064) ||
-                                        (ch == 0x2028))) ||
-           unlikely (ch == 0x0009 ||
-                     ch == 0x00AD ||
-                     ch == 0x034F ||
-                     ch == 0x180E ||
-                     ch == 0xFEFF);
+    hb_codepoint_t plane = ch >> 16;
+    if (likely (plane == 0))
+    {
+      /* BMP */
+      hb_codepoint_t page = ch >> 8;
+      switch (page) {
+       case 0x00: return unlikely (ch == 0x00AD);
+       case 0x03: return unlikely (ch == 0x034F);
+       case 0x11: return hb_in_range<hb_codepoint_t> (ch, 0x115F, 0x1160);
+       case 0x17: return hb_in_range<hb_codepoint_t> (ch, 0x17B4, 0x17B5);
+       case 0x18: return hb_in_range<hb_codepoint_t> (ch, 0x180B, 0x180E);
+       case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200B, 0x200F,
+                                                           0x202A, 0x202E,
+                                                           0x2060, 0x206F);
+       case 0x31: return unlikely (ch == 0x3164);
+       case 0xFE: return hb_in_range<hb_codepoint_t> (ch, 0xFE00, 0xFE0F) || ch == 0xFEFF;
+       case 0xFF: return hb_in_range<hb_codepoint_t> (ch, 0xFFF0, 0xFFF8) || ch == 0xFFA0;
+       default: return false;
+      }
+    }
+    else
+    {
+      /* Other planes */
+      switch (plane) {
+       case 0x01: return hb_in_range<hb_codepoint_t> (ch, 0x0001D173, 0x0001D17A);
+       case 0x0E: return hb_in_range<hb_codepoint_t> (ch, 0x000E0000, 0x000E0FFF);
+       default: return false;
+      }
+    }
   }
 
 
@@ -268,4 +294,13 @@ extern HB_INTERNAL const hb_unicode_funcs_t _hb_unicode_funcs_nil;
 #define HB_MODIFIED_COMBINING_CLASS_CCC132 132 /* sign u */
 
 
+/* Misc */
+
+#define HB_UNICODE_GENERAL_CATEGORY_IS_MARK(gen_cat) \
+       (FLAG (gen_cat) & \
+        (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
+         FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
+         FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
+
+
 #endif /* HB_UNICODE_PRIVATE_HH */
index 2e2d077..0a3907e 100644 (file)
@@ -112,6 +112,7 @@ hb_unicode_decompose_compatibility_nil (hb_unicode_funcs_t *ufuncs     HB_UNUSED
 #define HB_UNICODE_FUNCS_IMPLEMENT_SET \
   HB_UNICODE_FUNCS_IMPLEMENT (glib) \
   HB_UNICODE_FUNCS_IMPLEMENT (icu) \
+  HB_UNICODE_FUNCS_IMPLEMENT (ucdn) \
   HB_UNICODE_FUNCS_IMPLEMENT (nil) \
   /* ^--- Add new callbacks before nil */
 
@@ -134,6 +135,8 @@ hb_unicode_funcs_get_default (void)
   HB_UNICODE_FUNCS_IMPLEMENT(glib)
 #elif defined(HAVE_ICU)
   HB_UNICODE_FUNCS_IMPLEMENT(icu)
+#elif defined(HAVE_UCDN)
+  HB_UNICODE_FUNCS_IMPLEMENT(ucdn)
 #else
 #define HB_UNICODE_FUNCS_NIL 1
   HB_UNICODE_FUNCS_IMPLEMENT(nil)
index d732b57..2f01c28 100644 (file)
@@ -33,8 +33,6 @@
 #include <windows.h>
 #include <usp10.h>
 
-typedef ULONG WIN_ULONG;
-
 #include "hb-uniscribe.h"
 
 #include "hb-ot-name-table.hh"
@@ -121,8 +119,8 @@ populate_log_font (LOGFONTW  *lf,
   lf->lfHeight = -font->y_scale;
   lf->lfCharSet = DEFAULT_CHARSET;
 
-  hb_blob_t *blob = Sanitizer<name>::sanitize (hb_face_reference_table (font->face, HB_TAG ('n','a','m','e')));
-  const name *name_table = Sanitizer<name>::lock_instance (blob);
+  hb_blob_t *blob = OT::Sanitizer<OT::name>::sanitize (hb_face_reference_table (font->face, HB_TAG ('n','a','m','e')));
+  const OT::name *name_table = OT::Sanitizer<OT::name>::lock_instance (blob);
   unsigned int len = name_table->get_name (3, 1, 0x409, 4,
                                           lf->lfFaceName,
                                           sizeof (lf->lfFaceName[0]) * LF_FACESIZE)
@@ -190,6 +188,22 @@ _hb_uniscribe_shaper_font_data_destroy (hb_uniscribe_shaper_font_data_t *data)
   free (data);
 }
 
+LOGFONTW *
+hb_uniscribe_font_get_logfontw (hb_font_t *font)
+{
+  if (unlikely (!hb_uniscribe_shaper_font_data_ensure (font))) return NULL;
+  hb_uniscribe_shaper_font_data_t *font_data =  HB_SHAPER_DATA_GET (font);
+  return &font_data->log_font;
+}
+
+HFONT
+hb_uniscribe_font_get_hfont (hb_font_t *font)
+{
+  if (unlikely (!hb_uniscribe_shaper_font_data_ensure (font))) return NULL;
+  hb_uniscribe_shaper_font_data_t *font_data =  HB_SHAPER_DATA_GET (font);
+  return font_data->hfont;
+}
+
 
 /*
  * shaper shape_plan data
@@ -215,23 +229,6 @@ _hb_uniscribe_shaper_shape_plan_data_destroy (hb_uniscribe_shaper_shape_plan_dat
  * shaper
  */
 
-LOGFONTW *
-hb_uniscribe_font_get_logfontw (hb_font_t *font)
-{
-  if (unlikely (!hb_uniscribe_shaper_font_data_ensure (font))) return NULL;
-    return NULL;
-  hb_uniscribe_shaper_font_data_t *font_data =  HB_SHAPER_DATA_GET (font);
-  return &font_data->log_font;
-}
-
-HFONT
-hb_uniscribe_font_get_hfont (hb_font_t *font)
-{
-  if (unlikely (!hb_uniscribe_shaper_font_data_ensure (font))) return NULL;
-  hb_uniscribe_shaper_font_data_t *font_data =  HB_SHAPER_DATA_GET (font);
-  return font_data->hfont;
-}
-
 
 hb_bool_t
 _hb_uniscribe_shape (hb_shape_plan_t    *shape_plan,
@@ -305,7 +302,7 @@ retry:
   SCRIPT_ITEM items[MAX_ITEMS + 1];
   SCRIPT_CONTROL bidi_control = {0};
   SCRIPT_STATE bidi_state = {0};
-  WIN_ULONG script_tags[MAX_ITEMS];
+  ULONG script_tags[MAX_ITEMS];
   int item_count;
 
   /* MinGW32 doesn't define fMergeNeutralItems, so we bruteforce */
diff --git a/src/hb-utf-private.hh b/src/hb-utf-private.hh
new file mode 100644 (file)
index 0000000..b9a6519
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Copyright © 2011,2012  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_UTF_PRIVATE_HH
+#define HB_UTF_PRIVATE_HH
+
+#include "hb-private.hh"
+
+
+/* UTF-8 */
+
+#define HB_UTF8_COMPUTE(Char, Mask, Len) \
+  if (Char < 128) { Len = 1; Mask = 0x7f; } \
+  else if ((Char & 0xe0) == 0xc0) { Len = 2; Mask = 0x1f; } \
+  else if ((Char & 0xf0) == 0xe0) { Len = 3; Mask = 0x0f; } \
+  else if ((Char & 0xf8) == 0xf0) { Len = 4; Mask = 0x07; } \
+  else Len = 0;
+
+static inline const uint8_t *
+hb_utf_next (const uint8_t *text,
+            const uint8_t *end,
+            hb_codepoint_t *unicode)
+{
+  hb_codepoint_t c = *text, mask;
+  unsigned int len;
+
+  /* TODO check for overlong sequences? */
+
+  HB_UTF8_COMPUTE (c, mask, len);
+  if (unlikely (!len || (unsigned int) (end - text) < len)) {
+    *unicode = -1;
+    return text + 1;
+  } else {
+    hb_codepoint_t result;
+    unsigned int i;
+    result = c & mask;
+    for (i = 1; i < len; i++)
+      {
+       if (unlikely ((text[i] & 0xc0) != 0x80))
+         {
+           *unicode = -1;
+           return text + 1;
+         }
+       result <<= 6;
+       result |= (text[i] & 0x3f);
+      }
+    *unicode = result;
+    return text + len;
+  }
+}
+
+static inline const uint8_t *
+hb_utf_prev (const uint8_t *text,
+            const uint8_t *start,
+            hb_codepoint_t *unicode)
+{
+  const uint8_t *end = text--;
+  while (start < text && (*text & 0xc0) == 0x80 && end - text < 4)
+    text--;
+
+  hb_codepoint_t c = *text, mask;
+  unsigned int len;
+
+  /* TODO check for overlong sequences? */
+
+  HB_UTF8_COMPUTE (c, mask, len);
+  if (unlikely (!len || (unsigned int) (end - text) != len)) {
+    *unicode = -1;
+    return end - 1;
+  } else {
+    hb_codepoint_t result;
+    unsigned int i;
+    result = c & mask;
+    for (i = 1; i < len; i++)
+      {
+       result <<= 6;
+       result |= (text[i] & 0x3f);
+      }
+    *unicode = result;
+    return text;
+  }
+}
+
+
+static inline unsigned int
+hb_utf_strlen (const uint8_t *text)
+{
+  return strlen ((const char *) text);
+}
+
+
+/* UTF-16 */
+
+static inline const uint16_t *
+hb_utf_next (const uint16_t *text,
+            const uint16_t *end,
+            hb_codepoint_t *unicode)
+{
+  hb_codepoint_t c = *text++;
+
+  if (unlikely (hb_in_range<hb_codepoint_t> (c, 0xd800, 0xdbff)))
+  {
+    /* high surrogate */
+    hb_codepoint_t l;
+    if (text < end && ((l = *text), likely (hb_in_range<hb_codepoint_t> (l, 0xdc00, 0xdfff))))
+    {
+      /* low surrogate */
+      *unicode = (c << 10) + l - ((0xd800 << 10) - 0x10000 + 0xdc00);
+       text++;
+    } else
+      *unicode = -1;
+  } else
+    *unicode = c;
+
+  return text;
+}
+
+static inline const uint16_t *
+hb_utf_prev (const uint16_t *text,
+            const uint16_t *start,
+            hb_codepoint_t *unicode)
+{
+  hb_codepoint_t c = *--text;
+
+  if (unlikely (hb_in_range<hb_codepoint_t> (c, 0xdc00, 0xdfff)))
+  {
+    /* low surrogate */
+    hb_codepoint_t h;
+    if (start < text && ((h = *(text - 1)), likely (hb_in_range<hb_codepoint_t> (h, 0xd800, 0xdbff))))
+    {
+      /* high surrogate */
+      *unicode = (h << 10) + c - ((0xd800 << 10) - 0x10000 + 0xdc00);
+       text--;
+    } else
+      *unicode = -1;
+  } else
+    *unicode = c;
+
+  return text;
+}
+
+
+static inline unsigned int
+hb_utf_strlen (const uint16_t *text)
+{
+  unsigned int l = 0;
+  while (*text++) l++;
+  return l;
+}
+
+
+/* UTF-32 */
+
+static inline const uint32_t *
+hb_utf_next (const uint32_t *text,
+            const uint32_t *end HB_UNUSED,
+            hb_codepoint_t *unicode)
+{
+  *unicode = *text++;
+  return text;
+}
+
+static inline const uint32_t *
+hb_utf_prev (const uint32_t *text,
+            const uint32_t *start HB_UNUSED,
+            hb_codepoint_t *unicode)
+{
+  *unicode = *--text;
+  return text;
+}
+
+static inline unsigned int
+hb_utf_strlen (const uint32_t *text)
+{
+  unsigned int l = 0;
+  while (*text++) l++;
+  return l;
+}
+
+
+#endif /* HB_UTF_PRIVATE_HH */
index e99b276..ebe0401 100644 (file)
@@ -38,9 +38,9 @@ HB_BEGIN_DECLS
 
 #define HB_VERSION_MAJOR 0
 #define HB_VERSION_MINOR 9
-#define HB_VERSION_MICRO 3
+#define HB_VERSION_MICRO 12
 
-#define HB_VERSION_STRING "0.9.3"
+#define HB_VERSION_STRING "0.9.12"
 
 #define HB_VERSION_CHECK(major,minor,micro) \
        ((major)*10000+(minor)*100+(micro) >= \
index 01adcea..4f1f65f 100644 (file)
 
 
 #if defined(HB_ATOMIC_INT_NIL)
-#pragma message("Could not find any system to define atomic_int macros, library may NOT be thread-safe.")
+#ifdef _MSC_VER
+#pragma message("Could not find any system to define atomic_int macros, library may NOT be thread-safe")
+#else
+#warning "Could not find any system to define atomic_int macros, library may NOT be thread-safe"
 #endif
+#endif
+
 #if defined(HB_MUTEX_IMPL_NIL)
-#pragma message("Could not find any system to define mutex macros, library may NOT be thread-safe.")
+#ifdef _MSC_VER
+#pragma message("Could not find any system to define mutex macros, library may NOT be thread-safe")
+#else
+#warning "Could not find any system to define mutex macros, library may NOT be thread-safe"
+#endif
 #endif
+
 #if defined(HB_ATOMIC_INT_NIL) || defined(HB_MUTEX_IMPL_NIL)
-#pragma message("To suppress these warnings, define HB_NO_MT.")
+#ifdef _MSC_VER
+#pragma message("To suppress these warnings, define HB_NO_MT")
+#else
+#warning "To suppress these warnings, define HB_NO_MT"
+#endif
+#endif
+
+
+#include "hb-unicode-private.hh"
+
+#if !defined(HB_NO_UNICODE_FUNCS) && defined(HB_UNICODE_FUNCS_NIL)
+#ifdef _MSC_VER
+#pragma message("Could not find any Unicode functions implementation, you have to provide your own")
+#pragma message("To suppress this warnings, define HB_NO_UNICODE_FUNCS")
+#else
+#warning "Could not find any Unicode functions implementation, you have to provide your own"
+#warning "To suppress this warning, define HB_NO_UNICODE_FUNCS"
+#endif
 #endif
index d36040e..52c479c 100644 (file)
--- a/src/hb.h
+++ b/src/hb.h
@@ -34,6 +34,7 @@
 #include "hb-font.h"
 #include "hb-set.h"
 #include "hb-shape.h"
+#include "hb-shape-plan.h"
 #include "hb-unicode.h"
 #include "hb-version.h"
 
diff --git a/src/indic.cc b/src/indic.cc
deleted file mode 100644 (file)
index 991a772..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright © 2012  Google, Inc.
- *
- *  This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#include "hb-ot-shape-complex-indic-private.hh"
-
-int
-main (void)
-{
-  hb_unicode_funcs_t *funcs = hb_unicode_funcs_get_default ();
-
-  printf ("There are split matras without a Unicode decomposition:\n");
-  for (hb_codepoint_t u = 0; u < 0x110000; u++)
-  {
-    unsigned int type = get_indic_categories (u);
-
-    unsigned int category = type & 0x0F;
-    unsigned int position = type >> 4;
-
-    hb_unicode_general_category_t cat = hb_unicode_general_category (funcs, u);
-    unsigned int ccc = hb_unicode_combining_class (funcs, u);
-    if (category == OT_M && ccc)
-      printf ("U+%04X %d\n", u, ccc);
-
-//    hb_codepoint_t a, b;
-//    if (!hb_unicode_decompose (funcs, u, &a, &b))
-//      printf ("U+%04X %x %x\n", u, category, position);
-  }
-}
index 07d3d69..b362744 100644 (file)
@@ -36,6 +36,8 @@
 #include <stdio.h>
 
 
+using namespace OT;
+
 
 int
 main (int argc, char **argv)
diff --git a/src/test-size-params.cc b/src/test-size-params.cc
new file mode 100644 (file)
index 0000000..947b566
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2010,2011  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "hb.h"
+#include "hb-ot.h"
+
+#ifdef HAVE_GLIB
+#include <glib.h>
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+  hb_blob_t *blob = NULL;
+
+  if (argc != 2) {
+    fprintf (stderr, "usage: %s font-file\n", argv[0]);
+    exit (1);
+  }
+
+  /* Create the blob */
+  {
+    const char *font_data;
+    unsigned int len;
+    hb_destroy_func_t destroy;
+    void *user_data;
+    hb_memory_mode_t mm;
+
+#ifdef HAVE_GLIB
+    GMappedFile *mf = g_mapped_file_new (argv[1], false, NULL);
+    font_data = g_mapped_file_get_contents (mf);
+    len = g_mapped_file_get_length (mf);
+    destroy = (hb_destroy_func_t) g_mapped_file_unref;
+    user_data = (void *) mf;
+    mm = HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE;
+#else
+    FILE *f = fopen (argv[1], "rb");
+    fseek (f, 0, SEEK_END);
+    len = ftell (f);
+    fseek (f, 0, SEEK_SET);
+    font_data = (const char *) malloc (len);
+    if (!font_data) len = 0;
+    len = fread ((char *) font_data, 1, len, f);
+    destroy = free;
+    user_data = (void *) font_data;
+    fclose (f);
+    mm = HB_MEMORY_MODE_WRITABLE;
+#endif
+
+    blob = hb_blob_create (font_data, len, mm, user_data, destroy);
+  }
+
+  /* Create the face */
+  hb_face_t *face = hb_face_create (blob, 0 /* first face */);
+  hb_blob_destroy (blob);
+  blob = NULL;
+
+  unsigned int p[5];
+  bool ret = hb_ot_layout_get_size_params (face, p, p+1, p+2, p+3, p+4);
+
+  printf ("%g %u %u %g %g\n", p[0]/10., p[1], p[2], p[3]/10., p[4]/10.);
+
+  return !ret;
+}
index 95626ed..4731e26 100644 (file)
@@ -99,5 +99,5 @@ main (int argc, char **argv)
       (argc > 4 &&
        !hb_font_glyph_from_string (font, argv[4], -1, &glyphs[1])))
     return 2;
-  return !hb_ot_layout_would_substitute_lookup (face, glyphs, len, strtol (argv[2], NULL, 0));
+  return !hb_ot_layout_lookup_would_substitute (face, strtol (argv[2], NULL, 0), glyphs, len, false);
 }
diff --git a/src/test.cc b/src/test.cc
new file mode 100644 (file)
index 0000000..22108b8
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright © 2010,2011  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "hb.h"
+
+#ifdef HAVE_GLIB
+#include <glib.h>
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifdef HAVE_FREETYPE
+#include "hb-ft.h"
+#endif
+
+int
+main (int argc, char **argv)
+{
+  hb_blob_t *blob = NULL;
+
+  if (argc != 2) {
+    fprintf (stderr, "usage: %s font-file.ttf\n", argv[0]);
+    exit (1);
+  }
+
+  /* Create the blob */
+  {
+    const char *font_data;
+    unsigned int len;
+    hb_destroy_func_t destroy;
+    void *user_data;
+    hb_memory_mode_t mm;
+
+#ifdef HAVE_GLIB
+    GMappedFile *mf = g_mapped_file_new (argv[1], false, NULL);
+    font_data = g_mapped_file_get_contents (mf);
+    len = g_mapped_file_get_length (mf);
+    destroy = (hb_destroy_func_t) g_mapped_file_unref;
+    user_data = (void *) mf;
+    mm = HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE;
+#else
+    FILE *f = fopen (argv[1], "rb");
+    fseek (f, 0, SEEK_END);
+    len = ftell (f);
+    fseek (f, 0, SEEK_SET);
+    font_data = (const char *) malloc (len);
+    if (!font_data) len = 0;
+    len = fread ((char *) font_data, 1, len, f);
+    destroy = free;
+    user_data = (void *) font_data;
+    fclose (f);
+    mm = HB_MEMORY_MODE_WRITABLE;
+#endif
+
+    blob = hb_blob_create (font_data, len, mm, user_data, destroy);
+  }
+
+  printf ("Opened font file %s: %u bytes long\n", argv[1], hb_blob_get_length (blob));
+
+  /* Create the face */
+  hb_face_t *face = hb_face_create (blob, 0 /* first face */);
+  hb_blob_destroy (blob);
+  blob = NULL;
+  unsigned int upem = hb_face_get_upem (face);
+
+  hb_font_t *font = hb_font_create (face);
+  hb_font_set_scale (font, upem, upem);
+
+#ifdef HAVE_FREETYPE
+  hb_ft_font_set_funcs (font);
+#endif
+
+  hb_buffer_t *buffer = hb_buffer_create ();
+
+  hb_buffer_add_utf8 (buffer, "\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\x95", -1, 0, -1);
+
+  hb_shape (font, buffer, NULL, 0);
+
+  unsigned int count = hb_buffer_get_length (buffer);
+  hb_glyph_info_t *infos = hb_buffer_get_glyph_infos (buffer, NULL);
+  hb_glyph_position_t *positions = hb_buffer_get_glyph_positions (buffer, NULL);
+
+  for (unsigned int i = 0; i < count; i++)
+  {
+    hb_glyph_info_t *info = &infos[i];
+    hb_glyph_position_t *pos = &positions[i];
+
+    printf ("cluster %d        glyph 0x%x at   (%d,%d)+(%d,%d)\n",
+           info->cluster,
+           info->codepoint,
+           pos->x_offset,
+           pos->x_offset,
+           pos->x_advance,
+           pos->y_advance);
+
+  }
+
+  hb_buffer_destroy (buffer);
+  hb_font_destroy (font);
+  hb_face_destroy (face);
+
+  return 0;
+}
+
+
index dee13f6..89dce40 100644 (file)
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -38,18 +38,22 @@ host_triplet = @host@
 subdir = test
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
@@ -120,6 +124,7 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -146,6 +151,8 @@ HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -161,6 +168,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -177,6 +185,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -189,6 +200,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -197,6 +209,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -222,7 +235,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -487,10 +499,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
index e6c0c01..237f92c 100644 (file)
@@ -21,11 +21,21 @@ TEST_PROGS = \
        test-common \
        test-font \
        test-object \
+       test-set \
        test-shape \
        test-unicode \
        test-version \
        $(NULL)
 
+test_unicode_CPPFLAGS = $(AM_CPPFLAGS)
+if HAVE_GLIB
+test_unicode_CPPFLAGS += $(GLIB_CFLAGS)
+endif
+if HAVE_ICU
+test_unicode_CPPFLAGS += $(ICU_CFLAGS)
+endif
+
+
 if HAVE_OT
 TEST_PROGS += \
        test-ot-tag \
@@ -49,7 +59,6 @@ test_c_CPPFLAGS += $(FREETYPE_CFLAGS)
 test_cplusplus_CPPFLAGS += $(FREETYPE_CFLAGS)
 endif
 
-
 # Default test running environment
 TESTS = $(TEST_PROGS)
 TESTS_ENVIRONMENT = \
index d6c087a..5fe8529 100644 (file)
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -39,22 +39,27 @@ host_triplet = @host@
 @HAVE_GLIB_TRUE@am__append_1 = hb-test.h
 @HAVE_GLIB_TRUE@check_PROGRAMS = $(am__EXEEXT_3)
 @HAVE_GLIB_TRUE@noinst_PROGRAMS = $(am__EXEEXT_3)
-@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__append_2 = \
+@HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_2 = $(ICU_CFLAGS)
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__append_3 = \
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ test-ot-tag \
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ $(NULL)
 
-@HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_3 = $(ICU_CFLAGS)
 @HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_4 = $(ICU_CFLAGS)
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_5 = $(FREETYPE_CFLAGS)
+@HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_5 = $(ICU_CFLAGS)
 @HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_6 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_7 = $(FREETYPE_CFLAGS)
 @HAVE_GLIB_TRUE@TESTS = $(am__EXEEXT_3)
 #      Can't do for now: --show-reachable=yes
-@HAVE_GLIB_TRUE@am__append_7 = log-valgrind.txt symbols-tested.txt \
+@HAVE_GLIB_TRUE@am__append_8 = log-valgrind.txt symbols-tested.txt \
 @HAVE_GLIB_TRUE@       symbols-exported.txt symbols-untested.txt
 subdir = test/api
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -66,11 +71,11 @@ am__EXEEXT_1 =
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ $(am__EXEEXT_1)
 @HAVE_GLIB_TRUE@am__EXEEXT_3 = test-blob$(EXEEXT) test-buffer$(EXEEXT) \
 @HAVE_GLIB_TRUE@       test-common$(EXEEXT) test-font$(EXEEXT) \
-@HAVE_GLIB_TRUE@       test-object$(EXEEXT) test-shape$(EXEEXT) \
-@HAVE_GLIB_TRUE@       test-unicode$(EXEEXT) test-version$(EXEEXT) \
-@HAVE_GLIB_TRUE@       $(am__EXEEXT_1) $(am__EXEEXT_2) \
-@HAVE_GLIB_TRUE@       test-c$(EXEEXT) test-cplusplus$(EXEEXT) \
-@HAVE_GLIB_TRUE@       $(am__EXEEXT_1)
+@HAVE_GLIB_TRUE@       test-object$(EXEEXT) test-set$(EXEEXT) \
+@HAVE_GLIB_TRUE@       test-shape$(EXEEXT) test-unicode$(EXEEXT) \
+@HAVE_GLIB_TRUE@       test-version$(EXEEXT) $(am__EXEEXT_1) \
+@HAVE_GLIB_TRUE@       $(am__EXEEXT_2) test-c$(EXEEXT) \
+@HAVE_GLIB_TRUE@       test-cplusplus$(EXEEXT) $(am__EXEEXT_1)
 PROGRAMS = $(noinst_PROGRAMS)
 test_blob_SOURCES = test-blob.c
 test_blob_OBJECTS = test-blob.$(OBJEXT)
@@ -79,8 +84,8 @@ am__DEPENDENCIES_1 =
 @HAVE_GLIB_TRUE@test_blob_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 @HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 test_buffer_SOURCES = test-buffer.c
 test_buffer_OBJECTS = test-buffer.$(OBJEXT)
@@ -126,6 +131,12 @@ test_ot_tag_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_ot_tag_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 @HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+test_set_SOURCES = test-set.c
+test_set_OBJECTS = test-set.$(OBJEXT)
+test_set_LDADD = $(LDADD)
+@HAVE_GLIB_TRUE@test_set_DEPENDENCIES =  \
+@HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 test_shape_SOURCES = test-shape.c
 test_shape_OBJECTS = test-shape.$(OBJEXT)
 test_shape_LDADD = $(LDADD)
@@ -133,7 +144,7 @@ test_shape_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 @HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 test_unicode_SOURCES = test-unicode.c
-test_unicode_OBJECTS = test-unicode.$(OBJEXT)
+test_unicode_OBJECTS = test_unicode-test-unicode.$(OBJEXT)
 test_unicode_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_unicode_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
@@ -154,18 +165,18 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
 am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD  " $@;
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -173,25 +184,27 @@ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_$(V))
-am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
 am__v_CXX_0 = @echo "  CXX   " $@;
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_$(V))
-am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 am__v_CXXLD_0 = @echo "  CXXLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = test-blob.c test-buffer.c test-c.c test-common.c \
        $(test_cplusplus_SOURCES) test-font.c test-object.c \
-       test-ot-tag.c test-shape.c test-unicode.c test-version.c
+       test-ot-tag.c test-set.c test-shape.c test-unicode.c \
+       test-version.c
 DIST_SOURCES = test-blob.c test-buffer.c test-c.c test-common.c \
        $(am__test_cplusplus_SOURCES_DIST) test-font.c test-object.c \
-       test-ot-tag.c test-shape.c test-unicode.c test-version.c
+       test-ot-tag.c test-set.c test-shape.c test-unicode.c \
+       test-version.c
 ETAGS = etags
 CTAGS = ctags
 am__tty_colors = \
@@ -223,6 +236,7 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -249,6 +263,8 @@ HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -264,6 +280,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -280,6 +297,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -292,6 +312,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -300,6 +321,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -325,7 +347,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -343,7 +364,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
 EXTRA_DIST = $(am__append_1)
-CLEANFILES = $(am__append_7)
+CLEANFILES = $(am__append_8)
 DISTCLEANFILES = 
 MAINTAINERCLEANFILES = 
 @HAVE_GLIB_TRUE@AM_CPPFLAGS = -DSRCDIR="\"$(srcdir)\"" -I$(top_srcdir)/src/ -I$(top_builddir)/src/ $(GLIB_CFLAGS) $(GTHREAD_CFLAGS)
@@ -351,14 +372,16 @@ MAINTAINERCLEANFILES =
 
 # Tests for header compilation
 @HAVE_GLIB_TRUE@TEST_PROGS = test-blob test-buffer test-common \
-@HAVE_GLIB_TRUE@       test-font test-object test-shape test-unicode \
-@HAVE_GLIB_TRUE@       test-version $(NULL) $(am__append_2) test-c \
-@HAVE_GLIB_TRUE@       test-cplusplus $(NULL)
+@HAVE_GLIB_TRUE@       test-font test-object test-set test-shape \
+@HAVE_GLIB_TRUE@       test-unicode test-version $(NULL) \
+@HAVE_GLIB_TRUE@       $(am__append_3) test-c test-cplusplus $(NULL)
+@HAVE_GLIB_TRUE@test_unicode_CPPFLAGS = $(AM_CPPFLAGS) $(GLIB_CFLAGS) \
+@HAVE_GLIB_TRUE@       $(am__append_2)
 @HAVE_GLIB_TRUE@test_cplusplus_SOURCES = test-cplusplus.cc
-@HAVE_GLIB_TRUE@test_c_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_3) \
-@HAVE_GLIB_TRUE@       $(am__append_5)
+@HAVE_GLIB_TRUE@test_c_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_4) \
+@HAVE_GLIB_TRUE@       $(am__append_6)
 @HAVE_GLIB_TRUE@test_cplusplus_CPPFLAGS = $(AM_CPPFLAGS) \
-@HAVE_GLIB_TRUE@       $(am__append_4) $(am__append_6)
+@HAVE_GLIB_TRUE@       $(am__append_5) $(am__append_7)
 @HAVE_GLIB_TRUE@TESTS_ENVIRONMENT = \
 @HAVE_GLIB_TRUE@       MALLOC_CHECK_=2 \
 @HAVE_GLIB_TRUE@       MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) \
@@ -434,37 +457,40 @@ clean-noinstPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
-test-blob$(EXEEXT): $(test_blob_OBJECTS) $(test_blob_DEPENDENCIES) 
+test-blob$(EXEEXT): $(test_blob_OBJECTS) $(test_blob_DEPENDENCIES) $(EXTRA_test_blob_DEPENDENCIES) 
        @rm -f test-blob$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_blob_OBJECTS) $(test_blob_LDADD) $(LIBS)
-test-buffer$(EXEEXT): $(test_buffer_OBJECTS) $(test_buffer_DEPENDENCIES) 
+test-buffer$(EXEEXT): $(test_buffer_OBJECTS) $(test_buffer_DEPENDENCIES) $(EXTRA_test_buffer_DEPENDENCIES) 
        @rm -f test-buffer$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_buffer_OBJECTS) $(test_buffer_LDADD) $(LIBS)
-test-c$(EXEEXT): $(test_c_OBJECTS) $(test_c_DEPENDENCIES) 
+test-c$(EXEEXT): $(test_c_OBJECTS) $(test_c_DEPENDENCIES) $(EXTRA_test_c_DEPENDENCIES) 
        @rm -f test-c$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_c_OBJECTS) $(test_c_LDADD) $(LIBS)
-test-common$(EXEEXT): $(test_common_OBJECTS) $(test_common_DEPENDENCIES) 
+test-common$(EXEEXT): $(test_common_OBJECTS) $(test_common_DEPENDENCIES) $(EXTRA_test_common_DEPENDENCIES) 
        @rm -f test-common$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_common_OBJECTS) $(test_common_LDADD) $(LIBS)
-test-cplusplus$(EXEEXT): $(test_cplusplus_OBJECTS) $(test_cplusplus_DEPENDENCIES) 
+test-cplusplus$(EXEEXT): $(test_cplusplus_OBJECTS) $(test_cplusplus_DEPENDENCIES) $(EXTRA_test_cplusplus_DEPENDENCIES) 
        @rm -f test-cplusplus$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_cplusplus_OBJECTS) $(test_cplusplus_LDADD) $(LIBS)
-test-font$(EXEEXT): $(test_font_OBJECTS) $(test_font_DEPENDENCIES) 
+test-font$(EXEEXT): $(test_font_OBJECTS) $(test_font_DEPENDENCIES) $(EXTRA_test_font_DEPENDENCIES) 
        @rm -f test-font$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_font_OBJECTS) $(test_font_LDADD) $(LIBS)
-test-object$(EXEEXT): $(test_object_OBJECTS) $(test_object_DEPENDENCIES) 
+test-object$(EXEEXT): $(test_object_OBJECTS) $(test_object_DEPENDENCIES) $(EXTRA_test_object_DEPENDENCIES) 
        @rm -f test-object$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_object_OBJECTS) $(test_object_LDADD) $(LIBS)
-test-ot-tag$(EXEEXT): $(test_ot_tag_OBJECTS) $(test_ot_tag_DEPENDENCIES) 
+test-ot-tag$(EXEEXT): $(test_ot_tag_OBJECTS) $(test_ot_tag_DEPENDENCIES) $(EXTRA_test_ot_tag_DEPENDENCIES) 
        @rm -f test-ot-tag$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_ot_tag_OBJECTS) $(test_ot_tag_LDADD) $(LIBS)
-test-shape$(EXEEXT): $(test_shape_OBJECTS) $(test_shape_DEPENDENCIES) 
+test-set$(EXEEXT): $(test_set_OBJECTS) $(test_set_DEPENDENCIES) $(EXTRA_test_set_DEPENDENCIES) 
+       @rm -f test-set$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(test_set_OBJECTS) $(test_set_LDADD) $(LIBS)
+test-shape$(EXEEXT): $(test_shape_OBJECTS) $(test_shape_DEPENDENCIES) $(EXTRA_test_shape_DEPENDENCIES) 
        @rm -f test-shape$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_shape_OBJECTS) $(test_shape_LDADD) $(LIBS)
-test-unicode$(EXEEXT): $(test_unicode_OBJECTS) $(test_unicode_DEPENDENCIES) 
+test-unicode$(EXEEXT): $(test_unicode_OBJECTS) $(test_unicode_DEPENDENCIES) $(EXTRA_test_unicode_DEPENDENCIES) 
        @rm -f test-unicode$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_unicode_OBJECTS) $(test_unicode_LDADD) $(LIBS)
-test-version$(EXEEXT): $(test_version_OBJECTS) $(test_version_DEPENDENCIES) 
+test-version$(EXEEXT): $(test_version_OBJECTS) $(test_version_DEPENDENCIES) $(EXTRA_test_version_DEPENDENCIES) 
        @rm -f test-version$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_version_OBJECTS) $(test_version_LDADD) $(LIBS)
 
@@ -480,91 +506,96 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-font.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-object.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ot-tag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-set.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-shape.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unicode.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-version.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_c-test-c.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cplusplus-test-cplusplus.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_unicode-test-unicode.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@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@  $(COMPILE) -c $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@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@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 test_c-test-c.o: test-c.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_c_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_c-test-c.o -MD -MP -MF $(DEPDIR)/test_c-test-c.Tpo -c -o test_c-test-c.o `test -f 'test-c.c' || echo '$(srcdir)/'`test-c.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_c-test-c.Tpo $(DEPDIR)/test_c-test-c.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='test-c.c' object='test_c-test-c.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='test-c.c' object='test_c-test-c.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_c_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_c-test-c.o `test -f 'test-c.c' || echo '$(srcdir)/'`test-c.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_c_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_c-test-c.o `test -f 'test-c.c' || echo '$(srcdir)/'`test-c.c
 
 test_c-test-c.obj: test-c.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_c_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_c-test-c.obj -MD -MP -MF $(DEPDIR)/test_c-test-c.Tpo -c -o test_c-test-c.obj `if test -f 'test-c.c'; then $(CYGPATH_W) 'test-c.c'; else $(CYGPATH_W) '$(srcdir)/test-c.c'; fi`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_c-test-c.Tpo $(DEPDIR)/test_c-test-c.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='test-c.c' object='test_c-test-c.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='test-c.c' object='test_c-test-c.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_c_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_c-test-c.obj `if test -f 'test-c.c'; then $(CYGPATH_W) 'test-c.c'; else $(CYGPATH_W) '$(srcdir)/test-c.c'; fi`
+
+test_unicode-test-unicode.o: test-unicode.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_unicode_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_unicode-test-unicode.o -MD -MP -MF $(DEPDIR)/test_unicode-test-unicode.Tpo -c -o test_unicode-test-unicode.o `test -f 'test-unicode.c' || echo '$(srcdir)/'`test-unicode.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_unicode-test-unicode.Tpo $(DEPDIR)/test_unicode-test-unicode.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='test-unicode.c' object='test_unicode-test-unicode.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_c_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_c-test-c.obj `if test -f 'test-c.c'; then $(CYGPATH_W) 'test-c.c'; else $(CYGPATH_W) '$(srcdir)/test-c.c'; fi`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_unicode_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_unicode-test-unicode.o `test -f 'test-unicode.c' || echo '$(srcdir)/'`test-unicode.c
+
+test_unicode-test-unicode.obj: test-unicode.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_unicode_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_unicode-test-unicode.obj -MD -MP -MF $(DEPDIR)/test_unicode-test-unicode.Tpo -c -o test_unicode-test-unicode.obj `if test -f 'test-unicode.c'; then $(CYGPATH_W) 'test-unicode.c'; else $(CYGPATH_W) '$(srcdir)/test-unicode.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_unicode-test-unicode.Tpo $(DEPDIR)/test_unicode-test-unicode.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='test-unicode.c' object='test_unicode-test-unicode.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_unicode_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_unicode-test-unicode.obj `if test -f 'test-unicode.c'; then $(CYGPATH_W) 'test-unicode.c'; else $(CYGPATH_W) '$(srcdir)/test-unicode.c'; fi`
 
 .cc.o:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cc.obj:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cc.lo:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 test_cplusplus-test-cplusplus.o: test-cplusplus.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cplusplus_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_cplusplus-test-cplusplus.o -MD -MP -MF $(DEPDIR)/test_cplusplus-test-cplusplus.Tpo -c -o test_cplusplus-test-cplusplus.o `test -f 'test-cplusplus.cc' || echo '$(srcdir)/'`test-cplusplus.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_cplusplus-test-cplusplus.Tpo $(DEPDIR)/test_cplusplus-test-cplusplus.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='test-cplusplus.cc' object='test_cplusplus-test-cplusplus.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test-cplusplus.cc' object='test_cplusplus-test-cplusplus.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cplusplus_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_cplusplus-test-cplusplus.o `test -f 'test-cplusplus.cc' || echo '$(srcdir)/'`test-cplusplus.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cplusplus_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_cplusplus-test-cplusplus.o `test -f 'test-cplusplus.cc' || echo '$(srcdir)/'`test-cplusplus.cc
 
 test_cplusplus-test-cplusplus.obj: test-cplusplus.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cplusplus_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_cplusplus-test-cplusplus.obj -MD -MP -MF $(DEPDIR)/test_cplusplus-test-cplusplus.Tpo -c -o test_cplusplus-test-cplusplus.obj `if test -f 'test-cplusplus.cc'; then $(CYGPATH_W) 'test-cplusplus.cc'; else $(CYGPATH_W) '$(srcdir)/test-cplusplus.cc'; fi`
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_cplusplus-test-cplusplus.Tpo $(DEPDIR)/test_cplusplus-test-cplusplus.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='test-cplusplus.cc' object='test_cplusplus-test-cplusplus.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test-cplusplus.cc' object='test_cplusplus-test-cplusplus.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cplusplus_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_cplusplus-test-cplusplus.obj `if test -f 'test-cplusplus.cc'; then $(CYGPATH_W) 'test-cplusplus.cc'; else $(CYGPATH_W) '$(srcdir)/test-cplusplus.cc'; fi`
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_cplusplus_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_cplusplus-test-cplusplus.obj `if test -f 'test-cplusplus.cc'; then $(CYGPATH_W) 'test-cplusplus.cc'; else $(CYGPATH_W) '$(srcdir)/test-cplusplus.cc'; fi`
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -705,14 +736,15 @@ check-TESTS: $(TESTS)
          fi; \
          dashes=`echo "$$dashes" | sed s/./=/g`; \
          if test "$$failed" -eq 0; then \
-           echo "$$grn$$dashes"; \
+           col="$$grn"; \
          else \
-           echo "$$red$$dashes"; \
+           col="$$red"; \
          fi; \
-         echo "$$banner"; \
-         test -z "$$skipped" || echo "$$skipped"; \
-         test -z "$$report" || echo "$$report"; \
-         echo "$$dashes$$std"; \
+         echo "$${col}$$dashes$${std}"; \
+         echo "$${col}$$banner$${std}"; \
+         test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+         test -z "$$report" || echo "$${col}$$report$${std}"; \
+         echo "$${col}$$dashes$${std}"; \
          test "$$failed" -eq 0; \
        else :; fi
 
@@ -762,10 +794,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
index 1ddc3d8..82fdaae 100644 (file)
@@ -71,7 +71,7 @@ fixture_init (fixture_t *fixture, gconstpointer user_data)
 
     case BUFFER_ONE_BY_ONE:
       for (i = 1; i < G_N_ELEMENTS (utf32) - 1; i++)
-       hb_buffer_add (b, utf32[i], 1, i);
+       hb_buffer_add (b, utf32[i], i);
       break;
 
     case BUFFER_UTF32:
@@ -110,6 +110,7 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data)
   g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_INVALID);
   g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
   g_assert (hb_buffer_get_language (b) == NULL);
+  g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAGS_DEFAULT);
 
 
   /* test property changes are retained */
@@ -127,8 +128,35 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data)
   hb_buffer_set_language (b, hb_language_from_string ("fa", -1));
   g_assert (hb_buffer_get_language (b) == hb_language_from_string ("Fa", -1));
 
+  hb_buffer_set_flags (b, HB_BUFFER_FLAG_BOT);
+  g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAG_BOT);
 
-  /* test reset clears properties */
+
+
+  /* test clear clears all properties but unicode_funcs */
+
+  hb_buffer_clear_contents (b);
+
+  g_assert (hb_buffer_get_unicode_funcs (b) == ufuncs);
+  g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_INVALID);
+  g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
+  g_assert (hb_buffer_get_language (b) == NULL);
+  g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAGS_DEFAULT);
+
+
+  /* test reset clears all properties */
+
+  hb_buffer_set_direction (b, HB_DIRECTION_RTL);
+  g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_RTL);
+
+  hb_buffer_set_script (b, HB_SCRIPT_ARABIC);
+  g_assert (hb_buffer_get_script (b) == HB_SCRIPT_ARABIC);
+
+  hb_buffer_set_language (b, hb_language_from_string ("fa", -1));
+  g_assert (hb_buffer_get_language (b) == hb_language_from_string ("Fa", -1));
+
+  hb_buffer_set_flags (b, HB_BUFFER_FLAG_BOT);
+  g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAG_BOT);
 
   hb_buffer_reset (b);
 
@@ -136,6 +164,7 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data)
   g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_INVALID);
   g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
   g_assert (hb_buffer_get_language (b) == NULL);
+  g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAGS_DEFAULT);
 }
 
 static void
index 66e8d33..3afe6ae 100644 (file)
@@ -53,6 +53,17 @@ create_buffer_inert (void)
 }
 
 static void *
+create_set (void)
+{
+  return hb_set_create ();
+}
+static void *
+create_set_inert (void)
+{
+  return NULL;
+}
+
+static void *
 create_face (void)
 {
   hb_blob_t *blob = (hb_blob_t *) create_blob ();
@@ -154,6 +165,7 @@ typedef struct {
 static const object_t objects[] =
 {
   OBJECT_WITHOUT_IMMUTABILITY (buffer),
+  OBJECT_WITHOUT_IMMUTABILITY (set),
   OBJECT_WITH_IMMUTABILITY (blob),
   OBJECT_WITH_IMMUTABILITY (face),
   OBJECT_WITH_IMMUTABILITY (font),
@@ -219,7 +231,7 @@ test_object (void)
   for (i = 0; i < G_N_ELEMENTS (objects); i++) {
     const object_t *o = &objects[i];
     void *obj;
-    hb_user_data_key_t key[2];
+    hb_user_data_key_t key[1001];
 
     {
       unsigned int j;
index 81b6678..79e2bbf 100644 (file)
@@ -132,6 +132,7 @@ test_ot_tag_script_indic (void)
   test_indic_tags ("ory2", "orya", HB_SCRIPT_ORIYA);
   test_indic_tags ("tml2", "taml", HB_SCRIPT_TAMIL);
   test_indic_tags ("tel2", "telu", HB_SCRIPT_TELUGU);
+  test_indic_tags ("mym2", "mymr", HB_SCRIPT_MYANMAR);
 }
 
 
diff --git a/test/api/test-set.c b/test/api/test-set.c
new file mode 100644 (file)
index 0000000..b9e7ef8
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+ * Copyright © 2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-test.h"
+
+/* Unit tests for hb-set.h */
+
+
+static void
+test_empty (hb_set_t *s)
+{
+  hb_codepoint_t next = (hb_codepoint_t) -1;
+  g_assert_cmpint (hb_set_get_population (s), ==, 0);
+  g_assert_cmpint (hb_set_get_min (s), ==, (hb_codepoint_t) -1);
+  g_assert_cmpint (hb_set_get_max (s), ==, (hb_codepoint_t) -1);
+  g_assert (!hb_set_has (s, 13));
+  g_assert (!hb_set_next (s, &next));
+  g_assert_cmpint (next, ==, (hb_codepoint_t) -1);
+}
+
+static void
+test_not_empty (hb_set_t *s)
+{
+  hb_codepoint_t next = (hb_codepoint_t) -1;
+  g_assert_cmpint (hb_set_get_population (s), !=, 0);
+  g_assert_cmpint (hb_set_get_min (s), !=, (hb_codepoint_t) -1);
+  g_assert_cmpint (hb_set_get_max (s), !=, (hb_codepoint_t) -1);
+  g_assert (hb_set_next (s, &next));
+  g_assert_cmpint (next, !=, (hb_codepoint_t) -1);
+}
+
+static void
+test_set_basic (void)
+{
+  hb_set_t *s = hb_set_create ();
+
+  test_empty (s);
+  hb_set_add (s, 13);
+  test_not_empty (s);
+
+  hb_set_clear (s);
+  test_empty (s);
+
+  hb_set_add_range (s, 10, 29);
+  test_not_empty (s);
+  g_assert (hb_set_has (s, 13));
+  g_assert_cmpint (hb_set_get_population (s), ==, 20);
+  g_assert_cmpint (hb_set_get_min (s), ==, 10);
+  g_assert_cmpint (hb_set_get_max (s), ==, 29);
+
+  hb_set_invert (s);
+  test_not_empty (s);
+  g_assert (!hb_set_has (s, 13));
+  g_assert_cmpint (hb_set_get_min (s), ==, 0);
+
+  hb_set_invert (s);
+  test_not_empty (s);
+  g_assert (hb_set_has (s, 13));
+  g_assert_cmpint (hb_set_get_population (s), ==, 20);
+  g_assert_cmpint (hb_set_get_min (s), ==, 10);
+  g_assert_cmpint (hb_set_get_max (s), ==, 29);
+
+  hb_set_del_range (s, 10, 18);
+  test_not_empty (s);
+  g_assert (!hb_set_has (s, 13));
+}
+
+static void
+test_set_algebra (void)
+{
+  hb_set_t *s = hb_set_create ();
+  hb_set_t *o = hb_set_create ();
+
+  hb_set_add (o, 13);
+  hb_set_add (o, 19);
+
+  test_empty (s);
+  g_assert (!hb_set_is_equal (s, o));
+  hb_set_set (s, o);
+  g_assert (hb_set_is_equal (s, o));
+  test_not_empty (s);
+  g_assert_cmpint (hb_set_get_population (s), ==, 2);
+
+  hb_set_clear (s);
+  test_empty (s);
+  hb_set_add (s, 10);
+  g_assert_cmpint (hb_set_get_population (s), ==, 1);
+  hb_set_union (s, o);
+  g_assert_cmpint (hb_set_get_population (s), ==, 3);
+  g_assert (hb_set_has (s, 10));
+  g_assert (hb_set_has (s, 13));
+
+  hb_set_clear (s);
+  test_empty (s);
+  hb_set_add_range (s, 10, 17);
+  g_assert (!hb_set_is_equal (s, o));
+  hb_set_intersect (s, o);
+  g_assert (!hb_set_is_equal (s, o));
+  test_not_empty (s);
+  g_assert_cmpint (hb_set_get_population (s), ==, 1);
+  g_assert (!hb_set_has (s, 10));
+  g_assert (hb_set_has (s, 13));
+
+  hb_set_clear (s);
+  test_empty (s);
+  hb_set_add_range (s, 10, 17);
+  g_assert (!hb_set_is_equal (s, o));
+  hb_set_subtract (s, o);
+  g_assert (!hb_set_is_equal (s, o));
+  test_not_empty (s);
+  g_assert_cmpint (hb_set_get_population (s), ==, 7);
+  g_assert (hb_set_has (s, 12));
+  g_assert (!hb_set_has (s, 13));
+  g_assert (!hb_set_has (s, 19));
+
+  hb_set_clear (s);
+  test_empty (s);
+  hb_set_add_range (s, 10, 17);
+  g_assert (!hb_set_is_equal (s, o));
+  hb_set_symmetric_difference (s, o);
+  g_assert (!hb_set_is_equal (s, o));
+  test_not_empty (s);
+  g_assert_cmpint (hb_set_get_population (s), ==, 8);
+  g_assert (hb_set_has (s, 12));
+  g_assert (!hb_set_has (s, 13));
+  g_assert (hb_set_has (s, 19));
+}
+
+static void
+test_set_iter (void)
+{
+  hb_codepoint_t next, first, last;
+  hb_set_t *s = hb_set_create ();
+
+  hb_set_add (s, 13);
+  hb_set_add_range (s, 6, 6);
+  hb_set_add_range (s, 10, 15);
+  hb_set_add (s, 20005);
+
+  test_not_empty (s);
+
+  next = (hb_codepoint_t) -1;
+  g_assert (hb_set_next (s, &next));
+  g_assert_cmpint (next, ==, 6);
+  g_assert (hb_set_next (s, &next));
+  g_assert_cmpint (next, ==, 10);
+  g_assert (hb_set_next (s, &next));
+  g_assert (hb_set_next (s, &next));
+  g_assert (hb_set_next (s, &next));
+  g_assert_cmpint (next, ==, 13);
+  g_assert (hb_set_next (s, &next));
+  g_assert (hb_set_next (s, &next));
+  g_assert_cmpint (next, ==, 15);
+  g_assert (hb_set_next (s, &next));
+  g_assert_cmpint (next, ==, 20005);
+  g_assert (!hb_set_next (s, &next));
+  g_assert_cmpint (next, ==, 20005);
+
+  first = last = (hb_codepoint_t) -1;
+  g_assert (hb_set_next_range (s, &first, &last));
+  g_assert_cmpint (first, ==, 6);
+  g_assert_cmpint (last,  ==, 6);
+  g_assert (hb_set_next_range (s, &first, &last));
+  g_assert_cmpint (first, ==, 10);
+  g_assert_cmpint (last,  ==, 15);
+  g_assert (hb_set_next_range (s, &first, &last));
+  g_assert_cmpint (first, ==, 20005);
+  g_assert_cmpint (last,  ==, 20005);
+  g_assert (!hb_set_next_range (s, &first, &last));
+  g_assert_cmpint (first, ==, 20005);
+  g_assert_cmpint (last,  ==, 20005);
+}
+
+static void
+test_set_empty (void)
+{
+  hb_set_t *b = hb_set_get_empty ();
+
+  g_assert (hb_set_get_empty ());
+  g_assert (hb_set_get_empty () == b);
+
+  g_assert (!hb_set_allocation_successful (b));
+
+  test_empty (b);
+
+  hb_set_add (b, 13);
+
+  test_empty (b);
+
+  hb_set_invert (b);
+
+  test_empty (b);
+
+  g_assert (!hb_set_allocation_successful (b));
+
+  hb_set_clear (b);
+
+  test_empty (b);
+
+  g_assert (!hb_set_allocation_successful (b));
+}
+
+int
+main (int argc, char **argv)
+{
+  hb_test_init (&argc, &argv);
+
+  hb_test_add (test_set_basic);
+  hb_test_add (test_set_algebra);
+  hb_test_add (test_set_iter);
+  hb_test_add (test_set_empty);
+
+  return hb_test_run();
+}
index 6273f9d..bf1bbee 100644 (file)
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -38,18 +38,22 @@ host_triplet = @host@
 subdir = test/shaping
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
@@ -80,6 +84,7 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -106,6 +111,8 @@ HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -121,6 +128,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -137,6 +145,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -149,6 +160,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -157,6 +169,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -182,7 +195,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -298,10 +310,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
index ce46588..ccb0e1c 100644 (file)
@@ -295,9 +295,12 @@ class DiffHelpers:
        def test_passed (lines):
                lines = list (lines)
                # XXX This is a hack, but does the job for now.
-               if any (l.find("space|space") >= 0 for l in lines): return True
-               if any (l.find("uni25CC") >= 0 for l in lines): return True
-               if any (l.find("dottedcircle") >= 0 for l in lines): return True
+               if any (l.find("space+0|space+0") >= 0 for l in lines if l[0] == '+'): return True
+               if any (l.find("uni25CC") >= 0 for l in lines if l[0] == '+'): return True
+               if any (l.find("dottedcircle") >= 0 for l in lines if l[0] == '+'): return True
+               if any (l.find("glyph0") >= 0 for l in lines if l[0] == '+'): return True
+               if any (l.find("gid0") >= 0 for l in lines if l[0] == '+'): return True
+               if any (l.find("notdef") >= 0 for l in lines if l[0] == '+'): return True
                return all (l[0] == ' ' for l in lines)
 
 
@@ -406,8 +409,8 @@ class Unicode:
 
        @staticmethod
        def parse (s):
-               s = re.sub (r"[<+>,\\uU\n       ]", " ", s)
                s = re.sub (r"0[xX]", " ", s)
+               s = re.sub (r"[<+>,;&#\\xXuU\n  ]", " ", s)
                return [int (x, 16) for x in s.split (' ') if len (x)]
 
        @staticmethod
index b796ada..888b7d9 100644 (file)
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -43,7 +43,11 @@ bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3)
 subdir = util
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+       $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -67,8 +71,8 @@ am__DEPENDENCIES_1 =
 hb_ot_shape_closure_DEPENDENCIES = $(top_builddir)/src/libharfbuzz.la \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__hb_shape_SOURCES_DIST = hb-shape.cc options.cc options.hh \
        main-font-text.hh shape-consumer.hh
@@ -111,18 +115,18 @@ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_$(V))
-am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
 am__v_CXX_0 = @echo "  CXX   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_$(V))
-am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 am__v_CXXLD_0 = @echo "  CXXLD " $@;
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -130,18 +134,18 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
 am__v_CC_0 = @echo "  CC    " $@;
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(hb_ot_shape_closure_SOURCES) $(hb_shape_SOURCES) \
        $(hb_view_SOURCES)
@@ -176,6 +180,7 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -202,6 +207,8 @@ HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
+ICU_LE_LIBS = @ICU_LE_LIBS@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -217,6 +224,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -233,6 +241,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -245,6 +256,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -253,6 +265,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -278,7 +291,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -444,13 +456,13 @@ installcheck-binPROGRAMS: $(bin_PROGRAMS)
            else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
          done; \
        done; rm -f c$${pid}_.???; exit $$bad
-hb-ot-shape-closure$(EXEEXT): $(hb_ot_shape_closure_OBJECTS) $(hb_ot_shape_closure_DEPENDENCIES) 
+hb-ot-shape-closure$(EXEEXT): $(hb_ot_shape_closure_OBJECTS) $(hb_ot_shape_closure_DEPENDENCIES) $(EXTRA_hb_ot_shape_closure_DEPENDENCIES) 
        @rm -f hb-ot-shape-closure$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_ot_shape_closure_OBJECTS) $(hb_ot_shape_closure_LDADD) $(LIBS)
-hb-shape$(EXEEXT): $(hb_shape_OBJECTS) $(hb_shape_DEPENDENCIES) 
+hb-shape$(EXEEXT): $(hb_shape_OBJECTS) $(hb_shape_DEPENDENCIES) $(EXTRA_hb_shape_DEPENDENCIES) 
        @rm -f hb-shape$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_shape_OBJECTS) $(hb_shape_LDADD) $(LIBS)
-hb-view$(EXEEXT): $(hb_view_OBJECTS) $(hb_view_DEPENDENCIES) 
+hb-view$(EXEEXT): $(hb_view_OBJECTS) $(hb_view_DEPENDENCIES) $(EXTRA_hb_view_DEPENDENCIES) 
        @rm -f hb-view$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_view_OBJECTS) $(hb_view_LDADD) $(LIBS)
 
@@ -472,26 +484,23 @@ distclean-compile:
 .cc.o:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cc.obj:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cc.lo:
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -598,10 +607,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
index 6dce7a1..fd9756b 100644 (file)
@@ -61,29 +61,31 @@ struct shape_closure_consumer_t : option_group_t
   }
   void consume_line (hb_buffer_t  *buffer,
                     const char   *text,
-                    unsigned int  text_len)
+                    unsigned int  text_len,
+                    const char   *text_before,
+                    const char   *text_after)
   {
     hb_set_clear (glyphs);
     shaper.shape_closure (text, text_len, font, buffer, glyphs);
 
-    if (hb_set_empty (glyphs))
+    if (hb_set_is_empty (glyphs))
       return;
 
     /* Print it out! */
     bool first = true;
     for (hb_codepoint_t i = -1; hb_set_next (glyphs, &i);)
-      if (hb_set_has (glyphs, i)) {
-        if (first)
-         first = false;
-       else
-         printf (" ");
-       char glyph_name[32];
-       if (show_glyph_names) {
-         hb_font_get_glyph_name (font, i, glyph_name, sizeof (glyph_name));
-         printf ("%s", glyph_name);
-       } else
-         printf ("%u", i);
-      }
+    {
+      if (first)
+       first = false;
+      else
+       printf (" ");
+      char glyph_name[32];
+      if (show_glyph_names) {
+       hb_font_get_glyph_name (font, i, glyph_name, sizeof (glyph_name));
+       printf ("%s", glyph_name);
+      } else
+       printf ("%u", i);
+    }
   }
   void finish (const font_options_t *font_opts)
   {
index b23519b..852f9cf 100644 (file)
@@ -31,7 +31,8 @@
 struct output_buffer_t
 {
   output_buffer_t (option_parser_t *parser)
-                 : options (parser),
+                 : options (parser,
+                            g_strjoinv ("/", (gchar**) hb_buffer_serialize_list_formats ())),
                    format (parser) {}
 
   void init (const font_options_t *font_opts)
@@ -40,6 +41,30 @@ struct output_buffer_t
     gs = g_string_new (NULL);
     line_no = 0;
     font = hb_font_reference (font_opts->get_font ());
+
+    if (!options.output_format)
+      output_format = HB_BUFFER_SERIALIZE_FORMAT_TEXT;
+    else
+      output_format = hb_buffer_serialize_format_from_string (options.output_format, -1);
+    if (!hb_buffer_serialize_format_to_string (output_format))
+    {
+      if (options.explicit_output_format)
+       fail (false, "Unknown output format `%s'; supported formats are: %s",
+             options.output_format, options.supported_formats);
+      else
+       /* Just default to TEXT if not explicitly requested and the
+        * file extension is not recognized. */
+       output_format = HB_BUFFER_SERIALIZE_FORMAT_TEXT;
+    }
+
+    unsigned int flags = HB_BUFFER_SERIALIZE_FLAGS_DEFAULT;
+    if (!format.show_glyph_names)
+      flags |= HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES;
+    if (!format.show_clusters)
+      flags |= HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS;
+    if (!format.show_positions)
+      flags |= HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS;
+    format_flags = (hb_buffer_serialize_flags_t) flags;
   }
   void new_line (void)
   {
@@ -51,7 +76,7 @@ struct output_buffer_t
                     hb_bool_t     utf8_clusters)
   {
     g_string_set_size (gs, 0);
-    format.serialize_buffer_of_text (buffer, line_no, text, text_len, font, utf8_clusters, gs);
+    format.serialize_buffer_of_text (buffer, line_no, text, text_len, font, gs);
     fprintf (options.fp, "%s", gs->str);
   }
   void shape_failed (hb_buffer_t  *buffer,
@@ -69,7 +94,8 @@ struct output_buffer_t
                       hb_bool_t     utf8_clusters)
   {
     g_string_set_size (gs, 0);
-    format.serialize_buffer_of_glyphs (buffer, line_no, text, text_len, font, utf8_clusters, gs);
+    format.serialize_buffer_of_glyphs (buffer, line_no, text, text_len, font,
+                                      output_format, format_flags, gs);
     fprintf (options.fp, "%s", gs->str);
   }
   void finish (const font_options_t *font_opts)
@@ -87,6 +113,8 @@ struct output_buffer_t
   GString *gs;
   unsigned int line_no;
   hb_font_t *font;
+  hb_buffer_serialize_format_t output_format;
+  hb_buffer_serialize_flags_t format_flags;
 };
 
 int
index 35340d1..bc44e8e 100644 (file)
@@ -246,6 +246,25 @@ stdio_write_func (void                *closure,
   return CAIRO_STATUS_SUCCESS;
 }
 
+const char helper_cairo_supported_formats[] =
+  "ansi"
+  #ifdef CAIRO_HAS_PNG_FUNCTIONS
+  "/png"
+  #endif
+  #ifdef CAIRO_HAS_SVG_SURFACE
+  "/svg"
+  #endif
+  #ifdef CAIRO_HAS_PDF_SURFACE
+  "/pdf"
+  #endif
+  #ifdef CAIRO_HAS_PS_SURFACE
+  "/ps"
+   #ifdef HAS_EPS
+    "/eps"
+   #endif
+  #endif
+;
+
 cairo_t *
 helper_cairo_create_context (double w, double h,
                             view_options_t *view_opts,
@@ -268,7 +287,13 @@ helper_cairo_create_context (double w, double h,
       extension = "ansi";
     else
 #endif
+    {
+#ifdef CAIRO_HAS_PNG_FUNCTIONS
       extension = "png";
+#else
+      extension = "ansi";
+#endif
+    }
   }
   if (0)
     ;
@@ -317,7 +342,10 @@ helper_cairo_create_context (double w, double h,
   else if (constructor2)
     surface = constructor2 (stdio_write_func, f, w, h, content);
   else
-    fail (false, "Unknown output format `%s'", extension);
+    fail (false, "Unknown output format `%s'; supported formats are: %s%s",
+         extension, helper_cairo_supported_formats,
+         out_opts->explicit_output_format ? "" :
+         "\nTry setting format using --output-format");
 
   cairo_t *cr = cairo_create (surface);
   content = cairo_surface_get_content (surface);
index 2f2c9d4..b2ac9e4 100644 (file)
@@ -36,6 +36,7 @@ cairo_scaled_font_t *
 helper_cairo_create_scaled_font (const font_options_t *font_opts,
                                 double font_size);
 
+extern const char helper_cairo_supported_formats[];
 
 cairo_t *
 helper_cairo_create_context (double w, double h,
index 44e3bfb..ac51b2d 100644 (file)
@@ -61,7 +61,7 @@ struct main_font_text_t
     unsigned int text_len;
     const char *text;
     while ((text = input.get_line (&text_len)))
-      consumer.consume_line (buffer, text, text_len);
+      consumer.consume_line (buffer, text, text_len, input.text_before, input.text_after);
     hb_buffer_destroy (buffer);
 
     consumer.finish (&font_opts);
index c05cee6..17ad8e6 100644 (file)
@@ -196,130 +196,6 @@ list_shapers (const char *name G_GNUC_UNUSED,
 }
 
 
-
-static void
-parse_space (char **pp)
-{
-  char c;
-#define ISSPACE(c) ((c)==' '||(c)=='\f'||(c)=='\n'||(c)=='\r'||(c)=='\t'||(c)=='\v')
-  while (c = **pp, ISSPACE (c))
-    (*pp)++;
-#undef ISSPACE
-}
-
-static hb_bool_t
-parse_char (char **pp, char c)
-{
-  parse_space (pp);
-
-  if (**pp != c)
-    return false;
-
-  (*pp)++;
-  return true;
-}
-
-static hb_bool_t
-parse_uint (char **pp, unsigned int *pv)
-{
-  char *p = *pp;
-  unsigned int v;
-
-  v = strtol (p, pp, 0);
-
-  if (p == *pp)
-    return false;
-
-  *pv = v;
-  return true;
-}
-
-
-static hb_bool_t
-parse_feature_value_prefix (char **pp, hb_feature_t *feature)
-{
-  if (parse_char (pp, '-'))
-    feature->value = 0;
-  else {
-    parse_char (pp, '+');
-    feature->value = 1;
-  }
-
-  return true;
-}
-
-static hb_bool_t
-parse_feature_tag (char **pp, hb_feature_t *feature)
-{
-  char *p = *pp, c;
-
-  parse_space (pp);
-
-#define ISALNUM(c) (('a' <= (c) && (c) <= 'z') || ('A' <= (c) && (c) <= 'Z') || ('0' <= (c) && (c) <= '9'))
-  while (c = **pp, ISALNUM(c))
-    (*pp)++;
-#undef ISALNUM
-
-  if (p == *pp)
-    return false;
-
-  feature->tag = hb_tag_from_string (p, *pp - p);
-  return true;
-}
-
-static hb_bool_t
-parse_feature_indices (char **pp, hb_feature_t *feature)
-{
-  parse_space (pp);
-
-  hb_bool_t has_start;
-
-  feature->start = 0;
-  feature->end = (unsigned int) -1;
-
-  if (!parse_char (pp, '['))
-    return true;
-
-  has_start = parse_uint (pp, &feature->start);
-
-  if (parse_char (pp, ':')) {
-    parse_uint (pp, &feature->end);
-  } else {
-    if (has_start)
-      feature->end = feature->start + 1;
-  }
-
-  return parse_char (pp, ']');
-}
-
-static hb_bool_t
-parse_feature_value_postfix (char **pp, hb_feature_t *feature)
-{
-  return !parse_char (pp, '=') || parse_uint (pp, &feature->value);
-}
-
-
-static hb_bool_t
-parse_one_feature (char **pp, hb_feature_t *feature)
-{
-  return parse_feature_value_prefix (pp, feature) &&
-        parse_feature_tag (pp, feature) &&
-        parse_feature_indices (pp, feature) &&
-        parse_feature_value_postfix (pp, feature) &&
-        (parse_char (pp, ',') || **pp == '\0');
-}
-
-static void
-skip_one_feature (char **pp)
-{
-  char *e;
-  e = strchr (*pp, ',');
-  if (e)
-    *pp = e + 1;
-  else
-    *pp = *pp + strlen (*pp);
-}
-
 static gboolean
 parse_features (const char *name G_GNUC_UNUSED,
                const char *arg,
@@ -351,11 +227,11 @@ parse_features (const char *name G_GNUC_UNUSED,
   /* now do the actual parsing */
   p = s;
   shape_opts->num_features = 0;
-  while (*p) {
-    if (parse_one_feature (&p, &shape_opts->features[shape_opts->num_features]))
+  while (p && *p) {
+    char *end = strchr (p, ',');
+    if (hb_feature_from_string (p, end ? end - p : -1, &shape_opts->features[shape_opts->num_features]))
       shape_opts->num_features++;
-    else
-      skip_one_feature (&p);
+    p = end ? end + 1 : NULL;
   }
 
   return true;
@@ -368,11 +244,11 @@ view_options_t::add_options (option_parser_t *parser)
   GOptionEntry entries[] =
   {
     {"annotate",       0, 0, G_OPTION_ARG_NONE,        &this->annotate,                "Annotate output rendering",                            NULL},
-    {"background",     0, 0, G_OPTION_ARG_STRING,      &this->back,                    "Set background color (default: "DEFAULT_BACK")",       "red/#rrggbb/#rrggbbaa"},
-    {"foreground",     0, 0, G_OPTION_ARG_STRING,      &this->fore,                    "Set foreground color (default: "DEFAULT_FORE")",       "red/#rrggbb/#rrggbbaa"},
+    {"background",     0, 0, G_OPTION_ARG_STRING,      &this->back,                    "Set background color (default: " DEFAULT_BACK ")",     "red/#rrggbb/#rrggbbaa"},
+    {"foreground",     0, 0, G_OPTION_ARG_STRING,      &this->fore,                    "Set foreground color (default: " DEFAULT_FORE ")",     "red/#rrggbb/#rrggbbaa"},
     {"line-space",     0, 0, G_OPTION_ARG_DOUBLE,      &this->line_space,              "Set space between lines (default: 0)",                 "units"},
-    {"margin",         0, 0, G_OPTION_ARG_CALLBACK,    (gpointer) &parse_margin,       "Margin around output (default: "G_STRINGIFY(DEFAULT_MARGIN)")","one to four numbers"},
-    {"font-size",      0, 0, G_OPTION_ARG_DOUBLE,      &this->font_size,               "Font size (default: "G_STRINGIFY(DEFAULT_FONT_SIZE)")","size"},
+    {"margin",         0, 0, G_OPTION_ARG_CALLBACK,    (gpointer) &parse_margin,       "Margin around output (default: " G_STRINGIFY(DEFAULT_MARGIN) ")","one to four numbers"},
+    {"font-size",      0, 0, G_OPTION_ARG_DOUBLE,      &this->font_size,               "Font size (default: " G_STRINGIFY(DEFAULT_FONT_SIZE) ")","size"},
     {NULL}
   };
   parser->add_group (entries,
@@ -395,6 +271,9 @@ shape_options_t::add_options (option_parser_t *parser)
     {"direction",      0, 0, G_OPTION_ARG_STRING,      &this->direction,               "Set text direction (default: auto)",   "ltr/rtl/ttb/btt"},
     {"language",       0, 0, G_OPTION_ARG_STRING,      &this->language,                "Set text language (default: $LANG)",   "langstr"},
     {"script",         0, 0, G_OPTION_ARG_STRING,      &this->script,                  "Set text script (default: auto)",      "ISO-15924 tag"},
+    {"bot",            0, 0, G_OPTION_ARG_NONE,        &this->bot,                     "Treat text as beginning-of-paragraph", NULL},
+    {"eot",            0, 0, G_OPTION_ARG_NONE,        &this->eot,                     "Treat text as end-of-paragraph",       NULL},
+    {"preserve-default-ignorables",0, 0, G_OPTION_ARG_NONE,    &this->preserve_default_ignorables,     "Preserve Default-Ignorable characters",        NULL},
     {"utf8-clusters",  0, 0, G_OPTION_ARG_NONE,        &this->utf8_clusters,           "Use UTF8 byte indices, not char indices",      NULL},
     {"normalize-glyphs",0, 0, G_OPTION_ARG_NONE,       &this->normalize_glyphs,        "Rearrange glyph clusters in nominal order",    NULL},
     {NULL}
@@ -437,7 +316,7 @@ shape_options_t::add_options (option_parser_t *parser)
     "\n"
     "    Mixing it all:\n"
     "\n"
-    "      \"kern[3:5]=0\" 1         3         5         # Turn feature off for range";
+    "      \"aalt[3:5]=2\" 2         3         5         # Turn 2nd alternate on for range";
 
   GOptionEntry entries2[] =
   {
@@ -473,7 +352,9 @@ text_options_t::add_options (option_parser_t *parser)
   GOptionEntry entries[] =
   {
     {"text",           0, 0, G_OPTION_ARG_STRING,      &this->text,                    "Set input text",                       "string"},
-    {"text-file",      0, 0, G_OPTION_ARG_STRING,      &this->text_file,               "Set input text file-name\n\n    If no text is provided, standard input is used for input.",            "filename"},
+    {"text-file",      0, 0, G_OPTION_ARG_STRING,      &this->text_file,               "Set input text file-name\n\n    If no text is provided, standard input is used for input.\n",          "filename"},
+    {"text-before",    0, 0, G_OPTION_ARG_STRING,      &this->text_before,             "Set text context before each line",    "string"},
+    {"text-after",     0, 0, G_OPTION_ARG_STRING,      &this->text_after,              "Set text context after each line",     "string"},
     {NULL}
   };
   parser->add_group (entries,
@@ -486,10 +367,17 @@ text_options_t::add_options (option_parser_t *parser)
 void
 output_options_t::add_options (option_parser_t *parser)
 {
+  const char *text;
+
+  if (NULL == supported_formats)
+    text = "Set output format";
+  else
+    text = g_strdup_printf ("Set output format\n\n    Supported formats are: %s", supported_formats);
+
   GOptionEntry entries[] =
   {
     {"output-file",    0, 0, G_OPTION_ARG_STRING,      &this->output_file,             "Set output file-name (default: stdout)","filename"},
-    {"output-format",  0, 0, G_OPTION_ARG_STRING,      &this->output_format,           "Set output format",                    "format"},
+    {"output-format",  0, 0, G_OPTION_ARG_STRING,      &this->output_format,           text,                                   "format"},
     {NULL}
   };
   parser->add_group (entries,
@@ -734,45 +622,23 @@ format_options_t::serialize_unicode (hb_buffer_t *buffer,
 void
 format_options_t::serialize_glyphs (hb_buffer_t *buffer,
                                    hb_font_t   *font,
-                                   hb_bool_t    utf8_clusters,
+                                   hb_buffer_serialize_format_t output_format,
+                                   hb_buffer_serialize_flags_t flags,
                                    GString     *gs)
 {
-  unsigned int num_glyphs = hb_buffer_get_length (buffer);
-  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
-  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
-
   g_string_append_c (gs, '[');
-  for (unsigned int i = 0; i < num_glyphs; i++)
-  {
-    if (i)
-      g_string_append_c (gs, '|');
-
-    char glyph_name[128];
-    if (show_glyph_names) {
-      hb_font_glyph_to_string (font, info->codepoint, glyph_name, sizeof (glyph_name));
-      g_string_append_printf (gs, "%s", glyph_name);
-    } else
-      g_string_append_printf (gs, "%u", info->codepoint);
-
-    if (show_clusters) {
-      g_string_append_printf (gs, "=%u", info->cluster);
-      if (utf8_clusters)
-       g_string_append (gs, "u8");
-    }
-
-    if (show_positions && (pos->x_offset || pos->y_offset)) {
-      g_string_append_c (gs, '@');
-      if (pos->x_offset) g_string_append_printf (gs, "%d", pos->x_offset);
-      if (pos->y_offset) g_string_append_printf (gs, ",%d", pos->y_offset);
-    }
-    if (show_positions && (pos->x_advance || pos->y_advance)) {
-      g_string_append_c (gs, '+');
-      if (pos->x_advance) g_string_append_printf (gs, "%d", pos->x_advance);
-      if (pos->y_advance) g_string_append_printf (gs, ",%d", pos->y_advance);
-    }
-
-    info++;
-    pos++;
+  unsigned int num_glyphs = hb_buffer_get_length (buffer);
+  unsigned int start = 0;
+
+  while (start < num_glyphs) {
+    char buf[1024];
+    unsigned int consumed;
+    start += hb_buffer_serialize_glyphs (buffer, start, num_glyphs,
+                                        buf, sizeof (buf), &consumed,
+                                        font, output_format, flags);
+    if (!consumed)
+      break;
+    g_string_append (gs, buf);
   }
   g_string_append_c (gs, ']');
 }
@@ -789,7 +655,6 @@ format_options_t::serialize_buffer_of_text (hb_buffer_t  *buffer,
                                            const char   *text,
                                            unsigned int  text_len,
                                            hb_font_t    *font,
-                                           hb_bool_t     utf8_clusters,
                                            GString      *gs)
 {
   if (show_text) {
@@ -821,10 +686,11 @@ format_options_t::serialize_buffer_of_glyphs (hb_buffer_t  *buffer,
                                              const char   *text,
                                              unsigned int  text_len,
                                              hb_font_t    *font,
-                                             hb_bool_t     utf8_clusters,
+                                             hb_buffer_serialize_format_t output_format,
+                                             hb_buffer_serialize_flags_t format_flags,
                                              GString      *gs)
 {
   serialize_line_no (line_no, gs);
-  serialize_glyphs (buffer, font, utf8_clusters, gs);
+  serialize_glyphs (buffer, font, output_format, format_flags, gs);
   g_string_append_c (gs, '\n');
 }
index 5d25d9e..ad925b2 100644 (file)
@@ -144,6 +144,7 @@ struct shape_options_t : option_group_t
   shape_options_t (option_parser_t *parser)
   {
     direction = language = script = NULL;
+    bot = eot = preserve_default_ignorables = false;
     features = NULL;
     num_features = 0;
     shapers = NULL;
@@ -165,12 +166,24 @@ struct shape_options_t : option_group_t
     hb_buffer_set_direction (buffer, hb_direction_from_string (direction, -1));
     hb_buffer_set_script (buffer, hb_script_from_string (script, -1));
     hb_buffer_set_language (buffer, hb_language_from_string (language, -1));
+    hb_buffer_set_flags (buffer, (hb_buffer_flags_t) (HB_BUFFER_FLAGS_DEFAULT |
+                        (bot ? HB_BUFFER_FLAG_BOT : 0) |
+                        (eot ? HB_BUFFER_FLAG_EOT : 0) |
+                        (preserve_default_ignorables ? HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES : 0)));
   }
 
-  void populate_buffer (hb_buffer_t *buffer, const char *text, int text_len)
+  void populate_buffer (hb_buffer_t *buffer, const char *text, int text_len,
+                       const char *text_before, const char *text_after)
   {
-    hb_buffer_reset (buffer);
+    hb_buffer_clear_contents (buffer);
+    if (text_before) {
+      unsigned int len = strlen (text_before);
+      hb_buffer_add_utf8 (buffer, text_before, len, len, 0);
+    }
     hb_buffer_add_utf8 (buffer, text, text_len, 0, text_len);
+    if (text_after) {
+      hb_buffer_add_utf8 (buffer, text_after, -1, 0, 0);
+    }
 
     if (!utf8_clusters) {
       /* Reset cluster values to refer to Unicode character index
@@ -205,9 +218,16 @@ struct shape_options_t : option_group_t
     hb_ot_shape_glyphs_closure (font, buffer, features, num_features, glyphs);
   }
 
+  /* Buffer properties */
   const char *direction;
   const char *language;
   const char *script;
+
+  /* Buffer flags */
+  hb_bool_t bot;
+  hb_bool_t eot;
+  hb_bool_t preserve_default_ignorables;
+
   hb_feature_t *features;
   unsigned int num_features;
   char **shapers;
@@ -245,6 +265,9 @@ struct font_options_t : option_group_t
 struct text_options_t : option_group_t
 {
   text_options_t (option_parser_t *parser) {
+    text_before = NULL;
+    text_after = NULL;
+
     text = NULL;
     text_file = NULL;
 
@@ -273,6 +296,9 @@ struct text_options_t : option_group_t
 
   const char *get_line (unsigned int *len);
 
+  const char *text_before;
+  const char *text_after;
+
   const char *text;
   const char *text_file;
 
@@ -284,9 +310,12 @@ struct text_options_t : option_group_t
 
 struct output_options_t : option_group_t
 {
-  output_options_t (option_parser_t *parser) {
+  output_options_t (option_parser_t *parser,
+                   const char *supported_formats_ = NULL) {
     output_file = NULL;
     output_format = NULL;
+    supported_formats = supported_formats_;
+    explicit_output_format = false;
 
     fp = NULL;
 
@@ -301,6 +330,9 @@ struct output_options_t : option_group_t
 
   void post_parse (GError **error G_GNUC_UNUSED)
   {
+    if (output_format)
+      explicit_output_format = true;
+
     if (output_file && !output_format) {
       output_format = strrchr (output_file, '.');
       if (output_format)
@@ -315,6 +347,8 @@ struct output_options_t : option_group_t
 
   const char *output_file;
   const char *output_format;
+  const char *supported_formats;
+  bool explicit_output_format;
 
   mutable FILE *fp;
 };
@@ -338,7 +372,8 @@ struct format_options_t : option_group_t
                          GString      *gs);
   void serialize_glyphs (hb_buffer_t  *buffer,
                         hb_font_t    *font,
-                        hb_bool_t    utf8_clusters,
+                        hb_buffer_serialize_format_t format,
+                        hb_buffer_serialize_flags_t flags,
                         GString      *gs);
   void serialize_line_no (unsigned int  line_no,
                          GString      *gs);
@@ -347,7 +382,6 @@ struct format_options_t : option_group_t
                                 const char   *text,
                                 unsigned int  text_len,
                                 hb_font_t    *font,
-                                hb_bool_t     utf8_clusters,
                                 GString      *gs);
   void serialize_message (unsigned int  line_no,
                          const char   *msg,
@@ -357,7 +391,8 @@ struct format_options_t : option_group_t
                                   const char   *text,
                                   unsigned int  text_len,
                                   hb_font_t    *font,
-                                  hb_bool_t     utf8_clusters,
+                                  hb_buffer_serialize_format_t output_format,
+                                  hb_buffer_serialize_flags_t format_flags,
                                   GString      *gs);
 
 
index 220daa4..bf1a22d 100644 (file)
@@ -45,11 +45,13 @@ struct shape_consumer_t
   }
   void consume_line (hb_buffer_t  *buffer,
                     const char   *text,
-                    unsigned int  text_len)
+                    unsigned int  text_len,
+                    const char   *text_before,
+                    const char   *text_after)
   {
     output.new_line ();
 
-    shaper.populate_buffer (buffer, text, text_len);
+    shaper.populate_buffer (buffer, text, text_len, text_before, text_after);
     output.consume_text (buffer, text, text_len, shaper.utf8_clusters);
 
     if (!shaper.shape (font, buffer)) {
index c621984..f273464 100644 (file)
@@ -33,7 +33,7 @@
 
 struct view_cairo_t {
   view_cairo_t (option_parser_t *parser)
-              : output_options (parser),
+              : output_options (parser, helper_cairo_supported_formats),
                 view_options (parser) {}
   ~view_cairo_t (void) {
     if (debug)