On Thu, Jun 1, 2017 at 1:22 PM, Donald Stufft <don...@stufft.io> wrote:

>
> On Jun 1, 2017, at 2:12 PM, C Anthony Risinger <c...@anthonyrisinger.com>
> wrote:
>
> Because the build itself can output additional source files, that may be
> desirable to include in an sdist later, I honestly don't think you can pass
> through a "proper" sdist before a wheel. I think you can 99% of the time do
> that, but some builds using Cython and friends could actually have a custom
> initial build that generates standard .h/.c/.py, and even outputs an
> alternative p
> yproject.toml that *no longer needs* a custom build backend. Or just
> straight deletes it from SOURCE-RECORD once the custom build is done,
> because some artifacts are enough to rebuild a wheel next time. It seems to
> me the only possibly correct order is:
>
> 1. VCS checkout
> 2. partial sdist, but still likely an sdist, no promises!
> 3. wheel
> 4. proper sdist from generated SOURCE-RECORD, or updated static
> SOURCE-RECORD, or just original source tree + DIST-INFO
>
> I don't see a way to get a 100% valid sdist without first building the
> project and effectively asking the build backend (via its SOURCE-RECORD, if
> any) "Well golly, you did a build! What, *from both the source tree and
> build artifacts*, is important for wrapping up into a redistributable?"
>
> Maybe I'm overlooking something yuge (I've tried to follow this
> discussion, and have sort of checked out of python lately, but I'm fairly
> well-versed in packing lore and code), but in general I think we really are
> making sdists way way... way scarier than need be. They're pretty much
> whatever the build tells you is important for redistribution, at the end,
> with as much static meta
> data as possible, to the point of possibly obviating their need for
> pyproject.toml in the first place... maybe this aspect is what is hanging
> everyone up? A redistibutable source does not need to be as flexible as the
> original VCS input. An sdist is pinned to a specific version of a project,
> whereas VCS represents all possible versions (albeit only one is checkout
> out), and sdists
>  *are not* wheels! The same expectations need not apply. Two sdists of the
> same version might not be identical; one might request the custom build
> backed via pyproject.toml, and the other might have already done some of
> the steps for whatever reason. Authors must decide which is more
> appropriate for sharing.
>
>
>
> Do any projects build a copy of the library and use that for influencing
> what gets copied into the sdist today? As far as I am aware there is not
> any that do that. I think the standard thing to do in Cython is to produce
> the .c files as part of the sdist process, which is perfectly fine to do.
> With the newer PEPs it doesn’t _need_ to do that, since you can depend on
> Cython in your build steps and just ship the pyx files (although you’re
> still free to compute the .c files AOT and include them in the sdist).
>

I admit I don't know of any either. Nor did I know the standard expectation
in Cython was to generate things in the sdist phase. I have not personally
used it for a project and was only using it as an example of a process that
produces potentially redistributable artifacts.

What you are saying though I think only emphasizes previous comments about
needing to pin down, once and for all, what it means to "be an sdist"
(which I agree with), right now, and decide who is responsible for
constructing that. We don't need to go on a rampage pronouncing new formats
or files requirements like LICENCE... just state the status-quo and accept
it.

Maybe we can start with simply defining an sdist as "some tree with a
DIST-INFO". I'll avoid the package-name.dist-info for now and the problems
therein, unless there is a simple consensus there.

>From that, there seems to only be a small gap in the build api hooks, and a
missing "[sdist-system]" phase (maybe that doesn't sound as nice as
build-system) that I believe would be a small PEP or additional to 517. In
all honesty, I think probably *both* the sdist-system and the build-system
need to be consulted to fully populate DIST-INFO... this can be the
`build_sdist` hook in both. In all honestly, as you have clarified, Cython
is *not* a build-system! It's an sdist-system. The C compiler is the
expected build-system. For many build-systems, `build_sdist` might even be
a noop, but it might still want the opportunity to make adjustments before
starting.

It seems reasonable to me that both systems simply begin from a static
DIST-INFO, if any, then work together to populate and update it. Something
like setuptools_scm, as a sdist-system, might only generate a barebones
METADATA with name and version info, then the selected build-system comes
in and fills the rest. Or something like the Cython sdist-system might
generate more source files and not even touch DIST-INFO, then the selected
build-system comes in and fills the rest. Neither have anything to do with
"the build".

Something like Cython is effectively doing a partial build before producing
a redistributable source tree, and if we skip that step and go straight to
a build via the build-system, then the only real option for sdists at that
point is to ask the same backend, post-build, for the important
redistibutable parts, which may or may not reflect a stable/reproducible
input to the same system.

If I select "Cython" as the build-system, but I need to use a different
compiler for currently-unsupported-platform-X, I'm going to have a bad day.

-- 

C Anthony
_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
https://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to