X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=SConstruct;h=3700c74e23535493efa4504a1306fdbbf5c7b8c3;hb=963fd98607770d346dc023c5e2742261852ed3bb;hp=9d4c5c3363f4dd8af660b971fe595b2569d6bac3;hpb=66c446849d1b8668b230cbf026f1b783dd481a66;p=lilypond.git diff --git a/SConstruct b/SConstruct index 9d4c5c3363..3700c74e23 100644 --- a/SConstruct +++ b/SConstruct @@ -158,7 +158,7 @@ opts.AddOptions ( 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', @@ -248,6 +248,8 @@ prefix = env['prefix'] 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) @@ -267,8 +269,92 @@ def list_sort (lst): 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 () @@ -276,7 +362,10 @@ def configure (target, source, env): 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, '.') @@ -352,15 +441,15 @@ def configure (target, source, env): 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', + 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', + 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.0', 'Metafont tracing Type1', + 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', @@ -382,45 +471,8 @@ def configure (target, source, env): 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 - 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, @@ -439,8 +491,8 @@ def configure (target, source, env): 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)) @@ -452,8 +504,9 @@ def configure (target, source, env): 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)) @@ -462,21 +515,9 @@ def configure (target, source, env): 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'): @@ -497,7 +538,6 @@ def configure (target, source, env): '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', 'fontconfig1'): @@ -507,12 +547,7 @@ def configure (target, source, env): if env['gui']: test_lib (required, 'gtk+-2.0', '2.4.0', 'Development files for GTK+', 'gtk2.0') - if test_lib (required, 'pango', '1.6.0', - 'Development files for pango', 'pango1.0'): - conf.env['DEFINES']['HAVE_PANGO16'] = '1' - if conf.CheckCHeader ('pango/pangofc-fontmap.h'): - conf.env['DEFINES']['HAVE_PANGO_PANGOFC_FONTMAP_H'] = '1' if env['fast']: # Using CCFLAGS = -I rather than CPPPATH = [ # ] speeds up SCons @@ -630,12 +665,14 @@ env.PrependENVPath ('PATH', 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] + '}', }) @@ -656,6 +693,8 @@ env.Append ( 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', @@ -665,7 +704,6 @@ env.Append ( 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'], @@ -681,13 +719,14 @@ if env['debugging']: 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' @@ -724,15 +763,27 @@ if 'realclean' in COMMAND_LINE_TARGETS: 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', @@ -755,8 +806,7 @@ env.Append ( LILYPONDPREFIX = LILYPONDPREFIX, # FIXME: move to lily/SConscript? - LIBPATH = [os.path.join (absbuild, 'flower', env['out']), - os.path.join (absbuild, 'kpath-guile', env['out']),], + LIBPATH = [os.path.join (absbuild, 'flower', env['out'])], CPPPATH = [outdir, ], LILYPOND_PATH = ['.', '$srcdir/input', @@ -770,98 +820,10 @@ env.Append ( # os.path.join (absbuild, 'Documentation/user', # env['out']), ], - makeinfo_path = ['.', '$srcdir/Documentation/user', + MAKEINFO_PATH = ['.', '$srcdir/Documentation/user', '$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 @@ -909,14 +871,14 @@ else: subdirs = string.split (os.popen (command).read ()) if env['fast']\ - and 'all' not in command_line_targets\ - and 'doc' not in command_line_targets\ - 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', + and 'all' not in COMMAND_LINE_TARGETS\ + and 'doc' not in COMMAND_LINE_TARGETS\ + and 'web' not in COMMAND_LINE_TARGETS\ + and 'install' not in COMMAND_LINE_TARGETS\ + and 'clean' not in COMMAND_LINE_TARGETS: + subdirs = [ 'python', + 'lily', + 'flower', 'mf', ]