BoolOption ('static', 'build static libraries',
1),
BoolOption ('gui', 'build with GNOME backend (EXPERIMENTAL)',
- 1),
+ 0),
BoolOption ('verbose', 'run commands with verbose flag',
0),
BoolOption ('checksums', 'use checksums instead of timestamps',
bindir = os.path.join (prefix, 'bin')
sharedir = os.path.join (prefix, 'share')
libdir = os.path.join (prefix, 'lib')
+libdir_package = os.path.join (libdir, package.name)
+libdir_package_version = os.path.join (libdir_package, version)
localedir = os.path.join (sharedir, 'locale')
sharedir_doc_package = os.path.join (sharedir, 'doc', package.name)
sharedir_package = os.path.join (sharedir, package.name)
return sorted
+def symlink_tree (target, source, env):
+ def mkdirs (dir):
+ def mkdir (dir):
+ if not dir:
+ os.chdir (os.sep)
+ return
+ if not os.path.isdir (dir):
+ if os.path.exists (dir):
+ os.unlink (dir)
+ os.mkdir (dir)
+ os.chdir (dir)
+ map (mkdir, string.split (dir, os.sep))
+ 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, '/'))
+ if src.find ('@') > -1:
+ frm = os.path.join ('../' * depth,
+ string.replace (src, '@',
+ env['out']))
+ else:
+ frm = os.path.join ('../' * depth, src,
+ env['out'])
+ if src[-1] == '/':
+ frm = os.path.join (frm, os.path.basename (dst))
+ if env['verbose']:
+ print 'ln -s %s -> %s' % (frm, os.path.basename (dst))
+ os.symlink (frm, os.path.basename (dst))
+ shutil.rmtree (run_prefix)
+ prefix = os.path.join (env['out'], 'usr')
+ map (lambda x: symlink (x[0], os.path.join (prefix,
+ x[1] % {'ver' : version})),
+ # ^# := source dir
+ # @ := out
+ # /$ := add dst file_name
+ (('python', 'lib/lilypond/python'),
+ # ugh
+ ('python', 'share/lilypond/%(ver)s/python'),
+ ('lily/', 'bin/lilypond'),
+ ('scripts/', 'bin/convert-ly'),
+ ('scripts/', 'bin/lilypond-book'),
+ ('scripts/', 'bin/ps2png'),
+ ('mf', 'share/lilypond/%(ver)s/dvips/mf-out'),
+ ('#ps', 'share/lilypond/%(ver)s/dvips/ps'),
+ ('#ps/music-drawing-routines.ps',
+ 'share/lilypond/%(ver)s/tex/music-drawing-routines.ps'),
+ ('mf', 'share/lilypond/%(ver)s/otf'),
+ ('mf', 'share/lilypond/%(ver)s/tfm'),
+ ('tex', 'share/lilypond/%(ver)s/tex/enc'),
+ ('#mf', 'share/lilypond/%(ver)s/fonts/mf'),
+ ('mf', 'share/lilypond/%(ver)s/fonts/map'),
+ ('mf', 'share/lilypond/%(ver)s/fonts/otf'),
+ ('mf', 'share/lilypond/%(ver)s/fonts/tfm'),
+ ('mf', 'share/lilypond/%(ver)s/fonts/type1'),
+ ('#tex', 'share/lilypond/%(ver)s/tex/source'),
+ ('tex', 'share/lilypond/%(ver)s/tex/tex-out'),
+ ('mf', 'share/lilypond/%(ver)s/tex/mf-out'),
+ ('#ly', 'share/lilypond/%(ver)s/ly'),
+ ('#scm', 'share/lilypond/%(ver)s/scm'),
+ ('#scripts', 'share/lilypond/%(ver)s/scripts'),
+ ('#ps', 'share/lilypond/%(ver)s/ps'),
+ ('po/@/nl.mo', 'share/locale/nl/LC_MESSAGES/lilypond.mo'),
+ ('elisp', 'share/lilypond/%(ver)s/elisp')))
+
+ print "FIXME: BARF BARF BARF"
+ os.chdir (absbuild)
+ out = env['out']
+ ver = version
+ prefix = os.path.join (env['out'], 'usr/share/lilypond/%(ver)s/fonts'
+ % vars ())
+ for ext in ('enc', 'map', 'otf', 'svg', 'tfm', 'pfa'):
+ dir = os.path.join (absbuild, prefix, ext)
+ os.system ('rm -f ' + dir)
+ mkdirs (dir)
+ os.chdir (dir)
+ os.system ('ln -s ../../../../../../../mf/%(out)s/*.%(ext)s .'
+ % vars ())
+ os.chdir (srcdir)
+
def configure (target, source, env):
- vre = re.compile ('^.*[^-.0-9]([0-9][0-9]*\.[0-9]([.0-9]*[0-9])*).*$',
+ dre = re.compile ('\n(200[0-9]{5})')
+ vre = re.compile ('.*?\n[^-.0-9]*([0-9][0-9]*\.[0-9]([.0-9]*[0-9])*)',
re.DOTALL)
def get_version (program):
command = '(pkg-config --modversion %(program)s || %(program)s --version || %(program)s -V) 2>&1' % vars ()
output = pipe.read ()
if pipe.close ():
return None
- v = re.sub (vre, '\\1', output)
+ splits = re.sub ('^|\s', '\n', output)
+ date_hack = re.sub (dre, '\n0.0.\\1', splits)
+ m = re.match (vre, date_hack)
+ v = m.group (1)
if v[-1] == '\n':
v = v[:-1]
return string.split (v, '.')
print f
return test_version (lst, program, minimal, description, package)
- def test_lib (lst, program, minimal, description):
+ def test_lib (lst, program, minimal, description, package):
# FIXME: test for Debian or RPM (or -foo?) based dists
# to guess (or get correct!: apt-cache search?)
# package name.
#if os.system ('pkg-config --atleast-version=0 freetype2'):
# barf
if test_version (lst, program, minimal, description,
- 'lib%(program)s-dev or %(program)s-devel'
+ 'lib%(package)s-dev or %(package)s-devel'
% vars ()):
env.ParseConfig ('pkg-config --cflags --libs %(program)s'
% vars ())
test_program (required, 'guile-config', '1.6', 'GUILE development',
'libguile-dev or guile-devel')
test_program (required, 'mf', '0.0', 'Metafont', 'tetex-bin')
- test_program (required, 'mftrace', '1.1.6', 'mftrace (http://xs4all.nl/~hanwen/mftrace)', 'mftrace')
+ test_program (required, 'mftrace', '1.1.9',
+ 'mftrace (http://xs4all.nl/~hanwen/mftrace)', 'mftrace')
test_program (required, 'potrace', '0.0', 'Potrace', 'potrace')
- test_program (required, 'python', '2.1', 'Python (www.python.org)', 'python')
+ test_program (required, 'python', '2.1', 'Python (www.python.org)',
+ 'python')
test_program (required, 'sh', '0.0', 'Bourne shell', 'sh')
optional = []
test_program (optional, 'bison', '1.25', 'Bison -- parser generator',
'bison')
test_program (optional, 'dvips', '0.0', 'Dvips', 'tetex-bin')
- test_program (optional, 'fontforge', '0.0.20041224', 'FontForge', 'fontforge')
- test_program (optional, 'flex', '0.0', 'Flex -- lexer generator', 'flex')
+ test_program (optional, 'fontforge', '0.0.20050624', 'FontForge',
+ 'fontforge')
+ test_program (optional, 'flex', '0.0', 'Flex -- lexer generator',
+ 'flex')
test_program (optional, 'guile', '1.6', 'GUILE scheme', 'guile')
- test_program (optional, 'gs', '8.14', 'Ghostscript PostScript interpreter', 'gs or gs-afpl or gs-esp or gs-gpl')
- test_program (optional, 'mftrace', '1.1.0', 'Metafont tracing Type1',
+ test_program (optional, 'gs', '8.15',
+ 'Ghostscript PostScript interpreter',
+ 'gs or gs-afpl or gs-esp or gs-gpl')
+ test_program (optional, 'mftrace', '1.1.19', 'Metafont tracing Type1',
'mftrace')
test_program (optional, 'makeinfo', '4.7', 'Makeinfo tool', 'texinfo')
test_program (optional, 'perl', '4.0',
def CheckYYCurrentBuffer (context):
context.Message ('Checking for yy_current_buffer... ')
- ret = conf.TryLink ("""using namespace std;
+ ret = conf.TryCompile ("""using namespace std;
#include <FlexLexer.h>
class yy_flex_lexer: public yyFlexLexer
{
context.Result (ret)
return ret
- def CheckLibkpathseaSo (context):
- saveCFLAGS = []
- if context.env.has_key ('CFLAGS'):
- saveCFLAGS = context.env['CFLAGS']
- CFLAGS_shared_no_debugging = filter (lambda x: x != '-g',
- saveCFLAGS)\
- + ['-shared']
- # FIXME: how does this work, with scons
- context.env.Replace (CFLAGS = CFLAGS_shared_no_debugging)
- #context.env.Replace (CFLAGS = '')
- #context.env.Append (CFLAGS = ['-shared'])
- context.Message ('Checking for libkpathsea... ')
- ret = conf.TryLink ('''#include <kpathsea/kpathsea.h>
- int main ()
- {
- kpse_var_expand ("\$TEXMF");
- return 0;
- }
- ''', '.c')
- context.env.Replace (CFLAGS = saveCFLAGS)
- # FIXME: this prints 'ok' already
- context.Result (ret)
- if not ret:
- return 0
-
- sys.stdout.write ('Checking for libkpathsea.so... ')
- testfile = str (context.sconf.lastTarget)
- shared_size = os.path.getsize (testfile)
- ret = shared_size < 40000
- if ret:
- print 'ok'
- else:
- print 'no'
- return ret
-
conf = Configure (env, custom_tests = { 'CheckYYCurrentBuffer'
- : CheckYYCurrentBuffer,
- 'CheckLibkpathseaSo'
- : CheckLibkpathseaSo })
+ : CheckYYCurrentBuffer })
defines = {
'DIRSEP' : "'%s'" % os.sep,
else:
env.Append (CPPPATH = [PYTHON_INCLUDE])
- headers = ('sys/stat.h', 'assert.h', 'kpathsea/kpathsea.h', 'libio.h',
- 'Python.h')
+ headers = ('assert.h', 'grp.h', 'libio.h', 'pwd.h',
+ 'sys/stat.h', 'utf8/wchar.h', 'wchar.h', 'Python.h')
for i in headers:
if conf.CheckCHeader (i):
key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i))
key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i))
conf.env['DEFINES'][key] = 1
- functions = ('fopencookie', 'funopen',
- 'gettext', 'isinf', 'memmem', 'snprintf', 'vsnprintf')
+ functions = ('chroot', 'fopencookie', 'funopen',
+ 'gettext', 'isinf',
+ 'mbrtowc', 'memmem', 'snprintf', 'vsnprintf', 'wcrtomb')
for i in functions:
if 0 or conf.CheckFunc (i):
key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i))
if conf.CheckYYCurrentBuffer ():
conf.env['DEFINES']['HAVE_FLEXLEXER_YY_CURRENT_BUFFER'] = 1
- if conf.CheckLibkpathseaSo ():
- conf.env['DEFINES']['HAVE_LIBKPATHSEA_SO'] = '1'
-
if conf.CheckLib ('dl'):
pass
- if conf.CheckLib ('kpathsea'):
- conf.env['DEFINES']['KPATHSEA'] = 1
-
- # huh?
- if conf.CheckLib ('kpathsea', 'kpse_find_file'):
- conf.env['DEFINES']['HAVE_KPSE_FIND_FILE'] = '1'
- if conf.CheckLib ('kpathsea', 'kpse_find_tfm'):
- conf.env['DEFINES']['HAVE_KPSE_FIND_TFM'] = '1'
-
if env['fast']:
cpppath = []
if env.has_key ('CPPPATH'):
test_program (required, 'pkg-config', '0.9.0',
'pkg-config library compile manager', 'pkg-config')
if test_lib (required, 'freetype2', '0.0',
- 'Development files for FreeType 2 font engine'):
+ 'Development files for FreeType 2 font engine',
+ 'freetype6'):
conf.env['DEFINES']['HAVE_FREETYPE2'] = '1'
if test_lib (required, 'pangoft2', '1.6.0',
- 'Development files for pango, with fontconfig2'):
+ 'Development files for pango, with FreeType2',
+ 'pango1.0'):
conf.env['DEFINES']['HAVE_PANGO_FT2'] = '1'
- conf.env['DEFINES']['HAVE_PANGO16'] = '1'
if test_lib (optional, 'fontconfig', '2.2.0',
- 'Development files for fontconfig'):
+ 'Development files for fontconfig', 'fontconfig1'):
conf.env['DEFINES']['HAVE_FONTCONFIG'] = '1'
#this could happen only for compiling pango-*
if env['gui']:
test_lib (required, 'gtk+-2.0', '2.4.0',
- 'Development files for GTK+')
- if test_lib (required, 'pango', '1.6.0',
- 'Development files for pango'):
- conf.env['DEFINES']['HAVE_PANGO16'] = '1'
+ 'Development files for GTK+', 'gtk2.0')
- if conf.CheckCHeader ('pango/pangofc-fontmap.h'):
- conf.env['DEFINES']['HAVE_PANGO_PANGOFC_FONTMAP_H'] = '1'
if env['fast']:
# Using CCFLAGS = -I<system-dir> rather than CPPPATH = [
# <system-dir>] speeds up SCons
sys.stdout.write ('\n')
sys.stdout.write ('\n')
sys.stdout.write ('Examples:')
+ sys.stdout.write ('\n')
sys.stdout.write (' scons lily # build lilypond')
+ sys.stdout.write ('\n')
sys.stdout.write (' scons all # build everything')
+ sys.stdout.write ('\n')
sys.stdout.write (' scons doc # build documentation')
+ sys.stdout.write ('\n')
## TODO
## sys.stdout.write (' scons prefix=/usr DESTDIR=/tmp/pkg all install')
+ ## sys.stdout.write ('\n')
Exit (0)
elif not env['checksums']:
# When using timestams, config.hh is NEW. The next
LILYPONDPREFIX = os.path.join (run_prefix, 'share/lilypond/', version)
+if not os.path.exists (LILYPONDPREFIX):
+ os.makedirs (LILYPONDPREFIX)
+
+env.Command (LILYPONDPREFIX, ['#/SConstruct', '#/VERSION'], symlink_tree)
+env.Depends ('lily', LILYPONDPREFIX)
+
env.Append (ENV = {
- #'LILYPONDPREFIX' : os.path.join (run_prefix, 'share/lilypond/', version),
'LILYPONDPREFIX' : LILYPONDPREFIX,
- # ugh, can't use LILYPONDPREFIX here
- #'TEXMF' : '{' + os.path.join (run_prefix, 'share/lilypond/', version)\
- #+ ',' \
'TEXMF' : '{$LILYPONDPREFIX,'
+ os.popen ('kpsexpand \$TEXMF').read ()[:-1] + '}',
})
sharedir_package = sharedir_package,
sharedir_doc_package = sharedir_doc_package,
sharedir_package_version = sharedir_package_version,
+ libdir_package = libdir_package,
+ libdir_package_version = libdir_package_version,
# global build verbosity switch
__verbose = ' --verbose',
LILYPOND_BOOK = BUILD_LILYPOND_BOOK,
LILYPOND_BOOK_FORMAT = 'texi-html',
MAKEINFO_FLAGS = '--css-include=$srcdir/Documentation/texinfo.css',
- # should not be necessary
# PYTHONPATH = ['$absbuild/python/$out'],
TEXI2DVI_PAPERSIZE = '@afourpaper',
TEXI2DVI_FLAGS = [ '-t$TEXI2DVI_PAPERSIZE'],
PSPDF_FLAGS = ['-sPAPERSIZE=$DVIPS_PAPERSIZE'],
)
+env.Append (CCFLAGS = ['-pipe', '-Wno-pmf-conversions'])
if env['debugging']:
- env.Append (CCFLAGS = ['-g', '-pipe'])
+ env.Append (CCFLAGS = ['-g'])
if env['optimising']:
env.Append (CCFLAGS = '-O2')
- env.Append (CXXFLAGS = ['-DSTRING_UTILS_INLINED'])
if env['warnings']:
env.Append (CCFLAGS = ['-W', '-Wall'])
env.Append (CXXFLAGS = ['-Wconversion'])
# ugr,huh?
env.Append (LINKFLAGS = ['-Wl,--export-dynamic'])
+# FIXME: ParseConfig ignores -L flag?
+env.Append (LINKFLAGS = ['-L/usr/X11R6/lib'])
if env['verbose']:
env['__verbose'] = ' --verbose'
os.unlink (config_cache)
Exit (s)
+def symlink_tree ():
+ print "BOE"
+ raise urg
+
# Declare SConscript phonies
env.Alias ('minimal', config_cache)
-env.Alias ('mf-essential', config_cache)
-env.Alias ('minimal', ['lily', 'mf-essential'])
-env.Alias ('all', ['minimal', 'mf', '.'])
+if 0:
+ env.Alias ('mf-essential', config_cache)
+ env.Alias ('minimal', ['python', 'lily', 'mf-essential'])
+ env.Alias ('all', ['minimal', 'mf', '.'])
+
+else:
+ env.Alias ('minimal', ['python', 'lily', 'mf'])
+ env.Alias ('all', ['minimal', '.'])
+
+
# Do we want the doc/web separation?
env.Alias ('doc',
- ['Documentation',
+ ['minimal',
+ 'Documentation',
'Documentation/user',
'Documentation/topdocs',
'Documentation/bibliography',
LILYPONDPREFIX = LILYPONDPREFIX,
# FIXME: move to lily/SConscript?
- LIBPATH = [os.path.join (absbuild, 'flower', env['out']),
- os.path.join (absbuild, 'kpath-guile', env['out']),
- os.path.join (absbuild, 'ttftool', env['out']),],
+ LIBPATH = [os.path.join (absbuild, 'flower', env['out'])],
CPPPATH = [outdir, ],
- LILYPOND_PATH = ['.', '$srcdir/input',
+ LILYPOND_PATH = ['.',
+ '$srcdir/input',
'$srcdir/input/regression',
'$srcdir/input/test',
'$srcdir/input/tutorial',
'$absbuild/Documentation/user/$out'],
)
-def symlink_tree (target, source, env):
- def mkdirs (dir):
- def mkdir (dir):
- if not dir:
- os.chdir (os.sep)
- return
- if not os.path.isdir (dir):
- if os.path.exists (dir):
- os.unlink (dir)
- os.mkdir (dir)
- os.chdir (dir)
- map (mkdir, string.split (dir, os.sep))
- 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, '/'))
- if src.find ('@') > -1:
- frm = os.path.join ('../' * depth,
- string.replace (src, '@',
- env['out']))
- else:
- frm = os.path.join ('../' * depth, src,
- env['out'])
- if src[-1] == '/':
- frm = os.path.join (frm, os.path.basename (dst))
- if env['verbose']:
- print 'ln -s %s -> %s' % (frm, os.path.basename (dst))
- os.symlink (frm, os.path.basename (dst))
- shutil.rmtree (run_prefix)
- prefix = os.path.join (env['out'], 'usr')
- map (lambda x: symlink (x[0], os.path.join (prefix,
- x[1] % {'ver' : version})),
- # ^# := source dir
- # @ := out
- # /$ := add dst file_name
- (('python', 'lib/lilypond/python'),
- # ugh
- ('python', 'share/lilypond/%(ver)s/python'),
- ('lily/', 'bin/lilypond'),
- ('scripts/', 'bin/convert-ly'),
- ('scripts/', 'bin/lilypond-book'),
- ('scripts/', 'bin/ps2png'),
- ('mf', 'share/lilypond/%(ver)s/dvips/mf-out'),
- ('#ps', 'share/lilypond/%(ver)s/dvips/ps'),
- ('#ps', 'share/lilypond/%(ver)s/tex/music-drawing-routines.ps'),
- ('mf', 'share/lilypond/%(ver)s/otf'),
- ('mf', 'share/lilypond/%(ver)s/tfm'),
- ('tex', 'share/lilypond/%(ver)s/tex/enc'),
- ('#mf', 'share/lilypond/%(ver)s/fonts/mf'),
- ('mf', 'share/lilypond/%(ver)s/fonts/map'),
- ('mf', 'share/lilypond/%(ver)s/fonts/otf'),
- ('mf', 'share/lilypond/%(ver)s/fonts/tfm'),
- ('mf', 'share/lilypond/%(ver)s/fonts/type1'),
- ('#tex', 'share/lilypond/%(ver)s/tex/source'),
- ('tex', 'share/lilypond/%(ver)s/tex/tex-out'),
- ('mf', 'share/lilypond/%(ver)s/tex/mf-out'),
- ('#ly', 'share/lilypond/%(ver)s/ly'),
- ('#scm', 'share/lilypond/%(ver)s/scm'),
- ('#scripts', 'share/lilypond/%(ver)s/scripts'),
- ('#ps', 'share/lilypond/%(ver)s/ps'),
- ('po/@/nl.mo', 'share/locale/nl/LC_MESSAGES/lilypond.mo'),
- ('elisp', 'share/lilypond/%(ver)s/elisp')))
-
- print "FIXME: BARF BARF BARF"
- os.chdir (absbuild)
- out = env['out']
- ver = version
- prefix = os.path.join (env['out'], 'usr/share/lilypond/%(ver)s/fonts'
- % vars ())
- for ext in ('enc', 'map', 'otf', 'svg', 'tfm', 'pfa'):
- dir = os.path.join (absbuild, prefix, ext)
- os.system ('rm -f ' + dir)
- mkdirs (dir)
- os.chdir (dir)
- os.system ('ln -s ../../../../../../../mf/%(out)s/*.%(ext)s .'
- % vars ())
- os.chdir (srcdir)
-
-if env['debugging']:
- stamp = os.path.join (run_prefix, 'stamp')
- env.Command (stamp, ['#/SConstruct', '#/VERSION'],
- [symlink_tree, 'touch $TARGET'])
- env.Depends ('lily', stamp)
-
#### dist, tar
def plus (a, b):
a + b
return line[0] == '/' and line[-2] == '/'
def cvs_dirs (dir):
- ENTRIES = os.path.join (dir, 'CVS/Entries')
- if not os.path.exists (ENTRIES):
+ entries = os.path.join (dir, 'CVS/Entries')
+ if not os.path.exists (entries):
return []
- entries = open (ENTRIES).readlines ()
+ entries = open (entries).readlines ()
dir_entries = filter (cvs_entry_is_dir, entries)
dirs = map (lambda x: os.path.join (dir, x[2:x[2:].index ('/')+3]),
dir_entries)
return dirs + map (cvs_dirs, dirs)
def cvs_files (dir):
- ENTRIES = os.path.join (dir, 'CVS/Entries')
- entries = open (ENTRIES).readlines ()
+ entries = os.path.join (dir, 'CVS/Entries')
+ if not os.path.exists (entries):
+ return []
+ entries = open (entries).readlines ()
file_entries = filter (cvs_entry_is_file, entries)
files = map (lambda x: x[1:x[1:].index ('/')+1], file_entries)
return map (lambda x: os.path.join (dir, x), files)
and 'web' not in COMMAND_LINE_TARGETS\
and 'install' not in COMMAND_LINE_TARGETS\
and 'clean' not in COMMAND_LINE_TARGETS:
- subdirs = ['lily', 'lily/include',
- 'flower', 'flower/include',
- 'kpath-guile',
- 'ttftool',
+ subdirs = [ 'python',
+ 'lily',
+ 'flower',
'mf',
]