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
132
133
134
135
136
137
138
139
140
|
project(
'portage',
'c',
version : '3.0.66',
license : 'GPL-2.0-or-later',
meson_version : '>=0.58.0'
)
py_mod = import('python')
# TODO: Add "pure : not native_extensions" here instead of py.install_sources()
# when requiring Meson >=0.64.0.
py = py_mod.find_installation()
sed = find_program('sed', required : true)
system_wide = get_option('system-wide')
native_extensions = get_option('native-extensions')
eprefix = get_option('eprefix')
prefixdir = get_option('prefix')
datadir = get_option('datadir')
docdir = get_option('docdir')
portage_base = get_option('portage-base')
portage_bindir = get_option('portage-bindir')
portage_datadir = get_option('portage-datadir')
sysconfdir = system_wide ? get_option('sysconfdir') \
: datadir / 'etc'
if docdir == ''
docdir = system_wide ? datadir / 'doc' / 'portage' \
: datadir / 'share' / 'portage' / 'doc'
endif
if portage_base == ''
# This path must be absolute when system-wide.
portage_base = system_wide ? prefixdir / 'lib' / 'portage' \
: datadir / 'lib' / 'portage'
endif
if portage_bindir == ''
portage_bindir = portage_base / 'bin'
endif
if portage_datadir == ''
portage_datadir = system_wide ? datadir / 'portage' \
: datadir / 'share' / 'portage'
endif
# hprefixify is copied from prefix.eclass.
dirs = '/(usr|lib(|[onx]?32|n?64)|etc|bin|sbin|var|opt|run)'
hprefixify = [
sed, '-r',
'-e', 's,([^[:alnum:]}\\)\\.])' + dirs + ',\\1' + eprefix.replace(',', '\\,') + '/\\2,g',
'-e', 's,^' + dirs + ',' + eprefix.replace(',', '\\,') + '/\\1,',
'@INPUT@'
]
# Use Portage's own code to determine the version from git, if possible.
version = run_command(
[py, '-c', 'import portage; print(portage.VERSION)'],
env : { 'PYTHONPATH' : meson.current_source_dir() / 'lib' },
capture : true,
check : false
)
# Fall back to the Meson project version above.
if version.returncode() == 0
version = version.stdout().strip()
if version == 'HEAD'
version = ''
endif
else
version = ''
endif
conf_data = configuration_data({
'VERSION' : version == '' ? meson.project_version() : version
})
if system_wide
conf_data.set('INSTALL_TYPE', 'SYSTEM')
conf_data.set('PORTAGE_BASE_PATH', portage_base)
conf_data.set('PORTAGE_BIN_PATH', portage_bindir)
conf_data.set('EPREFIX', eprefix)
else
conf_data.set('INSTALL_TYPE', 'MODULE')
conf_data.set('PORTAGE_BASE_PATH', '')
conf_data.set('PORTAGE_BIN_PATH', '')
conf_data.set('EPREFIX', '')
endif
subdir('bin')
subdir('lib')
if native_extensions
subdir('src')
endif
if system_wide
METADATA = configure_file(
input : 'cnf/METADATA',
output : 'METADATA',
configuration : conf_data
)
install_data(
[
METADATA
],
install_dir : py.get_install_dir() / 'portage-@0@.dist-info'.format(conf_data.get('VERSION'))
)
endif
test(
'pytest',
py,
args : ['-m', 'pytest', '--rootdir', meson.current_source_dir(), meson.current_source_dir()],
timeout : 0
)
if get_option('code-only')
subdir_done()
endif
subdir('cnf')
install_data(
[
'NEWS',
'RELEASE-NOTES'
],
install_dir : docdir
)
if not system_wide
subdir_done()
endif
subdir('doc')
subdir('man')
|