From de2793fd6c4b5a4a8625d3afcab00f46c17bf58f Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Mon, 12 Jul 2004 15:23:12 +0000 Subject: [PATCH] Updates. --- ChangeLog | 4 + Documentation/SConscript | 13 +- Documentation/user/SConscript | 1 + SConstruct | 381 +++++++++++++++++----------------- buildscripts/builder.py | 24 ++- flower/SConscript | 7 +- lily/SConscript | 3 + 7 files changed, 239 insertions(+), 194 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b4a503654..c3d55e2216 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2004-07-12 Jan Nieuwenhuizen + + * SConstruct: Updates. + 2004-07-11 Jan Nieuwenhuizen * input/mutopia-header.ly: Generate output. diff --git a/Documentation/SConscript b/Documentation/SConscript index bfecb74ac8..1fe44ad51c 100644 --- a/Documentation/SConscript +++ b/Documentation/SConscript @@ -11,6 +11,15 @@ sources = ['index.html.in', 'texinfo.css'] os.chdir (here) outdir = os.path.join (env['build'], reldir, env['out']) -#testing all_sources = ['SConscript',] + sources -x = env.Tar (env['tarball'], all_sources) + +# ballprefix = env['ballprefix'] + '/Documentation' +# ball = Builder (prefix = ballprefix + '/', action = 'ln $SOURCE $TARGET') +# et = env.Copy (BUILDERS = {'BALL': ball}) +# ballize = map (et.BALL, all_sources) +# tar = env.Tar (env['tarball'], +# map (lambda x: os.path.join (ballprefix, x), all_sources)) + +tar = env['baller'] ('Documentation', all_sources, env) +#env.Alias ('tar', tar) + diff --git a/Documentation/user/SConscript b/Documentation/user/SConscript index 29c6fa9d5f..4b444a508d 100644 --- a/Documentation/user/SConscript +++ b/Documentation/user/SConscript @@ -101,6 +101,7 @@ env.Alias ('doc', 'lilypond-internals/lilypond.html') env.Alias ('doc', 'lilypond-internals/lilypond-internals.html') all_sources = ['SConscript',] + sources + pngs + ballprefix = env['ballprefix'] + '/Documentation/user' ball = Builder (prefix = ballprefix + '/', action = 'ln $SOURCE $TARGET') et = env.Copy (BUILDERS = {'BALL': ball}) diff --git a/SConstruct b/SConstruct index 641d5ec648..c2ffacbab4 100644 --- a/SConstruct +++ b/SConstruct @@ -12,8 +12,8 @@ Usage: 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 config # reconfigure + scons / # builds all possible targets scons install @@ -37,16 +37,15 @@ prefix=os.path.join (os.environ['HOME'], 'usr', 'pkg', 'lilypond') # TODO: +# * TARBALL +# * add missing dirs + # * separate environments? # - compile environment checks headers and libraries # - doc environment checks doc stuff -# * - help for targets? -# - build symlink tree + # * commandline targets: -# - clean => -c -# - dist, tar => env.Tar -# * Documentation, scripts -# * env.Tar +# - clean => -c ? # * more fine-grained config.h -- move lilypondprefix to version.hh? # - config.h: changes after system upgrades, affects all files # - version.hh: prefix, version etc? affects few @@ -59,12 +58,11 @@ import string subdirs = ['flower', 'lily', 'mf', 'scm', 'ly', 'Documentation', 'Documentation/user', 'input'] -#subdirs = [] usage = r'''Usage: scons [KEY=VALUE].. [TARGET].. -where TARGET is lily|all|fonts|doc|tar|dist|release +where TARGET is config|lily|all|fonts|doc|tar|dist|release ''' env = Environment () @@ -73,12 +71,12 @@ env = Environment () if not COMMAND_LINE_TARGETS: env.Default ('lily') -# Target 'all' builds everything -#if 'all' in COMMAND_LINE_TARGETS: -# env.Default ( - +# All builds everything (all directories) env.Alias ('all', ['lily', 'mf', 'input', 'Documentation']) + +## FIXME: opts in function + # Put your favourite stuff in custom.py opts = Options ('custom.py', ARGUMENTS) #opts = Options (['config.cache', 'custom.py'], ARGUMENTS) @@ -109,7 +107,6 @@ env = Environment (options = opts) opts.Update (env) #opts.Save ('config.cache', env) - env.CacheDir (os.path.join (env['build'], '=build-cache')) #ugh @@ -144,143 +141,7 @@ if env['warnings']: env.Append (CXXFLAGS = '-Wall') env.Append (CXXFLAGS = '-Wconversion') -env['MFMODE'] = 'ljfour' - - -conf = Configure (env) - - -vre = re.compile ('^.*[^-.0-9]([0-9][0-9]*\.[0-9][.0-9]*).*$', re.DOTALL) -def get_version (program): - command = '(%(program)s --version || %(program)s -V) 2>&1' % vars () - pipe = os.popen (command) - output = pipe.read () - if pipe.close (): - return None - v = re.sub (vre, '\\1', output) - return string.split (v, '.') - -def assert_version (lst, program, minimal, description, package): - global required - sys.stdout.write ('Checking %s version... ' % program) - actual = get_version (program) - if not actual: - print 'not found' - lst.append ((description, package, minimal, program, - 'not installed')) - return - sys.stdout.write (string.join (actual, '.')) - sys.stdout.write ('\n') - if actual < string.split (minimal, '.'): - lst.append ((description, package, minimal, program, - string.join (actual, '.'))) - -required = [] -assert_version (required, 'gcc', '2.8', 'GNU C compiler', 'gcc') -assert_version (required, 'g++', '3.0.5', 'GNU C++ compiler', 'g++') -assert_version (required, 'python', '2.1', 'Python (www.python.org)', 'python') -assert_version (required, 'guile-config', '1.6', 'GUILE development', - 'libguile-dev or guile-devel') -# Do not use bison 1.50 and 1.75. -assert_version (required, 'bison', '1.25', 'Bison -- parser generator', - 'bison') -assert_version (required, 'flex', '0.0', 'Flex -- lexer generator', 'flex') - - -optional = [] -assert_version (optional, 'makeinfo', '4.7', 'Makeinfo tool', 'texinfo') -assert_version (optional, 'guile', '1.6', 'GUILE scheme', - 'libguile-dev or guile-devel') -assert_version (optional, 'mftrace', '1.0.27', 'Metafont tracing Type1', - 'mftrace') -assert_version (optional, 'perl', '4.0', - 'Perl practical efficient readonly language', 'perl') -#assert_version (optional, 'foo', '2.0', 'Foomatic tester', 'bar') - - -defines = { - 'DIRSEP' : "'/'", - 'PATHSEP' : "':'", - 'TOPLEVEL_VERSION' : '"' + env['version'] + '"', - 'PACKAGE': '"' + package.name + '"', - 'DATADIR' : '"' + env['sharedir'] + '"', - 'LILYPOND_DATADIR' : '"' + env['sharedir_package'] + '"', - 'LOCAL_LILYPOND_DATADIR' : '"' + env['sharedir_package_version'] + '"', - 'LOCALEDIR' : '"' + env['localedir'] + '"', -} - - -command = r"""python -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'""" #" -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' - -ccheaders = ('sstream',) -for i in ccheaders: - if conf.CheckCXXHeader (i): - key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i)) - defines[key] = '1' - -functions = ('gettext', 'isinf', 'memmem', 'snprintf', 'vsnprintf') -for i in functions: - if 0 or conf.CheckFunc (i): - key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i)) - defines[key] = '1' - -key = 'HAVE_FLEXLEXER_YY_CURRENT_BUFFER' - -sys.stdout.write('Checking for yy_current_buffer ... ') -sys.stdout.flush() -res = conf.TryCompile ("""using namespace std; -#include -class yy_flex_lexer: public yyFlexLexer -{ - public: - yy_flex_lexer () - { - yy_current_buffer = 0; - } -};""", '.cc') -if res: - defines[key] = '1' - sys.stdout.write('yes\n') -else: - sys.stdout.write('no\n') - -if conf.CheckLib ('dl'): - pass - -if conf.CheckLib ('kpathsea'): - defines['KPATHSEA'] = '1' - -# huh? -if conf.CheckLib ('kpathsea', 'kpse_find_file'): - defines['HAVE_KPSE_FIND_FILE'] = '1' -if conf.CheckLib ('kpathsea', 'kpse_find_tfm'): - defines['HAVE_KPSE_FIND_TFM'] = '1' - -#this could happen after flower... -env.ParseConfig ('guile-config compile') - -#this could happen only for compiling pango-* -if env['gui']: - env.ParseConfig ('pkg-config --cflags --libs gtk+-2.0') - env.ParseConfig ('pkg-config --cflags --libs pango') - if conf.CheckCHeader ('pango/pangofc-fontmap.h'): - defines['HAVE_PANGO_PANGOFC_FONTMAP_H'] = '1' - - if conf.CheckLib ('pango-1.0', - 'pango_fc_font_map_add_decoder_find_func'): - defines['HAVE_PANGO_CVS'] = '1' - defines['HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC'] = '1' - -env = conf.Finish () ##Import ('env') here = os.getcwd () @@ -296,22 +157,184 @@ build = env['build'] out = env['out'] -if not os.path.exists (outdir): - os.mkdir (outdir) - def list_sort (lst): sorted = lst sorted.sort () return sorted - -config = open (os.path.join (outdir, 'config.h'), 'w') -for i in list_sort (defines.keys ()): - config.write ('#define %s %s\n' % (i, defines[i])) -config.close () -os.system (sys.executable \ - + ' ./stepmake/bin/make-version.py VERSION > '\ - + os.path.join (outdir, 'version.hh')) +env['MFMODE'] = 'ljfour' +config_h = os.path.join (outdir, 'config.h') +env.Alias ('config', config_h) + +def configure (env): + conf = Configure (env) + + vre = re.compile ('^.*[^-.0-9]([0-9][0-9]*\.[0-9][.0-9]*).*$', re.DOTALL) + def get_version (program): + command = '(%(program)s --version || %(program)s -V) 2>&1' % vars () + pipe = os.popen (command) + output = pipe.read () + if pipe.close (): + return None + v = re.sub (vre, '\\1', output) + return string.split (v, '.') + + def assert_version (lst, program, minimal, description, package): + global required + sys.stdout.write ('Checking %s version... ' % program) + actual = get_version (program) + if not actual: + print 'not found' + lst.append ((description, package, minimal, program, + 'not installed')) + return + sys.stdout.write (string.join (actual, '.')) + sys.stdout.write ('\n') + if actual < string.split (minimal, '.'): + lst.append ((description, package, minimal, program, + string.join (actual, '.'))) + + required = [] + assert_version (required, 'gcc', '2.8', 'GNU C compiler', 'gcc') + assert_version (required, 'g++', '3.0.5', 'GNU C++ compiler', 'g++') + assert_version (required, 'python', '2.1', 'Python (www.python.org)', 'python') + assert_version (required, 'guile-config', '1.6', 'GUILE development', + 'libguile-dev or guile-devel') + # Do not use bison 1.50 and 1.75. + assert_version (required, 'bison', '1.25', 'Bison -- parser generator', + 'bison') + assert_version (required, 'flex', '0.0', 'Flex -- lexer generator', 'flex') + + + optional = [] + assert_version (optional, 'makeinfo', '4.7', 'Makeinfo tool', 'texinfo') + assert_version (optional, 'guile', '1.6', 'GUILE scheme', + 'libguile-dev or guile-devel') + assert_version (optional, 'mftrace', '1.0.27', 'Metafont tracing Type1', + 'mftrace') + assert_version (optional, 'perl', '4.0', + 'Perl practical efficient readonly language', 'perl') + #assert_version (optional, 'foo', '2.0', 'Foomatic tester', 'bar') + + + defines = { + 'DIRSEP' : "'/'", + 'PATHSEP' : "':'", + 'TOPLEVEL_VERSION' : '"' + env['version'] + '"', + 'PACKAGE': '"' + package.name + '"', + 'DATADIR' : '"' + env['sharedir'] + '"', + 'LILYPOND_DATADIR' : '"' + env['sharedir_package'] + '"', + 'LOCAL_LILYPOND_DATADIR' : '"' + env['sharedir_package_version'] + '"', + 'LOCALEDIR' : '"' + env['localedir'] + '"', + } + + + command = r"""python -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'""" #" + 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' + + ccheaders = ('sstream',) + for i in ccheaders: + if conf.CheckCXXHeader (i): + key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i)) + defines[key] = '1' + + functions = ('gettext', 'isinf', 'memmem', 'snprintf', 'vsnprintf') + for i in functions: + if 0 or conf.CheckFunc (i): + key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i)) + defines[key] = '1' + + key = 'HAVE_FLEXLEXER_YY_CURRENT_BUFFER' + + sys.stdout.write('Checking for yy_current_buffer ... ') + sys.stdout.flush() + res = conf.TryCompile ("""using namespace std; + #include + class yy_flex_lexer: public yyFlexLexer + { + public: + yy_flex_lexer () + { + yy_current_buffer = 0; + } + };""", '.cc') + if res: + defines[key] = '1' + sys.stdout.write('yes\n') + else: + sys.stdout.write('no\n') + + + if conf.CheckLib ('dl'): + pass + + if conf.CheckLib ('kpathsea'): + defines['KPATHSEA'] = '1' + + # huh? + if conf.CheckLib ('kpathsea', 'kpse_find_file'): + defines['HAVE_KPSE_FIND_FILE'] = '1' + if conf.CheckLib ('kpathsea', 'kpse_find_tfm'): + defines['HAVE_KPSE_FIND_TFM'] = '1' + + #this could happen after flower... + env.ParseConfig ('guile-config compile') + + #this could happen only for compiling pango-* + if env['gui']: + env.ParseConfig ('pkg-config --cflags --libs gtk+-2.0') + env.ParseConfig ('pkg-config --cflags --libs pango') + if conf.CheckCHeader ('pango/pangofc-fontmap.h'): + defines['HAVE_PANGO_PANGOFC_FONTMAP_H'] = '1' + + if conf.CheckLib ('pango-1.0', + 'pango_fc_font_map_add_decoder_find_func'): + defines['HAVE_PANGO_CVS'] = '1' + defines['HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC'] = '1' + + # ugh - needed at all? make Builder/Command for config.h! + if not os.path.exists (outdir): + os.mkdir (outdir) + + config = open (config_h, 'w') + for i in list_sort (defines.keys ()): + config.write ('#define %s %s\n' % (i, defines[i])) + config.close () + + + os.system (sys.executable \ + + ' ./stepmake/bin/make-version.py VERSION > '\ + + os.path.join (outdir, 'version.hh')) + + if required: + print + print '********************************' + print 'Please install required packages' + for i in required: + print '%s: %s-%s or newer (found: %s %s)' % i + sys.exit (1) + + if optional: + print + print '*************************************' + print 'Consider installing optional packages' + for i in optional: + print '%s: %s-%s or newer (found: %s %s)' % i + + return conf.Finish () + +# Hmm. Must configure when building lily, to get compiler and linker +# flags set-up. +if not os.path.exists (config_h) or 'config' in COMMAND_LINE_TARGETS\ + or 'lily' in BUILD_TARGETS or 'all' in BUILD_TARGETS: + env = configure (env) if os.path.exists ('parser'): env.Append (LIBPATH = ['#/flower', '#/lily', '#/parser', '#/gui',], @@ -320,21 +343,6 @@ else: env.Append (LIBPATH = ['#/flower/' + out,], CPPPATH = [outdir, '#',]) -if required: - print - print '********************************' - print 'Please install required packages' - for i in required: - print '%s: %s-%s or newer (found: %s %s)' % i - sys.exit (1) - -if optional: - print - print '*************************************' - print 'Consider installing optional packages' - for i in optional: - print '%s: %s-%s or newer (found: %s %s)' % i - Export ('env') #ugr @@ -372,13 +380,14 @@ env['TEXINFO_PAPERSIZE_OPTION'] = '-t @afourpaper' tarbase = package.name + '-' + env['version'] tarname = tarbase + '.tar.gz' -tarball = os.path.join (outdir, tarname) -env['tarball'] = tarball if 0: # broken :-( ballprefix = os.path.join (outdir, tarbase) + tarball = os.path.join (outdir, tarname) else: ballprefix = os.path.join (os.getcwd (), tarbase) + tarball = os.path.join (os.getcwd (), tarname) +env['tarball'] = tarball env['ballprefix'] = ballprefix SConscript ('buildscripts/builder.py') @@ -459,12 +468,13 @@ if env['debugging']: if not os.path.exists (prefix): symlink_tree (prefix) -ball = Builder (prefix = ballprefix + '/', action = 'ln $SOURCE $TARGET') -et = env.Copy (BUILDERS = {'BALL': ball}) -ballize = map (et.BALL, all_sources) -tar = env.Tar (tarball, map (lambda x: os.path.join (env['ballprefix'], x), - all_sources)) -env.Alias ('tar', env['tarball']) +#ball = Builder (prefix = ballprefix + '/', action = 'ln $SOURCE $TARGET') +#et = env.Copy (BUILDERS = {'BALL': ball}) +#ballize = map (et.BALL, all_sources) +#tar = env.Tar (tarball, map (lambda x: os.path.join (env['ballprefix'], x), +# all_sources)) +tar = env['baller'] ('', all_sources, env) +env.Alias ('tar', tar) distball = os.path.join (package.release_dir, tarname) env.Command (distball, tarball, @@ -476,4 +486,3 @@ patch = env.PATCH (patchfile, tarball) env.Depends (patchfile, distball) env.Alias ('release', patch) - diff --git a/buildscripts/builder.py b/buildscripts/builder.py index 0511f4f3a5..cee43ad396 100644 --- a/buildscripts/builder.py +++ b/buildscripts/builder.py @@ -1,6 +1,7 @@ # -*-python-*- import os +import re import string Import ('env') @@ -199,6 +200,23 @@ a = ('%(PYTHON)s %(DIFF_PY)s%(verbose)s'\ patch = Builder (action = a, suffix = '.diff', src_suffix = '.tar.gz') env.Append (BUILDERS = {'PATCH': patch}) -#ball = Builder (prefix = env['ballprefix'] + '/', -#action = 'ln $SOURCE $TARGET') -#env.Append (BUILDERS = {'BALL': ball}) +# ughr +def ln (target, source, env): + base = os.path.splitext (source[0].name)[0] + suf = os.path.splitext (str (source[0]))[1] + if suf: + target = [target[0].path + suf,] + source = [re.sub ('/' + env['out'] + '/', '/', base + suf)] + return (target, source) + +def baller (dir_name, sources, env): + ballprefix = os.path.join (env['ballprefix'], dir_name) + ball = Builder (prefix = ballprefix + '/', + action = 'ln $SOURCE $TARGET', + emitter = ln) + et = env.Copy (BUILDERS = {'BALL': ball}) + ballize = map (et.BALL, sources) + return env.Tar (env['tarball'], + map (lambda x: os.path.join (ballprefix, x), sources)) + +env['baller'] = baller diff --git a/flower/SConscript b/flower/SConscript index f88a2a11da..56dd850762 100644 --- a/flower/SConscript +++ b/flower/SConscript @@ -21,10 +21,11 @@ if not env['static'] or env['shared']: e.SharedLibrary (name, sources) all_sources = ['SConscript',] + sources + includes +all_sources = ['SConscript', 'GNUmakefile'] ballprefix = env['ballprefix'] + '/flower' ball = Builder (prefix = ballprefix + '/', action = 'ln $SOURCE $TARGET') -#et = env.Copy (BUILDERS = {'BALL': ball}) -et = env.Copy () -#ballize = map (et.BALL, all_sources) +et = env.Copy (BUILDERS = {'BALL': ball}) +#et = env.Copy () +ballize = map (et.BALL, all_sources) tar = env.Tar (env['tarball'], map (lambda x: os.path.join (ballprefix, x), all_sources)) diff --git a/lily/SConscript b/lily/SConscript index d64d17ad71..5e29d15bc0 100644 --- a/lily/SConscript +++ b/lily/SConscript @@ -49,3 +49,6 @@ all_sources = ['SConscript',] + sources + includes # ballize = map (et.BALL, all_sources) # tar = env.Tar (env['tarball'], # map (lambda x: os.path.join (ballprefix, x), all_sources)) + +tar = env['baller'] ('lily', all_sources, env) +#env.Alias ('tar', tar) -- 2.39.2