File: SConstruct

package info (click to toggle)
mypaint-brushes 1.3.0-1.1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 4,336 kB
  • sloc: makefile: 377; sh: 149
file content (76 lines) | stat: -rw-r--r-- 3,040 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import os, sys
from SCons.Script.SConscript import SConsEnvironment
import SCons.Util

# The API version should stay 1.0 as long as the brushes keep the same
# format, which is also forward-compatible with libmypaint 1.0.
mypaint_brushes_api_version = '1.0'
# This is the actual release version which should be incremented as
# usual to indicate an update.
mypaint_brushes_version = '1.3'

default_prefix = '/usr/local/'

opts = Variables()
opts.Add(PathVariable('prefix', 'autotools-style installation prefix', default_prefix, validator=PathVariable.PathIsDirCreate))

tools = ['default', 'textfile']

env = Environment(ENV=os.environ, options=opts, tools=tools)
opts.Update(env)

# Convenience alias for installing to $prefix
env.Alias('install', '$prefix')

set_dir_postaction = {}
def install_perms(env, 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(env, dest, path, perms=0644, dirperms=0755):
    assert os.path.isdir(path)
    target_root = os.path.join(dest, os.path.basename(path))
    for dirpath, dirnames, filenames in os.walk(path):
        reltarg = os.path.relpath(dirpath, path)
        target_dir = os.path.join(target_root, reltarg)
        target_dir = os.path.normpath(target_dir)
        filepaths = [os.path.join(dirpath, basename) for basename in filenames]
        install_perms(env, target_dir, filepaths, perms=perms, dirperms=dirperms)

# Common
install_tree(env, '$prefix/share/mypaint-data/{}/'.format(mypaint_brushes_api_version), 'brushes')

Export('env', 'install_tree', 'install_perms', 'mypaint_brushes_api_version', 'mypaint_brushes_version')
brushdata = SConscript('./SConscript')