#136 [F36] Support installing to %{_prefix} other than /usr
Merged 2 years ago by churchyard. Opened 2 years ago by churchyard.
rpms/ otaylor/python-rpm-macros non-usr-prefix  into  f36

file modified
+5 -4
@@ -2,8 +2,9 @@ 

  # __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

- %python_sitelib %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_path('purelib'))")

- %python_sitearch %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_path('platlib'))")

+ # platbase/base is explicitly set to %%{_prefix} to support custom values, such as /app for flatpaks

+ %python_sitelib %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")

+ %python_sitearch %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_path('platlib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")

  %python_version %(RPM_BUILD_ROOT= %{__python} -Esc "import sys; sys.stdout.write('{0.major}.{0.minor}'.format(sys.version_info))")

  %python_version_nodots %(RPM_BUILD_ROOT= %{__python} -Esc "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))")

  %python_platform %(RPM_BUILD_ROOT= %{__python} -Esc "import sysconfig; print(sysconfig.get_platform())")
@@ -47,7 +48,7 @@ 

  

  %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} %{?*}

+   %{__python} %{py_setup} %{?py_setup_args} install -O1 --skip-build --root %{buildroot} --prefix %{_prefix} %{?*}

    rm -rfv %{buildroot}%{_bindir}/__pycache__

  }

  
@@ -58,7 +59,7 @@ 

  }

  

  %py_install_wheel() %{expand:\\\

-   %{__python} -m pip install -I dist/%{1} --root %{buildroot} --no-deps --no-index --no-warn-script-location

+   %{__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

file modified
+5 -4
@@ -1,7 +1,8 @@ 

  # 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'))")

+ # platbase/base is explicitly set to %%{_prefix} to support custom values, such as /app for flatpaks

+ %python3_sitelib %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")

+ %python3_sitearch %(RPM_BUILD_ROOT= %{__python3} -Ic "import sysconfig; print(sysconfig.get_path('platlib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")

  %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())")
@@ -45,7 +46,7 @@ 

  

  %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} %{?*}

+   %{__python3} %{py_setup} %{?py_setup_args} install -O1 --skip-build --root %{buildroot} --prefix %{_prefix} %{?*}

    rm -rfv %{buildroot}%{_bindir}/__pycache__

  }

  
@@ -56,7 +57,7 @@ 

  }

  

  %py3_install_wheel() %{expand:\\\

-   %{__python3} -m pip install -I dist/%{1} --root %{buildroot} --no-deps --no-index --no-warn-script-location

+   %{__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

file modified
+4 -1
@@ -49,7 +49,7 @@ 

  end

  }

  Version:        %{__default_python3_version}

- Release:        17%{?dist}

+ Release:        18%{?dist}

  

  BuildArch:      noarch

  
@@ -151,6 +151,9 @@ 

  

  

  %changelog

+ * Thu May 26 2022 Owen Taylor <otaylor@redhat.com> - 3.10-18

+ - Support installing to %%{_prefix} other than /usr

+ 

  * Tue Feb 08 2022 Tomas Orsava <torsava@redhat.com> - 3.10-17

  - %%py_provides: Do not generate Obsoletes for names containing parentheses

  

file modified
+10
@@ -698,6 +698,11 @@ 

              [f'/usr/lib/python{alt_x_y}/site-packages'])

  

  

+ def test_python3_sitelib_value_alternate_prefix():

+     macro = '%python3_sitelib'

+     assert rpm_eval(macro, _prefix='/app') == [f'/app/lib/python{X_Y}/site-packages']

+ 

+ 

  def test_python_sitearch_value_python3(lib):

      macro = '%python_sitearch'

      assert rpm_eval(macro, __python='%__python3') == [f'/usr/{lib}/python{X_Y}/site-packages']
@@ -720,6 +725,11 @@ 

              [f'/usr/{lib}/python{alt_x_y}/site-packages'])

  

  

+ def test_python3_sitearch_value_alternate_prefix(lib):

+     macro = '%python3_sitearch'

+     assert rpm_eval(macro, _prefix='/app') == [f'/app/{lib}/python{X_Y}/site-packages']

+ 

+ 

  @pytest.mark.parametrize(

      'args, expected_args',

      [

Build succeeded.

Pull-Request has been merged by churchyard

2 years ago