Add option '-M' to %%py_import_check - if there are no arguments to the macro and -M option is set, the check will pass - if there are arguments to the macro and they evaluate to the empty list of modules, and the -M option is set, the check will pass This is only allowed to use in fully automated environment and cannot be accepted in Fedora's official packages.
147 lines
7.4 KiB
Text
147 lines
7.4 KiB
Text
# unversioned macros: used with user defined __python, no longer part of rpm >= 4.15
|
|
# __python is defined to error by default in the srpm macros
|
|
# 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
|
|
%python_sitelib %{global python_sitelib %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")}%{python_sitelib}
|
|
%python_sitearch %{global python_sitearch %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_path('platlib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")}%{python_sitearch}
|
|
%python_version %{global python_version %(RPM_BUILD_ROOT= %{__python} -Esc "import sys; sys.stdout.write('{0.major}.{0.minor}'.format(sys.version_info))")}%{python_version}
|
|
%python_version_nodots %{global python_version_nodots %(RPM_BUILD_ROOT= %{__python} -Esc "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))")}%{python_version_nodots}
|
|
%python_platform %{global python_platform %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_platform())")}%{python_platform}
|
|
%python_platform_triplet %{global python_platform_triplet %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_config_var('MULTIARCH'))")}%{python_platform_triplet}
|
|
%python_ext_suffix %{global python_ext_suffix %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))")}%{python_ext_suffix}
|
|
%python_cache_tag %{global python_cache_tag %(RPM_BUILD_ROOT= %{__python} -Esc "import sys; print(sys.implementation.cache_tag)")}%{python_cache_tag}
|
|
|
|
%py_setup setup.py
|
|
%_py_shebang_s s
|
|
%_py_shebang_P %{global _py_shebang_P %(RPM_BUILD_ROOT= %{__python} -Esc "import sys; print('P' if hasattr(sys.flags, 'safe_path') else '')")}%{_py_shebang_P}
|
|
%py_shbang_opts -%{?_py_shebang_s}%{?_py_shebang_P}
|
|
%py_shbang_opts_nodash %(opts=%{py_shbang_opts}; echo ${opts#-})
|
|
%py_shebang_flags %(opts=%{py_shbang_opts}; echo ${opts#-})
|
|
%py_shebang_fix %{expand:\\\
|
|
if [ -z "%{?py_shebang_flags}" ]; then
|
|
shebang_flags="-k"
|
|
else
|
|
shebang_flags="-ka%{py_shebang_flags}"
|
|
fi
|
|
%{__python} -B %{_rpmconfigdir}/redhat/pathfix.py -pni %{__python} $shebang_flags}
|
|
|
|
# Use the slashes after expand so that the command starts on the same line as
|
|
# the macro
|
|
%py_build() %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
%{__python} %{py_setup} %{?py_setup_args} build --executable="%{__python} %{py_shbang_opts}" %{?*}
|
|
}
|
|
|
|
%py_build_egg() %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
%{__python} %{py_setup} %{?py_setup_args} bdist_egg %{?*}
|
|
}
|
|
|
|
%py_build_wheel() %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
%{__python} %{py_setup} %{?py_setup_args} bdist_wheel %{?*}
|
|
}
|
|
|
|
%py_install() %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
%{__python} %{py_setup} %{?py_setup_args} install -O1 --skip-build --root %{buildroot} --prefix %{_prefix} %{?*}
|
|
rm -rfv %{buildroot}%{_bindir}/__pycache__
|
|
}
|
|
|
|
%py_install_egg() %{expand:\\\
|
|
mkdir -p %{buildroot}%{python_sitelib}
|
|
%{__python} -m easy_install -m --prefix %{buildroot}%{_prefix} -Z dist/*-py%{python_version}.egg %{?*}
|
|
rm -rfv %{buildroot}%{_bindir}/__pycache__
|
|
}
|
|
|
|
%py_install_wheel() %{expand:\\\
|
|
%{__python} -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}%{python_sitelib}/*.dist-info %{buildroot}%{python_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 module(s) given as command-line args or read from file (-f).
|
|
# Respect the custom values of %%py_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.
|
|
# Use -M flag in automated environments to pass the check even if no modules are detected.
|
|
# 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.
|
|
%py_check_import(e:tf:M) %{expand:\\\
|
|
PATH="%{buildroot}%{_bindir}:$PATH"\\\
|
|
PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python_sitearch}:%{buildroot}%{python_sitelib}}"\\\
|
|
_PYTHONSITE="%{buildroot}%{python_sitearch}:%{buildroot}%{python_sitelib}"\\\
|
|
PYTHONDONTWRITEBYTECODE=1\\\
|
|
%{lua:
|
|
local command = "%{__python} "
|
|
if rpm.expand("%{?py_shebang_flags}") ~= "" then
|
|
command = command .. "-%{py_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)
|
|
}
|
|
}
|
|
|
|
%python_provide() %{lua:
|
|
local python = require "fedora.srpm.python"
|
|
function string.starts(String,Start)
|
|
return string.sub(String,1,string.len(Start))==Start
|
|
end
|
|
local package = rpm.expand("%{?1}")
|
|
local vr = rpm.expand("%{?epoch:%{epoch}:}%{version}-%{release}")
|
|
local provides = python.python_altprovides(package, vr)
|
|
local default_python3_pkgversion = rpm.expand("%{__default_python3_pkgversion}")
|
|
if (string.starts(package, "python3-")) then
|
|
for i, provide in ipairs(provides) do
|
|
print("\\nProvides: " .. provide)
|
|
end
|
|
--Obsoleting the previous default python package (if it doesn't have isa)
|
|
if (string.sub(package, "-1") ~= ")") then
|
|
print("\\nObsoletes: python-")
|
|
print(string.sub(package,9,string.len(package)))
|
|
print(" < " .. vr)
|
|
end
|
|
elseif (string.starts(package, "python" .. default_python3_pkgversion .. "-")) then
|
|
for i, provide in ipairs(provides) do
|
|
print("\\nProvides: " .. provide)
|
|
end
|
|
--Obsoleting the previous default python package (if it doesn't have isa)
|
|
if (string.sub(package, "-1") ~= ")") then
|
|
print("\\nObsoletes: python-")
|
|
print(string.sub(package,8+string.len(default_python3_pkgversion),string.len(package)))
|
|
print(" < " .. vr)
|
|
end
|
|
elseif (string.starts(package, "python")) then
|
|
--No unversioned provides as other python3 cases are not the default
|
|
elseif (string.starts(package, "pypy")) then
|
|
--No unversioned provides as pypy is not default either
|
|
else
|
|
print("%python_provide: ERROR: ")
|
|
print(package)
|
|
print(" not recognized.")
|
|
end
|
|
}
|
|
|
|
# Environment variables for testing used standalone, e.g.:
|
|
# %%{py_test_envvars} %%{python} -m unittest
|
|
%py_test_envvars %{expand:\\\
|
|
CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
|
|
PATH="%{buildroot}%{_bindir}:$PATH"\\\
|
|
PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python_sitearch}:%{buildroot}%{python_sitelib}}"\\\
|
|
PYTHONDONTWRITEBYTECODE=1\\\
|
|
%{?__pytest_addopts:PYTEST_ADDOPTS="${PYTEST_ADDOPTS:-} %{__pytest_addopts}"}\\\
|
|
PYTEST_XDIST_AUTO_NUM_WORKERS=%{_smp_build_ncpus}}
|
|
|
|
%python_disable_dependency_generator() \
|
|
%undefine __pythondist_requires \
|
|
%{nil}
|