%py3_install_egg is nonfunctional; setuptools removed the easy_install entrypoint years ago. %py3_build_egg is technically functional but has been superseded by newer macros. Calling setup.py directly is deprecated, and building/installing eggs to begin with is deprecated. The macros are not used in any Fedora packages and are broken. It's time to remove them.
110 lines
6.1 KiB
Plaintext
110 lines
6.1 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
|
|
# platbase/base is explicitly set to %%{_prefix} to support custom values, such as /app for flatpaks
|
|
%python3_sitelib %{global python3_sitelib %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")}%{python3_sitelib}
|
|
%python3_sitearch %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_path('platlib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")
|
|
%python3_version %{global python3_version %(RPM_BUILD_ROOT= %{__python3} -Ic "import sys; sys.stdout.write('{0.major}.{0.minor}'.format(sys.version_info))")}%{python3_version}
|
|
%python3_version_nodots %{global python3_version_nodots %(RPM_BUILD_ROOT= %{__python3} -Ic "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))")}%{python3_version_nodots}
|
|
%python3_platform %{global python3_platform %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_platform())")}%{python3_platform}
|
|
%python3_platform_triplet %{global python3_platform_triplet %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_config_var('MULTIARCH'))")}%{python3_platform_triplet}
|
|
%python3_ext_suffix %{global python3_ext_suffix %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))")}%{python3_ext_suffix}
|
|
%python3_cache_tag %{global python3_cache_tag %(RPM_BUILD_ROOT= %{__python3} -Ic "import sys; print(sys.implementation.cache_tag)")}%{python3_cache_tag}
|
|
%py3dir %{_builddir}/python3-%{name}-%{version}-%{release}
|
|
|
|
%_py3_shebang_s s
|
|
%_py3_shebang_P %{global _py3_shebang_P %(RPM_BUILD_ROOT= %{__python3} -Ic "import sys; print('P' if hasattr(sys.flags, 'safe_path') else '')")}%{_py3_shebang_P}
|
|
%py3_shbang_opts -%{?_py3_shebang_s}%{?_py3_shebang_P}
|
|
%py3_shbang_opts_nodash %(opts=%{py3_shbang_opts}; echo ${opts#-})
|
|
%py3_shebang_flags %(opts=%{py3_shbang_opts}; echo ${opts#-})
|
|
%py3_shebang_fix %{expand:\\\
|
|
if [ -z "%{?py3_shebang_flags}" ]; then
|
|
shebang_flags="-k"
|
|
else
|
|
shebang_flags="-ka%{py3_shebang_flags}"
|
|
fi
|
|
%{__python3} -B %{_rpmconfigdir}/redhat/pathfix.py -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_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} --prefix %{_prefix} %{?*}
|
|
rm -rfv %{buildroot}%{_bindir}/__pycache__
|
|
}
|
|
|
|
%py3_install_wheel() %{expand:\\\
|
|
%{__python3} -m pip install -I dist/%{1} --root %{buildroot} --prefix %{_prefix} --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).
|
|
# Respect the custom values of %%py3_shebang_flags or set nothing if it's undefined.
|
|
# 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}}"\\\
|
|
_PYTHONSITE="%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}"\\\
|
|
PYTHONDONTWRITEBYTECODE=1\\\
|
|
%{lua:
|
|
local command = "%{__python3} "
|
|
if rpm.expand("%{?py3_shebang_flags}") ~= "" then
|
|
command = command .. "-%{py3_shebang_flags}"
|
|
end
|
|
command = command .. " %{_rpmconfigdir}/redhat/import_all_modules.py "
|
|
-- handle multiline arguments correctly, see https://bugzilla.redhat.com/2018809
|
|
local args=rpm.expand('%{?**}'):gsub("[%s\\\\]*%s+", " ")
|
|
print(command .. args)
|
|
}
|
|
}
|
|
|
|
# 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")
|
|
-- %%python3_cache_tag is not used here because this macro supports not-installed CPythons
|
|
print("\\n" .. dirname .. "__pycache__/" .. modulename .. ".cpython-3" .. pyminor .. "{,.opt-?}.pyc")
|
|
end
|
|
}
|
|
|
|
# Environment variables used by %%pytest, %%tox or standalone, e.g.:
|
|
# %%{py3_test_envvars} %%{python3} -m unittest
|
|
%py3_test_envvars %{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_XDIST_AUTO_NUM_WORKERS=%{_smp_build_ncpus}}
|
|
|
|
# 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 %py3_test_envvars %__pytest
|