In make
a b: c
command
is shorthand for
a: c
command
b: c
command
this means that in parallel builds the same command may be invoked twice.
Fix this by associating each command with only one target, and adding
dummy dependencies. Also, generate the .pe for only one design size at
a time.
OTF_FILES = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.otf) \
$(outdir)/emmentaler-brace.otf
OTF_FILES = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.otf) \
$(outdir)/emmentaler-brace.otf
-PE_SCRIPTS = $(STAFF_SIZES:%=$(outdir)/emmentaler-%.pe)
OTF_TABLES = $(STAFF_SIZES:%=$(outdir)/feta%.otf-table) \
$(BRACES:%=$(outdir)/feta-braces-%.otf-table)
SVG_FILES = $(OTF_FILES:%.otf=%.svg)
OTF_TABLES = $(STAFF_SIZES:%=$(outdir)/feta%.otf-table) \
$(BRACES:%=$(outdir)/feta-braces-%.otf-table)
SVG_FILES = $(OTF_FILES:%.otf=%.svg)
$(outdir)/emmentaler-brace.otf-gtable: $(BRACES:%=$(outdir)/feta-braces-%.otf-gtable)
echo '(design_size . 20)' > $@
$(outdir)/emmentaler-brace.otf-gtable: $(BRACES:%=$(outdir)/feta-braces-%.otf-gtable)
echo '(design_size . 20)' > $@
-
-
-## ugh -- we want this to prevent failing -j2 compiles.
-define FETAxx-PREREQUISITES
-
-
-$(outdir)/feta$(i).otf-table: $(outdir)/feta$(i).lisp \
- $(outdir)/feta-noteheads$(i).lisp \
- $(outdir)/feta-flags$(i).lisp \
- $(outdir)/parmesan$(i).lisp \
- $(outdir)/parmesan-noteheads$(i).lisp \
- $(outdir)/feta-alphabet$(i).lisp
-endef
-
-$(eval $(foreach i,$(STAFF_SIZES),$(FETAxx-PREREQUISITES)))
-
$(outdir)/%.otf-table: $(outdir)/%.lisp
cat $< $(if $(findstring brace,$<),,$(subst feta,parmesan,$<)) \
$(if $(findstring brace,$<),,$(subst feta,parmesan-noteheads,$<)) \
$(outdir)/%.otf-table: $(outdir)/%.lisp
cat $< $(if $(findstring brace,$<),,$(subst feta,parmesan,$<)) \
$(if $(findstring brace,$<),,$(subst feta,parmesan-noteheads,$<)) \
$(outdir)/emmentaler-brace.otf-gtable \
$(outdir)/emmentaler-brace.pe
$(outdir)/emmentaler-brace.otf-gtable \
$(outdir)/emmentaler-brace.pe
-$(outdir)/emmentaler-brace.otf\
- $(outdir)/emmentaler-brace.svg\
- $(outdir)/emmentaler-brace.woff: $(BRACES:%=$(outdir)/feta-braces-%.pfb)
-
$(outdir)/emmentaler-brace.fontname:
printf 'emmentaler-brace' > $@
$(outdir)/emmentaler-brace.subfonts:
echo $(subst .mf,,$(call src-wildcard,feta-braces-[a-z].mf)) > $@
$(outdir)/emmentaler-brace.fontname:
printf 'emmentaler-brace' > $@
$(outdir)/emmentaler-brace.subfonts:
echo $(subst .mf,,$(call src-wildcard,feta-braces-[a-z].mf)) > $@
-$(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts
- $< --dir=$(outdir)
-
+$(outdir)/emmentaler-%.genpe: $(buildscript-dir)/gen-emmentaler-scripts
+ $< --dir=$(outdir) --design-size=$(patsubst emmentaler-%.genpe,%,$(notdir $@))
# Generate emmentaler-*.pe scripts first, and *.otf, *.svg, *.woff files last,
# so that normally these files aren't regenerated on a subsequent call to make.
# Generate emmentaler-*.pe scripts first, and *.otf, *.svg, *.woff files last,
# so that normally these files aren't regenerated on a subsequent call to make.
export MFINPUTS := .:$(MFINPUTS)
export MFINPUTS := .:$(MFINPUTS)
+# A few rules here generate multiple files from one command line. For
+# treating this case, we only declare one output explicitly, and use a
+# dummy rules for the other outputs. The dummy rule uses
+# $(UPDATE_TARGET) so the order of writing in the real command does
+# not confuse make.
+UPDATE_TARGET = if test -f $@; then touch $@ ; fi
+
# only for fonts which
#
# 1. are mentioned in font.scm
#
# 2. are not included with teTeX
#
# only for fonts which
#
# 1. are mentioned in font.scm
#
# 2. are not included with teTeX
#
-$(outdir)/%.lisp \
-$(outdir)/%.otf-gtable \
-$(outdir)/%.enc \
-$(outdir)/%.pe: $(outdir)/%.log $(outdir)/%.tfm
+$(outdir)/%.lisp: $(outdir)/%.log $(outdir)/%.tfm
$(buildscript-dir)/mf-to-table \
--global-lisp=$(outdir)/$(<F:.log=.otf-gtable) \
--lisp=$(outdir)/$(<F:.log=.lisp) \
$(buildscript-dir)/mf-to-table \
--global-lisp=$(outdir)/$(<F:.log=.otf-gtable) \
--lisp=$(outdir)/$(<F:.log=.lisp) \
--enc $(outdir)/$(<F:.log=.enc) \
$<
--enc $(outdir)/$(<F:.log=.enc) \
$<
+$(outdir)/%.otf-gtable $(outdir)/%.enc: $(outdir)/%.lisp
+ $(UPDATE_TARGET)
+
## Putting pfb here forces all .pfb fonts to be built before
# fontforge starts generating emmentaler-*.* fonts.
## Putting pfb here forces all .pfb fonts to be built before
# fontforge starts generating emmentaler-*.* fonts.
-$(outdir)/emmentaler-%.otf \
-$(outdir)/emmentaler-%.svg \
-$(outdir)/emmentaler-%.woff: $(outdir)/emmentaler-%.pe \
+$(outdir)/emmentaler-%.otf: $(outdir)/emmentaler-%.genpe \
$(outdir)/feta%.pfb \
$(outdir)/feta-noteheads%.pfb \
$(outdir)/feta-flags%.pfb \
$(outdir)/feta%.pfb \
$(outdir)/feta-noteheads%.pfb \
$(outdir)/feta-flags%.pfb \
| pfb
cd $(outdir) && $(FONTFORGE) -script $(notdir $<)
| pfb
cd $(outdir) && $(FONTFORGE) -script $(notdir $<)
-$(outdir)/emmentaler-brace.otf\
- $(outdir)/emmentaler-brace.svg\
- $(outdir)/emmentaler-brace.woff: $(outdir)/emmentaler-brace.pe\
+$(outdir)/emmentaler-%.svg $(outdir)/emmentaler-%.woff: $(outdir)/emmentaler-%.otf
+ $(UPDATE_TARGET)
+
+$(outdir)/emmentaler-brace.otf: $(outdir)/emmentaler-brace.pe\
$(foreach s,$(BRACES),$(outdir)/feta-braces-$(s).pfb) \
$(outdir)/emmentaler-brace.otf-table $(outdir)/emmentaler-brace.otf-gtable \
| pfb
cd $(outdir) && $(FONTFORGE) -script emmentaler-brace.pe
$(foreach s,$(BRACES),$(outdir)/feta-braces-$(s).pfb) \
$(outdir)/emmentaler-brace.otf-table $(outdir)/emmentaler-brace.otf-gtable \
| pfb
cd $(outdir) && $(FONTFORGE) -script emmentaler-brace.pe
+$(outdir)/emmentaler-brace.svg $(outdir)/emmentaler-brace.woff: $(outdir)/emmentaler-brace.otf
+ $(UPDATE_TARGET)
+
default: $(ALL_GEN_FILES) \
$(outdir)/emmentaler-20.otf \
tree-regen \
default: $(ALL_GEN_FILES) \
$(outdir)/emmentaler-20.otf \
tree-regen \
tree-regen: $(ALL_GEN_FILES)
${MAKE} -C $(top-build-dir) link-mf-tree
tree-regen: $(ALL_GEN_FILES)
${MAKE} -C $(top-build-dir) link-mf-tree
-$(outdir)/%.lisp \
-$(outdir)/%.otf-gtable \
-$(outdir)/%.enc \
-$(outdir)/%.pe: $(outdir)/%.log $(outdir)/%.tfm
- $(buildscript-dir)/mf-to-table \
- --global-lisp=$(outdir)/$(<F:.log=.otf-gtable) \
- --lisp=$(outdir)/$(<F:.log=.lisp) \
- --outdir=$(outdir) \
- --enc $(outdir)/$(<F:.log=.enc) \
- $<
local-clean:
rm -f mfplain.mem mfplain.log
local-clean:
rm -f mfplain.mem mfplain.log
$(outdir)/fonts.conf:
echo '<fontconfig><dir>'$(shell cd $(outdir); pwd)'</dir></fontconfig>' > $@
$(outdir)/fonts.conf:
echo '<fontconfig><dir>'$(shell cd $(outdir); pwd)'</dir></fontconfig>' > $@
-$(NCSB_OTFS): $(NCSB_SOURCE_FILES) \
+
+$(outdir)/CenturySchL-Roma.otf: $(NCSB_SOURCE_FILES) \
$(auxscript-dir)/pfx2ttf.fontforge
$(foreach i, $(basename $(NCSB_SOURCE_FILES)), \
$(FONTFORGE) -script $(auxscript-dir)/pfx2ttf.fontforge \
$(i).pfb $(i).afm $(outdir)/ && ) true
$(auxscript-dir)/pfx2ttf.fontforge
$(foreach i, $(basename $(NCSB_SOURCE_FILES)), \
$(FONTFORGE) -script $(auxscript-dir)/pfx2ttf.fontforge \
$(i).pfb $(i).afm $(outdir)/ && ) true
+
+$(addprefix $(outdir)/,CenturySchL-Ital.otf \
+ CenturySchL-Bold.otf \
+ CenturySchL-BoldItal.otf): $(outdir)/CenturySchL-Roma.otf
+ $(UPDATE_TARGET)
(options, files) = \
getopt.getopt (sys.argv[1:],
(options, files) = \
getopt.getopt (sys.argv[1:],
+ '',
+ ['dir=', 'design-size='])
outdir = ''
for opt in options:
o = opt[0]
a = opt[1]
if o == '--dir':
outdir = a
outdir = ''
for opt in options:
o = opt[0]
a = opt[1]
if o == '--dir':
outdir = a
+ elif o == '--design-size':
+ design_size = int(a)
else:
print o
raise getopt.error
else:
print o
raise getopt.error
-# Ugh
-for design_size in [11,13,14,16,18,20,23,26]:
- name = 'Emmentaler'
- filename = name.lower ()
- script = '''#!@FONTFORGE@
+
+name = 'Emmentaler'
+filename = name.lower ()
+script = '''#!@FONTFORGE@
Generate("%(filename)s-%(design_size)d.woff");
''' % vars()
Generate("%(filename)s-%(design_size)d.woff");
''' % vars()
- basename = '%s-%d' % (filename, design_size)
- path = os.path.join (outdir, basename + '.pe')
- open (path, 'w').write (script)
+basename = '%s-%d' % (filename, design_size)
+path = os.path.join (outdir, basename + '.genpe')
+open (path, 'w').write (script)
- subfonts = ['feta%(design_size)d',
- 'feta-noteheads%(design_size)d',
- 'feta-flags%(design_size)d',
- 'parmesan%(design_size)d',
- 'parmesan-noteheads%(design_size)d',
- 'feta-alphabet%(design_size)d']
+subfonts = ['feta%(design_size)d',
+ 'feta-noteheads%(design_size)d',
+ 'feta-flags%(design_size)d',
+ 'parmesan%(design_size)d',
+ 'parmesan-noteheads%(design_size)d',
+ 'feta-alphabet%(design_size)d']
- ns = []
- for s in subfonts:
- ns.append ('%s' % (s % vars()))
+ns = []
+for s in subfonts:
+ ns.append ('%s' % (s % vars()))
- subfonts_str = ' '.join (ns)
+subfonts_str = ' '.join (ns)
- open (os.path.join (outdir, '%(filename)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str)
+open (os.path.join (outdir, '%(filename)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str)
- path = os.path.join (outdir, '%s-%d.dep' % (filename, design_size))
+path = os.path.join (outdir, '%s-%d.dep' % (filename, design_size))
- deps = r'''%(filename)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfb \
+deps = r'''%(filename)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfb \
$(outdir)/parmesan%(design_size)d.pfb \
$(outdir)/feta-alphabet%(design_size)d.pfb feta%(design_size)d.otf-table \
feta%(design_size)d.otf-gtable
''' % vars()
$(outdir)/parmesan%(design_size)d.pfb \
$(outdir)/feta-alphabet%(design_size)d.pfb feta%(design_size)d.otf-table \
feta%(design_size)d.otf-gtable
''' % vars()
- open (path, 'w').write (deps)
- open (os.path.join (outdir, basename + '.fontname'), 'w').write ("%s-%d" % (name, design_size))
+open (path, 'w').write (deps)
+
+open (os.path.join (outdir, basename + '.fontname'), 'w').write ("%s-%d" % (name, design_size))