COPYING | 1 Makefile.am | 2 NEWS | 262 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README | 8 - TODO | 2 configure.ac | 30 ++++- src/Makefile.am | 1 src/hb-ot-shape.cc | 4 test/Makefile.am | 73 ++++++++++++++ test/Makefile.decl | 90 ----------------- test/test-common.c | 6 + test/test-shape.c | 2 test/test-unicode.c | 2 test/test-version.c | 80 +++++++++++++++ 14 files changed, 455 insertions(+), 108 deletions(-)
New commits: commit f24557604281356131618546332d7ee3a0c8abef Author: Behdad Esfahbod <[email protected]> Date: Wed May 25 16:08:06 2011 -0400 Release 0.6.0. First official tarball release! There are no API guarantees just yet, but I *expect* that no incompatible API changes to happen before 1.0.0. Update NEWS. diff --git a/NEWS b/NEWS index e69de29..d31c548 100644 --- a/NEWS +++ b/NEWS @@ -0,0 +1,262 @@ +Overview of changes leading to 0.6.0 +Friday, May 27, 2011 +==================================== + +- Vertical text support in GPOS +- Almost all API entries have unit tests now, under test/ +- All thread-safety issues are fixed + +Summary of API changes follows. + + +* Simple Types API: + + o New API: + HB_LANGUAGE_INVALID + hb_language_get_default() + hb_direction_to_string() + hb_direction_from_string() + hb_script_get_horizontal_direction() + HB_UNTAG() + + o Renamed API: + hb_category_t renamed to hb_unicode_general_category_t + + o Changed API: + hb_language_t is a typed pointers now + + o Removed API: + HB_TAG_STR() + + +* Use ISO 15924 tags for hb_script_t: + + o New API: + hb_script_from_iso15924_tag() + hb_script_to_iso15924_tag() + hb_script_from_string() + + o Changed API: + HB_SCRIPT_* enum members changed value. + + +* Buffer API streamlined: + + o New API: + hb_buffer_reset() + hb_buffer_set_length() + hb_buffer_allocation_successful() + + o Renamed API: + hb_buffer_ensure() renamed to hb_buffer_pre_allocate() + hb_buffer_add_glyph() renamed to hb_buffer_add() + + o Removed API: + hb_buffer_clear() + hb_buffer_clear_positions() + + o Changed API: + hb_buffer_get_glyph_infos() takes an out length parameter now + hb_buffer_get_glyph_positions() takes an out length parameter now + + +* Blob API streamlined: + + o New API: + hb_blob_get_data() + hb_blob_get_data_writable() + + o Renamed API: + hb_blob_create_empty() renamed to hb_blob_get_empty() + + o Removed API: + hb_blob_lock() + hb_blob_unlock() + hb_blob_is_writable() + hb_blob_try_writable() + + o Changed API: + hb_blob_create() takes user_data before destroy now + + +* Unicode functions API: + + o Unicode function vectors can subclass other unicode function vectors now. + Unimplemented callbacks in the subclass automatically chainup to the parent. + + o All hb_unicode_funcs_t callbacks take a user_data now. Their setters + take a user_data and its respective destroy callback. + + o New API: + hb_unicode_funcs_get_empty() + hb_unicode_funcs_get_default() + hb_unicode_funcs_get_parent() + + o Changed API: + hb_unicode_funcs_create() now takes a parent_funcs. + + o Removed func getter functions: + hb_unicode_funcs_get_mirroring_func() + hb_unicode_funcs_get_general_category_func() + hb_unicode_funcs_get_script_func() + hb_unicode_funcs_get_combining_class_func() + hb_unicode_funcs_get_eastasian_width_func() + + +* Face API: + + o Renamed API: + hb_face_get_table() renamed to hb_face_reference_table() + hb_face_create_for_data() renamed to hb_face_create() + + o Changed API: + hb_face_create_for_tables() takes user_data before destroy now + hb_face_reference_table() returns empty blob instead of NULL + hb_get_table_func_t accepts the face as first parameter now + +* Font API: + + o Fonts can subclass other fonts now. Unimplemented callbacks in the + subclass automatically chainup to the parent. When chaining up, + scale is adjusted if the parent font has a different scale. + + o All hb_font_funcs_t callbacks take a user_data now. Their setters + take a user_data and its respective destroy callback. + + o New API: + hb_font_get_parent() + hb_font_funcs_get_empty() + hb_font_create_sub_font() + + o Removed API: + hb_font_funcs_copy() + hb_font_unset_funcs() + + o Removed func getter functions: + hb_font_funcs_get_glyph_func() + hb_font_funcs_get_glyph_advance_func() + hb_font_funcs_get_glyph_extents_func() + hb_font_funcs_get_contour_point_func() + hb_font_funcs_get_kerning_func() + + o Changed API: + hb_font_create() takes a face and references it now + hb_font_set_funcs() takes user_data before destroy now + hb_font_set_scale() accepts signed integers now + hb_font_get_contour_point_func_t now takes glyph first, then point_index + hb_font_get_glyph_func_t returns a success boolean now + + +* Changed object model: + + o All object types have a _get_empty() now: + hb_blob_get_empty() + hb_buffer_get_empty() + hb_face_get_empty() + hb_font_get_empty() + hb_font_funcs_get_empty() + hb_unicode_funcs_get_empty() + + o Added _set_user_data() and _get_user_data() for all object types: + hb_blob_get_user_data() + hb_blob_set_user_data() + hb_buffer_get_user_data() + hb_buffer_set_user_data() + hb_face_get_user_data() + hb_face_set_user_data() + hb_font_funcs_get_user_data() + hb_font_funcs_set_user_data() + hb_font_get_user_data() + hb_font_set_user_data() + hb_unicode_funcs_get_user_data() + hb_unicode_funcs_set_user_data() + + o Removed the _get_reference_count() from all object types: + hb_blob_get_reference_count() + hb_buffer_get_reference_count() + hb_face_get_reference_count() + hb_font_funcs_get_reference_count() + hb_font_get_reference_count() + hb_unicode_funcs_get_reference_count() + + o Added _make_immutable() and _is_immutable() for all object types except for buffer: + hb_blob_make_immutable() + hb_blob_is_immutable() + hb_face_make_immutable() + hb_face_is_immutable() + + +* Changed API for vertical text support + + o The following callbacks where removed: + hb_font_get_glyph_advance_func_t + hb_font_get_kerning_func_t + + o The following new callbacks added instead: + hb_font_get_glyph_h_advance_func_t + hb_font_get_glyph_v_advance_func_t + hb_font_get_glyph_h_origin_func_t + hb_font_get_glyph_v_origin_func_t + hb_font_get_glyph_h_kerning_func_t + hb_font_get_glyph_v_kerning_func_t + + o The following API removed as such: + hb_font_funcs_set_glyph_advance_func() + hb_font_funcs_set_kerning_func() + hb_font_get_glyph_advance() + hb_font_get_kerning() + + o New API added instead: + hb_font_funcs_set_glyph_h_advance_func() + hb_font_funcs_set_glyph_v_advance_func() + hb_font_funcs_set_glyph_h_origin_func() + hb_font_funcs_set_glyph_v_origin_func() + hb_font_funcs_set_glyph_h_kerning_func() + hb_font_funcs_set_glyph_v_kerning_func() + hb_font_get_glyph_h_advance() + hb_font_get_glyph_v_advance() + hb_font_get_glyph_h_origin() + hb_font_get_glyph_v_origin() + hb_font_get_glyph_h_kerning() + hb_font_get_glyph_v_kerning() + + o The following higher-leve API added for convenience: + hb_font_get_glyph_advance_for_direction() + hb_font_get_glyph_origin_for_direction() + hb_font_add_glyph_origin_for_direction() + hb_font_subtract_glyph_origin_for_direction() + hb_font_get_glyph_kerning_for_direction() + hb_font_get_glyph_extents_for_origin() + hb_font_get_glyph_contour_point_for_origin() + + +* OpenType Layout API: + + o New API: + hb_ot_layout_position_start() + hb_ot_layout_substitute_start() + hb_ot_layout_substitute_finish() + + +* Glue code: + + o New API: + hb_glib_script_to_script() + hb_glib_script_from_script() + hb_icu_script_to_script() + hb_icu_script_from_script() + + +* Version API added: + + o New API: + HB_VERSION_MAJOR + HB_VERSION_MINOR + HB_VERSION_MICRO + HB_VERSION_STRING + HB_VERSION_CHECK() + hb_version() + hb_version_string() + hb_version_check() + + diff --git a/configure.ac b/configure.ac index e8bf009..372c9f2 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) AC_INIT([harfbuzz], - [0.5.0], + [0.6.0], [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz], [harfbuzz], [http://harfbuzz.org/]) commit 654f88fbc9bcb54f9bd2d5586236234e03424044 Author: Behdad Esfahbod <[email protected]> Date: Fri May 27 03:38:46 2011 -0400 [test-common] Test hb_direction_to_string() Caught by "make check-symbols". diff --git a/test/test-common.c b/test/test-common.c index a75138c..d5cbfc7 100644 --- a/test/test-common.c +++ b/test/test-common.c @@ -87,6 +87,12 @@ test_types_direction (void) g_assert_cmpint (HB_DIRECTION_RTL, ==, hb_direction_from_string ("RtL")); g_assert_cmpint (HB_DIRECTION_RTL, ==, hb_direction_from_string ("right-to-left")); g_assert_cmpint (HB_DIRECTION_TTB, ==, hb_direction_from_string ("ttb")); + + g_assert (0 == strcmp ("ltr", hb_direction_to_string (HB_DIRECTION_LTR))); + g_assert (0 == strcmp ("rtl", hb_direction_to_string (HB_DIRECTION_RTL))); + g_assert (0 == strcmp ("ttb", hb_direction_to_string (HB_DIRECTION_TTB))); + g_assert (0 == strcmp ("btt", hb_direction_to_string (HB_DIRECTION_BTT))); + g_assert (0 == strcmp ("invalid", hb_direction_to_string (HB_DIRECTION_INVALID))); } static void commit 18bced134fc3379c9124ba029e22ff3f6434ca0f Author: Behdad Esfahbod <[email protected]> Date: Fri May 27 03:38:30 2011 -0400 [test] Rename test-symbols to check-symbols Shows undocumented symbols. diff --git a/test/Makefile.am b/test/Makefile.am index 46b21be..4cbc590 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -51,21 +51,7 @@ test_object_LIBS = $(LDADD) $(FREETYPE_LIBS) endif -# test-symbols: Finds untested API symbols -symbols-tested.txt: $(TEST_PROGS) - $(AM_V_GEN)$(top_builddir)/libtool --mode=execute nm $^ \ - | grep ' U hb_' | sed 's/.* U hb_/hb_/' \ - | sort | uniq > [email protected] && mv [email protected] $@ -symbols-exported.txt: $(top_builddir)/src/.libs/libharfbuzz.so - $(AM_V_GEN)$(top_builddir)/libtool --mode=execute nm $^ \ - | grep ' T ' | sed 's/.* T //' | grep -v '^\(_init\|_fini\)$$' \ - | sort | uniq > [email protected] && mv [email protected] $@ -symbols-untested.txt: symbols-tested.txt symbols-exported.txt - $(AM_V_GEN)diff $^ > [email protected]; mv [email protected] $@ -CLEANFILES += symbols-tested.txt symbols-exported.txt symbols-untested.txt -test-symbols: symbols-untested.txt - @! cat $^ | grep . - +# Default test running environment TESTS = $(TEST_PROGS) TESTS_ENVIRONMENT = \ MALLOC_CHECK_=2 \ @@ -74,6 +60,7 @@ TESTS_ENVIRONMENT = \ G_SLICE=always-malloc \ $(ENV) + # check-tool: Run tests under $(TOOL) check-tool: $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) check \ @@ -90,6 +77,7 @@ GTESTER = gtester check-gtester: $(AM_V_at)$(MAKE) $(AM_MAKEFLGS) check-tool-raw TOOL="$(GTESTER) --verbose" + # Check tests under valgrind. Saves log to valgrind-log VALGRIND_FLAGS = \ --tool=memcheck --suppressions=$(srcdir)/.valgrind-suppressions \ @@ -108,12 +96,29 @@ check-valgrind: 2>&1 | tee valgrind-log $(valgrind_verbose) +# check-symbols: Finds untested API symbols +symbols-tested.txt: $(TEST_PROGS) + $(AM_V_GEN)$(top_builddir)/libtool --mode=execute nm $^ \ + | grep ' U hb_' | sed 's/.* U hb_/hb_/' \ + | sort | uniq > [email protected] && mv [email protected] $@ +symbols-exported.txt: $(top_builddir)/src/.libs/libharfbuzz.so + $(AM_V_GEN)$(top_builddir)/libtool --mode=execute nm $^ \ + | grep ' T ' | sed 's/.* T //' | grep -v '^\(_init\|_fini\)$$' \ + | sort | uniq > [email protected] && mv [email protected] $@ +symbols-untested.txt: symbols-tested.txt symbols-exported.txt + $(AM_V_GEN)diff $^ > [email protected]; mv [email protected] $@ +CLEANFILES += symbols-tested.txt symbols-exported.txt symbols-untested.txt +check-symbols: symbols-untested.txt + @! cat $^ | grep . + + + else check-am: @echo "You need to have glib support enabled to run the tests" @exit 77 endif -.PHONY: test-symbols check-tool check-valgrind +.PHONY: check-symbols check-tool check-valgrind -include $(top_srcdir)/git.mk commit 376dafa6ed414e368e9dc1d5a2e0bfc8e55f410d Author: Behdad Esfahbod <[email protected]> Date: Fri May 27 03:35:58 2011 -0400 Hide internal symbols diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index f78c29b..02be237 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -377,7 +377,7 @@ hb_ot_shape_execute_internal (hb_ot_shape_context_t *c) c->buffer->props.direction = c->target_direction; } -void +static void hb_ot_shape_plan_internal (hb_ot_shape_plan_t *plan, hb_face_t *face, const hb_segment_properties_t *props, @@ -391,7 +391,7 @@ hb_ot_shape_plan_internal (hb_ot_shape_plan_t *plan, plan->map.compile (face, props); } -void +static void hb_ot_shape_execute (hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer, commit 0e482ec6ba30b613f2d7ee97c61be458c5aebcd6 Author: Behdad Esfahbod <[email protected]> Date: Fri May 27 02:46:28 2011 -0400 [test/unicode] Fix double-free Caught by "make check-valgrind". diff --git a/test/Makefile.am b/test/Makefile.am index 4d6c460..46b21be 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -102,7 +102,7 @@ valgrind_verbose = $(valgrind_verbose_$(V)) valgrind_verbose_ = $(valgrind_verbose_$(AM_DEFAULT_VERBOSITY)) valgrind_verbose_0 = | \ grep '\(^[^=]\|ERROR SUMMARY\|definitely lost\|indirectly lost\)' | grep -v ': 0' - +# TODO: The following check does not fail if valgrind finds error. It should. check-valgrind: $(AM_V_at)$(MAKE) $(AM_MAKEFLGS) check-tool TOOL="valgrind $(VALGRIND_FLAGS)" \ 2>&1 | tee valgrind-log $(valgrind_verbose) diff --git a/test/test-unicode.c b/test/test-unicode.c index e163aba..cce4fd2 100644 --- a/test/test-unicode.c +++ b/test/test-unicode.c @@ -633,8 +633,6 @@ test_unicode_setters (void) g_assert (data[0].freed && !data[1].freed); hb_unicode_funcs_destroy (uf); g_assert (data[0].freed && !data[1].freed); - - hb_unicode_funcs_destroy (uf); } } commit 28b1bac5415774cf892c9cc0afcac1324c2093f5 Author: Behdad Esfahbod <[email protected]> Date: Fri May 27 02:44:29 2011 -0400 [test] Switch to automake-based test-runner Adds check-valgrind among other modes. We do not run under gtester by default anymore. diff --git a/Makefile.am b/Makefile.am index 446c18a..12a42e6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,3 +1,5 @@ +# Process this file with automake to produce Makefile.in + NULL = SUBDIRS = src test diff --git a/test/.valgrind-suppressions b/test/.valgrind-suppressions new file mode 100644 index 0000000..e69de29 diff --git a/test/Makefile.am b/test/Makefile.am index 63f1396..4d6c460 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,6 +1,7 @@ -include Makefile.decl +# Process this file with automake to produce Makefile.in NULL = +EXTRA_DIST = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = @@ -14,7 +15,7 @@ EXTRA_DIST += hb-test.h check_PROGRAMS = $(TEST_PROGS) noinst_PROGRAMS = $(TEST_PROGS) -TEST_PROGS += \ +TEST_PROGS = \ test-blob \ test-buffer \ test-common \ @@ -65,6 +66,47 @@ CLEANFILES += symbols-tested.txt symbols-exported.txt symbols-untested.txt test-symbols: symbols-untested.txt @! cat $^ | grep . +TESTS = $(TEST_PROGS) +TESTS_ENVIRONMENT = \ + MALLOC_CHECK_=2 \ + MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) \ + G_DEBUG=gc-friendly \ + G_SLICE=always-malloc \ + $(ENV) + +# check-tool: Run tests under $(TOOL) +check-tool: + $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) check \ + TESTS_ENVIRONMENT='$(TESTS_ENVIRONMENT) $(top_builddir)/libtool --mode=execute \ + env $(TOOL)' +# check-tool-raw: Run tests under $(TOOL), but don't run under libtool +check-tool-raw: + $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) check \ + TESTS_ENVIRONMENT='$(TESTS_ENVIRONMENT) \ + env $(TOOL)' + +# check-gtester: Run tests under gtester +GTESTER = gtester +check-gtester: + $(AM_V_at)$(MAKE) $(AM_MAKEFLGS) check-tool-raw TOOL="$(GTESTER) --verbose" + +# Check tests under valgrind. Saves log to valgrind-log +VALGRIND_FLAGS = \ + --tool=memcheck --suppressions=$(srcdir)/.valgrind-suppressions \ + --track-origins=yes \ + --leak-check=yes + $(EXTRA_VALGRIND_FLAGS) +# Can't do for now: --show-reachable=yes +CLEANFILES += valgrind-log +valgrind_verbose = $(valgrind_verbose_$(V)) +valgrind_verbose_ = $(valgrind_verbose_$(AM_DEFAULT_VERBOSITY)) +valgrind_verbose_0 = | \ + grep '\(^[^=]\|ERROR SUMMARY\|definitely lost\|indirectly lost\)' | grep -v ': 0' + +check-valgrind: + $(AM_V_at)$(MAKE) $(AM_MAKEFLGS) check-tool TOOL="valgrind $(VALGRIND_FLAGS)" \ + 2>&1 | tee valgrind-log $(valgrind_verbose) + else check-am: @@ -72,6 +114,6 @@ check-am: @exit 77 endif -.PHONY: test-symbols +.PHONY: test-symbols check-tool check-valgrind -include $(top_srcdir)/git.mk diff --git a/test/Makefile.decl b/test/Makefile.decl deleted file mode 100644 index c226169..0000000 --- a/test/Makefile.decl +++ /dev/null @@ -1,90 +0,0 @@ -GTESTER = gtester # for non-GLIB packages -#GTESTER = $(top_builddir)/glib/gtester # for the GLIB package -#GTESTER_REPORT = $(top_builddir)/glib/gtester-report # for the GLIB package - -# initialize variables for unconditional += appending -EXTRA_DIST = -TEST_PROGS = - -### testing rules - -# test: run all tests in cwd and subdirs -test: test-nonrecursive - @ for subdir in $(SUBDIRS) . ; do \ - test "$$subdir" = "." -o "$$subdir" = "po" || \ - ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \ - done - -# test-nonrecursive: run tests only in cwd -test-nonrecursive: ${TEST_PROGS} - @test -z "${TEST_PROGS}" || MALLOC_CHECK_=2 MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) ${GTESTER} --verbose ${TEST_PROGS} - -# test-report: run tests in subdirs and generate report -# perf-report: run tests in subdirs with -m perf and generate report -# full-report: like test-report: with -m perf and -m slow -test-report perf-report full-report: ${TEST_PROGS} - @test -z "${TEST_PROGS}" || { \ - case $@ in \ - test-report) test_options="-k";; \ - perf-report) test_options="-k -m=perf";; \ - full-report) test_options="-k -m=perf -m=slow";; \ - esac ; \ - if test -z "$$GTESTER_LOGDIR" ; then \ - ${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \ - elif test -n "${TEST_PROGS}" ; then \ - ${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \ - fi ; \ - } - @ ignore_logdir=true ; \ - if test -z "$$GTESTER_LOGDIR" ; then \ - GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \ - ignore_logdir=false ; \ - fi ; \ - if test -d "$(top_srcdir)/.git" ; then \ - REVISION=`git describe` ; \ - else \ - REVISION=$(VERSION) ; \ - fi ; \ - for subdir in $(SUBDIRS) . ; do \ - test "$$subdir" = "." -o "$$subdir" = "po" || \ - ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \ - done ; \ - $$ignore_logdir || { \ - echo '<?xml version="1.0"?>' > [email protected] ; \ - echo '<report-collection>' >> [email protected] ; \ - echo '<info>' >> [email protected] ; \ - echo ' <package>$(PACKAGE)</package>' >> [email protected] ; \ - echo ' <version>$(VERSION)</version>' >> [email protected] ; \ - echo " <revision>$$REVISION</revision>" >> [email protected] ; \ - echo '</info>' >> [email protected] ; \ - for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \ - sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> [email protected] ; \ - done ; \ - echo >> [email protected] ; \ - echo '</report-collection>' >> [email protected] ; \ - rm -rf "$$GTESTER_LOGDIR"/ ; \ - ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} [email protected] >[email protected] ; \ - } -.PHONY: test test-report perf-report full-report test-nonrecursive - -.PHONY: lcov genlcov lcov-clean -# use recursive makes in order to ignore errors during check -lcov: - -$(MAKE) $(AM_MAKEFLAGS) -k check - $(MAKE) $(AM_MAKEFLAGS) genlcov - -# we have to massage the lcov.info file slightly to hide the effect of libtool -# placing the objects files in the .libs/ directory separate from the *.c -# we also have to delete tests/.libs/libmoduletestplugin_*.gcda -genlcov: - rm -f $(top_builddir)/tests/.libs/libmoduletestplugin_*.gcda - $(LTP) --directory $(top_builddir) --capture --output-file glib-lcov.info --test-name GLIB_PERF --no-checksum --compat-libtool - LANG=C $(LTP_GENHTML) --prefix $(top_builddir) --output-directory glib-lcov --title "GLib Code Coverage" --legend --show-details glib-lcov.info - -lcov-clean: - -$(LTP) --directory $(top_builddir) -z - -rm -rf glib-lcov.info glib-lcov - -find -name '*.gcda' -print | xargs rm - -# run tests in cwd as part of make check -check-local: test-nonrecursive commit adbc97ddde27cf609d95d3249f3ea8060a6e1d20 Author: Behdad Esfahbod <[email protected]> Date: Fri May 27 01:33:18 2011 -0400 [test] Add test-symbols that checks API symbol text coverage We're not at 100% coverage yet, so do not enable the test by default. diff --git a/test/Makefile.am b/test/Makefile.am index bfa423b..63f1396 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,6 +1,9 @@ include Makefile.decl NULL = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = if HAVE_GLIB AM_CPPFLAGS = -I$(top_srcdir)/src/ $(GLIB_CFLAGS) $(GTHREAD_CFLAGS) @@ -47,10 +50,28 @@ test_object_LIBS = $(LDADD) $(FREETYPE_LIBS) endif +# test-symbols: Finds untested API symbols +symbols-tested.txt: $(TEST_PROGS) + $(AM_V_GEN)$(top_builddir)/libtool --mode=execute nm $^ \ + | grep ' U hb_' | sed 's/.* U hb_/hb_/' \ + | sort | uniq > [email protected] && mv [email protected] $@ +symbols-exported.txt: $(top_builddir)/src/.libs/libharfbuzz.so + $(AM_V_GEN)$(top_builddir)/libtool --mode=execute nm $^ \ + | grep ' T ' | sed 's/.* T //' | grep -v '^\(_init\|_fini\)$$' \ + | sort | uniq > [email protected] && mv [email protected] $@ +symbols-untested.txt: symbols-tested.txt symbols-exported.txt + $(AM_V_GEN)diff $^ > [email protected]; mv [email protected] $@ +CLEANFILES += symbols-tested.txt symbols-exported.txt symbols-untested.txt +test-symbols: symbols-untested.txt + @! cat $^ | grep . + + else check-am: @echo "You need to have glib support enabled to run the tests" @exit 77 endif +.PHONY: test-symbols + -include $(top_srcdir)/git.mk commit 9313b9aa66a82fd3fa60d8417c22a5350e5a8791 Author: Behdad Esfahbod <[email protected]> Date: Fri May 27 01:00:55 2011 -0400 [test/version] Test hb-version.h diff --git a/test/Makefile.am b/test/Makefile.am index 973d6b4..bfa423b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -19,6 +19,7 @@ TEST_PROGS += \ test-object \ test-shape \ test-unicode \ + test-version \ $(NULL) TEST_PROGS += \ diff --git a/test/test-version.c b/test/test-version.c new file mode 100644 index 0000000..4c9bd37 --- /dev/null +++ b/test/test-version.c @@ -0,0 +1,80 @@ +/* + * 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 + */ + +#include "hb-test.h" + +/* Unit tests for hb-version.h */ + + +static void +test_version (void) +{ + unsigned int major, minor, micro; + char *s; + + hb_version (&major, &minor, µ); + + g_assert_cmpint (major, ==, HB_VERSION_MAJOR); + g_assert_cmpint (minor, ==, HB_VERSION_MINOR); + g_assert_cmpint (micro, ==, HB_VERSION_MICRO); + + s = g_strdup_printf ("%u.%u.%u", major, minor, micro); + g_assert (0 == strcmp (HB_VERSION_STRING, s)); + g_free (s); + g_assert (0 == strcmp (HB_VERSION_STRING, hb_version_string ())); + + g_assert (HB_VERSION_CHECK (major, minor, micro)); + g_assert (HB_VERSION_CHECK (major+1, minor, micro)); + g_assert (HB_VERSION_CHECK (major, minor+1, micro)); + g_assert (HB_VERSION_CHECK (major, minor, micro+1)); + if (major) + g_assert (!HB_VERSION_CHECK (major-1, minor, micro)); + if (minor) + g_assert (!HB_VERSION_CHECK (major, minor-1, micro)); + if (micro) + g_assert (!HB_VERSION_CHECK (major, minor, micro-1)); + + g_assert (hb_version_check (major, minor, micro)); + g_assert (hb_version_check (major+1, minor, micro)); + g_assert (hb_version_check (major, minor+1, micro)); + g_assert (hb_version_check (major, minor, micro+1)); + if (major) + g_assert (!hb_version_check (major-1, minor, micro)); + if (minor) + g_assert (!hb_version_check (major, minor-1, micro)); + if (micro) + g_assert (!hb_version_check (major, minor, micro-1)); +} + +int +main (int argc, char **argv) +{ + hb_test_init (&argc, &argv); + + hb_test_add (test_version); + + return hb_test_run(); +} commit 329c15714be90d3fc2d9054f80cb14fa325dc959 Author: Behdad Esfahbod <[email protected]> Date: Wed May 25 16:07:07 2011 -0400 Add libtool versioning The versioning is automatic. For now, soname-major is 0. With the 1.0.0 release it will jump to 1 and stay there forever. diff --git a/configure.ac b/configure.ac index d596ce7..e8bf009 100644 --- a/configure.ac +++ b/configure.ac @@ -21,17 +21,33 @@ LT_PREREQ([2.2]) LT_INIT([disable-static]) # Version -m4_define(version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]])) -HB_VERSION_MAJOR=m4_argn(1,version_triplet) -HB_VERSION_MINOR=m4_argn(2,version_triplet) -HB_VERSION_MICRO=m4_argn(3,version_triplet) +m4_define(hb_version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]])) +m4_define(hb_version_major,m4_argn(1,hb_version_triplet)) +m4_define(hb_version_minor,m4_argn(2,hb_version_triplet)) +m4_define(hb_version_micro,m4_argn(3,hb_version_triplet)) +HB_VERSION_MAJOR=hb_version_major +HB_VERSION_MINOR=hb_version_minor +HB_VERSION_MICRO=hb_version_micro HB_VERSION=AC_PACKAGE_VERSION - AC_SUBST(HB_VERSION_MAJOR) AC_SUBST(HB_VERSION_MINOR) AC_SUBST(HB_VERSION_MICRO) AC_SUBST(HB_VERSION) +# Libtool version +m4_define([hb_version_int], + m4_eval(hb_version_major*10000 + hb_version_minor*100 + hb_version_micro)) +m4_if(m4_eval(hb_version_minor % 2), [1], + dnl for unstable releases + [m4_define([hb_libtool_revision], 0)], + dnl for stable releases + [m4_define([hb_libtool_revision], hb_version_micro)]) +m4_define([hb_libtool_age], + m4_eval(hb_version_int - hb_libtool_revision)) +m4_define([hb_libtool_current], + m4_eval(hb_version_major + hb_libtool_age)) +HB_LIBTOOL_VERSION_INFO=hb_libtool_current:hb_libtool_revision:hb_libtool_age +AC_SUBST(HB_LIBTOOL_VERSION_INFO) # Functions and headers AC_CHECK_FUNCS(mprotect sysconf getpagesize mmap) diff --git a/src/Makefile.am b/src/Makefile.am index 1427340..df5c52f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -106,6 +106,7 @@ endif CXXLINK = $(LINK) libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS) libharfbuzz_la_CPPFLAGS = $(HBCFLAGS) +libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) libharfbuzz_la_LIBADD = $(HBLIBS) pkginclude_HEADERS = $(HBHEADERS) nodist_pkginclude_HEADERS = hb-version.h commit 5b21eff8c4a00962d4315a47a65a143abe323299 Author: Behdad Esfahbod <[email protected]> Date: Wed May 25 14:49:35 2011 -0400 Update README, etc diff --git a/COPYING b/COPYING index 7362ead..4bb77a0 100644 --- a/COPYING +++ b/COPYING @@ -8,6 +8,7 @@ Copyright © 2009 Martin Hosken and SIL International Copyright © 2007 Chris Wilson Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc. Copyright © 1998-2004 David Turner and Werner Lemberg + For full copyright notices consult the individual files in the package. diff --git a/README b/README index 06aad34..74e739d 100644 --- a/README +++ b/README @@ -1,9 +1,7 @@ This is HarfBuzz, a text shaping library. -Bug reports on these files should be sent to the HarfBuzz mailing list as -listed on http://harfbuzz.org/ +For bug reports, mailing list, and other information please visit: -For license information, see the file COPYING. + http://harfbuzz.org/ -Behdad Esfahbod -18 November 2010 +For license information, see the file COPYING. diff --git a/configure.ac b/configure.ac index ba3290a..d596ce7 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_INIT([harfbuzz], [0.5.0], [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz], [harfbuzz], - [http://freedesktop.org/wiki/Software/harfbuzz]) + [http://harfbuzz.org/]) AC_CONFIG_SRCDIR([harfbuzz.pc.in]) AC_CONFIG_HEADERS([config.h]) commit 5bf56ea056b30fba8e07e82ec818c430cab8cafd Author: Behdad Esfahbod <[email protected]> Date: Wed May 25 14:43:10 2011 -0400 [TODO] Add item diff --git a/TODO b/TODO index d512b28..f770286 100644 --- a/TODO +++ b/TODO @@ -69,6 +69,8 @@ Tests to write: - ot-layout enumeration API (needs font) +- Finish test-shape.c + Optimizations: ============= diff --git a/test/test-shape.c b/test/test-shape.c index c8017bf..99d2d4d 100644 --- a/test/test-shape.c +++ b/test/test-shape.c @@ -34,6 +34,8 @@ * description. */ +/* TODO Make this test data-driven and add some real test data */ + static const char test_data[] = "test\0data";
_______________________________________________ HarfBuzz mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/harfbuzz
