public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] [PATCH] python-utils-r1.eclass: Fix PYTHON_SITEDIR/INCLUDEDIR for cross-prefix
@ 2023-08-15 22:02 James Le Cuirot
  2023-08-15 22:25 ` Ionen Wolkens
  0 siblings, 1 reply; 3+ messages in thread
From: James Le Cuirot @ 2023-08-15 22:02 UTC (permalink / raw
  To: gentoo-dev; +Cc: James Le Cuirot

We dynamically determine Python's SITEDIR and INCLUDEDIR using the build
host's Python. This breaks down when the build host's prefix differs
from the target host's prefix, so chop off the former and prepend the
latter.

This assumes that each Python implementation is always installed using
the same scheme. Meson already makes this assumption, and gpep517 makes
a similar assumption to determine Python's stdlib location.

We could improve on this and determine these locations using SYSROOT's
sysconfigdata file, like gpep517 does, but this seems needlessly
complex. We would need to take this approach for PYTHON_LIBPATH and
PYTHON_CONFIG, but these are only used by handful of packages.

${BROOT-${EPREFIX}} is needed rather than plain ${BROOT} for the same
reason we need it for PYTHON, namely that Portage <3.0.50 was buggy.

Signed-off-by: James Le Cuirot <chewi@gentoo.org>
---

Note that gpep517 also needs the same treatment, but I'll handle that
later. This at least allows Portage itself to be installed.

 eclass/python-utils-r1.eclass | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
index 2fffd6d56bf5..68b28c0ed806 100644
--- a/eclass/python-utils-r1.eclass
+++ b/eclass/python-utils-r1.eclass
@@ -351,6 +351,7 @@ _python_export() {
 						print(sysconfig.get_path("purelib"))
 					EOF
 				)
+				PYTHON_SITEDIR=${EPREFIX}${PYTHON_SITEDIR#${BROOT-${EPREFIX}}}
 				export PYTHON_SITEDIR
 				debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
 				;;
@@ -362,6 +363,7 @@ _python_export() {
 						print(sysconfig.get_path("platinclude"))
 					EOF
 				)
+				PYTHON_INCLUDEDIR=${ESYSROOT}${PYTHON_INCLUDEDIR#${BROOT-${EPREFIX}}}
 				export PYTHON_INCLUDEDIR
 				debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}"

--
2.41.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [gentoo-dev] [PATCH] python-utils-r1.eclass: Fix PYTHON_SITEDIR/INCLUDEDIR for cross-prefix
  2023-08-15 22:02 [gentoo-dev] [PATCH] python-utils-r1.eclass: Fix PYTHON_SITEDIR/INCLUDEDIR for cross-prefix James Le Cuirot
@ 2023-08-15 22:25 ` Ionen Wolkens
  2023-08-16  6:37   ` James Le Cuirot
  0 siblings, 1 reply; 3+ messages in thread
From: Ionen Wolkens @ 2023-08-15 22:25 UTC (permalink / raw
  To: gentoo-dev; +Cc: James Le Cuirot

[-- Attachment #1: Type: text/plain, Size: 2326 bytes --]

On Tue, Aug 15, 2023 at 11:02:54PM +0100, James Le Cuirot wrote:
> We dynamically determine Python's SITEDIR and INCLUDEDIR using the build
> host's Python. This breaks down when the build host's prefix differs
> from the target host's prefix, so chop off the former and prepend the
> latter.
> 
> This assumes that each Python implementation is always installed using
> the same scheme. Meson already makes this assumption, and gpep517 makes
> a similar assumption to determine Python's stdlib location.
> 
> We could improve on this and determine these locations using SYSROOT's
> sysconfigdata file, like gpep517 does, but this seems needlessly
> complex. We would need to take this approach for PYTHON_LIBPATH and
> PYTHON_CONFIG, but these are only used by handful of packages.
> 
> ${BROOT-${EPREFIX}} is needed rather than plain ${BROOT} for the same
> reason we need it for PYTHON, namely that Portage <3.0.50 was buggy.
> 
> Signed-off-by: James Le Cuirot <chewi@gentoo.org>
> ---
> 
> Note that gpep517 also needs the same treatment, but I'll handle that
> later. This at least allows Portage itself to be installed.
> 
>  eclass/python-utils-r1.eclass | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
> index 2fffd6d56bf5..68b28c0ed806 100644
> --- a/eclass/python-utils-r1.eclass
> +++ b/eclass/python-utils-r1.eclass
> @@ -351,6 +351,7 @@ _python_export() {
>  						print(sysconfig.get_path("purelib"))
>  					EOF
>  				)
> +				PYTHON_SITEDIR=${EPREFIX}${PYTHON_SITEDIR#${BROOT-${EPREFIX}}}

For a minor nitpick, should use quotes for the substitution, aka:

    PYTHON_SITEDIR=${EPREFIX}${PYTHON_SITEDIR#"${BROOT-${EPREFIX}}"}

Or else if BROOT/EPREFIX somehow had glob characters in them, they will
actually be globbing.

>  				export PYTHON_SITEDIR
>  				debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
>  				;;
> @@ -362,6 +363,7 @@ _python_export() {
>  						print(sysconfig.get_path("platinclude"))
>  					EOF
>  				)
> +				PYTHON_INCLUDEDIR=${ESYSROOT}${PYTHON_INCLUDEDIR#${BROOT-${EPREFIX}}}

Same here.

>  				export PYTHON_INCLUDEDIR
>  				debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}"
> 
> --
> 2.41.0
> 

-- 
ionen

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gentoo-dev] [PATCH] python-utils-r1.eclass: Fix PYTHON_SITEDIR/INCLUDEDIR for cross-prefix
  2023-08-15 22:25 ` Ionen Wolkens
