From 559999d48d78a4aedd3337b959fe36261c5ee644 Mon Sep 17 00:00:00 2001
From: janneke <janneke>
Date: Wed, 7 Jul 2004 15:28:05 +0000
Subject: [PATCH] New file.

---
 SConstruct        | 114 ++++++++++++++++++++++++++++++++--------------
 flower/SConscript |   7 +--
 lily/SConscript   |  13 ++++--
 lily/main.cc      |   2 +-
 mf/SConscript     |  95 ++++++++++++++++++++++++++++++++++++++
 5 files changed, 188 insertions(+), 43 deletions(-)
 create mode 100644 mf/SConscript

diff --git a/SConstruct b/SConstruct
index 5a04351772..6fa67078d7 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1,13 +1,33 @@
 # -*-python-*-
-#
-# Experimental scons building
+
+'''
+Experimental scons (www.scons.org) building:
+
+Usage:
+    scons
+    scons install
+    scons -c              # clean
+    scons -h              # help
+
+    scons build=DIR       # scrdir build, write to new tree =build
+    scons out=DIR         # write output to deeper dir DIR
+
+Optionally, make a custom.py.  I have
+
+import os
+out='out-scons'
+optimising=0
+debugging=1
+prefix=os.getcwd ()
+
+
+'''
+
+
 # TODO:
-#   * install
-#   * build in out/ ?
-#   * mf, Documentation, ly etc.
-#   * --srcdir ?  (mkdir =build; cd =build; scons -Y .. ;
-#     ===> os.chdir (Dir ('.').srcdir ()); glob.glob (*.cc); os.chdir (cwd) ?
-# 
+#   * mf: pfa
+#   *, Documentation, ly etc.
+
 
 import re
 import glob
@@ -17,9 +37,11 @@ import string
 
 env = Environment ()
 
-opts = Options (None, ARGUMENTS)
+# put your favourite stuff in custom.py
+opts = Options ('custom.py', ARGUMENTS)
 opts.Add ('prefix', 'Install prefix', '/usr/')
-opts.Add ('outdir', 'Output directory', 'out')
+opts.Add ('out', 'Output directory', 'out-scons')
+opts.Add ('build', 'Build directory', '.')
 opts.AddOptions (
 	BoolOption ('warnings', 'compile with -Wall and similiar',
 		   1),
@@ -37,6 +59,20 @@ Help (opts.GenerateHelpText (env))
 
 env = Environment (options = opts)
 
+env.CacheDir (os.path.join (env['build'], '=build-cache'))
+
+#ugh
+sys.path.append (os.path.join ('.', 'stepmake', 'bin'))
+import packagepython
+package = packagepython.Package ('.')
+
+env['version'] = packagepython.version_tuple_to_str (package.version)
+env['bindir'] = os.path.join (env['prefix'], 'bin')
+env['sharedir'] = os.path.join (env['prefix'], 'share')
+env['libdir'] = os.path.join (env['prefix'], 'lib')
+env['lilypondprefix'] = os.path.join (env['sharedir'], 'lilypond',
+				      env['version'])
+
 if env['debugging']:
 	env.Append (CFLAGS = '-g')
 	env.Append (CXXFLAGS = '-g')
@@ -47,6 +83,8 @@ if env['warnings']:
 	env.Append (CFLAGS = '-W -Wall')
 	env.Append (CXXFLAGS = '-W -Wall -Wconversion')
 
+env['MFMODE'] = 'ljfour'
+
 conf = Configure (env)
 
 #ugh -- hardcode territory
@@ -88,43 +126,49 @@ if conf.CheckLib ('dl'):
 if conf.CheckLib ('kpathsea'):
 	defines['KPATHSEA'] = '1'
 
-# ugh?
-config = open ('config.h', 'w')
-sort_helper = defines.keys ()
-sort_helper.sort ()
-#for i in defines.keys ():
-for i in sort_helper:
-	config.write ('#define %s %s\n' % (i[1:], defines[i]))
-config.close ()
 env = conf.Finish ()
 
-os.system (sys.executable \
-	   + ' ./stepmake/bin/make-version.py VERSION > version.hh')
-
 Export ('env')
 
 #this could happen after flower...
 env.ParseConfig ('guile-config compile')
 
-builddir = ''
-outdir = env['outdir']
+build = env['build']
+out = env['out']
+##reldir = str (Dir ('.').srcnode ())
+reldir = os.getcwd ()
+outdir = os.path.join (env['build'], reldir, env['out'])
+if not os.path.exists (outdir):
+	os.mkdir (outdir)
+
+config = open (os.path.join (outdir, 'config.h'), 'w')
+sort_helper = defines.keys ()
+sort_helper.sort ()
+for i in sort_helper:
+	config.write ('#define %s %s\n' % (i[1:], defines[i]))
+config.close ()
+
+os.system (sys.executable \
+	   + ' ./stepmake/bin/make-version.py VERSION > '\
+	   + os.path.join (build, 'version.hh'))
 
 if os.path.exists ('parser'):
 	env.Append (LIBPATH = ['#/flower', '#/lily', '#/parser', '#/gui',],
-		    CPPPATH = ['#',])
+		    CPPPATH = [outdir, '#',])
 else:	
