.circleci/config.yml | 2 CMakeLists.txt | 223 ++++++++++++++++++++------------------- appveyor.yml | 8 - test/CMakeLists.txt | 2 test/api/CMakeLists.txt | 48 +++----- test/fuzzing/CMakeLists.txt | 9 + test/fuzzing/Makefile.am | 23 +++- test/fuzzing/run-fuzzer-tests.py | 34 +++++ test/shaping/CMakeLists.txt | 10 + test/shaping/Makefile.am | 3 test/shaping/run-tests.py | 13 +- 11 files changed, 228 insertions(+), 147 deletions(-)
New commits: commit 4e3cf91af29ff654eca91e43c0af1c1a7171b9fa Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Mon Jan 1 11:17:51 2018 +0330 [cmake] Run rest of the tests on Windows (#668) diff --git a/appveyor.yml b/appveyor.yml index faa04d0c..7350b135 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -32,16 +32,16 @@ install: - C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-x86_64-ragel" build_script: - - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" vcpkg install glib:%triplet% freetype:%triplet%' + - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" vcpkg install glib:%triplet% freetype:%triplet% cairo:%triplet%' - 'if "%compiler%"=="msvc" md build' - 'if "%compiler%"=="msvc" cd build' - 'if "%compiler%"=="msvc" set PATH=%PATH%;C:\Program Files (x86)\MSBuild\14.0\Bin;c:\msys64\mingw64\bin' # msys2 is added just for having "ragel" on PATH - 'if "%compiler%"=="msvc" if "%platform%"=="ARM" cmake -DHB_HAVE_UNISCRIBE=ON -DHB_HAVE_DIRECTWRITE=ON -G "%generator%" ../' - - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" cmake -DHB_HAVE_UNISCRIBE=ON -DHB_HAVE_DIRECTWRITE=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_FREETYPE=ON -G "%generator%" -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake ../' + - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" cmake -DHB_HAVE_UNISCRIBE=ON -DHB_HAVE_DIRECTWRITE=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_FREETYPE=ON -DHB_BUILD_UTILS=ON -G "%generator%" -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake ../' - 'if "%compiler%"=="msvc" msbuild harfbuzz.sln /p:Configuration=%configuration% /p:Platform=%platform%' - - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" ctest --output-on-failure' + - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" ctest --output-on-failure -C %configuration%' - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-$MSYS2_ARCH-{freetype,cairo,icu,gettext,gobject-introspection,gcc,gcc-libs,glib2,graphite2,pkg-config,python2}"' - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER; PATH=$PATH:/mingw64/bin:/mingw32/bin; ./autogen.sh --with-uniscribe --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2 --build=%MINGW_CHOST% --host=%MINGW_CHOST% --prefix=%MINGW_PREFIX%; make; make check || (cat */test-suite.log test/*/test-suite.log && false)"' diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2bebd07f..2c97f4f8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,3 @@ add_subdirectory(api) add_subdirectory(shaping) -# Not ready yet -if (NOT MSVC) - add_subdirectory(fuzzing) -endif () +add_subdirectory(fuzzing) diff --git a/test/fuzzing/CMakeLists.txt b/test/fuzzing/CMakeLists.txt index 48432296..06355991 100644 --- a/test/fuzzing/CMakeLists.txt +++ b/test/fuzzing/CMakeLists.txt @@ -1,9 +1,9 @@ if (HB_HAVE_GLIB) - add_executable (hb-fuzzer hb-fuzzer.cc hb-fuzzer.hh main.cc) + file (READ "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.am" MAKEFILEAM) + extract_make_variable (hb_fuzzer_SOURCES ${MAKEFILEAM}) + add_executable (hb-fuzzer ${hb_fuzzer_SOURCES}) target_link_libraries (hb-fuzzer harfbuzz) - add_test (hb-fuzzer python run-fuzzer-tests.py) - set_tests_properties (hb-fuzzer PROPERTIES - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ENVIRONMENT "top_builddir=${PROJECT_BINARY_DIR};testdir=test;fuzzingdir=fuzzing" - ) + add_test (NAME hb-fuzzer + COMMAND python run-fuzzer-tests.py $<TARGET_FILE:hb-fuzzer> + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) endif () diff --git a/test/fuzzing/Makefile.am b/test/fuzzing/Makefile.am index 2c0eb908..6120afce 100644 --- a/test/fuzzing/Makefile.am +++ b/test/fuzzing/Makefile.am @@ -63,9 +63,6 @@ TESTS_ENVIRONMENT = \ endif check: - cat $(srcdir)/../shaping/tests/fuzzed.tests | \ - cut -d: -f1 | while read x; do \ - ./hb-fuzzer $(srcdir)/../shaping/$$x; \ - done + $(srcdir)/run-fuzzer-tests.py -include $(top_srcdir)/git.mk diff --git a/test/fuzzing/run-fuzzer-tests.py b/test/fuzzing/run-fuzzer-tests.py index 3fc78837..aa615af7 100755 --- a/test/fuzzing/run-fuzzer-tests.py +++ b/test/fuzzing/run-fuzzer-tests.py @@ -6,9 +6,15 @@ import sys, os, subprocess srcdir = os.environ.get ("srcdir", ".") EXEEXT = os.environ.get ("EXEEXT", "") top_builddir = os.environ.get ("top_builddir", ".") -testdir = os.environ.get ("testdir", ".") -fuzzingdir = os.environ.get ("fuzzingdir", ".") -hb_fuzzer = os.path.join (top_builddir, testdir, fuzzingdir, "hb-fuzzer" + EXEEXT) +hb_fuzzer = os.path.join (top_builddir, "hb-fuzzer" + EXEEXT) + +if hb_fuzzer == ".\\hb-fuzzer": + hb_fuzzer = "./hb-fuzzer.exe" + +if not os.path.exists (hb_fuzzer): + hb_fuzzer = sys.argv[1] + +print ('hb_fuzzer:', hb_fuzzer) fails = 0 for line in open (os.path.join (srcdir, "..", "shaping", "tests", "fuzzed.tests")): diff --git a/test/shaping/CMakeLists.txt b/test/shaping/CMakeLists.txt index 5310a2c2..e186858b 100644 --- a/test/shaping/CMakeLists.txt +++ b/test/shaping/CMakeLists.txt @@ -1,11 +1,10 @@ if (HB_BUILD_UTILS) file (READ "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.am" MAKEFILEAM) extract_make_variable (TESTS ${MAKEFILEAM}) + foreach (test IN ITEMS ${TESTS}) - add_test (${test} python run-tests.py "${test}") - set_tests_properties (${test} PROPERTIES - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ENVIRONMENT "top_builddir=${PROJECT_BINARY_DIR};utildir=." - ) + add_test (NAME ${test} + COMMAND python run-tests.py $<TARGET_FILE:hb-shape> "${test}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) endforeach () endif () diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py index 09c2f685..342c006e 100755 --- a/test/shaping/run-tests.py +++ b/test/shaping/run-tests.py @@ -28,14 +28,22 @@ EXEEXT = os.environ.get ("EXEEXT", "") extra_options = "--verify" hb_shape = os.path.join (top_builddir, utildir, "hb-shape" + EXEEXT) -fails = 0 args = sys.argv[1:] +if not os.path.exists (hb_shape): + hb_shape = args[0] + args = args[1:] + +fails = 0 + reference = False if len (args) and args[0] == "--reference": reference = True args = args[1:] +if not reference: + print ('hb_shape:', hb_shape) + if not len (args): args = [sys.stdin] commit 2dbdeb14214487acd0ff011386c49263ce800813 Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Fri Dec 29 23:13:29 2017 +0330 [cmake] Run fuzzing and shaping tests (#666) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4162488f..8f164384 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ jobs: - image: fedora steps: - checkout - - run: dnf install -y gcc ragel cmake make which glib2-devel freetype-devel cairo-devel libicu-devel graphite2-devel wget tar bzip2 || true + - run: dnf install -y gcc ragel cmake make which glib2-devel freetype-devel cairo-devel libicu-devel graphite2-devel wget tar bzip2 python || true - run: wget http://$ODSUSER:$odsp...@behdad.org/harfbuzz-private/OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 && tar xf OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 --owner root --group root --no-same-owner - run: CC=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/suncc CXX=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/sunCC cmake -DHB_HAVE_GRAPHITE2=ON -DHB_BUILTIN_UCDN=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_ICU=ON -DHB_HAVE_FREETYPE=ON -Bbuild -H. - run: make -Cbuild diff --git a/CMakeLists.txt b/CMakeLists.txt index d0149b70..a24b136b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,45 +92,56 @@ endif () ## Extract variables from Makefile files -# http://stackoverflow.com/a/27630120/1414809 -function (prepend var prefix) +function (extract_make_variable variable makefile_source) + string(REGEX MATCH "${variable} = ([^$]+)\\$" temp ${makefile_source}) + string(REGEX MATCHALL "[^ \n\t\\]+" listVar ${CMAKE_MATCH_1}) + set (${variable} ${listVar} PARENT_SCOPE) +endfunction () + +# http://stackoverflow.com/a/27630120 +function (add_prefix_to_list var prefix) set (listVar "") - foreach (f ${ARGN}) + foreach (f ${${var}}) list(APPEND listVar "${prefix}${f}") endforeach () set (${var} "${listVar}" PARENT_SCOPE) endfunction () -function (extract_make_variable variable file prefix) - string(REGEX MATCH "${variable} = ([^$]+)\\$" temp ${file}) - string(REGEX MATCHALL "[^ \n\t\\]+" list ${CMAKE_MATCH_1}) - prepend(list ${prefix} ${list}) - set (${variable} ${list} PARENT_SCOPE) -endfunction () - file(READ ${PROJECT_SOURCE_DIR}/src/Makefile.sources SRCSOURCES) file(READ ${PROJECT_SOURCE_DIR}/util/Makefile.sources UTILSOURCES) file(READ ${PROJECT_SOURCE_DIR}/src/hb-ucdn/Makefile.sources UCDNSOURCES) -extract_make_variable(HB_BASE_sources ${SRCSOURCES} "${PROJECT_SOURCE_DIR}/src/") -extract_make_variable(HB_BASE_headers ${SRCSOURCES} "${PROJECT_SOURCE_DIR}/src/") -extract_make_variable(HB_FALLBACK_sources ${SRCSOURCES} "${PROJECT_SOURCE_DIR}/src/") -extract_make_variable(HB_OT_sources ${SRCSOURCES} "${PROJECT_SOURCE_DIR}/src/") -extract_make_variable(HB_OT_headers ${SRCSOURCES} "${PROJECT_SOURCE_DIR}/src/") - +extract_make_variable(HB_BASE_sources ${SRCSOURCES}) +add_prefix_to_list(HB_BASE_sources "${PROJECT_SOURCE_DIR}/src/") +extract_make_variable(HB_BASE_headers ${SRCSOURCES}) +add_prefix_to_list(HB_BASE_headers "${PROJECT_SOURCE_DIR}/src/") +extract_make_variable(HB_FALLBACK_sources ${SRCSOURCES}) +add_prefix_to_list(HB_FALLBACK_sources "${PROJECT_SOURCE_DIR}/src/") +extract_make_variable(HB_OT_sources ${SRCSOURCES}) +add_prefix_to_list(HB_OT_sources "${PROJECT_SOURCE_DIR}/src/") +extract_make_variable(HB_OT_headers ${SRCSOURCES}) +add_prefix_to_list(HB_OT_headers "${PROJECT_SOURCE_DIR}/src/") + +extract_make_variable(HB_BASE_RAGEL_GENERATED_sources ${SRCSOURCES}) +extract_make_variable(HB_OT_RAGEL_GENERATED_sources ${SRCSOURCES}) if (IN_HB_DIST) - set (RAGEL_GENERATED_DIR "${PROJECT_SOURCE_DIR}/src/") + add_prefix_to_list(HB_BASE_RAGEL_GENERATED_sources "${PROJECT_SOURCE_DIR}/src/") + add_prefix_to_list(HB_OT_RAGEL_GENERATED_sources "${PROJECT_SOURCE_DIR}/src/") else () - set (RAGEL_GENERATED_DIR "${PROJECT_BINARY_DIR}/src/") + add_prefix_to_list(HB_BASE_RAGEL_GENERATED_sources "${PROJECT_BINARY_DIR}/src/") + add_prefix_to_list(HB_OT_RAGEL_GENERATED_sources "${PROJECT_BINARY_DIR}/src/") endif () -extract_make_variable(HB_BASE_RAGEL_GENERATED_sources ${SRCSOURCES} ${RAGEL_GENERATED_DIR}) -extract_make_variable(HB_OT_RAGEL_GENERATED_sources ${SRCSOURCES} ${RAGEL_GENERATED_DIR}) -extract_make_variable(HB_VIEW_sources ${UTILSOURCES} "${PROJECT_SOURCE_DIR}/util/") -extract_make_variable(HB_SHAPE_sources ${UTILSOURCES} "${PROJECT_SOURCE_DIR}/util/") -extract_make_variable(HB_OT_SHAPE_CLOSURE_sources ${UTILSOURCES} "${PROJECT_SOURCE_DIR}/util/") +extract_make_variable(HB_VIEW_sources ${UTILSOURCES}) +add_prefix_to_list(HB_VIEW_sources "${PROJECT_SOURCE_DIR}/util/") +extract_make_variable(HB_SHAPE_sources ${UTILSOURCES}) +add_prefix_to_list(HB_SHAPE_sources "${PROJECT_SOURCE_DIR}/util/") +extract_make_variable(HB_OT_SHAPE_CLOSURE_sources ${UTILSOURCES}) +add_prefix_to_list(HB_OT_SHAPE_CLOSURE_sources "${PROJECT_SOURCE_DIR}/util/") + +extract_make_variable(LIBHB_UCDN_sources ${UCDNSOURCES}) +add_prefix_to_list(LIBHB_UCDN_sources "${PROJECT_SOURCE_DIR}/src/hb-ucdn/") -extract_make_variable(LIBHB_UCDN_sources ${UCDNSOURCES} "${PROJECT_SOURCE_DIR}/src/hb-ucdn/") file(READ configure.ac CONFIGUREAC) string(REGEX MATCH "\\[(([0-9]+)\\.([0-9]+)\\.([0-9]+))\\]" HB_VERSION_MATCH ${CONFIGUREAC}) diff --git a/appveyor.yml b/appveyor.yml index 9a34052b..faa04d0c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -41,9 +41,9 @@ build_script: - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" cmake -DHB_HAVE_UNISCRIBE=ON -DHB_HAVE_DIRECTWRITE=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_FREETYPE=ON -G "%generator%" -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake ../' - 'if "%compiler%"=="msvc" msbuild harfbuzz.sln /p:Configuration=%configuration% /p:Platform=%platform%' - - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" ctest' + - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" ctest --output-on-failure' - - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-$MSYS2_ARCH-{freetype,cairo,icu,gettext,gobject-introspection,gcc,gcc-libs,glib2,graphite2,pkg-config}"' + - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-$MSYS2_ARCH-{freetype,cairo,icu,gettext,gobject-introspection,gcc,gcc-libs,glib2,graphite2,pkg-config,python2}"' - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER; PATH=$PATH:/mingw64/bin:/mingw32/bin; ./autogen.sh --with-uniscribe --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2 --build=%MINGW_CHOST% --host=%MINGW_CHOST% --prefix=%MINGW_PREFIX%; make; make check || (cat */test-suite.log test/*/test-suite.log && false)"' cache: diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 53d257b0..2bebd07f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1 +1,6 @@ add_subdirectory(api) +add_subdirectory(shaping) +# Not ready yet +if (NOT MSVC) + add_subdirectory(fuzzing) +endif () diff --git a/test/api/CMakeLists.txt b/test/api/CMakeLists.txt index 4e786ba6..c3914e48 100644 --- a/test/api/CMakeLists.txt +++ b/test/api/CMakeLists.txt @@ -1,39 +1,29 @@ -macro (_add_tests) - foreach(test_name ${ARGV}) +if (HB_HAVE_GLIB) + file (READ "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.am" MAKEFILEAM) + extract_make_variable (TEST_PROGS ${MAKEFILEAM}) + + list (APPEND TEST_PROGS + test-ot-tag + test-c + test-cplusplus + ) + + if (HB_HAVE_FREETYPE) + list (APPEND TEST_PROGS test-ot-math) + endif () + + foreach (test_name IN ITEMS ${TEST_PROGS}) if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${test_name}.c) add_executable (${test_name} ${test_name}.c) elseif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${test_name}.cc) add_executable (${test_name} ${test_name}.cc) else () - message(FATAL_ERROR "No source file found for test ${test_name}") + message (FATAL_ERROR "No source file found for test ${test_name}") endif () target_link_libraries (${test_name} harfbuzz) add_test (${test_name} ${test_name}) endforeach () - set_tests_properties (${ARGV} PROPERTIES ENVIRONMENT + set_tests_properties (${TEST_PROGS} PROPERTIES ENVIRONMENT "G_TEST_SRCDIR=${CMAKE_CURRENT_SOURCE_DIR};G_TEST_BUILDDIR=${CMAKE_CURRENT_BINARY_DIR}" - ) -endmacro () - -if (HB_HAVE_GLIB) - _add_tests ( - test-blob - test-buffer - test-common - test-font - test-object - test-set - test-shape - test-unicode - test-version - test-ot-tag - test-c - test-cplusplus - ) - - if (HB_HAVE_FREETYPE) - _add_tests ( - test-ot-math - ) - endif (HB_HAVE_FREETYPE) -endif (HB_HAVE_GLIB) + ) +endif () diff --git a/test/fuzzing/CMakeLists.txt b/test/fuzzing/CMakeLists.txt new file mode 100644 index 00000000..48432296 --- /dev/null +++ b/test/fuzzing/CMakeLists.txt @@ -0,0 +1,9 @@ +if (HB_HAVE_GLIB) + add_executable (hb-fuzzer hb-fuzzer.cc hb-fuzzer.hh main.cc) + target_link_libraries (hb-fuzzer harfbuzz) + add_test (hb-fuzzer python run-fuzzer-tests.py) + set_tests_properties (hb-fuzzer PROPERTIES + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ENVIRONMENT "top_builddir=${PROJECT_BINARY_DIR};testdir=test;fuzzingdir=fuzzing" + ) +endif () diff --git a/test/fuzzing/Makefile.am b/test/fuzzing/Makefile.am index 3ea8605b..2c0eb908 100644 --- a/test/fuzzing/Makefile.am +++ b/test/fuzzing/Makefile.am @@ -14,6 +14,8 @@ $(top_builddir)/src/libharfbuzz-fuzzing.la: lib EXTRA_DIST += \ README \ + run-fuzzer-tests.py \ + CMakeLists.txt \ $(NULL) check_PROGRAMS = \ @@ -44,6 +46,22 @@ hb_fuzzer_DEPENDENCIES = \ lib \ $(NULL) +AM_TESTS_ENVIRONMENT = \ + EXEEXT="$(EXEEXT)"; \ + export EXEEXT; \ + srcdir="$(srcdir)"; \ + export srcdir; \ + builddir="$(builddir)"; \ + export builddir; \ + $(NULL) + +if AUTOMAKE_OLDER_THAN_1_13 +TESTS_ENVIRONMENT = \ + $(AM_TESTS_ENVIRONMENT) \ + $(TESTS_LOG_COMPILER) \ + $(NULL) +endif + check: cat $(srcdir)/../shaping/tests/fuzzed.tests | \ cut -d: -f1 | while read x; do \ diff --git a/test/fuzzing/run-fuzzer-tests.py b/test/fuzzing/run-fuzzer-tests.py new file mode 100755 index 00000000..3fc78837 --- /dev/null +++ b/test/fuzzing/run-fuzzer-tests.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +from __future__ import print_function +import sys, os, subprocess + +srcdir = os.environ.get ("srcdir", ".") +EXEEXT = os.environ.get ("EXEEXT", "") +top_builddir = os.environ.get ("top_builddir", ".") +testdir = os.environ.get ("testdir", ".") +fuzzingdir = os.environ.get ("fuzzingdir", ".") +hb_fuzzer = os.path.join (top_builddir, testdir, fuzzingdir, "hb-fuzzer" + EXEEXT) +fails = 0 + +for line in open (os.path.join (srcdir, "..", "shaping", "tests", "fuzzed.tests")): + font = line.split (":")[0] + + p = subprocess.Popen ( + [hb_fuzzer, os.path.join (srcdir, "..", "shaping", font)], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + if p.wait () != 0: + fails = fails + 1 + + print ((p.stdout.read () + p.stderr.read ()).decode ("utf-8").strip ()) + +if fails: + print ("%i fuzzer related tests failed." % fails) + sys.exit (1) diff --git a/test/shaping/CMakeLists.txt b/test/shaping/CMakeLists.txt new file mode 100644 index 00000000..5310a2c2 --- /dev/null +++ b/test/shaping/CMakeLists.txt @@ -0,0 +1,11 @@ +if (HB_BUILD_UTILS) + file (READ "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.am" MAKEFILEAM) + extract_make_variable (TESTS ${MAKEFILEAM}) + foreach (test IN ITEMS ${TESTS}) + add_test (${test} python run-tests.py "${test}") + set_tests_properties (${test} PROPERTIES + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ENVIRONMENT "top_builddir=${PROJECT_BINARY_DIR};utildir=." + ) + endforeach () +endif () diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am index 4cf55749..4379363f 100644 --- a/test/shaping/Makefile.am +++ b/test/shaping/Makefile.am @@ -29,6 +29,7 @@ EXTRA_DIST += \ run-tests.py \ texts/in-tree \ fonts/sha1sum \ + CMakeLists.txt \ $(TESTS) \ $(NULL) @@ -104,7 +105,7 @@ TESTS_ENVIRONMENT = \ $(NULL) endif -TESTS_LOG_COMPILER = python $(srcdir)/run-tests.py +TESTS_LOG_COMPILER = $(srcdir)/run-tests.py .PHONY: manifests diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py index ebba75aa..09c2f685 100755 --- a/test/shaping/run-tests.py +++ b/test/shaping/run-tests.py @@ -22,10 +22,11 @@ srcdir = os.environ.get ("srcdir", ".") builddir = os.environ.get ("builddir", ".") top_builddir = os.environ.get ("top_builddir", os.path.normpath (os.path.join (os.getcwd (), "..", ".."))) +utildir = os.environ.get ("utildir", "util") EXEEXT = os.environ.get ("EXEEXT", "") extra_options = "--verify" -hb_shape = os.path.join (top_builddir, "util", "hb-shape" + EXEEXT) +hb_shape = os.path.join (top_builddir, utildir, "hb-shape" + EXEEXT) fails = 0 args = sys.argv[1:] commit 24b30faa2a285c6e4e46a18c346def2183fc2793 Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Mon Dec 25 22:01:28 2017 +0330 [cmake] Use GNUInstallDirs values (#665) diff --git a/CMakeLists.txt b/CMakeLists.txt index 24ccb6fc..d0149b70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,9 +10,9 @@ if (BUILD_FRAMEWORK) message(FATAL_ERROR "You should use Xcode generator with BUILD_FRAMEWORK enabled") endif () - set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)") - set(CMAKE_MACOSX_RPATH ON) - set(BUILD_SHARED_LIBS ON) + set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)") + set (CMAKE_MACOSX_RPATH ON) + set (BUILD_SHARED_LIBS ON) endif () @@ -46,19 +46,19 @@ if (WIN32) endif () option(HB_BUILD_UTILS "Build harfbuzz utils, needs cairo, freetype, and glib properly be installed" OFF) if (HB_BUILD_UTILS) - set(HB_HAVE_GLIB ON) - set(HB_HAVE_FREETYPE ON) + set (HB_HAVE_GLIB ON) + set (HB_HAVE_FREETYPE ON) endif () option(HB_HAVE_GOBJECT "Enable GObject Bindings" OFF) if (HB_HAVE_GOBJECT) - set(HB_HAVE_GLIB ON) + set (HB_HAVE_GLIB ON) endif () option(HB_HAVE_INTROSPECTION "Enable building introspection (.gir/.typelib) files" OFF) if (HB_HAVE_INTROSPECTION) - set(HB_HAVE_GOBJECT ON) - set(HB_HAVE_GLIB ON) + set (HB_HAVE_GOBJECT ON) + set (HB_HAVE_GLIB ON) endif () include_directories(AFTER @@ -83,29 +83,29 @@ endif () ## Detect if we are running inside a distribution or regular repository folder -set(IN_HB_DIST FALSE) +set (IN_HB_DIST FALSE) if (EXISTS "${PROJECT_SOURCE_DIR}/ChangeLog") # perhaps we are on dist directory - set(IN_HB_DIST TRUE) - set(HB_VERSION_H "${PROJECT_SOURCE_DIR}/src/hb-version.h") + set (IN_HB_DIST TRUE) + set (HB_VERSION_H "${PROJECT_SOURCE_DIR}/src/hb-version.h") endif () ## Extract variables from Makefile files # http://stackoverflow.com/a/27630120/1414809 function (prepend var prefix) - set(listVar "") + set (listVar "") foreach (f ${ARGN}) list(APPEND listVar "${prefix}${f}") endforeach () - set(${var} "${listVar}" PARENT_SCOPE) + set (${var} "${listVar}" PARENT_SCOPE) endfunction () function (extract_make_variable variable file prefix) string(REGEX MATCH "${variable} = ([^$]+)\\$" temp ${file}) string(REGEX MATCHALL "[^ \n\t\\]+" list ${CMAKE_MATCH_1}) prepend(list ${prefix} ${list}) - set(${variable} ${list} PARENT_SCOPE) + set (${variable} ${list} PARENT_SCOPE) endfunction () file(READ ${PROJECT_SOURCE_DIR}/src/Makefile.sources SRCSOURCES) @@ -119,9 +119,9 @@ extract_make_variable(HB_OT_sources ${SRCSOURCES} "${PROJECT_SOURCE_DIR}/src/") extract_make_variable(HB_OT_headers ${SRCSOURCES} "${PROJECT_SOURCE_DIR}/src/") if (IN_HB_DIST) - set(RAGEL_GENERATED_DIR "${PROJECT_SOURCE_DIR}/src/") + set (RAGEL_GENERATED_DIR "${PROJECT_SOURCE_DIR}/src/") else () - set(RAGEL_GENERATED_DIR "${PROJECT_BINARY_DIR}/src/") + set (RAGEL_GENERATED_DIR "${PROJECT_BINARY_DIR}/src/") endif () extract_make_variable(HB_BASE_RAGEL_GENERATED_sources ${SRCSOURCES} ${RAGEL_GENERATED_DIR}) extract_make_variable(HB_OT_RAGEL_GENERATED_sources ${SRCSOURCES} ${RAGEL_GENERATED_DIR}) @@ -134,10 +134,10 @@ extract_make_variable(LIBHB_UCDN_sources ${UCDNSOURCES} "${PROJECT_SOURCE_DIR}/s file(READ configure.ac CONFIGUREAC) string(REGEX MATCH "\\[(([0-9]+)\\.([0-9]+)\\.([0-9]+))\\]" HB_VERSION_MATCH ${CONFIGUREAC}) -set(HB_VERSION ${CMAKE_MATCH_1}) -set(HB_VERSION_MAJOR ${CMAKE_MATCH_2}) -set(HB_VERSION_MINOR ${CMAKE_MATCH_3}) -set(HB_VERSION_MICRO ${CMAKE_MATCH_4}) +set (HB_VERSION ${CMAKE_MATCH_1}) +set (HB_VERSION_MAJOR ${CMAKE_MATCH_2}) +set (HB_VERSION_MINOR ${CMAKE_MATCH_3}) +set (HB_VERSION_MICRO ${CMAKE_MATCH_4}) ## Define ragel tasks @@ -152,11 +152,11 @@ if (NOT IN_HB_DIST) foreach (ragel_output IN ITEMS ${HB_BASE_RAGEL_GENERATED_sources} ${HB_OT_RAGEL_GENERATED_sources}) string(REGEX MATCH "([^/]+)\\.hh" temp ${ragel_output}) - set(target_name ${CMAKE_MATCH_1}) + set (target_name ${CMAKE_MATCH_1}) add_custom_command(OUTPUT ${ragel_output} COMMAND ${RAGEL} -G2 -o ${ragel_output} ${PROJECT_SOURCE_DIR}/src/${target_name}.rl -I ${PROJECT_SOURCE_DIR} ${ARGN} DEPENDS ${PROJECT_SOURCE_DIR}/src/${target_name}.rl - ) + ) add_custom_target(harfbuzz_${target_name} DEPENDS ${PROJECT_BINARY_DIR}/src/${target_name}) endforeach () @@ -166,45 +166,44 @@ endif () ## Generate hb-version.h if (NOT IN_HB_DIST) - set(HB_VERSION_H_IN "${PROJECT_SOURCE_DIR}/src/hb-version.h.in") - set(HB_VERSION_H "${PROJECT_BINARY_DIR}/src/hb-version.h") + set (HB_VERSION_H_IN "${PROJECT_SOURCE_DIR}/src/hb-version.h.in") + set (HB_VERSION_H "${PROJECT_BINARY_DIR}/src/hb-version.h") set_source_files_properties("${HB_VERSION_H}" PROPERTIES GENERATED true) configure_file("${HB_VERSION_H_IN}" "${HB_VERSION_H}.tmp" @ONLY) execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${HB_VERSION_H}.tmp" "${HB_VERSION_H}" - ) + ) file(REMOVE "${HB_VERSION_H}.tmp") endif () ## Define sources and headers of the project -set(project_sources +set (project_sources ${HB_BASE_sources} ${HB_BASE_RAGEL_GENERATED_sources} ${HB_FALLBACK_sources} ${HB_OT_sources} ${HB_OT_RAGEL_GENERATED_sources} - ) +) -set(project_extra_sources) +set (project_extra_sources) -set(project_headers +set (project_headers ${HB_VERSION_H} ${HB_BASE_headers} ${HB_OT_headers} - ) +) ## Find and include needed header folders and libraries if (HB_HAVE_FREETYPE) - include(FindFreetype) if (NOT FREETYPE_FOUND) message(FATAL_ERROR "HB_HAVE_FREETYPE was set, but we failed to find it. Maybe add a CMAKE_PREFIX_PATH= to your Freetype2 install prefix") - endif() + endif () list(APPEND THIRD_PARTY_LIBS ${FREETYPE_LIBRARIES}) include_directories(AFTER ${FREETYPE_INCLUDE_DIRS}) @@ -212,7 +211,6 @@ if (HB_HAVE_FREETYPE) list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-ft.cc) list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-ft.h) - endif () if (HB_HAVE_GRAPHITE2) @@ -322,8 +320,8 @@ if (HB_HAVE_GOBJECT) pkg_check_modules(PC_GLIB QUIET glib-2.0) find_program(GLIB_MKENUMS glib-mkenums HINTS ${PC_glib_mkenums} - ) - set(GLIB_MKENUMS_CMD) + ) + set (GLIB_MKENUMS_CMD) if (WIN32 AND NOT MINGW) # In Visual Studio builds, shebang lines are not supported @@ -333,29 +331,29 @@ if (HB_HAVE_GOBJECT) execute_process(COMMAND "${PYTHON_EXECUTABLE}" "${GLIB_MKENUMS}" --version RESULT_VARIABLE GLIB_MKENUMS_PYTHON OUTPUT_QUIET ERROR_QUIET - ) + ) if (GLIB_MKENUMS_PYTHON EQUAL 0) message("${GLIB_MKENUMS} is a Python script.") - set(GLIB_MKENUMS_CMD "${PYTHON_EXECUTABLE}" "${GLIB_MKENUMS}") + set (GLIB_MKENUMS_CMD "${PYTHON_EXECUTABLE}" "${GLIB_MKENUMS}") else () execute_process(COMMAND "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}" --version RESULT_VARIABLE GLIB_MKENUMS_PERL OUTPUT_QUIET ERROR_QUIET - ) + ) if (GLIB_MKENUMS_PERL EQUAL 0) message("${GLIB_MKENUMS} is a PERL script.") - set(GLIB_MKENUMS_CMD "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}") + set (GLIB_MKENUMS_CMD "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}") endif () if (NOT GLIB_MKENUMS_PERL EQUAL 0 AND NOT GLIB_MKENUMS_PYTHON EQUAL 0) message(FATAL_ERROR "Unable to determine type of glib-mkenums script") endif () - endif () + endif () else () - set(GLIB_MKENUMS_CMD "${GLIB_MKENUMS}") + set (GLIB_MKENUMS_CMD "${GLIB_MKENUMS}") endif () if (NOT GLIB_MKENUMS_CMD) message(FATAL_ERROR "HB_HAVE_GOBJECT was set, but we failed to find glib-mkenums, which is required") - endif() + endif () pkg_check_modules(PC_GOBJECT QUIET gobject-2.0) @@ -368,19 +366,19 @@ if (HB_HAVE_GOBJECT) list(APPEND hb_gobject_sources ${PROJECT_SOURCE_DIR}/src/hb-gobject-structs.cc) list(APPEND hb_gobject_gen_sources ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc - ) + ) list(APPEND hb_gobject_structs_headers ${PROJECT_SOURCE_DIR}/src/hb-gobject-structs.h - ) + ) list(APPEND hb_gobject_headers ${PROJECT_SOURCE_DIR}/src/hb-gobject.h ${hb_gobject_structs_headers} - ) + ) list(APPEND hb_gobject_gen_headers ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h - ) + ) - add_custom_command ( + add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h COMMAND ${GLIB_MKENUMS_CMD} --template=${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.h.tmpl @@ -396,9 +394,9 @@ if (HB_HAVE_GOBJECT) DEPENDS ${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.h.tmpl ${hb_gobject_header} ${project_headers} - ) + ) - add_custom_command ( + add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc COMMAND ${GLIB_MKENUMS_CMD} --template=${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.cc.tmpl @@ -415,7 +413,7 @@ if (HB_HAVE_GOBJECT) ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h ${hb_gobject_header} ${project_headers} - ) + ) endif () ## Atomic ops availability detection @@ -461,7 +459,7 @@ if (HB_HAVE_GOBJECT) ${hb_gobject_gen_sources} ${hb_gobject_headers} ${hb_gobject_gen_headers} - ) + ) include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/src) add_dependencies(harfbuzz-gobject harfbuzz) target_link_libraries(harfbuzz-gobject harfbuzz ${GOBJECT_LIBRARIES} ${THIRD_PARTY_LIBS}) @@ -471,7 +469,7 @@ endif () if (WIN32) if (NOT BUILD_SHARED_LIBS) message("Building introspection files on Windows requires BUILD_SHARED_LIBS to be enabled.") - set(HB_HAVE_INTROSPECTION OFF) + set (HB_HAVE_INTROSPECTION OFF) endif () endif () @@ -482,23 +480,23 @@ if (HB_HAVE_INTROSPECTION) find_program(G_IR_SCANNER g-ir-scanner HINTS ${PC_g_ir_scanner} - ) + ) find_program(G_IR_COMPILER g-ir-compiler HINTS ${PC_g_ir_compiler} - ) + ) if (WIN32 AND NOT MINGW) # Note that since we already enable HB_HAVE_GOBJECT # we would already have PYTHON_EXECUTABLE handy - set(G_IR_SCANNER_CMD "${PYTHON_EXECUTABLE}" "${G_IR_SCANNER}") + set (G_IR_SCANNER_CMD "${PYTHON_EXECUTABLE}" "${G_IR_SCANNER}") else () - set(G_IR_SCANNER_CMD "${G_IR_SCANNER}") + set (G_IR_SCANNER_CMD "${G_IR_SCANNER}") endif () # We need to account for the varying output directories # when we build using Visual Studio projects - if("${CMAKE_GENERATOR}" MATCHES "Visual Studio*") + if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio*") set (hb_libpath "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>") else () set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>") @@ -506,9 +504,9 @@ if (HB_HAVE_INTROSPECTION) # Get the CFlags that we used to build HarfBuzz/HarfBuzz-GObject set (hb_defines_cflags "") - foreach(hb_cflag ${hb_cflags}) + foreach (hb_cflag ${hb_cflags}) list(APPEND hb_defines_cflags "-D${hb_cflag}") - endforeach(hb_cflag) + endforeach (hb_cflag) # Get the other dependent libraries we used to build HarfBuzz/HarfBuzz-GObject set (extra_libs "") @@ -518,7 +516,7 @@ if (HB_HAVE_INTROSPECTION) list(APPEND extra_libs "--extra-library=${extra_lib_stripped}") endforeach () - set(introspected_sources) + set (introspected_sources) foreach (f ${project_headers} ${project_sources} @@ -545,7 +543,7 @@ if (HB_HAVE_INTROSPECTION) endforeach () # Finally, build the introspection files... - add_custom_command ( + add_custom_command( TARGET harfbuzz-gobject POST_BUILD COMMAND ${G_IR_SCANNER_CMD} @@ -576,9 +574,9 @@ if (HB_HAVE_INTROSPECTION) ${introspected_sources} -o ${hb_libpath}/HarfBuzz-0.0.gir DEPENDS harfbuzz-gobject harfbuzz - ) + ) - add_custom_command ( + add_custom_command( TARGET harfbuzz-gobject POST_BUILD COMMAND "${G_IR_COMPILER}" @@ -587,20 +585,20 @@ if (HB_HAVE_INTROSPECTION) ${hb_libpath}/HarfBuzz-0.0.gir -o ${hb_libpath}/HarfBuzz-0.0.typelib DEPENDS ${hb_libpath}/HarfBuzz-0.0.gir harfbuzz-gobject - ) + ) endif () ## Additional framework build configs if (BUILD_FRAMEWORK) - set(CMAKE_MACOSX_RPATH ON) + set (CMAKE_MACOSX_RPATH ON) set_target_properties(harfbuzz PROPERTIES FRAMEWORK TRUE PUBLIC_HEADER "${project_headers}" XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" ) - set(MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz") - set(MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}") - set(MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}") + set (MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz") + set (MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}") + set (MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}") endif () @@ -631,56 +629,58 @@ endif () ## Install +include(GNUInstallDirs) + if (NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL) - install(FILES ${project_headers} DESTINATION include/harfbuzz) + install(FILES ${project_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz) if (HB_HAVE_GOBJECT) - install(FILES ${hb_gobject_headers} ${hb_gobject_gen_headers} DESTINATION include/harfbuzz) + install(FILES ${hb_gobject_headers} ${hb_gobject_gen_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz) endif () endif () if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) install(TARGETS harfbuzz - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} FRAMEWORK DESTINATION Library/Frameworks - ) + ) if (HB_BUILD_UTILS) install(TARGETS hb-view - RUNTIME DESTINATION bin + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install(TARGETS hb-view - RUNTIME DESTINATION bin + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install(TARGETS hb-shape - RUNTIME DESTINATION bin + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install(TARGETS hb-ot-shape-closure - RUNTIME DESTINATION bin + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) endif () if (HB_HAVE_GOBJECT) install(TARGETS harfbuzz-gobject - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) if (HB_HAVE_INTROSPECTION) - if("${CMAKE_GENERATOR}" MATCHES "Visual Studio*") + if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio*") set (hb_libpath "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>") else () set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>") endif () install(FILES "${hb_libpath}/HarfBuzz-0.0.gir" - DESTINATION share/gir-1.0 + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/gir-1.0 ) install(FILES "${hb_libpath}/HarfBuzz-0.0.typelib" - DESTINATION lib/girepository-1.0 - ) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/girepository-1.0 + ) endif () endif () endif () _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz