From ffc1f4186e3727d63271da11aa250b3523c35923 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Tue, 13 Jul 2004 16:03:32 +0000 Subject: [PATCH] * SConstruct: Configure only pristine build tree or on user request. Cleanups. * Documentation/topdocs/SConscript: New file. --- ChangeLog | 7 + Documentation/SConscript | 2 +- Documentation/topdocs/SConscript | 10 + Documentation/user/SConscript | 3 +- SConstruct | 405 +++++++++++++++++-------------- buildscripts/SConscript | 2 +- buildscripts/builder.py | 51 ++-- input/SConscript | 14 +- lily/SConscript | 4 +- scripts/SConscript | 5 +- 10 files changed, 290 insertions(+), 213 deletions(-) create mode 100644 Documentation/topdocs/SConscript diff --git a/ChangeLog b/ChangeLog index 658f84ecce..4fbe797a27 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2004-07-13 Jan Nieuwenhuizen + + * SConstruct: Configure only pristine build tree or on user + request. Cleanups. + + * Documentation/topdocs/SConscript: New file. + 2004-07-12 Han-Wen Nienhuys * lily/staff-symbol-referencer.cc (on_staffline): bugfix diff --git a/Documentation/SConscript b/Documentation/SConscript index 6b27c41580..50b43fbaca 100644 --- a/Documentation/SConscript +++ b/Documentation/SConscript @@ -1,5 +1,5 @@ # -*-python-*- Import ('env') -sources = ['index.html.in', 'texinfo.css'] +env.AT_COPY ('index.html') diff --git a/Documentation/topdocs/SConscript b/Documentation/topdocs/SConscript new file mode 100644 index 0000000000..ee3bc664bd --- /dev/null +++ b/Documentation/topdocs/SConscript @@ -0,0 +1,10 @@ +# -*-python-*- + +import os + +Import ('env') +telys = env['base_glob'] (env, '*.tely') +texis = env['base_glob'] (env, '*.texi') + map (env.TELY, telys) + +htmls = map (env.HTML, texis) +env.Alias ('doc', htmls) diff --git a/Documentation/user/SConscript b/Documentation/user/SConscript index fd2359b523..2e58a0e6fe 100644 --- a/Documentation/user/SConscript +++ b/Documentation/user/SConscript @@ -13,7 +13,6 @@ userbuild = os.path.join (env['absbuild'], 'Documentation/user', env['out']) env.Depends ('lilypond.texi', env['LILYPOND_BIN']) env.Depends ('lilypond.texi', 'lilypond-internals.texi') -env.Depends ('doc', mfbuild) png_stems = map (lambda x: os.path.splitext (x)[0], pngs) epss = map (env.Png2eps, png_stems) @@ -26,7 +25,7 @@ env.Command ('lilypond-internals.texi', env['LILYPOND_BIN'], $lydir/generate-documentation') doc_stems = map (lambda x: os.path.splitext (x)[0], sources) -texis = map (env.Tely2texi, doc_stems) +texis = map (env.TELY, doc_stems) dvis = map (env.Texi2dvi, doc_stems) pss = map (env.PostScript, map (lambda x: x + '.dvi', doc_stems)) pdfs = map (env.Dvi2pdf, doc_stems) diff --git a/SConstruct b/SConstruct index 8e92bd5eea..37cf8b87cc 100644 --- a/SConstruct +++ b/SConstruct @@ -63,6 +63,7 @@ import string # to be done, building or installing # TODO: Documentation/*, input/*/*, vim, po # rename Documentation/* to ./doc? + subdirs = ['flower', 'lily', 'mf', 'scm', 'ly', 'Documentation', 'Documentation/user', 'input', 'scripts', 'elisp', 'buildscripts', 'cygwin', 'debian'] @@ -73,27 +74,22 @@ scons [KEY=VALUE].. [TARGET].. where TARGET is config|lily|all|fonts|doc|tar|dist|release ''' -env = Environment () - -# Without target arguments, build lily only -if not COMMAND_LINE_TARGETS: - env.Default ('lily') -# All builds everything (all directories) -env.Alias ('all', ['lily', 'mf', 'input', 'Documentation']) - -#? -env.Depends ('Documentation', ['lily', 'mf']) -env.Depends ('input', ['lily', 'mf']) -env.Depends ('doc', ['lily', 'mf']) -env.Depends ('doc', 'mf') -env.Depends ('input', ['lily', 'mf']) - - -## FIXME: opts in function +config_cache = 'config.cache' + +config_vars = ( + 'BASH', + 'CFLAGS', + 'CPPPATH', + 'CXXFLAGS', + 'DEFINES', + 'LIBS', + 'METAFONT' + 'PYTHON', + ) # Put your favourite stuff in custom.py -opts = Options (['config.cache', 'custom.py'], 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', '.') @@ -114,30 +110,68 @@ opts.AddOptions ( 0), ) -Help (usage + opts.GenerateHelpText (env)) - -env = Environment (options = opts) - -opts.Update (env) -opts.Save ('config.cache', env) - -env.CacheDir (os.path.join (env['build'], '=build-cache')) +srcdir = Dir ('.').srcnode ().abspath #ugh -sys.path.append (os.path.join ('.', 'stepmake', 'bin')) +sys.path.append (os.path.join (srcdir, 'stepmake', 'bin')) import packagepython -package = packagepython.Package ('.') +package = packagepython.Package (srcdir) + + +prefix = '/usr/local' + +version = packagepython.version_tuple_to_str (package.version) +bindir = os.path.join (prefix, 'bin') +sharedir = os.path.join (prefix, 'share') +libdir = os.path.join (prefix, 'lib') +localedir = os.path.join (sharedir, 'locale') +sharedir_package = os.path.join (sharedir, package.name) +sharedir_package_version = os.path.join (sharedir_package, version) +lilypondprefix = sharedir_package_version + +ENV = { 'PATH' : os.environ['PATH'] } +for key in ['LD_LIBRARY_PATH', 'GUILE_LOAD_PATH', 'PKG_CONFIG_PATH']: + if os.environ.has_key(key): + ENV[key] = os.environ[key] + +env = Environment ( + ENV = ENV, + + srcdir = srcdir, + + bindir = bindir, + sharedir = sharedir, + TOPLEVEL_VERSION = version, + lilypond_datadir = sharedir_package, + local_lilypond_datadir = sharedir_package_version, + lilypondprefix = lilypondprefix, + sharedir_package = sharedir_package, + sharedir_package_version = sharedir_package_version, + + + SH = '/bin/sh', + BASH = '/bin/bash', + PYTHON = '/usr/bin/python', + MAKEINFO = 'LANG= makeinfo', + + LILYPOND_BOOK = srcdir + '/scripts/lilypond-book.py', + LILYPOND_PY = srcdir + '/scripts/lilypond.py', + + ABC2LY_PY = srcdir + '/scripts/abc2ly.py', + MF_TO_TABLE_PY = srcdir + '/buildscripts/mf-to-table.py', + LILYPOND_BOOK_FLAGS = '', + LILYPOND_BOOK_FORMAT = 'texi-html', + + TEXINFO_PAPERSIZE_OPTION = '-t @afourpaper', + MFMODE = 'ljfour' + ) -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['localedir'] = os.path.join (env['sharedir'], 'locale') -env['sharedir_package'] = os.path.join (env['sharedir'], package.name) -env['sharedir_package_version'] = os.path.join (env['sharedir_package'], - env['version']) -env['lilypondprefix'] = os.path.join (env['sharedir_package_version']) +Help (usage + opts.GenerateHelpText (env)) + +map (lambda x: opts.AddOptions ((x,)), config_vars) +opts.Update (env) +env.CacheDir (os.path.join (env['build'], '=build-cache')) if env['debugging']: env.Append (CFLAGS = '-g') @@ -156,15 +190,29 @@ if env['warnings']: if env['verbose']: env['__verbose'] = '--verbose' -build = env['build'] -out = env['out'] +env['srcdir'] = Dir ('.').srcnode ().abspath -outdir = Dir ('.').path -abs_srcdir = Dir ('.').srcnode ().abspath -srcdir = abs_srcdir -abs_outdir = Dir ('.').abspath +outdir = os.path.join (Dir (env['build']).abspath, env['out']) +config_h = os.path.join (outdir, 'config.h') +version_h = os.path.join (outdir, 'version.hh') +config_h = os.path.join (outdir, 'config.h') +env.Alias ('config', config_h) -env['srcdir'] = srcdir + +## Explicit dependencies + +# Without target arguments, build lily only +if not COMMAND_LINE_TARGETS: + env.Default ('lily') +env.Alias ('all', '.') +env.Alias ('doc', + 'Documentation', + 'Documentation/user', + 'Documentation/topdocs') + +env.Depends ('doc', ['lily', 'mf']) +env.Depends ('input', ['lily', 'mf']) +env.Depends ('doc', ['lily', 'mf']) def list_sort (lst): @@ -172,13 +220,7 @@ def list_sort (lst): sorted.sort () return sorted -env['MFMODE'] = 'ljfour' -config_h = os.path.join (outdir, 'config.h') -env.Alias ('config', config_h) - -def configure (env): - conf = Configure (env) - +def configure (target, source, 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 () @@ -189,8 +231,7 @@ def configure (env): v = re.sub (vre, '\\1', output) return string.split (v, '.') - def assert_version (lst, program, minimal, description, package): - global required + def test_program (lst, program, minimal, description, package): sys.stdout.write ('Checking %s version... ' % program) actual = get_version (program) if not actual: @@ -205,39 +246,55 @@ def configure (env): 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', + test_program (required, 'gcc', '2.8', 'GNU C compiler', 'gcc') + test_program (required, 'g++', '3.0.5', 'GNU C++ compiler', 'g++') + test_program (required, 'python', '2.1', 'Python (www.python.org)', 'python') + test_program (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', + test_program (required, 'bison', '1.25', 'Bison -- parser generator', 'bison') - assert_version (required, 'flex', '0.0', 'Flex -- lexer generator', 'flex') + test_program (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', + test_program (optional, 'makeinfo', '4.7', 'Makeinfo tool', 'texinfo') + test_program (optional, 'guile', '1.6', 'GUILE scheme', 'libguile-dev or guile-devel') - assert_version (optional, 'mftrace', '1.0.27', 'Metafont tracing Type1', + test_program (optional, 'mftrace', '1.0.27', 'Metafont tracing Type1', 'mftrace') - assert_version (optional, 'perl', '4.0', + test_program (optional, 'perl', '4.0', 'Perl practical efficient readonly language', 'perl') - #assert_version (optional, 'foo', '2.0', 'Foomatic tester', 'bar') - + #test_program (optional, 'foo', '2.0', 'Foomatic tester', 'bar') + + def CheckYYCurrentBuffer (context): + context.Message ('Checking for yy_current_buffer... ') + ret = conf.TryCompile ("""using namespace std; + #include + class yy_flex_lexer: public yyFlexLexer + { + public: + yy_flex_lexer () + { + yy_current_buffer = 0; + } + };""", '.cc') + context.Result (ret) + + conf = Configure (env, custom_tests = { 'CheckYYCurrentBuffer' + : CheckYYCurrentBuffer }) defines = { 'DIRSEP' : "'/'", 'PATHSEP' : "':'", - 'TOPLEVEL_VERSION' : '"' + env['version'] + '"', + 'TOPLEVEL_VERSION' : '"' + version + '"', 'PACKAGE': '"' + package.name + '"', - 'DATADIR' : '"' + env['sharedir'] + '"', - 'LILYPOND_DATADIR' : '"' + env['sharedir_package'] + '"', - 'LOCAL_LILYPOND_DATADIR' : '"' + env['sharedir_package_version'] + '"', - 'LOCALEDIR' : '"' + env['localedir'] + '"', + 'DATADIR' : '"' + sharedir + '"', + 'LILYPOND_DATADIR' : '"' + sharedir_package + '"', + 'LOCAL_LILYPOND_DATADIR' : '"' + sharedir_package_version + '"', + 'LOCALEDIR' : '"' + localedir + '"', } - + conf.env.Append (DEFINES = defines) command = r"""python -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'""" #" PYTHON_INCLUDE = os.popen (command).read () @@ -247,52 +304,34 @@ def configure (env): for i in headers: if conf.CheckCHeader (i): key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i)) - defines[key] = '1' + conf.env['DEFINES'][key] = 1 ccheaders = ('sstream',) for i in ccheaders: if conf.CheckCXXHeader (i): key = re.sub ('[./]', '_', 'HAVE_' + string.upper (i)) - defines[key] = '1' + conf.env['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') + conf.env['DEFINES'][key] = 1 + if conf.CheckYYCurrentBuffer (): + conf.env['DEFINES']['HAVE_FLEXLEXER_YY_CURRENT_BUFFER'] = 1 if conf.CheckLib ('dl'): pass if conf.CheckLib ('kpathsea'): - defines['KPATHSEA'] = '1' + conf.env['DEFINES']['KPATHSEA'] = 1 # huh? if conf.CheckLib ('kpathsea', 'kpse_find_file'): - defines['HAVE_KPSE_FIND_FILE'] = '1' + conf.env['DEFINES']['HAVE_KPSE_FIND_FILE'] = '1' if conf.CheckLib ('kpathsea', 'kpse_find_tfm'): - defines['HAVE_KPSE_FIND_TFM'] = '1' + conf.env['DEFINES']['HAVE_KPSE_FIND_TFM'] = '1' #this could happen after flower... env.ParseConfig ('guile-config compile') @@ -302,25 +341,12 @@ def configure (env): 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' + conf.env['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' - - # use Command - 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')) + conf.env['DEFINES']['HAVE_PANGO_CVS'] = '1' + conf.env['DEFINES']['HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC'] = '1' if required: print @@ -339,63 +365,57 @@ def configure (env): return conf.Finish () -# Hmm. Must configure when building lily, to get compiler and linker -# flags set-up. -# FIXME -if 1 or not os.path.exists (config_h) or 'config' in COMMAND_LINE_TARGETS: - env = configure (env) - - -#ugr -if build == '.': - absbuild = os.getcwd () -else: - absbuild = build -env['absbuild'] = absbuild - -env.Append (LIBPATH = [os.path.join (absbuild, 'flower', out),], - CPPPATH = [outdir, '#',]) +if os.path.exists (config_cache) and 'config' in COMMAND_LINE_TARGETS: + os.unlink (config_cache) +# WTF? +# scons: *** Calling Configure from Builders is not supported. +# env.Command (config_cache, None, configure) +if not os.path.exists (config_cache): + env = configure (None, None, env) + map (lambda x: opts.AddOptions ((x,)), config_vars) + opts.Save (config_cache, env) + +def config_header (target, source, env): + config = open (str (target[0]), 'w') + for i in list_sort (env['DEFINES'].keys ()): + config.write ('#define %s %s\n' % (i, env['DEFINES'][i])) + config.close () +env.Command (config_h, config_cache, config_header) + +env.Command (version_h, '#/VERSION', + '$PYTHON ./stepmake/bin/make-version.py VERSION > $TARGET') + +absbuild = Dir (env['build']).abspath +run_prefix = os.path.join (absbuild, os.path.join (env['out'], 'usr')) + +env.Append ( + absbuild = absbuild, + run_prefix = run_prefix, + LILYPONDPREFIX = os.path.join (run_prefix, 'share/lilypond'), + + LIBPATH = [os.path.join (absbuild, 'flower', env['out']),], + CPPPATH = [outdir, '#',], + LILYPOND_BIN = os.path.join (absbuild, 'lily', env['out'], + 'lilypond-bin'), + LILYPOND_BOOK_PATH = ['.', '#/input', '#/input/regression', + '#/input/test', '#/input/tutorial', + os.path.join (absbuild, 'mf', env['out']), + '#/Documentation/user', + os.path.join (absbuild, 'Documentation', + env['out']), + os.path.join (absbuild, 'Documentation/user', + env['out']), + ], + MAKEINFO_PATH = ['.', '#/Documentation/user', + os.path.join (absbuild, 'Documentation/user', + env['out'])], + ) Export ('env') - -env['MAKEINFO'] = 'LANG= makeinfo' -env['PYTHON'] = 'python' -env['LILYPOND_BIN'] = os.path.join (absbuild, 'lily', out, 'lilypond-bin') -env['LILYPONDPREFIX'] = os.path.join (absbuild, out, '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/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' - SConscript ('buildscripts/builder.py') -for d in subdirs: - if os.path.exists (os.path.join (d, 'SConscript')): - b = os.path.join (build, d, out) - # Support clean sourcetree build (--srcdir build) - # and ./out build. - if (build and build != '.') or (out and out != '.'): - env.BuildDir (b, d, duplicate=0) - SConscript (os.path.join (b, 'SConscript')) -# as a builder? -def symlink_tree (prefix): +def symlink_tree (target, source, env): def mkdirs (dir): def mkdir (dir): if not dir: @@ -417,6 +437,7 @@ def symlink_tree (prefix): depth = len (string.split (dir, '/')) frm = os.path.join ('../' * depth, src, out) os.symlink (frm, os.path.basename (dst)) + prefix = os.path.join (env['out'], 'usr') map (lambda x: symlink (x[0], os.path.join (prefix, x[1])), (('python', 'lib/lilypond/python'), # UGHR, lilypond.py uses lilypond-bin from PATH @@ -434,25 +455,46 @@ def symlink_tree (prefix): os.chdir (srcdir) if env['debugging']: - prefix = os.path.join (out, 'usr') - if not os.path.exists (os.path.join (absbuild, prefix)): - symlink_tree (prefix) + print 'run_prefix:' + run_prefix + env.Command (os.path.join (run_prefix, 'stamp'), 'VERSION', + [symlink_tree, 'touch $TARGET']) #### dist, tar -def cvs_files (dir): - entries = open (os.path.join (dir, 'CVS/Entries')).readlines () - files = filter (lambda x: x[0] != 'D', entries) - return map (lambda x: os.path.join (dir, x[1:x[1:].index ('/')+1]), - files) +def plus (a, b): + a + b + +def cvs_entry_is_dir (line): + return line[0] == 'D' and line[-2] == '/' + +def cvs_entry_is_file (line): + return line[0] == '/' and line[-2] == '/' +def cvs_dirs (dir): + ENTRIES = os.path.join (dir, 'CVS/Entries') + if not os.path.exists (ENTRIES): + return [] + 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 () + 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) + +#subdirs = reduce (lambda x, y: x + y, cvs_dirs ('.')) +#print `subdirs` readme_files = ['AUTHORS', 'README', 'INSTALL', 'NEWS'] -foo = map (lambda x: env.Texi2txt (x + '.txt', - os.path.join ('Documentation/topdocs', - x)), +foo = map (lambda x: env.TXT (x + '.txt', + os.path.join ('Documentation/topdocs', x)), readme_files) txt_files = map (lambda x: x + '.txt', readme_files) src_files = reduce (lambda x, y: x + y, map (cvs_files, subdirs)) -tar_base = package.name + '-' + env['version'] +tar_base = package.name + '-' + version tar_name = tar_base + '.tar.gz' ball_prefix = os.path.join (outdir, tar_base) tar_ball = os.path.join (outdir, tar_name) @@ -476,3 +518,12 @@ patch = env.PATCH (patch_name, tar_ball) env.Depends (patch_name, dist_ball) env.Alias ('release', patch) + +for d in subdirs: + if os.path.exists (os.path.join (d, 'SConscript')): + b = os.path.join (env['build'], d, env['out']) + # Support clean sourcetree build (--srcdir build) + # and ./out build. + if os.path.abspath (b) != os.path.abspath (d): + env.BuildDir (b, d, duplicate = 0) + SConscript (os.path.join (b, 'SConscript')) diff --git a/buildscripts/SConscript b/buildscripts/SConscript index d669408648..98d254f4b1 100644 --- a/buildscripts/SConscript +++ b/buildscripts/SConscript @@ -2,4 +2,4 @@ Import ('env') sources = ['lilypond-profile.sh', 'lilypond-login.sh'] -gens = map (env.AT, sources) +gens = map (env.AT_COPY, sources) diff --git a/buildscripts/builder.py b/buildscripts/builder.py index 7c82820f8c..af47e29779 100644 --- a/buildscripts/builder.py +++ b/buildscripts/builder.py @@ -19,14 +19,23 @@ def join_path (path, infix=os.pathsep, prefix = ''): env['MAKEINFO_INCLUDES'] = join_path (env['MAKEINFO_PATH'], '', ' -I') a = '$MAKEINFO $__verbose $MAKEINFO_INCLUDES --no-split --no-headers \ --output=$TARGET $SOURCE' -texi2txt = Builder (action = a, suffix = '.txt', src_suffix = '.texi') -env.Append (BUILDERS = {'Texi2txt': texi2txt}) +TXT = Builder (action = a, suffix = '.txt', src_suffix = '.texi') +env.Append (BUILDERS = {'TXT': TXT}) + +a = '$MAKEINFO $__verbose $MAKEINFO_INCLUDES --output=$TARGET $SOURCE' +INFO = Builder (action = a, suffix = '.info', src_suffix = '.texi') +env.Append (BUILDERS = {'INFO': INFO}) + +a = '$MAKEINFO $__verbose $MAKEINFO_INCLUDES --html --no-split --no-headers \ +--css-include=#/Documentation/texinfo.css --output=$TARGET $SOURCE' +HTML = Builder (action = a, suffix = '.html', src_suffix = '.texi') +env.Append (BUILDERS = {'HTML': HTML}) + env['LILYPOND_BOOK_INCLUDES'] = join_path (env['LILYPOND_BOOK_PATH'], '', ' --include=') # UGHR, lilypond.py uses lilypond-bin from PATH -#env.Append (ENV = {'PATH' : os.environ['PATH']}) env.PrependENVPath ('PATH', os.path.join (env['absbuild'], env['out'], 'usr/bin')) @@ -55,8 +64,8 @@ a = ['rm -f $$(grep -LF "\lilypondend" ${TARGET.dir}/lily-*.tex 2>/dev/null);', --output=${TARGET.dir} --format=$LILYPOND_BOOK_FORMAT \ $LILYPOND_BOOK_FLAGS \ $SOURCE'] -tely2texi = Builder (action = a, suffix = '.texi', src_suffix = '.tely') -env.Append (BUILDERS = {'Tely2texi': tely2texi}) +TELY = Builder (action = a, suffix = '.texi', src_suffix = '.tely') +env.Append (BUILDERS = {'TELY': TELY}) a = 'cd ${TARGET.dir} \ && texi2dvi --batch $TEXINFO_PAPERSIZE_OPTION ${SOURCE.file}' @@ -79,7 +88,8 @@ def add_ps_target (target, source, env): base = os.path.splitext (str (target[0]))[0] return (target + [base + '.ps'], source) -a = ' LILYPONDPREFIX=$LILYPONDPREFIX \ +debug = 'echo "PATH=$$PATH";' +a = debug + 'LILYPONDPREFIX=$LILYPONDPREFIX \ $PYTHON $LILYPOND_PY $__verbose \ --include=${TARGET.dir} \ --output=${TARGET.base} $SOURCE' @@ -89,10 +99,10 @@ env.Append (BUILDERS = {'LilyPond': lilypond}) #verbose = verbose_opt (env, ' --verbose') verbose = '' -a = 'LILYPONDPREFIX=$LILYPONDPREFIX $PYTHON $ABC2LY_PY \ +a = debug + 'LILYPONDPREFIX=$LILYPONDPREFIX $PYTHON $ABC2LY_PY \ --strict --output=${TARGET.base} $SOURCE' -abc2ly = Builder (action = a, suffix = '.ly', src_suffix = '.abc') -env.Append (BUILDERS = {'Abc2ly': abc2ly}) +ABC = Builder (action = a, suffix = '.ly', src_suffix = '.abc') +env.Append (BUILDERS = {'ABC': ABC}) def add_log_target (target, source, env): base = os.path.splitext (str (target[0]))[0] @@ -159,6 +169,10 @@ def src_glob (env, s): return result env['src_glob'] = src_glob +def base_glob (env, s): + return map (lambda x: os.path.splitext (x)[0], src_glob (env, s)) +env['base_glob'] = src_glob + atvars = [ 'BASH', 'DATE', @@ -185,23 +199,18 @@ atvars = [ 'step-bindir', ] -#compat -env['lilypond_datadir'] = env['sharedir_package'] -env['local_lilypond_datadir'] = env['sharedir_package_version'] -env['TOPLEVEL_VERSION'] = env['version'] -env['SHELL'] = '/bin/sh' -env['BASH'] = '/bin/bash' - -def at (target, source, env): +# naming +def at_copy (target, source, env): s = open (str (source[0])).read () for i in atvars: if env.has_key (i): s = string.replace (s, '@%s@'% i, env[i]) t = str (target[0]) open (t, 'w').write (s) - # ugh - os.chmod (t, 0755) + # wugh + if os.basename (os.dirname (str (target[0]))) == 'bin': + os.chmod (t, 0755) -at = Builder (action = at) -env.Append (BUILDERS = {'AT': at}) +AT_COPY = Builder (action = at_copy) +env.Append (BUILDERS = {'AT_COPY': AT_COPY}) diff --git a/input/SConscript b/input/SConscript index 7185004e32..1738e07d98 100644 --- a/input/SConscript +++ b/input/SConscript @@ -3,10 +3,12 @@ import os Import ('env') -sources = env['src_glob'] (env, '*.ly') -abc_sources = env['src_glob'] (env, '*.abc') -abc = map (lambda x: os.path.splitext (x)[0], abc_sources) -lys = map (env.Abc2ly, abc) +#sources = env['src_glob'] (env, '*.ly') +#abc_sources = env['src_glob'] (env, '*.abc') +#abc = map (lambda x: os.path.splitext (x)[0], abc_sources) +#lys = map (env.Abc2ly, abc) -examples = map (env.LilyPond, sources + abc) -env.Alias ('doc', examples) +abcs = env['base_glob'] (env, '*.abc') +lys = env['base_glob'] (env, '*.ly') + map (env.ABC, abcs) +pdfs = map (env.LilyPond, lys) +env.Alias ('doc', pdfs) diff --git a/lily/SConscript b/lily/SConscript index 3043a3e9cd..ab2ea797b0 100644 --- a/lily/SConscript +++ b/lily/SConscript @@ -3,14 +3,16 @@ Import ('env') sources = env['src_glob'] (env, '*.cc') + ['parser.yy', 'lexer.ll'] includes = env['src_glob'] (env, 'include/*.hh') -outdir = Dir ('.').path +outdir = Dir ('.').abspath e = env.Copy () e.Append (YACCFLAGS = '-d') 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') + map (e.Precious, ['parser.cc', 'lexer.cc', 'parser.hh']) e.Append (LIBS = ['flower']) diff --git a/scripts/SConscript b/scripts/SConscript index 5b71997af0..d69b615b8a 100644 --- a/scripts/SConscript +++ b/scripts/SConscript @@ -5,9 +5,6 @@ import os Import ('env') sources = env['src_glob'] (env, '*.py') gen_files = map (lambda x: os.path.splitext (x)[0], sources) -gens = map (env.AT, sources) +gens = map (env.AT_COPY, sources) dir = env['bindir'] env.Install (dir, gen_files) -#env.Install (dir, sources) -#env.Install (dir, gens) -#env.Alias ('install', dir) -- 2.39.5