src/Makefile.am | 3 src/check-internal-symbols.sh | 3 src/check-libstdc++.sh | 3 src/hb-buffer.cc | 10 +++ src/hb-glib.cc | 8 +- src/hb-ot-name-private.hh | 128 ++++++++++++++++++++++++++++++++++++++++++ src/hb-shape.cc | 16 ++--- src/hb-uniscribe-shape.cc | 62 ++++++++++++++------ src/test.cc | 5 - test/Makefile.am | 8 -- 10 files changed, 209 insertions(+), 37 deletions(-)
New commits: commit 826e22732dd8697600a1392f48af21b7b3ce6271 Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 03:53:42 2011 -0400 [uniscribe] Fix blob lifecycles diff --git a/src/hb-uniscribe-shape.cc b/src/hb-uniscribe-shape.cc index da0bced..82ef648 100644 --- a/src/hb-uniscribe-shape.cc +++ b/src/hb-uniscribe-shape.cc @@ -73,6 +73,8 @@ populate_log_font (LOGFONTW *lf, lf->lfFaceName, sizeof (lf->lfFaceName[0]) * LF_FACESIZE) / sizeof (lf->lfFaceName[0]); + hb_blob_destroy (blob); + if (unlikely (!len)) { DEBUG_MSG (UNISCRIBE, NULL, "Didn't find English name table entry"); return FALSE; @@ -195,7 +197,6 @@ retry: DWORD num_fonts_installed; HANDLE fh = AddFontMemResourceEx ((void *) blob_data, blob_length, 0, &num_fonts_installed); - hb_blob_destroy (blob); if (unlikely (!fh)) FAIL ("AddFontMemResourceEx() failed"); commit ff199ba356f0eb5bc6252203eea18a1d1fd28934 Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 03:43:46 2011 -0400 Fix shaper_list manipulation, aaaaaaaaaaaaargh diff --git a/src/hb-shape.cc b/src/hb-shape.cc index 78c39dd..7833a39 100644 --- a/src/hb-shape.cc +++ b/src/hb-shape.cc @@ -78,7 +78,7 @@ static struct static_shaper_list_t } unsigned int count = 3; /* initial, fallback, null */ - for (const char *p = env; (p == strchr (p, ',')) && p++; ) + for (const char *p = env; (p = strchr (p, ',')) && p++; ) count++; unsigned int len = strlen (env); @@ -95,7 +95,7 @@ static struct static_shaper_list_t count = 0; shaper_list[count++] = buffer; - for (char *p = buffer; (p == strchr (p, ',')) && (*p = '\0', TRUE) && p++; ) + for (char *p = buffer; (p = strchr (p, ',')) && (*p = '\0', TRUE) && p++; ) shaper_list[count++] = p; shaper_list[count++] = "fallback"; shaper_list[count] = NULL; @@ -136,11 +136,13 @@ hb_shape_full (hb_font_t *font, } else { while (*shaper_list) { for (unsigned int i = 0; i < ARRAY_LENGTH (shapers); i++) - if (0 == strcmp (*shaper_list, shapers[i].name) && - likely (shapers[i].func (font, buffer, - features, num_features, - shaper_options))) - return TRUE; + if (0 == strcmp (*shaper_list, shapers[i].name)) { + if (likely (shapers[i].func (font, buffer, + features, num_features, + shaper_options))) + return TRUE; + break; + } shaper_list++; } } commit 206e32934592b915b1f3052aecf014c6ced729e1 Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 01:10:55 2011 -0400 [test] test-object is not FreeType-specific, move it to the right place diff --git a/test/Makefile.am b/test/Makefile.am index 18f36df..b3c8cc2 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -20,6 +20,7 @@ TEST_PROGS = \ test-buffer \ test-common \ test-font \ + test-object \ test-shape \ test-unicode \ test-version \ @@ -46,12 +47,9 @@ endif if HAVE_FREETYPE test_c_CPPFLAGS += $(FREETYPE_CFLAGS) test_cplusplus_CPPFLAGS += $(FREETYPE_CFLAGS) +endif -# TODO replace freetype with other stuff in the following test -TEST_PROGS += test-object -test_object_CPPFLAGS = $(AM_CPPFLAGS) $(FREETYPE_CFLAGS) -test_object_LDADD = $(LDADD) $(FREETYPE_LIBS) - +if HAVE_FREETYPE TEST_PROGS += test-shape-complex test_shape_complex_CPPFLAGS = $(AM_CPPFLAGS) $(FREETYPE_CFLAGS) test_shape_complex_LDADD = $(LDADD) $(FREETYPE_LIBS) commit 577326b86af80cc137eea81f4cc1e30adf9232b1 Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 01:04:40 2011 -0400 [uniscribe] Fix cluster calculation diff --git a/src/hb-uniscribe-shape.cc b/src/hb-uniscribe-shape.cc index 8527ec8..da0bced 100644 --- a/src/hb-uniscribe-shape.cc +++ b/src/hb-uniscribe-shape.cc @@ -288,7 +288,11 @@ retry: /* Calculate visual-clusters. That's what we ship. */ for (unsigned int i = 0; i < buffer->len; i++) - vis_clusters[log_clusters[buffer->info[i].utf16_index()]] = buffer->info[i].cluster; + vis_clusters[i] = 0; + for (unsigned int i = 0; i < buffer->len; i++) { + uint32_t *p = &vis_clusters[log_clusters[buffer->info[i].utf16_index()]]; + *p = MIN (*p, buffer->info[i].cluster); + } for (unsigned int i = 1; i < glyphs_len; i++) if (!glyph_props[i].sva.fClusterStart) vis_clusters[i] = vis_clusters[i - 1]; commit f6d83b2dcf120f9d6f0a28c6f5de2da7addf9089 Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 00:59:58 2011 -0400 Minor diff --git a/src/test.cc b/src/test.cc index 4051829..d096ab3 100644 --- a/src/test.cc +++ b/src/test.cc @@ -93,7 +93,7 @@ main (int argc, char **argv) hb_buffer_t *buffer = hb_buffer_create (0); - hb_buffer_add_utf8 (buffer, "test", 4, 0, 4); + 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); @@ -106,7 +106,7 @@ main (int argc, char **argv) hb_glyph_info_t *info = &infos[i]; hb_glyph_position_t *pos = &positions[i]; - printf ("cluster %d glyph %d at (%d,%d)+(%d,%d)\n", + printf ("cluster %d glyph 0x%x at (%d,%d)+(%d,%d)\n", info->cluster, info->codepoint, pos->x_offset, commit 2eb474afb4a09f4da8f14b444bd6066769010224 Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 00:59:38 2011 -0400 [uniscribe] Fix shaper It's kinda working finally! diff --git a/src/hb-uniscribe-shape.cc b/src/hb-uniscribe-shape.cc index d6d3d79..8527ec8 100644 --- a/src/hb-uniscribe-shape.cc +++ b/src/hb-uniscribe-shape.cc @@ -176,7 +176,7 @@ retry: script_tags, &item_count); if (unlikely (FAILED (hr))) - FAIL ("ScriptItemizeOpenType() failed: %d", hr); + FAIL ("ScriptItemizeOpenType() failed: 0x%08xL", hr); #undef MAX_ITEMS @@ -248,8 +248,10 @@ retry: FAIL ("Buffer resize failed"); goto retry; } + if (unlikely (hr == USP_E_SCRIPT_NOT_IN_FONT)) + FAIL ("ScriptShapeOpenType() failed: Font doesn't support script"); if (unlikely (FAILED (hr))) - FAIL ("ScriptShapeOpenType() failed: %d", hr); + FAIL ("ScriptShapeOpenType() failed: 0x%08xL", hr); hr = ScriptPlaceOpenType (hdc, &script_cache, @@ -271,7 +273,7 @@ retry: offsets + glyphs_offset, NULL); if (unlikely (FAILED (hr))) - FAIL ("ScriptPlaceOpenType() failed: %d", hr); + FAIL ("ScriptPlaceOpenType() failed: 0x%08xL", hr); glyphs_offset += glyphs_len; } @@ -312,6 +314,7 @@ retry: info->var1.u32 = offsets[i].du; info->var2.u32 = offsets[i].dv; } + buffer->len = glyphs_len; /* Set glyph positions */ buffer->clear_positions (); commit f22e661147691ebc9d531aa28a850988e6503f9b Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 00:59:12 2011 -0400 [glib] Protect against invalid characters diff --git a/src/hb-glib.cc b/src/hb-glib.cc index 1b322ea..1fd54e5 100644 --- a/src/hb-glib.cc +++ b/src/hb-glib.cc @@ -254,8 +254,10 @@ hb_glib_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED, len = g_unichar_to_utf8 (a, utf8); len += g_unichar_to_utf8 (b, utf8 + len); normalized = g_utf8_normalize (utf8, len, G_NORMALIZE_NFC); - len = g_utf8_strlen (normalized, -1); + if (unlikely (!len)) + return FALSE; + if (len == 1) { *ab = g_utf8_get_char (normalized); ret = TRUE; @@ -288,8 +290,10 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, len = g_unichar_to_utf8 (ab, utf8); normalized = g_utf8_normalize (utf8, len, G_NORMALIZE_NFD); - len = g_utf8_strlen (normalized, -1); + if (unlikely (!len)) + return FALSE; + if (len == 1) { *a = g_utf8_get_char (normalized); *b = 0; commit 144cd49a0eb3ccc749325d0ee14b3ebf4367c971 Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 00:51:50 2011 -0400 [buffer] Accept -1 for text_length and item_length A -1 text_length means: zero-terminated string. A -1 item_length means: to the end of string. diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index e19e7dd..53b3200 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -712,6 +712,16 @@ hb_buffer_guess_properties (hb_buffer_t *buffer) #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; \ const T *next = (const T *) text + item_offset; \ const T *end = next + item_length; \ while (next < end) { \ commit e9c71fab30fd1d5b163c8a072f9e2d3eb8ba3a92 Author: Behdad Esfahbod <[email protected]> Date: Sun Aug 7 00:00:27 2011 -0400 Fix name-table lookup Oops! diff --git a/src/hb-ot-name-private.hh b/src/hb-ot-name-private.hh index 3355bd9..d2acba1 100644 --- a/src/hb-ot-name-private.hh +++ b/src/hb-ot-name-private.hh @@ -92,7 +92,7 @@ struct name return 0; unsigned int length = MIN (buffer_length, (unsigned int) match->length); - memcmp (buffer, (this + stringOffset) + match->offset, length); + memcpy (buffer, (char *) this + stringOffset + match->offset, length); return length; } diff --git a/src/hb-uniscribe-shape.cc b/src/hb-uniscribe-shape.cc index 0934d5d..d6d3d79 100644 --- a/src/hb-uniscribe-shape.cc +++ b/src/hb-uniscribe-shape.cc @@ -81,9 +81,11 @@ populate_log_font (LOGFONTW *lf, DEBUG_MSG (UNISCRIBE, NULL, "Font name too long"); return FALSE; } + for (unsigned int i = 0; i < len; i++) lf->lfFaceName[i] = hb_be_uint16 (lf->lfFaceName[i]); lf->lfFaceName[len] = 0; + return TRUE; } commit 3fd2b5bece28c81e3e379352f09eee39d19ac372 Author: Behdad Esfahbod <[email protected]> Date: Sat Aug 6 22:59:54 2011 -0400 [uniscribe] Use font size directly diff --git a/src/hb-uniscribe-shape.cc b/src/hb-uniscribe-shape.cc index 3b1a178..0934d5d 100644 --- a/src/hb-uniscribe-shape.cc +++ b/src/hb-uniscribe-shape.cc @@ -65,7 +65,7 @@ populate_log_font (LOGFONTW *lf, { memset (lf, 0, sizeof (*lf)); int dpi = GetDeviceCaps (hdc, LOGPIXELSY); - lf->lfHeight = MulDiv (font->x_scale, dpi, 72); + lf->lfHeight = -font->y_scale; 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); commit 892eb2e462b40451b8f73879eab66310d884386a Author: Behdad Esfahbod <[email protected]> Date: Sat Aug 6 22:06:52 2011 -0400 [uniscribe] Make font selection work Not tested yet. diff --git a/src/hb-ot-name-private.hh b/src/hb-ot-name-private.hh index cbc8c81..3355bd9 100644 --- a/src/hb-ot-name-private.hh +++ b/src/hb-ot-name-private.hh @@ -39,6 +39,20 @@ struct NameRecord { + static int cmp (const NameRecord *a, const NameRecord *b) + { + int ret; + ret = b->platformID.cmp (a->platformID); + if (ret) return ret; + ret = b->encodingID.cmp (a->encodingID); + if (ret) return ret; + ret = b->languageID.cmp (a->languageID); + if (ret) return ret; + ret = b->nameID.cmp (a->nameID); + if (ret) return ret; + return 0; + } + inline bool sanitize (hb_sanitize_context_t *c, void *base) { TRACE_SANITIZE (); /* We can check from base all the way up to the end of string... */ @@ -60,6 +74,28 @@ struct name { static const hb_tag_t Tag = HB_OT_TAG_name; + inline unsigned int get_name (unsigned int platform_id, + unsigned int encoding_id, + unsigned int language_id, + unsigned int name_id, + void *buffer, + unsigned int buffer_length) const + { + NameRecord key; + key.platformID.set (platform_id); + key.encodingID.set (encoding_id); + key.languageID.set (language_id); + key.nameID.set (name_id); + NameRecord *match = (NameRecord *) bsearch (&key, nameRecord, count, sizeof (nameRecord[0]), (hb_compare_func_t) NameRecord::cmp); + + if (!match) + return 0; + + unsigned int length = MIN (buffer_length, (unsigned int) match->length); + memcmp (buffer, (this + stringOffset) + match->offset, length); + return length; + } + inline bool sanitize_records (hb_sanitize_context_t *c) { TRACE_SANITIZE (); unsigned int _count = count; @@ -70,6 +106,7 @@ struct name inline bool sanitize (hb_sanitize_context_t *c) { TRACE_SANITIZE (); + return true; return c->check_struct (this) && likely (format == 0 || format == 1) && c->check_array (nameRecord, nameRecord[0].static_size, count) && diff --git a/src/hb-uniscribe-shape.cc b/src/hb-uniscribe-shape.cc index ecc801e..3b1a178 100644 --- a/src/hb-uniscribe-shape.cc +++ b/src/hb-uniscribe-shape.cc @@ -58,19 +58,33 @@ DWORD GetFontData( ); */ -static void +static bool populate_log_font (LOGFONTW *lf, HDC hdc, - hb_font_t *font, - hb_blob_t *blob) + hb_font_t *font) { memset (lf, 0, sizeof (*lf)); int dpi = GetDeviceCaps (hdc, LOGPIXELSY); lf->lfHeight = MulDiv (font->x_scale, dpi, 72); - WCHAR family_name[] = {'n','a','z','l','i'}; - for (unsigned int i = 0; family_name[i] && i < LF_FACESIZE - 1; i++) - lf->lfFaceName[i] = family_name[i]; + 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); + unsigned int len = name_table->get_name (3, 1, 0x409, 4, + lf->lfFaceName, + sizeof (lf->lfFaceName[0]) * LF_FACESIZE) + / sizeof (lf->lfFaceName[0]); + if (unlikely (!len)) { + DEBUG_MSG (UNISCRIBE, NULL, "Didn't find English name table entry"); + return FALSE; + } + if (unlikely (len >= LF_FACESIZE)) { + DEBUG_MSG (UNISCRIBE, NULL, "Font name too long"); + return FALSE; + } + for (unsigned int i = 0; i < len; i++) + lf->lfFaceName[i] = hb_be_uint16 (lf->lfFaceName[i]); + lf->lfFaceName[len] = 0; + return TRUE; } hb_bool_t @@ -179,6 +193,7 @@ retry: DWORD num_fonts_installed; HANDLE fh = AddFontMemResourceEx ((void *) blob_data, blob_length, 0, &num_fonts_installed); + hb_blob_destroy (blob); if (unlikely (!fh)) FAIL ("AddFontMemResourceEx() failed"); @@ -187,7 +202,8 @@ retry: HDC hdc = GetDC (NULL); /* XXX The DC should be cached on the face I guess? */ LOGFONTW log_font; - populate_log_font (&log_font, hdc, font, blob); + if (unlikely (!populate_log_font (&log_font, hdc, font))) + FAIL ("populate_log_font() failed"); HFONT hfont = CreateFontIndirectW (&log_font); SelectObject (hdc, hfont); diff --git a/src/test.cc b/src/test.cc index 860e4d2..4051829 100644 --- a/src/test.cc +++ b/src/test.cc @@ -38,7 +38,6 @@ #include <stdio.h> - int main (int argc, char **argv) { commit b492299eb3c398701557e452f6c2c9bd370fbbf3 Author: Behdad Esfahbod <[email protected]> Date: Fri Aug 5 20:34:50 2011 -0400 Start implementing the 'name' table diff --git a/src/Makefile.am b/src/Makefile.am index ff5a6d2..e999c6c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -28,11 +28,12 @@ HBSOURCES = \ hb-open-type-private.hh \ hb-ot-head-private.hh \ hb-ot-maxp-private.hh \ + hb-ot-name-private.hh \ + hb-ot-tag.cc \ hb-private.hh \ hb-shape.cc \ hb-unicode-private.hh \ hb-unicode.cc \ - hb-ot-tag.cc \ $(NULL) HBHEADERS = \ hb.h \ diff --git a/src/hb-ot-name-private.hh b/src/hb-ot-name-private.hh new file mode 100644 index 0000000..cbc8c81 --- /dev/null +++ b/src/hb-ot-name-private.hh @@ -0,0 +1,91 @@ +/* + * Copyright © 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 + */ + +#ifndef HB_OT_NAME_PRIVATE_HH +#define HB_OT_NAME_PRIVATE_HH + +#include "hb-open-type-private.hh" + + + +/* + * name + */ + +#define HB_OT_TAG_name HB_TAG('n','a','m','e') + +struct NameRecord +{ + inline bool sanitize (hb_sanitize_context_t *c, void *base) { + TRACE_SANITIZE (); + /* We can check from base all the way up to the end of string... */ + return c->check_struct (this) && + c->check_range ((char *) base, (unsigned int) length + offset); + } + + USHORT platformID; /* Platform ID. */ + USHORT encodingID; /* Platform-specific encoding ID. */ + USHORT languageID; /* Language ID. */ + USHORT nameID; /* Name ID. */ + USHORT length; /* String length (in bytes). */ + USHORT offset; /* String offset from start of storage area (in bytes). */ + public: + DEFINE_SIZE_STATIC (12); +}; + +struct name +{ + static const hb_tag_t Tag = HB_OT_TAG_name; + + inline bool sanitize_records (hb_sanitize_context_t *c) { + TRACE_SANITIZE (); + unsigned int _count = count; + for (unsigned int i = 0; i < _count; i++) + if (!nameRecord[i].sanitize (c, this + stringOffset)) return false; + return true; + } + + inline bool sanitize (hb_sanitize_context_t *c) { + TRACE_SANITIZE (); + return c->check_struct (this) && + likely (format == 0 || format == 1) && + c->check_array (nameRecord, nameRecord[0].static_size, count) && + sanitize_records (c); + } + + /* We only implement format 0 for now. */ + private: + USHORT format; /* Format selector (=0/1). */ + USHORT count; /* Number of name records. */ + Offset stringOffset; /* Offset to start of string storage (from start of table). */ + NameRecord nameRecord[VAR]; /* The name records where count is the number of records. */ + public: + DEFINE_SIZE_ARRAY (6, nameRecord); +}; + + + +#endif /* HB_OT_NAME_PRIVATE_HH */ diff --git a/src/hb-uniscribe-shape.cc b/src/hb-uniscribe-shape.cc index 6c93f3b..ecc801e 100644 --- a/src/hb-uniscribe-shape.cc +++ b/src/hb-uniscribe-shape.cc @@ -28,17 +28,19 @@ #include "hb-private.hh" +#include <windows.h> +#include <usp10.h> + +typedef ULONG WIN_ULONG; + #include "hb-uniscribe.h" +#include "hb-ot-name-private.hh" #include "hb-ot-tag.h" #include "hb-font-private.hh" - #include "hb-buffer-private.hh" -#include <windows.h> -#include <usp10.h> - #ifndef HB_DEBUG_UNISCRIBE @@ -143,7 +145,7 @@ retry: SCRIPT_ITEM items[MAX_ITEMS + 1]; SCRIPT_STATE bidi_state = {0}; - ULONG script_tags[MAX_ITEMS]; + WIN_ULONG script_tags[MAX_ITEMS]; int item_count; bidi_state.uBidiLevel = HB_DIRECTION_IS_FORWARD (buffer->props.direction) ? 0 : 1; commit 4538efacca84329a60ff69851de70027d9b4f567 Author: Behdad Esfahbod <[email protected]> Date: Fri Aug 5 20:11:06 2011 -0400 Skip tests by returning 77 automake test runner understands this. diff --git a/src/check-internal-symbols.sh b/src/check-internal-symbols.sh index 2885fa4..a2f32b1 100755 --- a/src/check-internal-symbols.sh +++ b/src/check-internal-symbols.sh @@ -11,7 +11,7 @@ if which nm 2>/dev/null >/dev/null; then : else echo "check-internal-symbols.sh: 'nm' not found; skipping test" - exit 0 + exit 77 fi so=.libs/libharfbuzz.so @@ -23,6 +23,7 @@ if test -f "$so"; then fi else echo "check-internal-symbols.sh: libharfbuzz.so not found; skipping test" + exit 77 fi exit $stat diff --git a/src/check-libstdc++.sh b/src/check-libstdc++.sh index 40e73b0..bbc8ac3 100755 --- a/src/check-libstdc++.sh +++ b/src/check-libstdc++.sh @@ -11,7 +11,7 @@ if which ldd 2>/dev/null >/dev/null; then : else echo "check-libstdc++.sh: 'ldd' not found; skipping test" - exit 0 + exit 77 fi so=.libs/libharfbuzz.so @@ -23,6 +23,7 @@ if test -f "$so"; then fi else echo "check-libstdc++.sh: libharfbuzz.so not found; skipping test" + exit 77 fi exit $stat
_______________________________________________ HarfBuzz mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/harfbuzz
