Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/mypaint/SConstruct
diff options
context:
space:
mode:
Diffstat (limited to 'mypaint/SConstruct')
-rw-r--r--mypaint/SConstruct194
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')
+