@ 2023-08-16  6:37   ` James Le Cuirot
  0 siblings, 0 replies; 3+ messages in thread
From: James Le Cuirot @ 2023-08-16  6:37 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 2534 bytes --]

On Tue, 2023-08-15 at 18:25 -0400, Ionen Wolkens wrote:
> On Tue, Aug 15, 2023 at 11:02:54PM +0100, James Le Cuirot wrote:
> > We dynamically determine Python's SITEDIR and INCLUDEDIR using the build
> > host's Python. This breaks down when the build host's prefix differs
> > from the target host's prefix, so chop off the former and prepend the
> > latter.
> > 
> > This assumes that each Python implementation is always installed using
> > the same scheme. Meson already makes this assumption, and gpep517 makes
> > a similar assumption to determine Python's stdlib location.
> > 
> > We could improve on this and determine these locations using SYSROOT's
> > sysconfigdata file, like gpep517 does, but this seems needlessly
> > complex. We would need to take this approach for PYTHON_LIBPATH and
> > PYTHON_CONFIG, but these are only used by handful of packages.
> > 
> > ${BROOT-${EPREFIX}} is needed rather than plain ${BROOT} for the same
> > reason we need it for PYTHON, namely that Portage <3.0.50 was buggy.
> > 
> > Signed-off-by: James Le Cuirot <chewi@gentoo.org>
> > ---
> > 
> > Note that gpep517 also needs the same treatment, but I'll handle that
> > later. This at least allows Portage itself to be installed.
> > 
> >  eclass/python-utils-r1.eclass | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
> > index 2fffd6d56bf5..68b28c0ed806 100644
> > --- a/eclass/python-utils-r1.eclass
> > +++ b/eclass/python-utils-r1.eclass
> > @@ -351,6 +351,7 @@ _python_export() {
> >  						print(sysconfig.get_path("purelib"))
> >  					EOF
> >  				)
> > +				PYTHON_SITEDIR=${EPREFIX}${PYTHON_SITEDIR#${BROOT-${EPREFIX}}}
> 
> For a minor nitpick, should use quotes for the substitution, aka:
> 
>     PYTHON_SITEDIR=${EPREFIX}${PYTHON_SITEDIR#"${BROOT-${EPREFIX}}"}
> 
> Or else if BROOT/EPREFIX somehow had glob characters in them, they will
> actually be globbing.
> 
> >  				export PYTHON_SITEDIR
> >  				debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
> >  				;;
> > @@ -362,6 +363,7 @@ _python_export() {
> >  						print(sysconfig.get_path("platinclude"))
> >  					EOF
> >  				)
> > +				PYTHON_INCLUDEDIR=${ESYSROOT}${PYTHON_INCLUDEDIR#${BROOT-${EPREFIX}}}
> 
> Same here.
> 
> >  				export PYTHON_INCLUDEDIR
> >  				debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}"
> > 
> > --
> > 2.41.0
> > 

Oops, not like me to miss that. Thanks!

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 858 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-08-16  6:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-15 22:02 [gentoo-dev] [PATCH] python-utils-r1.eclass: Fix PYTHON_SITEDIR/INCLUDEDIR for cross-prefix James Le Cuirot
2023-08-15 22:25 ` Ionen Wolkens
2023-08-16  6:37   ` James Le Cuirot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox