[HarfBuzz] harfbuzz-ng: Branch 'master' - 8 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Mon May 30 08:09:17 PDT 2011
Makefile.am | 31 +++++++++-
TODO | 2
src/Makefile.am | 7 ++
src/check-c-linkage-decls.sh | 6 +
src/check-header-guards.sh | 8 ++
src/check-includes.sh | 42 +++++++++++++
src/check-internal-symbols.sh | 8 +-
src/check-libstdc++.sh | 7 +-
src/hb-ot-layout-gpos-private.hh | 4 -
src/hb-ot-map-private.hh | 112 ++++++++++++++++++-------------------
src/hb-ot-map.cc | 44 +++++++++-----
src/hb-ot-shape-complex-arabic.cc | 6 -
src/hb-ot-shape-complex-private.hh | 8 +-
src/hb-ot-shape-private.hh | 22 +++++++
src/hb-ot-shape.cc | 28 ++++-----
src/hb-ot-shape.h | 1
src/hb-view.cc | 2
17 files changed, 234 insertions(+), 104 deletions(-)
New commits:
commit 21deab2bdc58d8e9f1a3ba1f9c61c30a79e288a1
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Mon May 30 11:08:40 2011 -0400
Fixed inifinite loop introduced in 7403e055cd1463f
k is the index, not j.
Reported by Tom Hacohen.
diff --git a/src/hb-ot-layout-gpos-private.hh b/src/hb-ot-layout-gpos-private.hh
index d51a2b0..59750ab 100644
--- a/src/hb-ot-layout-gpos-private.hh
+++ b/src/hb-ot-layout-gpos-private.hh
@@ -1553,12 +1553,12 @@ fix_mark_attachment (hb_glyph_position_t *pos, unsigned int i, hb_direction_t di
pos[i].y_offset += pos[j].y_offset;
if (HB_DIRECTION_IS_FORWARD (direction))
- for (unsigned int k = j; k < i; j++) {
+ for (unsigned int k = j; k < i; k++) {
pos[i].x_offset -= pos[k].x_advance;
pos[i].y_offset -= pos[k].y_advance;
}
else
- for (unsigned int k = j + 1; k < i + 1; j++) {
+ for (unsigned int k = j + 1; k < i + 1; k++) {
pos[i].x_offset += pos[k].x_advance;
pos[i].y_offset += pos[k].y_advance;
}
commit 51881a61ca96c3328e2d92927a5a61e60997a429
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri May 27 18:15:56 2011 -0400
Shrink code size
diff --git a/src/hb-ot-map-private.hh b/src/hb-ot-map-private.hh
index 2c8b99f..07a321f 100644
--- a/src/hb-ot-map-private.hh
+++ b/src/hb-ot-map-private.hh
@@ -42,16 +42,7 @@ struct hb_ot_map_builder_t
{
public:
- inline void add_feature (hb_tag_t tag, unsigned int value, bool global)
- {
- feature_info_t *info = feature_infos.push();
- if (unlikely (!info)) return;
- info->tag = tag;
- info->seq = feature_infos.len;
- info->max_value = value;
- info->global = global;
- info->default_value = global ? value : 0;
- }
+ HB_INTERNAL void add_feature (hb_tag_t tag, unsigned int value, bool global);
inline void add_bool_feature (hb_tag_t tag, bool global = true)
{ add_feature (tag, 1, global); }
diff --git a/src/hb-ot-map.cc b/src/hb-ot-map.cc
index f178bed..68e1321 100644
--- a/src/hb-ot-map.cc
+++ b/src/hb-ot-map.cc
@@ -64,6 +64,17 @@ hb_ot_map_t::add_lookups (hb_face_t *face,
}
+void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value, bool global)
+{
+ feature_info_t *info = feature_infos.push();
+ if (unlikely (!info)) return;
+ info->tag = tag;
+ info->seq = feature_infos.len;
+ info->max_value = value;
+ info->global = global;
+ info->default_value = global ? value : 0;
+}
+
void
hb_ot_map_builder_t::compile (hb_face_t *face,
const hb_segment_properties_t *props,
commit 90645fb24bcbb78183576d3641a99560d87e49f2
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri May 27 18:13:31 2011 -0400
[OT] Separate map_builder from the actual map
Respectively, separate planner from the actual plan.
diff --git a/src/hb-ot-map-private.hh b/src/hb-ot-map-private.hh
index 02f5a91..2c8b99f 100644
--- a/src/hb-ot-map-private.hh
+++ b/src/hb-ot-map-private.hh
@@ -38,7 +38,31 @@ HB_BEGIN_DECLS
static const hb_tag_t table_tags[2] = {HB_OT_TAG_GSUB, HB_OT_TAG_GPOS};
-struct hb_ot_map_t {
+struct hb_ot_map_builder_t
+{
+ public:
+
+ inline void add_feature (hb_tag_t tag, unsigned int value, bool global)
+ {
+ feature_info_t *info = feature_infos.push();
+ if (unlikely (!info)) return;
+ info->tag = tag;
+ info->seq = feature_infos.len;
+ info->max_value = value;
+ info->global = global;
+ info->default_value = global ? value : 0;
+ }
+
+ inline void add_bool_feature (hb_tag_t tag, bool global = true)
+ { add_feature (tag, 1, global); }
+
+ HB_INTERNAL void compile (hb_face_t *face,
+ const hb_segment_properties_t *props,
+ struct hb_ot_map_t &m);
+
+ inline void finish (void) {
+ feature_infos.finish ();
+ }
private:
@@ -53,90 +77,77 @@ struct hb_ot_map_t {
{ return (a->tag != b->tag) ? (a->tag < b->tag ? -1 : 1) : (a->seq < b->seq ? -1 : 1); }
};
- struct feature_map_t {
- hb_tag_t tag; /* should be first for our bsearch to work */
- unsigned int index[2]; /* GSUB, GPOS */
- unsigned int shift;
- hb_mask_t mask;
- hb_mask_t _1_mask; /* mask for value=1, for quick access */
-
- 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; }
- };
-
- struct lookup_map_t {
- unsigned int index;
- hb_mask_t mask;
-
- static int cmp (const lookup_map_t *a, const lookup_map_t *b)
- { return a->index < b->index ? -1 : a->index > b->index ? 1 : 0; }
- };
+ hb_prealloced_array_t<feature_info_t,16> feature_infos; /* used before compile() only */
+};
- HB_INTERNAL void add_lookups (hb_face_t *face,
- unsigned int table_index,
- unsigned int feature_index,
- hb_mask_t mask);
+struct hb_ot_map_t
+{
+ friend struct hb_ot_map_builder_t;
public:
- void add_feature (hb_tag_t tag, unsigned int value, bool global)
- {
- feature_info_t *info = feature_infos.push();
- if (unlikely (!info)) return;
- info->tag = tag;
- info->seq = feature_infos.len;
- info->max_value = value;
- info->global = global;
- info->default_value = global ? value : 0;
- }
-
- inline void add_bool_feature (hb_tag_t tag, bool global = true)
- { add_feature (tag, 1, global); }
-
- HB_INTERNAL void compile (hb_face_t *face,
- const hb_segment_properties_t *props);
-
inline hb_mask_t get_global_mask (void) const { return global_mask; }
inline hb_mask_t get_mask (hb_tag_t tag, unsigned int *shift = NULL) const {
- const feature_map_t *map = feature_maps.bsearch (&tag);
+ const feature_map_t *map = features.bsearch (&tag);
if (shift) *shift = map ? map->shift : 0;
return map ? map->mask : 0;
}
inline hb_mask_t get_1_mask (hb_tag_t tag) const {
- const feature_map_t *map = feature_maps.bsearch (&tag);
+ const feature_map_t *map = features.bsearch (&tag);
return map ? map->_1_mask : 0;
}
inline void substitute (hb_face_t *face, hb_buffer_t *buffer) const {
- for (unsigned int i = 0; i < lookup_maps[0].len; i++)
- hb_ot_layout_substitute_lookup (face, buffer, lookup_maps[0][i].index, lookup_maps[0][i].mask);
+ for (unsigned int i = 0; i < lookups[0].len; i++)
+ hb_ot_layout_substitute_lookup (face, buffer, lookups[0][i].index, lookups[0][i].mask);
}
inline void position (hb_font_t *font, hb_face_t *face, hb_buffer_t *buffer) const {
- for (unsigned int i = 0; i < lookup_maps[1].len; i++)
- hb_ot_layout_position_lookup (font, buffer, lookup_maps[1][i].index, lookup_maps[1][i].mask);
+ for (unsigned int i = 0; i < lookups[1].len; i++)
+ hb_ot_layout_position_lookup (font, buffer, lookups[1][i].index, lookups[1][i].mask);
}
inline void finish (void) {
- feature_infos.finish ();
- feature_maps.finish ();
- lookup_maps[0].finish ();
- lookup_maps[1].finish ();
+ features.finish ();
+ lookups[0].finish ();
+ lookups[1].finish ();
}
private:
- hb_mask_t global_mask;
+ struct feature_map_t {
+ hb_tag_t tag; /* should be first for our bsearch to work */
+ unsigned int index[2]; /* GSUB, GPOS */
+ unsigned int shift;
+ hb_mask_t mask;
+ hb_mask_t _1_mask; /* mask for value=1, for quick access */
- hb_prealloced_array_t<feature_info_t,8> feature_infos; /* used before compile() only */
- hb_prealloced_array_t<feature_map_t, 8> feature_maps;
+ 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; }
+ };
- hb_prealloced_array_t<lookup_map_t, 32> lookup_maps[2]; /* GSUB/GPOS */
-};
+ struct lookup_map_t {
+ unsigned int index;
+ hb_mask_t mask;
+ static int cmp (const lookup_map_t *a, const lookup_map_t *b)
+ { return a->index < b->index ? -1 : a->index > b->index ? 1 : 0; }
+ };
+
+ HB_INTERNAL void add_lookups (hb_face_t *face,
+ unsigned int table_index,
+ unsigned int feature_index,
+ hb_mask_t mask);
+
+
+ hb_mask_t global_mask;
+
+ hb_prealloced_array_t<feature_map_t, 8> features;
+ hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */
+};
HB_END_DECLS
diff --git a/src/hb-ot-map.cc b/src/hb-ot-map.cc
index 9006bf9..f178bed 100644
--- a/src/hb-ot-map.cc
+++ b/src/hb-ot-map.cc
@@ -52,7 +52,7 @@ hb_ot_map_t::add_lookups (hb_face_t *face,
lookup_indices);
for (unsigned int i = 0; i < len; i++) {
- lookup_map_t *lookup = lookup_maps[table_index].push ();
+ hb_ot_map_t::lookup_map_t *lookup = lookups[table_index].push ();
if (unlikely (!lookup))
return;
lookup->mask = mask;
@@ -65,10 +65,11 @@ hb_ot_map_t::add_lookups (hb_face_t *face,
void
-hb_ot_map_t::compile (hb_face_t *face,
- const hb_segment_properties_t *props)
+hb_ot_map_builder_t::compile (hb_face_t *face,
+ const hb_segment_properties_t *props,
+ hb_ot_map_t &m)
{
- global_mask = 1;
+ m.global_mask = 1;
if (!feature_infos.len)
return;
@@ -139,7 +140,7 @@ hb_ot_map_t::compile (hb_face_t *face,
continue;
- feature_map_t *map = feature_maps.push ();
+ hb_ot_map_t::feature_map_t *map = m.features.push ();
if (unlikely (!map))
break;
@@ -155,7 +156,7 @@ hb_ot_map_t::compile (hb_face_t *face,
map->mask = (1 << (next_bit + bits_needed)) - (1 << next_bit);
next_bit += bits_needed;
if (info->global)
- global_mask |= (info->default_value << map->shift) & map->mask;
+ m.global_mask |= (info->default_value << map->shift) & map->mask;
}
map->_1_mask = (1 << map->shift) & map->mask;
@@ -174,22 +175,22 @@ hb_ot_map_t::compile (hb_face_t *face,
script_index[table_index],
language_index[table_index],
&required_feature_index))
- add_lookups (face, table_index, required_feature_index, 1);
+ m.add_lookups (face, table_index, required_feature_index, 1);
- for (unsigned i = 0; i < feature_maps.len; i++)
- add_lookups (face, table_index, feature_maps[i].index[table_index], feature_maps[i].mask);
+ for (unsigned i = 0; i < m.features.len; i++)
+ m.add_lookups (face, table_index, m.features[i].index[table_index], m.features[i].mask);
/* Sort lookups and merge duplicates */
- lookup_maps[table_index].sort ();
- if (lookup_maps[table_index].len)
+ m.lookups[table_index].sort ();
+ if (m.lookups[table_index].len)
{
unsigned int j = 0;
- for (unsigned int i = 1; i < lookup_maps[table_index].len; i++)
- if (lookup_maps[table_index][i].index != lookup_maps[table_index][j].index)
- lookup_maps[table_index][++j] = lookup_maps[table_index][i];
+ for (unsigned int i = 1; i < m.lookups[table_index].len; i++)
+ if (m.lookups[table_index][i].index != m.lookups[table_index][j].index)
+ m.lookups[table_index][++j] = m.lookups[table_index][i];
else
- lookup_maps[table_index][j].mask |= lookup_maps[table_index][i].mask;
- lookup_maps[table_index].shrink (j + 1);
+ m.lookups[table_index][j].mask |= m.lookups[table_index][i].mask;
+ m.lookups[table_index].shrink (j + 1);
}
}
}
diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc
index f2d325f..1b5b231 100644
--- a/src/hb-ot-shape-complex-arabic.cc
+++ b/src/hb-ot-shape-complex-arabic.cc
@@ -152,14 +152,14 @@ static const struct arabic_state_table_entry {
void
-_hb_ot_shape_complex_collect_features_arabic (hb_ot_shape_plan_t *plan, const hb_segment_properties_t *props)
+_hb_ot_shape_complex_collect_features_arabic (hb_ot_shape_planner_t *planner, const hb_segment_properties_t *props)
{
/* ArabicOT spec enables 'cswh' for Arabic where as for basic shaper it's disabled by default. */
- plan->map.add_bool_feature (HB_TAG('c','s','w','h'));
+ planner->map.add_bool_feature (HB_TAG('c','s','w','h'));
unsigned int num_features = props->script == HB_SCRIPT_SYRIAC ? SYRIAC_NUM_FEATURES : COMMON_NUM_FEATURES;
for (unsigned int i = 0; i < num_features; i++)
- plan->map.add_bool_feature (arabic_syriac_features[i], false);
+ planner->map.add_bool_feature (arabic_syriac_features[i], false);
}
void
diff --git a/src/hb-ot-shape-complex-private.hh b/src/hb-ot-shape-complex-private.hh
index b3afe2b..f58e5da 100644
--- a/src/hb-ot-shape-complex-private.hh
+++ b/src/hb-ot-shape-complex-private.hh
@@ -61,14 +61,14 @@ hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
* Shapers should use plan->map to add their features.
*/
-HB_INTERNAL void _hb_ot_shape_complex_collect_features_arabic (hb_ot_shape_plan_t *plan, const hb_segment_properties_t *props);
+HB_INTERNAL void _hb_ot_shape_complex_collect_features_arabic (hb_ot_shape_planner_t *plan, const hb_segment_properties_t *props);
static inline void
-hb_ot_shape_complex_collect_features (hb_ot_shape_plan_t *plan,
+hb_ot_shape_complex_collect_features (hb_ot_shape_planner_t *planner,
const hb_segment_properties_t *props)
{
- switch (plan->shaper) {
- case hb_ot_complex_shaper_arabic: _hb_ot_shape_complex_collect_features_arabic (plan, props); return;
+ switch (planner->shaper) {
+ case hb_ot_complex_shaper_arabic: _hb_ot_shape_complex_collect_features_arabic (planner, props); return;
case hb_ot_complex_shaper_none: default: return;
}
}
diff --git a/src/hb-ot-shape-private.hh b/src/hb-ot-shape-private.hh
index 4ea73f5..60269ce 100644
--- a/src/hb-ot-shape-private.hh
+++ b/src/hb-ot-shape-private.hh
@@ -49,6 +49,8 @@ enum hb_ot_complex_shaper_t {
struct hb_ot_shape_plan_t
{
+ friend struct hb_ot_shape_planner_t;
+
hb_ot_map_t map;
hb_ot_complex_shaper_t shaper;
@@ -59,6 +61,26 @@ struct hb_ot_shape_plan_t
NO_COPY (hb_ot_shape_plan_t);
};
+struct hb_ot_shape_planner_t
+{
+ hb_ot_map_builder_t map;
+ hb_ot_complex_shaper_t shaper;
+
+ hb_ot_shape_planner_t (void) : map () {}
+ ~hb_ot_shape_planner_t (void) { map.finish (); }
+
+ inline void compile (hb_face_t *face,
+ const hb_segment_properties_t *props,
+ struct hb_ot_shape_plan_t &plan)
+ {
+ plan.shaper = shaper;
+ map.compile (face, props, plan.map);
+ }
+
+ private:
+ NO_COPY (hb_ot_shape_planner_t);
+};
+
struct hb_ot_shape_context_t
{
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 02be237..4b66dd1 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -49,19 +49,19 @@ hb_tag_t default_features[] = {
};
static void
-hb_ot_shape_collect_features (hb_ot_shape_plan_t *plan,
+hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
const hb_segment_properties_t *props,
- const hb_feature_t *user_features,
- unsigned int num_user_features)
+ const hb_feature_t *user_features,
+ unsigned int num_user_features)
{
switch (props->direction) {
case HB_DIRECTION_LTR:
- plan->map.add_bool_feature (HB_TAG ('l','t','r','a'));
- plan->map.add_bool_feature (HB_TAG ('l','t','r','m'));
+ planner->map.add_bool_feature (HB_TAG ('l','t','r','a'));
+ planner->map.add_bool_feature (HB_TAG ('l','t','r','m'));
break;
case HB_DIRECTION_RTL:
- plan->map.add_bool_feature (HB_TAG ('r','t','l','a'));
- plan->map.add_bool_feature (HB_TAG ('r','t','l','m'), false);
+ planner->map.add_bool_feature (HB_TAG ('r','t','l','a'));
+ planner->map.add_bool_feature (HB_TAG ('r','t','l','m'), false);
break;
case HB_DIRECTION_TTB:
case HB_DIRECTION_BTT:
@@ -71,13 +71,13 @@ hb_ot_shape_collect_features (hb_ot_shape_plan_t *plan,
}
for (unsigned int i = 0; i < ARRAY_LENGTH (default_features); i++)
- plan->map.add_bool_feature (default_features[i]);
+ planner->map.add_bool_feature (default_features[i]);
- hb_ot_shape_complex_collect_features (plan, props);
+ hb_ot_shape_complex_collect_features (planner, props);
for (unsigned int i = 0; i < num_user_features; i++) {
const hb_feature_t *feature = &user_features[i];
- plan->map.add_feature (feature->tag, feature->value, (feature->start == 0 && feature->end == (unsigned int) -1));
+ planner->map.add_feature (feature->tag, feature->value, (feature->start == 0 && feature->end == (unsigned int) -1));
}
}
@@ -384,11 +384,13 @@ hb_ot_shape_plan_internal (hb_ot_shape_plan_t *plan,
const hb_feature_t *user_features,
unsigned int num_user_features)
{
- plan->shaper = hb_ot_shape_complex_categorize (props);
+ hb_ot_shape_planner_t planner;
- hb_ot_shape_collect_features (plan, props, user_features, num_user_features);
+ planner.shaper = hb_ot_shape_complex_categorize (props);
- plan->map.compile (face, props);
+ hb_ot_shape_collect_features (&planner, props, user_features, num_user_features);
+
+ planner.compile (face, props, *plan);
}
static void
commit 5560a19e2b3901437d8ee2e5905b4ac77073bfbe
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri May 27 17:49:16 2011 -0400
Minor
diff --git a/src/hb-view.cc b/src/hb-view.cc
index 5dceaf9..519f6cf 100644
--- a/src/hb-view.cc
+++ b/src/hb-view.cc
@@ -86,7 +86,7 @@ usage (FILE *f, int status)
G_GNUC_NORETURN static void
version (void)
{
- printf ("hb-view (harfbuzz) %s\n", PACKAGE_VERSION);
+ printf ("hb-view (harfbuzz) %s\n", HB_VERSION_STRING);
exit (0);
}
commit 1587c26fe94087040b4a5d682ec196f568e4a1a2
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri May 27 16:05:01 2011 -0400
[TODO] Add item
diff --git a/TODO b/TODO
index f770286..a03923f 100644
--- a/TODO
+++ b/TODO
@@ -22,6 +22,8 @@ General fixes:
API issues to fix before 1.0:
============================
+- Add pkg-config files for glue codes (harfbuzz-glib, etc)
+
- Figure out how many .so objects, how to link, etc
- Add hb-cairo glue
commit 5c9f14932d59e306fbc72f7daecb384a16da73d9
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri May 27 15:59:33 2011 -0400
Minor
diff --git a/Makefile.am b/Makefile.am
index 5167eaf..bb68ede 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -55,6 +55,8 @@ $(srcdir)/ChangeLog:
# Release engineering
#
+# TODO: Copy infrastructure from cairo
+
TAR_OPTIONS = --owner=0 --group=0
dist-hook: dist-clear-sticky-bits
# Clean up any sticky bits we may inherit from parent dir
commit 5bc18195d55570ef01e4b24dd248f222f081b0a2
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri May 27 15:58:54 2011 -0400
Add check-includes.sh
diff --git a/src/Makefile.am b/src/Makefile.am
index df5c52f..93a5138 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -146,6 +146,7 @@ dist_check_SCRIPTS = \
check-c-linkage-decls.sh \
check-header-guards.sh \
check-internal-symbols.sh \
+ check-includes.sh \
$(NULL)
if HAVE_ICU
@@ -154,5 +155,11 @@ dist_check_SCRIPTS += check-libstdc++.sh
endif
TESTS = $(dist_check_SCRIPTS)
+TESTS_ENVIRONMENT = \
+ srcdir="$(srcdir)" \
+ MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
+ HBSOURCES="$(HBSOURCES)" \
+ HBHEADERS="$(HBHEADERS)" \
+ $(NULL)
-include $(top_srcdir)/git.mk
diff --git a/src/check-c-linkage-decls.sh b/src/check-c-linkage-decls.sh
index ffdb9e3..84e77cf 100755
--- a/src/check-c-linkage-decls.sh
+++ b/src/check-c-linkage-decls.sh
@@ -6,9 +6,13 @@ export LC_ALL
test -z "$srcdir" && srcdir=.
stat=0
+test "x$HBHEADERS" = x && HBHEADERS=`find . -maxdepth 1 -name 'hb*.h'`
+test "x$HBSOURCES" = x && HBSOURCES=`find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'`
+
+
cd "$srcdir"
-for x in hb-*.cc hb-*.h hb-*.hh ; do
+for x in $HBHEADERS $HBSOURCES; do
if ! grep -q HB_BEGIN_DECLS "$x" || ! grep -q HB_END_DECLS "$x"; then
echo "Ouch, file $x does not HB_BEGIN_DECLS / HB_END_DECLS"
stat=1
diff --git a/src/check-header-guards.sh b/src/check-header-guards.sh
index c966cd2..ddbcd83 100755
--- a/src/check-header-guards.sh
+++ b/src/check-header-guards.sh
@@ -6,9 +6,15 @@ export LC_ALL
test -z "$srcdir" && srcdir=.
stat=0
+test "x$HBHEADERS" = x && HBHEADERS=`find . -maxdepth 1 -name 'hb*.h'`
+test "x$HBSOURCES" = x && HBSOURCES=`find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'`
+
+
cd "$srcdir"
-for x in hb-*.h hb-*.hh ; do
+for x in $HBHEADERS $HBSOURCES; do
+ echo "$x" | grep '[^h]$' -q && continue;
+ x=`echo "$x" | sed 's at .*/@@'`
tag=`echo "$x" | tr 'a-z.-' 'A-Z_'`
lines=`grep "\<$tag\>" "$x" | wc -l`
if test "x$lines" != x3; then
diff --git a/src/check-includes.sh b/src/check-includes.sh
new file mode 100755
index 0000000..79323a7
--- /dev/null
+++ b/src/check-includes.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+LC_ALL=C
+export LC_ALL
+
+test -z "$srcdir" && srcdir=.
+stat=0
+
+test "x$HBHEADERS" = x && HBHEADERS=`find . -maxdepth 1 -name 'hb*.h'`
+test "x$HBSOURCES" = x && HBSOURCES=`find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'`
+
+
+cd "$srcdir"
+
+
+echo 'Checking that public header files #include "hb-common.h" or "hb.h" first (or none)'
+
+for x in $HBHEADERS; do
+ grep '#.*\<include\>' "$x" /dev/null | head -n 1
+done |
+grep -v '"hb-common[.]h"' |
+grep -v '"hb[.]h"' |
+grep -v 'hb-common[.]h:' |
+grep -v 'hb[.]h:' |
+grep . >&2 && stat=1
+
+
+echo 'Checking that source files #include "hb-*private.hh" first (or none)'
+
+for x in $HBSOURCES; do
+ grep '#.*\<include\>' "$x" /dev/null | head -n 1
+done |
+grep -v '"hb-.*private[.]hh"' |
+grep -v 'hb-private[.]hh:' |
+grep . >&2 && stat=1
+
+
+echo 'Checking that there is no #include <hb.*.h>'
+grep '#.*\<include\>.*<.*hb' $HBHEADERS $HBSOURCES >&2 && stat=1
+
+
+exit $stat
diff --git a/src/check-internal-symbols.sh b/src/check-internal-symbols.sh
index 124a7b0..2885fa4 100755
--- a/src/check-internal-symbols.sh
+++ b/src/check-internal-symbols.sh
@@ -3,6 +3,10 @@
LC_ALL=C
export LC_ALL
+test -z "$srcdir" && srcdir=.
+stat=0
+
+
if which nm 2>/dev/null >/dev/null; then
:
else
@@ -10,10 +14,6 @@ else
exit 0
fi
-test -z "$srcdir" && srcdir=.
-test -z "$MAKE" && MAKE=make
-stat=0
-
so=.libs/libharfbuzz.so
if test -f "$so"; then
echo "Checking that we are exposing internal symbols"
diff --git a/src/check-libstdc++.sh b/src/check-libstdc++.sh
index c0abcbe..40e73b0 100755
--- a/src/check-libstdc++.sh
+++ b/src/check-libstdc++.sh
@@ -3,6 +3,10 @@
LC_ALL=C
export LC_ALL
+test -z "$srcdir" && srcdir=.
+stat=0
+
+
if which ldd 2>/dev/null >/dev/null; then
:
else
@@ -10,9 +14,6 @@ else
exit 0
fi
-test -z "$srcdir" && srcdir=.
-stat=0
-
so=.libs/libharfbuzz.so
if test -f "$so"; then
echo "Checking that we are not linking to libstdc++"
diff --git a/src/hb-ot-shape.h b/src/hb-ot-shape.h
index 70a8172..f9560e5 100644
--- a/src/hb-ot-shape.h
+++ b/src/hb-ot-shape.h
@@ -27,6 +27,7 @@
#ifndef HB_OT_SHAPE_H
#define HB_OT_SHAPE_H
+#include "hb-common.h"
#include "hb-shape.h"
commit 3f12c434e20261f6d5c600e56575b7dfdd5b1470
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri May 27 04:58:11 2011 -0400
[configure] Generate sha256sum and GPG-sign it
diff --git a/Makefile.am b/Makefile.am
index 12a42e6..5167eaf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -29,8 +29,11 @@ MAINTAINERCLEANFILES = \
$(srcdir)/ChangeLog \
`find "$(srcdir)" -type f -name Makefile.in -print`
-CHANGELOG_RANGE =
+#
+# ChangeLog generation
+#
+CHANGELOG_RANGE =
ChangeLog: $(srcdir)/ChangeLog
$(srcdir)/ChangeLog:
$(AM_V_GEN) if test -d "$(srcdir)/.git"; then \
@@ -48,4 +51,28 @@ $(srcdir)/ChangeLog:
.PHONY: $(srcdir)/ChangeLog
+#
+# Release engineering
+#
+
+TAR_OPTIONS = --owner=0 --group=0
+dist-hook: dist-clear-sticky-bits
+# Clean up any sticky bits we may inherit from parent dir
+dist-clear-sticky-bits:
+ chmod -R a-s $(distdir)
+
+
+tar_file = $(PACKAGE_TARNAME)-$(VERSION).tar.bz2
+sha256_file = $(tar_file).sha256
+gpg_file = $(sha256_file).asc
+$(sha256_file): $(tar_file)
+ sha256sum $^ > $@
+$(gpg_file): $(sha256_file)
+ @echo "Please enter your GPG password to sign the checksum."
+ gpg --armor --sign $^
+
+release-files: $(tar_file) $(sha256_file) $(gpg_file)
+
+
+
-include $(top_srcdir)/git.mk
More information about the HarfBuzz
mailing list