[meson] Add ragel subproject

If ragel 6.10 is not found, build it from source.

Seems to work, except that ragel uses exceptions and we configure
HarfBuzz build to not use exceptions, and I can’t find away to enable
exceptions only for the ragel subproject. I had to remove cpp_eh=none
from default options and try to disable exceptions in MSVC manually
(other compilers are already handled).
pull/3210/head
Khaled Hosny 4 years ago committed by Behdad Esfahbod
parent 5898a9618c
commit 22cbd038d3
  1. 2
      Makefile.am
  2. 3
      meson.build
  3. 8
      src/gen-ragel-artifacts.py
  4. 5
      src/meson.build
  5. 1
      subprojects/.gitignore
  6. 58
      subprojects/packagefiles/ragel/meson.build
  7. 11
      subprojects/ragel.wrap

@ -23,6 +23,8 @@ EXTRA_DIST = \
subprojects/freetype2.wrap \
subprojects/glib.wrap \
subprojects/google-benchmark.wrap \
subprojects/ragel.wrap \
subprojects/packagefiles/ragel/meson.build \
subprojects/ttf-parser.wrap \
perf/meson.build \
perf/perf-draw.hh \

@ -2,7 +2,6 @@ project('harfbuzz', 'c', 'cpp',
meson_version: '>= 0.52.0',
version: '2.9.1',
default_options: [
'cpp_eh=none', # Just to support msvc, we are passing -fno-rtti also anyway
'cpp_rtti=false', # Just to support msvc, we are passing -fno-exceptions also anyway
'cpp_std=c++11',
'wrap_mode=nofallback', # Use --wrap-mode=default to revert, https://github.com/harfbuzz/harfbuzz/pull/2548
@ -37,6 +36,8 @@ if cpp.get_id() == 'msvc'
add_project_arguments(msvc_args, language: ['c', 'cpp'])
# Disable SAFESEH with MSVC for libs that use external deps that are built with MinGW
# noseh_link_args = ['/SAFESEH:NO']
# disable exception handling
add_project_arguments(['/EHs-', '/EHc-'], language: 'cpp')
endif
add_project_link_arguments(cpp.get_supported_link_arguments([

@ -4,16 +4,16 @@
import os, os.path, sys, subprocess, shutil
ragel = os.getenv ('RAGEL', shutil.which ('ragel'))
ragel = sys.argv[1]
if not ragel:
sys.exit ('You have to install ragel if you are going to develop HarfBuzz itself')
if len (sys.argv) < 4:
sys.exit (__doc__)
OUTPUT = sys.argv[1]
CURRENT_SOURCE_DIR = sys.argv[2]
INPUT = sys.argv[3]
OUTPUT = sys.argv[2]
CURRENT_SOURCE_DIR = sys.argv[3]
INPUT = sys.argv[4]
outdir = os.path.dirname (OUTPUT)
shutil.copy (INPUT, outdir)

@ -291,6 +291,9 @@ hb_gobject_headers = files(
)
ragel = find_program('ragel', version: '6.10', required: false)
if not ragel.found() and meson.can_run_host_binaries() and cpp.get_id() != 'msvc'
ragel = subproject('ragel').get_variable('ragel')
endif
if not ragel.found()
warning('You have to install ragel if you are going to develop HarfBuzz itself')
else
@ -301,7 +304,7 @@ else
build_by_default: true,
input: rl,
output: hh,
command: [ragel_helper, '@OUTPUT@', meson.current_source_dir(), '@INPUT@'],
command: [ragel_helper, ragel, '@OUTPUT@', meson.current_source_dir(), '@INPUT@'],
)
endforeach
endif

@ -3,3 +3,4 @@
/packagecache
/benchmark-1.4.1
/cairo
/ragel-6.10

@ -0,0 +1,58 @@
project('ragel', 'c', 'cpp',
version : '6.10'
)
conf = configuration_data()
conf.set_quoted('PACKAGE', meson.project_name())
conf.set_quoted('VERSION', meson.project_version())
configure_file(
output : 'config.h',
configuration : conf
)
ragel_sources = files(
'ragel/buffer.h', 'ragel/cdcodegen.cpp', 'ragel/cdcodegen.h',
'ragel/cdfflat.cpp', 'ragel/cdfflat.h', 'ragel/cdfgoto.cpp',
'ragel/cdfgoto.h', 'ragel/cdflat.cpp', 'ragel/cdflat.h',
'ragel/cdftable.cpp', 'ragel/cdftable.h', 'ragel/cdgoto.cpp',
'ragel/cdgoto.h', 'ragel/cdipgoto.cpp', 'ragel/cdipgoto.h',
'ragel/cdsplit.cpp', 'ragel/cdsplit.h', 'ragel/cdtable.cpp',
'ragel/cdtable.h', 'ragel/common.cpp', 'ragel/common.h',
'ragel/cscodegen.cpp', 'ragel/cscodegen.h', 'ragel/csfflat.cpp',
'ragel/csfflat.h', 'ragel/csfgoto.cpp', 'ragel/csfgoto.h',
'ragel/csflat.cpp', 'ragel/csflat.h', 'ragel/csftable.cpp',
'ragel/csftable.h', 'ragel/csgoto.cpp', 'ragel/csgoto.h',
'ragel/csipgoto.cpp', 'ragel/csipgoto.h', 'ragel/cssplit.cpp',
'ragel/cssplit.h', 'ragel/cstable.cpp', 'ragel/cstable.h',
'ragel/dotcodegen.cpp', 'ragel/dotcodegen.h', 'ragel/fsmap.cpp',
'ragel/fsmattach.cpp', 'ragel/fsmbase.cpp', 'ragel/fsmgraph.cpp',
'ragel/fsmgraph.h', 'ragel/fsmmin.cpp', 'ragel/fsmstate.cpp',
'ragel/gendata.cpp', 'ragel/gendata.h', 'ragel/gocodegen.cpp',
'ragel/gocodegen.h', 'ragel/gofflat.cpp', 'ragel/gofflat.h',
'ragel/gofgoto.cpp', 'ragel/gofgoto.h', 'ragel/goflat.cpp', 'ragel/goflat.h',
'ragel/goftable.cpp', 'ragel/goftable.h', 'ragel/gogoto.cpp',
'ragel/gogoto.h', 'ragel/goipgoto.cpp', 'ragel/goipgoto.h',
'ragel/gotable.cpp', 'ragel/gotable.h', 'ragel/gotablish.cpp',
'ragel/gotablish.h', 'ragel/inputdata.cpp', 'ragel/inputdata.h',
'ragel/javacodegen.cpp', 'ragel/javacodegen.h', 'ragel/main.cpp',
'ragel/mlcodegen.cpp', 'ragel/mlcodegen.h', 'ragel/mlfflat.cpp',
'ragel/mlfflat.h', 'ragel/mlfgoto.cpp', 'ragel/mlfgoto.h',
'ragel/mlflat.cpp', 'ragel/mlflat.h', 'ragel/mlftable.cpp',
'ragel/mlftable.h', 'ragel/mlgoto.cpp', 'ragel/mlgoto.h',
'ragel/mltable.cpp', 'ragel/mltable.h', 'ragel/parsedata.cpp',
'ragel/parsedata.h', 'ragel/parsetree.cpp', 'ragel/parsetree.h',
'ragel/pcheck.h', 'ragel/ragel.h', 'ragel/rbxgoto.cpp', 'ragel/rbxgoto.h',
'ragel/redfsm.cpp', 'ragel/redfsm.h', 'ragel/rlparse.cpp', 'ragel/rlparse.h',
'ragel/rlscan.cpp', 'ragel/rlscan.h', 'ragel/rubycodegen.cpp',
'ragel/rubycodegen.h', 'ragel/rubyfflat.cpp', 'ragel/rubyfflat.h',
'ragel/rubyflat.cpp', 'ragel/rubyflat.h', 'ragel/rubyftable.cpp',
'ragel/rubyftable.h', 'ragel/rubytable.cpp', 'ragel/rubytable.h',
'ragel/version.h', 'ragel/xmlcodegen.cpp', 'ragel/xmlcodegen.h',
)
ragel = executable(
meson.project_name(),
ragel_sources,
include_directories : ['aapl', 'ragel'],
install : true,
)

@ -0,0 +1,11 @@
[wrap-file]
directory = ragel-6.10
source_url = https://www.colm.net/files/ragel/ragel-6.10.tar.gz
source_filename = ragel-6.10.tar.gz
source_hash = 5f156edb65d20b856d638dd9ee2dfb43285914d9aa2b6ec779dac0270cd56c3f
patch_directory = ragel
[provide]
ragel = ragel
Loading…
Cancel
Save