Usage:
scons
+ scons lily # build lily
+
LILYPONDPREFIX=out-scons/usr/share/lilypond lily/out-scons/lilypond-bin
+ scons doc # build web doc
+
+ scons fonts # build all font stuff (split this? )
+
+XXX scons # without args builds all targets below ./
+XXX # maybe catch this one and only build lily?
+ scons / # builds all possible targets
scons install
scons -c # clean
# TODO:
-# * running from build-dir, without installing?
-# - scons will not install, if PREFIX lives outside of CWD
+# * separate environments?
+# - compile environment checks headers and libraries
+# - doc environment checks doc stuff
+# * - help for targets?
# - build symlink tree
-# + mimicking regular installation setup?
-# + use tweaked scons 'install' target?
# * commandline targets:
# - clean => -c
# - dist, tar => env.Tar
env = Environment ()
+# Without target arguments, build lily only
+if not COMMAND_LINE_TARGETS:
+ env.Default ('lily')
+
+# Target 'all' builds everything
+if 'all' in COMMAND_LINE_TARGETS:
+ env.Default ('lily', 'fonts', 'doc')
+
# put your favourite stuff in custom.py
opts = Options ('custom.py', ARGUMENTS)
-#opts = Options (None, ARGUMENTS)
+#opts = Options (['config.cache', 'custom.py'], ARGUMENTS)
opts.Add ('prefix', 'Install prefix', '/usr/')
opts.Add ('out', 'Output directory', 'out-scons')
opts.Add ('build', 'Build directory', '.')
env = Environment (options = opts)
+opts.Update (env)
+#opts.Save ('config.cache', env)
+
+
env.CacheDir (os.path.join (env['build'], '=build-cache'))
#ugh
PYTHON_INCLUDE = os.popen (command).read ()
env.Append (CPPPATH = PYTHON_INCLUDE)
-
headers = ('sys/stat.h', 'assert.h', 'kpathsea/kpathsea.h', 'Python.h')
for i in headers:
if conf.CheckCHeader (i):
key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i))
defines[key] = '1'
-
key = 'HAVE_FLEXLEXER_YY_CURRENT_BUFFER'
-defines[key] = conf.TryCompile ("""using namespace std;
+
+sys.stdout.write('Checking for yy_current_buffer ... ')
+sys.stdout.flush()
+res = conf.TryCompile ("""using namespace std;
#include <FlexLexer.h>
class yy_flex_lexer: public yyFlexLexer
{
{
yy_current_buffer = 0;
}
-};""", 'cc')
+};""", '.cc')
+if res:
+ defines[key] = '1'
+ sys.stdout.write('yes\n')
+else:
+ sys.stdout.write('no\n')
+
if conf.CheckLib ('dl'):
pass
absbuild = os.getcwd ()
else:
absbuild = build
+env['absbuild'] = absbuild
# duh
env['MAKEINFO'] = 'LANG= makeinfo'
env['LILYPOND_BIN'] = os.path.join (absbuild, 'lily', out, 'lilypond-bin')
env['LILYPONDPREFIX'] = os.path.join (outdir, 'usr/share/lilypond')
env['LILYPOND_BOOK'] = srcdir + '/scripts/lilypond-book.py'
+env['ABC2LY_PY'] = srcdir + '/scripts/abc2ly.py'
+env['MF_TO_TABLE_PY'] = srcdir + '/buildscripts/mf-to-table.py'
+env['LILYPOND_PY'] = srcdir + '/scripts/lilypond.py'
env['LILYPOND_BOOK_FLAGS'] = ''
env['LILYPOND_BOOK_FORMAT'] = 'texi-html'
+# ugh?
env['LILYPOND_BOOK_PATH'] = ['.', '#/input', '#/input/regression',
'#/input/test', '#/input/tutorial',
os.path.join (absbuild, 'mf', out),
'#/Documentation/user',
- os.path.join (absbuild, 'Documentation', out)]
+ os.path.join (absbuild, 'Documentation', out),
+ os.path.join (absbuild, 'Documentation/user', out),
+ ]
+env['MAKEINFO_PATH'] = ['.', '#/Documentation/user',
+ os.path.join (absbuild, 'Documentation/user', out)]
+
## TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper)
-env['TEXINFO_PAPERSIZE_OPTION'] = '-t@afourpaper'
+env['TEXINFO_PAPERSIZE_OPTION'] = '-t @afourpaper'
+env.Append (PYTHONPATH = [os.path.join (outdir, 'usr/lib/python'),
+ os.path.join (srcdir, 'buildscripts'),
+ os.path.join (srcdir, 'python')])
+# huh, aha?
+# GS_FONTPATH, GS_LIB?
+env.Append (ENV = { 'PYTHONPATH' : string.join (env['PYTHONPATH'],
+ os.pathsep) } )
+# UGHR, lilypond.py uses lilypond-bin from PATH
+env.Append (ENV = { 'PATH' : os.path.join (outdir, 'usr/bin') })
SConscript ('buildscripts/builder.py')
#subdirs = ['mf',]
#subdirs = ['flower', 'lily', 'parser', 'gui', 'main',]
#subdirs = ['flower', 'lily', 'mf', 'scm', 'ly']
-subdirs = ['flower', 'lily', 'mf', 'scm', 'ly', 'Documentation']
+subdirs = ['flower', 'lily', 'mf', 'scm', 'ly', 'Documentation',
+ 'Documentation/user', 'input']
for d in subdirs:
b = os.path.join (build, d, out)
# Support clean sourctree build (srcdir build)
map (mkdir, string.split (dir, os.sep))
#srcdir = os.getcwd ()
def symlink (src, dst):
+ os.chdir (absbuild)
dir = os.path.dirname (dst)
mkdirs (dir)
if src[0] == '#':
frm = os.path.join (srcdir, src[1:])
else:
- depth = len (string.split (dir))
+ print 'dst: ' + dst
+ depth = len (string.split (dir, '/'))
+ print 'depth: ' + `depth`
frm = os.path.join ('../' * depth, src, out)
+ print 'cwd: ' + `os.getcwd ()`
+ print 'frm: ' + frm
+ print 'dst: ' + dst
os.symlink (frm, os.path.basename (dst))
- os.chdir (srcdir)
map (lambda x: symlink (x[0], os.path.join (prefix, x[1])),
(('python', 'lib/lilypond/python'),
+ # UGHR, lilypond.py uses lilypond-bin from PATH
+ ('lily', 'bin'),
('#mf', 'share/lilypond/fonts/mf'),
- ('mf', 'share/lilypond/fonts/amf'),
+ ('mf', 'share/lilypond/fonts/afm'),
('mf', 'share/lilypond/fonts/tfm'),
('mf', 'share/lilypond/fonts/type1'),
('#tex', 'share/lilypond/tex/source'),
('#scm', 'share/lilypond/scm'),
('#ps', 'share/lilypond/ps'),
('elisp', 'share/lilypond/elisp')))
+ os.chdir (srcdir)
if env['debugging']:
- prefix = os.path.join (outdir, 'usr')
+ prefix = os.path.join (out, 'usr')
if not os.path.exists (prefix):
symlink_tree (prefix)