aboutsummaryrefslogtreecommitdiff
blob: 42ec97310c589f95d53f080667ccc736caeaa407 (plain)
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.1',
    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')