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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#!/usr/bin/env python
# encoding: utf-8
# Ali Sabil, 2007
"""
Sets various standard variables such as INCLUDEDIR. SBINDIR and others. To use this module just call::
opt.load('gnu_dirs')
and::
conf.load('gnu_dirs')
Add options for the standard GNU directories, this tool will add the options
found in autotools, and will update the environment with the following
installation variables:
============== ========================================= =======================
Variable Description Default Value
============== ========================================= =======================
PREFIX installation prefix /usr/local
EXEC_PREFIX installation prefix for binaries PREFIX
BINDIR user commands EXEC_PREFIX/bin
SBINDIR system binaries EXEC_PREFIX/sbin
LIBEXECDIR program-specific binaries EXEC_PREFIX/libexec
SYSCONFDIR host-specific configuration PREFIX/etc
SHAREDSTATEDIR architecture-independent variable data PREFIX/com
LOCALSTATEDIR variable data PREFIX/var
LIBDIR object code libraries EXEC_PREFIX/lib
INCLUDEDIR header files PREFIX/include
OLDINCLUDEDIR header files for non-GCC compilers /usr/include
DATAROOTDIR architecture-independent data root PREFIX/share
DATADIR architecture-independent data DATAROOTDIR
INFODIR GNU "info" documentation DATAROOTDIR/info
LOCALEDIR locale-dependent data DATAROOTDIR/locale
MANDIR manual pages DATAROOTDIR/man
DOCDIR documentation root DATAROOTDIR/doc/APPNAME
HTMLDIR HTML documentation DOCDIR
DVIDIR DVI documentation DOCDIR
PDFDIR PDF documentation DOCDIR
PSDIR PostScript documentation DOCDIR
============== ========================================= =======================
"""
import os, re
from waflib import Utils, Options, Context
gnuopts = '''
bindir, user commands, ${EXEC_PREFIX}/bin
sbindir, system binaries, ${EXEC_PREFIX}/sbin
libexecdir, program-specific binaries, ${EXEC_PREFIX}/libexec
sysconfdir, host-specific configuration, ${PREFIX}/etc
sharedstatedir, architecture-independent variable data, ${PREFIX}/com
localstatedir, variable data, ${PREFIX}/var
libdir, object code libraries, ${EXEC_PREFIX}/lib%s
includedir, header files, ${PREFIX}/include
oldincludedir, header files for non-GCC compilers, /usr/include
datarootdir, architecture-independent data root, ${PREFIX}/share
datadir, architecture-independent data, ${DATAROOTDIR}
infodir, GNU "info" documentation, ${DATAROOTDIR}/info
localedir, locale-dependent data, ${DATAROOTDIR}/locale
mandir, manual pages, ${DATAROOTDIR}/man
docdir, documentation root, ${DATAROOTDIR}/doc/${PACKAGE}
htmldir, HTML documentation, ${DOCDIR}
dvidir, DVI documentation, ${DOCDIR}
pdfdir, PDF documentation, ${DOCDIR}
psdir, PostScript documentation, ${DOCDIR}
''' % Utils.lib64()
_options = [x.split(', ') for x in gnuopts.splitlines() if x]
def configure(conf):
"""
Reads the command-line options to set lots of variables in *conf.env*. The variables
BINDIR and LIBDIR will be overwritten.
"""
def get_param(varname, default):
return getattr(Options.options, varname, '') or default
env = conf.env
env.LIBDIR = env.BINDIR = []
env.EXEC_PREFIX = get_param('EXEC_PREFIX', env.PREFIX)
env.PACKAGE = getattr(Context.g_module, 'APPNAME', None) or env.PACKAGE
complete = False
iter = 0
while not complete and iter < len(_options) + 1:
iter += 1
complete = True
for name, help, default in _options:
name = name.upper()
if not env[name]:
try:
env[name] = Utils.subst_vars(get_param(name, default).replace('/', os.sep), env)
except TypeError:
complete = False
if not complete:
lst = [x for x, _, _ in _options if not env[x.upper()]]
raise conf.errors.WafError('Variable substitution failure %r' % lst)
def options(opt):
"""
Adds lots of command-line options, for example::
--exec-prefix: EXEC_PREFIX
"""
inst_dir = opt.add_option_group('Installation prefix',
'By default, "waf install" will put the files in\
"/usr/local/bin", "/usr/local/lib" etc. An installation prefix other\
than "/usr/local" can be given using "--prefix", for example "--prefix=$HOME"')
for k in ('--prefix', '--destdir'):
option = opt.parser.get_option(k)
if option:
opt.parser.remove_option(k)
inst_dir.add_option(option)
inst_dir.add_option('--exec-prefix',
help = 'installation prefix for binaries [PREFIX]',
default = '',
dest = 'EXEC_PREFIX')
dirs_options = opt.add_option_group('Installation directories')
for name, help, default in _options:
option_name = '--' + name
str_default = default
str_help = '%s [%s]' % (help, re.sub(r'\$\{([^}]+)\}', r'\1', str_default))
dirs_options.add_option(option_name, help=str_help, default='', dest=name.upper())
|