diff options
Diffstat (limited to 'mypaint/SConstruct')
-rw-r--r-- | mypaint/SConstruct | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/mypaint/SConstruct b/mypaint/SConstruct new file mode 100644 index 0000000..7f86206 --- /dev/null +++ b/mypaint/SConstruct @@ -0,0 +1,194 @@ +import os, sys +from os.path import join, basename +from SCons.Script.SConscript import SConsEnvironment + +EnsureSConsVersion(1, 0) + +# FIXME: sometimes it would be good to build for a different python +# version than the one running scons. (But how to find all paths then?) +python = 'python%d.%d' % (sys.version_info[0], sys.version_info[1]) +print 'Building for', python + +if sys.platform == "win32": + python = 'python' # usually no versioned binaries on Windows + +try: + import numpy +except ImportError: + print 'You need to have numpy installed.' + print + raise + +SConsignFile() # no .scsonsign into $PREFIX please + +if sys.platform == "darwin": + default_prefix = '/opt/local/' +else: + default_prefix = '/usr/local/' + +opts = Variables() +opts.Add(PathVariable('prefix', 'autotools-style installation prefix', default_prefix, validator=PathVariable.PathIsDirCreate)) + +opts.Add(BoolVariable('debug', 'enable HEAVY_DEBUG and disable optimizations', False)) +env = Environment(ENV=os.environ, options=opts) +if sys.platform == "win32": + # remove this mingw if trying VisualStudio + env = Environment(tools=['mingw'], ENV=os.environ, options=opts) +opts.Update(env) + +env.ParseConfig('pkg-config --cflags --libs glib-2.0') +env.ParseConfig('pkg-config --cflags --libs libpng') + +env.Append(CXXFLAGS=' -Wall -Wno-sign-compare -Wno-write-strings') + +# Get the numpy include path (for numpy/arrayobject.h). +numpy_path = numpy.get_include() +env.Append(CPPPATH=numpy_path) + + +if sys.platform == "win32": + # official python shipped with no pc file on windows so get from current python + from distutils import sysconfig + pre,inc = sysconfig.get_config_vars('exec_prefix', 'INCLUDEPY') + env.Append(CPPPATH=inc, LIBPATH=pre+'\libs', LIBS='python'+sys.version[0]+sys.version[2]) +elif sys.platform == "darwin": + env.ParseConfig(python + '-config --cflags') + ldflags = env.backtick(python + '-config --ldflags').split() + # scons does not seem to parse '-u' correctly + # put all options after -u in LINKFLAGS + if '-u' in ldflags: + idx = ldflags.index('-u') + env.Append(LINKFLAGS=ldflags[idx:]) + del ldflags[idx:] + env.MergeFlags(' '.join(ldflags)) +else: + # some distros use python2.5-config, others python-config2.5 + try: + env.ParseConfig(python + '-config --cflags') + env.ParseConfig(python + '-config --ldflags') + except OSError: + print 'going to try python-config instead' + env.ParseConfig('python-config --ldflags') + env.ParseConfig('python-config --cflags') + +if env.get('CPPDEFINES'): + # make sure assertions are enabled + env['CPPDEFINES'].remove('NDEBUG') + +if env['debug']: + env.Append(CPPDEFINES='HEAVY_DEBUG') + env.Append(CCFLAGS='-O0', LINKFLAGS='-O0') + +#env.Append(CCFLAGS='-fno-inline', LINKFLAGS='-fno-inline') + +Export('env', 'python') +module = SConscript('lib/SConscript') +SConscript('brushlib/SConscript') +# languages = SConscript('po/SConscript') + +def burn_python_version(target, source, env): + # make sure we run the python version that we built the extension modules for + s = '#!/usr/bin/env ' + python + '\n' + s += 5*'#\n' + s += '# DO NOT EDIT - edit %s instead\n' % source[0] + s += 5*'#\n' + s += open(str(source[0])).read() + f = open(str(target[0]), 'w') + f.write(s) + f.close() + +try: + new_umask = 022 + old_umask = os.umask(new_umask) + print "set umask to 0%03o (was 0%03o)" % (new_umask, old_umask) +except OSError: + # Systems like Win32... + pass + +# env.Command('mypaint', 'mypaint.py', [burn_python_version, Chmod('$TARGET', 0755)]) + +env.Clean('.', Glob('*.pyc')) +env.Clean('.', Glob('gui/*.pyc')) +env.Clean('.', Glob('lib/*.pyc')) + + +# set_dir_postaction = {} +# def install_perms(target, sources, perms=0644, dirperms=0755): +# """As a normal env.Install, but with Chmod postactions. + +# The `target` parameter must be a string which starts with ``$prefix``. +# Unless this is a sandbox install, the permission bits `dirperms` will be +# set on every directory back to ``$prefix``, but not including it. `perms` +# will always be set on each installed file from `sources`. +# """ +# assert target.startswith('$prefix') +# install_targs = env.Install(target, sources) +# sandboxed = False +# final_prefix = os.path.normpath(env["prefix"]) + +# # Set file permissions. +# for targ in install_targs: +# env.AddPostAction(targ, Chmod(targ, perms)) +# targ_path = os.path.normpath(targ.get_path()) +# if not targ_path.startswith(final_prefix): +# sandboxed = True + +# if not sandboxed: +# # Set permissions on superdirs, back to $prefix (but not including it) +# # Not sure if this is necessary with the umask forcing. It might help +# # fix some broken installs. +# for file_targ in install_targs: +# d = os.path.normpath(target) +# d_prev = None +# while d != d_prev and d != '$prefix': +# d_prev = d +# if not set_dir_postaction.has_key(d): +# env.AddPostAction(file_targ, Chmod(d, dirperms)) +# set_dir_postaction[d] = True +# d = os.path.dirname(d) + +# return install_targs + + +# def install_tree(dest, path, perms=0644, dirperms=0755): +# assert os.path.isdir(path) +# target_root = join(dest, os.path.basename(path)) +# for dirpath, dirnames, filenames in os.walk(path): +# reltarg = os.path.relpath(dirpath, path) +# target_dir = join(target_root, reltarg) +# target_dir = os.path.normpath(target_dir) +# filepaths = [join(dirpath, basename) for basename in filenames] +# install_perms(target_dir, filepaths, perms=perms, dirperms=dirperms) + + +# # Painting resources +# install_tree('$prefix/share/mypaint', 'brushes') +# install_tree('$prefix/share/mypaint', 'backgrounds') +# install_tree('$prefix/share/mypaint', 'pixmaps') + +# # Desktop resources and themeable internal icons +# install_tree('$prefix/share', 'desktop/icons') +# install_perms('$prefix/share/applications', 'desktop/mypaint.desktop') + +# # location for achitecture-dependent modules +# install_perms('$prefix/lib/mypaint', module) + +# # Program and supporting UI XML +# install_perms('$prefix/bin', 'mypaint', perms=0755) +# install_perms('$prefix/share/mypaint/gui', Glob('gui/*.xml')) +# install_perms("$prefix/share/mypaint/lib", Glob("lib/*.py")) +# install_perms("$prefix/share/mypaint/brushlib", Glob("brushlib/*.py")) +# install_perms("$prefix/share/mypaint/gui", Glob("gui/*.py")) + +# # translations +# for lang in languages: +# install_perms('$prefix/share/locale/%s/LC_MESSAGES' % lang, +# 'po/%s/LC_MESSAGES/mypaint.mo' % lang) + +# # These hierarchies belong entirely to us, so unmake if asked. +# env.Clean('$prefix', '$prefix/lib/mypaint') +# env.Clean('$prefix', '$prefix/share/mypaint') + +# # Convenience alias for installing to $prefix +# env.Alias('install', '$prefix') + |