-f: optionally read a file with module names to test -t: bool flag - if set, filter only top-level modules -e: optionally exclude module names matching the given glob (Unix shell-style wildcards) Importing all modules may cause bogus failures in some cases, eg. when the imported code assumes there is an existing graphical window. Such behaviour may be by design, hence for automatic processing it's more convinient to - in some cases - check only for top-level modules or filter out the troublemakers.
107 lines
5.0 KiB
Plaintext
107 lines
5.0 KiB
Plaintext
# nb: $RPM_BUILD_ROOT is not set when the macros are expanded (at spec parse time)
|
|
# so we set it manually (to empty string), making our Python prefer the correct install scheme location
|
|
%python3_sitelib %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_path('purelib'))")
|
|
%python3_sitearch %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_path('platlib'))")
|
|
%python3_version %(RPM_BUILD_ROOT= %{__python3} -Ic "import sys; sys.stdout.write('{0.major}.{0.minor}'.format(sys.version_info))")
|
|
%python3_version_nodots %(RPM_BUILD_ROOT= %{__python3} -Ic "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))")
|
|
%python3_platform %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_platform())")
|
|
%python3_platform_triplet %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_config_var('MULTIARCH'))")
|
|
%python3_ext_suffix %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))")
|
|
%py3dir %{_builddir}/python3-%{name}-%{version}-%{release}
|
|
|
|
%py3_shbang_opts -s
|
|
%py3_shbang_opts_nodash %(opts=%{py3_shbang_opts}; echo ${opts#-})
|
|
%py3_shebang_flags %(opts=%{py3_shbang_opts}; echo ${opts#-})
|
|
%py3_shebang_fix %{expand:\\\
|
|
if [ -f /usr/bin/pathfix%{python3_version}.py ]; then
|
|
pathfix=/usr/bin/pathfix%{python3_version}.py
|
|
else
|
|
# older versions of Python don't have it and must BR /usr/bin/pathfix.py from python3-devel explicitly
|
|
pathfix=/usr/bin/pathfix.py
|
|
fi
|
|
if [ -z "%{?py3_shebang_flags}" ]; then
|
|
shebang_flags="-k"
|
|
else
|
|
shebang_flags="-ka%{py3_shebang_flags}"
|
|
fi
|
|
$pathfix -pni %{__python3} $shebang_flags}
|
|
|
|
# Use the slashes after expand so that the command starts on the same line as
|
|
# the macro
|
|
%py3_build() %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
%{__python3} %{py_setup} %{?py_setup_args} build --executable="%{__python3} %{py3_shbang_opts}" %{?*}
|
|
}
|
|
|
|
%py3_build_egg() %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
%{__python3} %{py_setup} %{?py_setup_args} bdist_egg %{?*}
|
|
}
|
|
|
|
%py3_build_wheel() %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
%{__python3} %{py_setup} %{?py_setup_args} bdist_wheel %{?*}
|
|
}
|
|
|
|
%py3_install() %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
%{__python3} %{py_setup} %{?py_setup_args} install -O1 --skip-build --root %{buildroot} %{?*}
|
|
rm -rfv %{buildroot}%{_bindir}/__pycache__
|
|
}
|
|
|
|
%py3_install_egg() %{expand:\\\
|
|
mkdir -p %{buildroot}%{python3_sitelib}
|
|
%{__python3} -m easy_install -m --prefix %{buildroot}%{_prefix} -Z dist/*-py%{python3_version}.egg %{?*}
|
|
rm -rfv %{buildroot}%{_bindir}/__pycache__
|
|
}
|
|
|
|
%py3_install_wheel() %{expand:\\\
|
|
%{__python3} -m pip install -I dist/%{1} --root %{buildroot} --no-deps --no-index --no-warn-script-location
|
|
rm -rfv %{buildroot}%{_bindir}/__pycache__
|
|
for distinfo in %{buildroot}%{python3_sitelib}/*.dist-info %{buildroot}%{python3_sitearch}/*.dist-info; do
|
|
if [ -f ${distinfo}/direct_url.json ]; then
|
|
rm -fv ${distinfo}/direct_url.json
|
|
sed -i '/direct_url.json/d' ${distinfo}/RECORD
|
|
fi
|
|
done
|
|
}
|
|
|
|
# With $PATH and $PYTHONPATH set to the %%buildroot,
|
|
# try to import the Python 3 module(s) given as command-line args or read from file (-f).
|
|
# Filter and check import on only top-level modules using -t flag.
|
|
# Exclude unwanted modules by passing their globs to -e option.
|
|
# Useful as a smoke test in %%check when running tests is not feasible.
|
|
# Use spaces or commas as separators if providing list directly.
|
|
# Use newlines as separators if providing list in a file.
|
|
%py3_check_import(e:tf:) %{expand:\\\
|
|
PATH="%{buildroot}%{_bindir}:$PATH"\\\
|
|
PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}"\\\
|
|
PYTHONDONTWRITEBYTECODE=1\\\
|
|
%{__python3} -%{py3_shebang_flags} %{_rpmconfigdir}/redhat/import_all_modules.py %{?**}
|
|
}
|
|
|
|
# This only supports Python 3.5+ and will never work with Python 2.
|
|
# Hence, it has no Python version in the name.
|
|
%pycached() %{lua:
|
|
path = rpm.expand("%{?*}")
|
|
if (string.sub(path, "-3") ~= ".py") then
|
|
rpm.expand("%{error:%%pycached can only be used with paths explicitly ending with .py}")
|
|
else
|
|
print(path)
|
|
pyminor = path:match("/python3.(%d+)/") or "*"
|
|
dirname = path:match("(.*/)")
|
|
modulename = path:match(".*/([^/]+).py")
|
|
print("\\n" .. dirname .. "__pycache__/" .. modulename .. ".cpython-3" .. pyminor .. "{,.opt-?}.pyc")
|
|
end
|
|
}
|
|
|
|
# This is intended for Python 3 only, hence also no Python version in the name.
|
|
%__pytest /usr/bin/pytest%(test %{python3_pkgversion} == 3 || echo -%{python3_version})
|
|
%pytest %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
PATH="%{buildroot}%{_bindir}:$PATH"\\\
|
|
PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}"\\\
|
|
PYTHONDONTWRITEBYTECODE=1\\\
|
|
%{?__pytest_addopts:PYTEST_ADDOPTS="${PYTEST_ADDOPTS:-} %{__pytest_addopts}"}\\\
|
|
%__pytest}
|