-	env.Append (LIBPATH = ['#/flower/' + outdir,],
-		    CPPPATH = ['#',])
-
-
-#ugh: remove make config output
-if os.path.exists ('lily/out/config.h'):
-	os.unlink ('lily/out/config.h')
+	env.Append (LIBPATH = ['#/flower/' + out,],
+		    CPPPATH = [outdir, '#',])
 
-subdirs = ('flower', 'lily',)
+subdirs = ('flower', 'lily', 'mf')
+#subdirs = ('mf',)
 #subdirs = ('flower', 'lily', 'parser', 'gui', 'main',)
 for d in subdirs:
-	alias = os.path.join (builddir, d, outdir)
-	env.BuildDir (alias, d)
-	SConscript (os.path.join (alias, 'SConscript'))
+	b = os.path.join (build, d, out)
+	# Support clean sourctree build (srcdir build)
+	# and outdir build.
+	# TODO: figure out SConscript (dir, builddir, duplicate)) feature
+	if (build and build != '.') \
+	   or (out and out != '.'):
+		env.BuildDir (b, d, duplicate=0)
+	SConscript (os.path.join (b, 'SConscript'))
 
diff --git a/flower/SConscript b/flower/SConscript
index c9443d3529..1477b80cc3 100644
--- a/flower/SConscript
+++ b/flower/SConscript
@@ -3,16 +3,17 @@
 import glob
 import os
 
-## this only works for BuildDir aliasing, not for scons -Y ../scrdir
 here = os.getcwd ()
-os.chdir (str (Dir ('.').srcnode ()))
+reldir = str (Dir ('.').srcnode ())
+os.chdir (reldir)
 sources = glob.glob ('*.cc')
 os.chdir (here)
 
 name = 'flower'
 Import ('env')
 e = env.Copy ()
-e.Append (CPPPATH = ['include'])
+outdir = os.path.join (env['build'], reldir, env['out'])
+e.Append (CPPPATH = [outdir, 'include'])
 if env['static']:
 	e.Library (name, sources) 
 if not env['static'] or env['shared']:
diff --git a/lily/SConscript b/lily/SConscript
index 2a0bb0d07f..e67d938c55 100644
--- a/lily/SConscript
+++ b/lily/SConscript
@@ -3,9 +3,9 @@
 import glob
 import os
 
-## this only works for BuildDir aliasing, not for scons -Y ../scrdir
 here = os.getcwd ()
-os.chdir (str (Dir ('.').srcnode ()))
+reldir = str (Dir ('.').srcnode ())
+os.chdir (reldir)
 sources = glob.glob ('*.cc') + ['parser.yy', 'lexer.ll']
 os.chdir (here)
 
@@ -15,8 +15,11 @@ Import ('env')
 e = env.Copy ()
 
 e.Append (YACCFLAGS = '-d')
-e.Append (CPPPATH = ['include', '#/lily/include', '#/flower/include'])
+outdir = os.path.join (env['build'], reldir, env['out'])
+e.Append (CPPPATH = [outdir, '#/lily/include', '#/flower/include'])
 e.Depends ('lexer.cc', 'parser.cc')
+e.Depends ('my-lily-lexer.o', 'parser.cc')
+e.Depends ('my-lily-parser.o', 'parser.cc')
 
 # some stuff here from lily-as-lib
 if not os.path.exists ('main.cc'):
@@ -29,4 +32,6 @@ else:
 	e.Append (LIBS = ['flower'])
 	e.ParseConfig ('guile-config link')
 	name = 'lilypond-bin'
-	e.Program (name, sources)
+	lily = e.Program (name, sources)
+	env.Install (env['bindir'], lily)
+	env.Alias ('install', env['bindir'])
diff --git a/lily/main.cc b/lily/main.cc
index 4fc6dfb1f1..a7fd529735 100644
--- a/lily/main.cc
+++ b/lily/main.cc
@@ -226,7 +226,7 @@ setup_paths ()
 #if !KPATHSEA
 	/* Urg: GNU make's $ (word) index starts at 1 */
 	int i  = 1;
-	while (global_path.try_add (p + to_string (".") + to_string (i)))
+	while (global_path.try_append (p + to_string (".") + to_string (i)))
 	  i++;
 #endif
       }
