blob: b06e1f4881b6b3a9222d0b647d5fdb7b8571d922 [file] [log] [blame]
project(
'portage',
'c',
version : '3.0.63',
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')