Re: [SIP] Multi-platform pyproject.toml (platform dependent values)

Phil Thompson <[email protected]>
Newsgroups gmane.comp.python.pyqt-pykde
Message-ID <[email protected]>
On 12/12/2019 13:46, Matteo Bertini wrote:
> This quick and dirty patch does what I suggested:
> 
>     diff -r d82ebe4b05b2 sipbuild/bindings.py
>     --- a/sipbuild/bindings.py      Fri Oct 04 23:29:15 2019 +0100
>     +++ b/sipbuild/bindings.py      Thu Dec 12 14:33:07 2019 +0100
>     @@ -245,7 +245,25 @@
>                          copy_nonshared_sources(project.abi_version,
>                                  buildable.build_dir))
> 
>     -        buildable.include_dirs.extend(self.include_dirs)
>     +        from packaging.markers import Marker
>     +
>     +        def filter_markers(values):
>     +            return [item for item in (filter_marker(v) for v in
> values) if item is not None]
>     +
>     +        def filter_marker(value):
>     +            if ";" not in value:
>     +                return value
>     +            value, marker = value.split(";", 1)
>     +            if Marker(marker).evaluate():
>     +                return value
>     +
>     +        def abspath_from_root_dir(path):
>     +            if os.path.isabs(path):
>     +                return path
>     +            else:
>     +                return os.path.join(project.root_dir, path)
>     +
>     +        buildable.include_dirs.extend([abspath_from_root_dir(path) 
> for
> path in filter_markers(self.include_dirs)])
>              buildable.sources.extend(self.sources)
> 
>              if self.protected_is_public:
>     @@ -254,8 +272,8 @@
> 
>              buildable.define_macros.extend(self.define_macros)
> 
>     -        buildable.libraries.extend(self.libraries)
>     -        buildable.library_dirs.extend(self.library_dirs)
>     +        buildable.libraries.extend(filter_markers(self.libraries))
>     +        buildable.library_dirs.extend([abspath_from_root_dir(path) 
> for
> path in filter_markers(self.library_dirs)])
> 
>              return buildable
> 
> This allows to use this syntax in `pyproject.toml`:
> 
>     [tool.sip.bindings.somemodule]
>     include-dirs = [".",
>                     "linux; 'linux' in sys_platform",
>                     "win32; 'win32' in sys_platform"]
>     library-dirs = ["linux; 'linux' in sys_platform",
>                     "win32; 'win32' in sys_platform"]
>     libraries = ["somelib64; 'linux' in sys_platform and 'x86_64' in
> platform_machine",
>                  "somelib32; 'linux' in sys_platform and 'x86_64' not 
> in
> platform_machine",
>                  "usb-1.0;   'linux' in sys_platform",
>                  "user32;    'win32' in sys_platform"]
> 
> Notable changes:
> 
> 1) non-absolute paths are considered relative to `project.root_dir` aka 
> the
> `pyptoject.toml` folder if I'm correct,
> 2) a bunch of fields are filtered if containing `;` and
> `packaging.markers.Marker` is used to do the real work.
> 
> I'm quite confident that 1) is an expected behaviour, perhaps with some
> check or better error / warning message if the joined path is invalid.
> 
> Instead 2) can result in unwanted errors, because the presence of the 
> `;`
> is used to activate a parsing that may fail with some existing user 
> input.
> 
> Can we provide a list variable to let the user opt-in the marker
> evaluation? Something like:
> 
>     [tool.sip.bindings.somemodule]
>     evaluate-markers = ["include-dirs", "library-dirs", "libraries"]
> 
> We can perhaps find a default set of fields that one can enable with a
> single boolean option, just to avoid the listing, something like:
> 
>     [tool.sip.metadata]
>     name = "somemodule"
>     evaluate-default-markers = true
> 
> Should I move this config into a custom `project.py` or integrate it 
> better
> into the mainline one (open to suggestions)?

I'm happy to take this on as is for SIP v5.1. I didn't realise it would 
be so easy - I didn't know about packaging.markers.

Thanks,
Phil
_______________________________________________
PyQt mailing list    [email protected]
https://www.riverbankcomputing.com/mailman/listinfo/pyqt
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.