diff --git a/mf/SConscript b/mf/SConscript
new file mode 100644
index 0000000000..824022a672
--- /dev/null
+++ b/mf/SConscript
@@ -0,0 +1,95 @@
+# -*-python-*-
+
+import glob
+import os
+import string
+import sys
+
+here = os.getcwd ()
+reldir = str (Dir ('.').srcnode ())
+os.chdir (reldir)
+#mf_sources = reduce (+,
+mf_sources = reduce (lambda x, y: x + y,
+		     map (glob.glob,
+			  ('feta[0-9]*.mf',
+			   'feta-braces-[a-z].mf',
+			   'feta-din*[0-9].mf',
+			   'feta-nummer*[0-9].mf',
+			   'parmesan[0-9]*.mf',)))
+os.chdir (here)
+
+Import ('env')
+MFMODE = env['MFMODE']
+#ugh
+outdir = os.path.join (env['build'], reldir, env['out'])
+tfm = Builder (action = ('cd ' + outdir + ' && ' \
+			 + '(MFINPUTS=:' + str (Dir ('#/mf')) \
+			 + ' mf "\\mode:=%(MFMODE)s; nonstopmode; ' \
+			 + ' input $$(basename $SOURCE);"' \
+			 + ' | grep -v "@\\|>>")') % vars (),
+	       suffix = '.tfm',
+	       src_suffix = '.mf')
+
+afm = Builder (action = (sys.executable
+			 + ' buildscripts/mf-to-table.py ' \
+			 + ' --package=. --outdir=%(outdir)s '\
+			 + ' --afm %(outdir)s/$$(basename $TARGET .afm).afm' \
+			 + ' --enc %(outdir)s/$$(basename $TARGET .afm).enc' \
+			 + ' --tex %(outdir)s/$$(basename $TARGET .afm).tex' \
+			 + ' --ly %(outdir)s/$$(basename $TARGET .afm).ly'\
+			 + ' %(outdir)s/$$(basename $SOURCE)') % vars (),
+	       suffix = '.afm',
+	       src_suffix = '.log')
+
+# UGH, should fix --output option for mftrace
+pfa = Builder (action = ('mftrace -I%(outdir)s --pfa --simplify --keep-trying'\
+			 + ' $$(basename $SOURCE .mf) ' \
+			 + ' && mv $$(basename $TARGET) $TARGET') % vars (),
+	       suffix = '.pfa',
+	       src_suffix = '.mf')
+
+e = env.Copy (BUILDERS = {'Tfm' : tfm, 'Afm' : afm, 'Pfa' : pfa},
+	      MFINPUTS = '#/mf')
+
+mf_sources = ('feta16.mf',)
+sources = map (lambda x: os.path.splitext (x)[0], mf_sources)
+
+##t = map (e.Tfm, mf_sources)
+#a = map (e.Afm, map (lambda x: outdir + os.path.splitext (x)[0] + '.log',
+#		     mf_sources))
+#p = map (e.Pfa, mf_sources)
+
+out_sources = map (lambda x: os.path.join (outdir, x), sources)
+
+#t = e.Tfm (os.path.join (outdir, 'feta16.tfm'))
+#a = e.Afm (os.path.join (outdir, 'feta16.afm'))
+#p = e.Pfa (os.path.join (outdir, 'feta16.pfa'))
+#t = e.Tfm ('feta16.tfm'))
+#a = e.Afm ('feta16.afm'))
+#p = e.Pfa ('feta16.pfa'))
+
+t = e.Tfm (os.path.join (outdir, 'feta16'))
+a = e.Afm (os.path.join (outdir, 'feta16'))
+p = e.Pfa (os.path.join (outdir, 'feta16'))
+
+#t = map (e.Tfm, out_sources)
+#a = map (e.Afm, out_sources)
+#p = map (e.Pfa, out_sources)
+
+e.Depends ('feta16.log', 'feta16.tfm')
+e.Depends ('feta16.afm', 'feta16.log')
+
+#map (lambda x: e.Depends (x + '.log', x + '.tfm'), out_sources)
+#map (lambda x: e.Depends (x + '.afm', x + '.log'), out_sources)
+
+tfmdir = os.path.join (env['lilypondprefix'], 'fonts/tfm')
+afmdir = os.path.join (env['lilypondprefix'], 'afm')
+pfadir = os.path.join (env['lilypondprefix'], 'fonts/type1')
+env.Install (tfmdir, t)
+env.Install (afmdir, a)
+env.Install (pfadir, p)
+env.Alias ('install', tfmdir)
+env.Alias ('install', afmdir)
+env.Alias ('install', pfadir)
+
+
-- 
2.39.5