[meson] Generate harfbuzz.cc, hb-version.h and ragel artifacts

This commit is contained in:
Ebrahim Byagowi 2020-04-21 12:19:16 +04:30
parent b19f927f96
commit 4fc6189a32
5 changed files with 92 additions and 11 deletions

View File

@ -98,12 +98,7 @@ BUILT_SOURCES += \
hb-version.h
$(srcdir)/hb-version.h: hb-version.h.in $(top_srcdir)/configure.ac
$(AM_V_GEN) $(SED) \
-e 's/[@]HB_VERSION_MAJOR@/$(HB_VERSION_MAJOR)/' \
-e 's/[@]HB_VERSION_MINOR@/$(HB_VERSION_MINOR)/' \
-e 's/[@]HB_VERSION_MICRO@/$(HB_VERSION_MICRO)/' \
-e 's/[@]HB_VERSION@/$(HB_VERSION)/' \
"$<" > "$@" || ($(RM) "$@"; false)
$(AM_V_GEN) $(srcdir)/gen-hb-version.py $(HB_VERSION) "$<" "$@"
# Put the library together
@ -251,8 +246,11 @@ GENERATORS = \
gen-arabic-table.py \
gen-def.py \
gen-emoji-table.py \
gen-harfbuzzcc.py \
gen-hb-version.py \
gen-indic-table.py \
gen-os2-unicode-ranges.py \
gen-ragel-artifacts.py \
gen-tag-table.py \
gen-ucd-table.py \
gen-use-table.py \
@ -312,7 +310,8 @@ $(srcdir)/%.hh: $(srcdir)/%.rl
harfbuzz.cc: Makefile.sources
$(AM_V_GEN) \
for f in \
$(srcdir)/gen-harfbuzzcc.py \
$(srcdir)/harfbuzz.cc \
$(HB_BASE_sources) \
$(HB_GLIB_sources) \
$(HB_FT_sources) \
@ -320,10 +319,7 @@ harfbuzz.cc: Makefile.sources
$(HB_UNISCRIBE_sources) \
$(HB_GDI_sources) \
$(HB_DIRECTWRITE_sources) \
$(HB_CORETEXT_sources) \
; do echo '#include "'$$f'"'; done | \
grep '[.]cc"' > $(srcdir)/harfbuzz.cc \
|| ($(RM) $(srcdir)/harfbuzz.cc; false)
$(HB_CORETEXT_sources)
BUILT_SOURCES += harfbuzz.cc
noinst_PROGRAMS = \

14
src/gen-harfbuzzcc.py Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env python3
import io, os, re, sys
if len (sys.argv) < 3:
sys.exit("usage: gen-harfbuzzcc.py harfbuzz.def hb-blob.cc hb-buffer.cc ...")
output_file = sys.argv[1]
source_paths = sys.argv[2:]
with open (output_file, "wb") as f:
f.write ("".join ('#include "{}"\n'.format (x)
for x in source_paths
if x.endswith (".cc")).encode ())

19
src/gen-hb-version.py Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env python3
import io, os, re, sys
if len (sys.argv) < 4:
sys.exit("usage: gen-hb-version.py 1.0.0 hb-version.h.in hb-version.h")
version = sys.argv[1]
major, minor, micro = version.split (".")
input = sys.argv[2]
output = sys.argv[3]
with open (output, "wb") as output_file, open (input, "r") as input_file:
output_file.write (input_file.read ()
.replace ("@HB_VERSION_MAJOR@", major)
.replace ("@HB_VERSION_MINOR@", minor)
.replace ("@HB_VERSION_MICRO@", micro)
.replace ("@HB_VERSION@", version)
.encode ())

22
src/gen-ragel-artifacts.py Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env python3
import io, os, re, sys, subprocess, shutil
if len (sys.argv) < 3:
ragel_sources = [x for x in os.listdir ('.') if x.endswith ('.rl')]
else:
os.chdir(sys.argv[1])
ragel_sources = sys.argv[2:]
ragel = shutil.which ('ragel')
if not ragel:
print ('You have to install ragel if you are going to develop HarfBuzz itself')
exit (1)
if not len (ragel_sources):
exit (77)
for rl in ragel_sources:
hh = rl.replace ('.rl', '.hh')
subprocess.Popen ([ragel, '-e', '-F1', '-o', hh, rl]).wait ()

View File

@ -280,6 +280,36 @@ hb_gobject_headers = [
'hb-gobject-structs.h',
]
custom_target('hb-version.h',
build_by_default: true,
input: 'hb-version.h.in',
output: 'hb-version.h',
command: [find_program('gen-hb-version.py'), meson.project_version(),
'@INPUT@', join_paths(meson.current_source_dir(), 'hb-version.h')])
ragel = find_program('ragel', required: false)
if not ragel.found()
message('You have to install ragel if you are going to develop HarfBuzz itself')
else
foreach rl : hb_base_ragel_sources
hh = rl.split('.rl')[0] + '.hh'
custom_target(hh,
build_by_default: true,
depfile: rl,
output: hh,
command: [find_program('gen-ragel-artifacts.py'), meson.current_source_dir(), rl])
endforeach
endif
custom_target('harfbuzz.cc',
build_by_default: true,
output: 'harfbuzz.cc',
command: [find_program('gen-harfbuzzcc.py'),
join_paths(meson.source_root(), '@OUTPUT@')] +
hb_base_sources + hb_glib_sources + hb_ft_sources +
hb_graphite2_sources + hb_uniscribe_sources + hb_gdi_sources +
hb_directwrite_sources + hb_coretext_sources)
incsrc = include_directories('.')
hb_sources = hb_base_sources + hb_base_ragel_generated_sources