mbox series

[bug#42338,v5,0/9] Composer build-system

Message ID 20231102151725.31362-1-ngraves@ngraves.fr
Headers show
Series Composer build-system | expand

Message

Nicolas Graves Nov. 2, 2023, 3:16 p.m. UTC
This is the result of my further rework of the composer import and
build-system. The `guix: import: composer` commits can be squashed
easily.

This is now tested on 94 php packages with all testing enabled except
for 3 packages. I will submit these packages as a whole in the
alphabetical order (the bootstrap order is not worth it IMO) in a new
guix issue.

Before accepting it, I also would like to propose a change of
names. If me make an analogy with python:
tool: pip <-> composer
package hub: pypi <-> packagist
build-system: python/pyproject <-> php

Since we only take about 90 lines of real composer code, I would
rather call the build-system php-build-system. 
Same thing: instead of `guix import composer` we should rather call
`guix import packagist`.

If that's OK, I'll change it with the next (and hopefully last!)
version of this build system.

Nicolas Graves (9):
  guix: import: Add composer importer.
  gnu: Add composer-classloader.
  guix: Add composer-build-system.
  guix: import: composer: Use memoization.
  guix: import: composer: Fix json->require.
  guix: import: composer: More robust string->license.
  guix: import: composer: Modern inputs formatting.
  guix: import: composer: Full rewrite composer-fetch.
  gnu: composer-build-system: Full check phase rewrite.

 Makefile.am                          |   6 +
 doc/guix.texi                        |  34 +++
 gnu/local.mk                         |   1 +
 gnu/packages/aux-files/findclass.php | 125 +++++++++++
 gnu/packages/php-xyz.scm             |  60 ++++++
 guix/build-system/composer.scm       | 164 +++++++++++++++
 guix/build/composer-build-system.scm | 300 +++++++++++++++++++++++++++
 guix/import/composer.scm             | 267 ++++++++++++++++++++++++
 guix/scripts/import.scm              |   2 +-
 guix/scripts/import/composer.scm     | 107 ++++++++++
 tests/composer.scm                   |  88 ++++++++
 11 files changed, 1153 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/aux-files/findclass.php
 create mode 100644 gnu/packages/php-xyz.scm
 create mode 100644 guix/build-system/composer.scm
 create mode 100644 guix/build/composer-build-system.scm
 create mode 100644 guix/import/composer.scm
 create mode 100644 guix/scripts/import/composer.scm
 create mode 100644 tests/composer.scm

Comments

Ludovic Courtès Dec. 18, 2023, 10:33 p.m. UTC | #1
Hi,

Nicolas Graves <ngraves@ngraves.fr> skribis:

> This is the result of my further rework of the composer import and
> build-system. The `guix: import: composer` commits can be squashed
> easily.
>
> This is now tested on 94 php packages with all testing enabled except
> for 3 packages. I will submit these packages as a whole in the
> alphabetical order (the bootstrap order is not worth it IMO) in a new
> guix issue.
>
> Before accepting it, I also would like to propose a change of
> names. If me make an analogy with python:
> tool: pip <-> composer
> package hub: pypi <-> packagist
> build-system: python/pyproject <-> php
>
> Since we only take about 90 lines of real composer code, I would
> rather call the build-system php-build-system. 
> Same thing: instead of `guix import composer` we should rather call
> `guix import packagist`.
>
> If that's OK, I'll change it with the next (and hopefully last!)
> version of this build system.
>
> Nicolas Graves (9):
>   guix: import: Add composer importer.
>   gnu: Add composer-classloader.
>   guix: Add composer-build-system.
>   guix: import: composer: Use memoization.
>   guix: import: composer: Fix json->require.
>   guix: import: composer: More robust string->license.
>   guix: import: composer: Modern inputs formatting.
>   guix: import: composer: Full rewrite composer-fetch.
>   gnu: composer-build-system: Full check phase rewrite.

In the interest of moving forward, I pushed this:

  6454788a5c build-system/composer: Do not import host-side Guile-JSON modules.
  9dab758791 build-system: Add ‘composer-build-system’.
  e8fd78d54e gnu: Add composer-classloader.
  b7e3945283 guix: import: Add composer importer.

I squashed the importer commits.

However, I also add to make way too many fixes to my taste: adding
missing #:use-module, fixing unbound variables (guessing…), fixing
typos, untangling and build system commit that was fixing things in the
importer, fixing ‘tests/composer.scm’ which wouldn’t pass, fixing a case
where the importer would return a single value instead of two (breaking
recursive imports), and probably others that I forgot.  Not great.

Could you please take a closer look and see whether anything is amiss at
this point?

Next, which PHP packages do we add?  Julien initially submitted 30ish of
them, should we take those?  Or are you planning to submit a separate
set?

It would also be nice if the updater would fill in the ‘inputs’ fields
of <upstream-source>: that would allow ‘guix refresh -u’ to
automatically update inputs.

Thanks in advance!

Ludo’.
Nicolas Graves Dec. 19, 2023, 7:43 a.m. UTC | #2
On 2023-12-18 23:33, Ludovic Courtès wrote:

> Hi,
>
> Nicolas Graves <ngraves@ngraves.fr> skribis:
>
>> This is the result of my further rework of the composer import and
>> build-system. The `guix: import: composer` commits can be squashed
>> easily.
>>
>> This is now tested on 94 php packages with all testing enabled except
>> for 3 packages. I will submit these packages as a whole in the
>> alphabetical order (the bootstrap order is not worth it IMO) in a new
>> guix issue.
>>
>> Before accepting it, I also would like to propose a change of
>> names. If me make an analogy with python:
>> tool: pip <-> composer
>> package hub: pypi <-> packagist
>> build-system: python/pyproject <-> php

>>
>> Since we only take about 90 lines of real composer code, I would
>> rather call the build-system php-build-system. 
>> Same thing: instead of `guix import composer` we should rather call
>> `guix import packagist`.

Do you have an opinion on this? I guess now that's in the code, we can
keep it as is, but that's sad we didn't get to discuss on this. 

>>
>> If that's OK, I'll change it with the next (and hopefully last!)
>> version of this build system.
>>
>> Nicolas Graves (9):
>>   guix: import: Add composer importer.
>>   gnu: Add composer-classloader.
>>   guix: Add composer-build-system.
>>   guix: import: composer: Use memoization.
>>   guix: import: composer: Fix json->require.
>>   guix: import: composer: More robust string->license.
>>   guix: import: composer: Modern inputs formatting.
>>   guix: import: composer: Full rewrite composer-fetch.
>>   gnu: composer-build-system: Full check phase rewrite.
>
> In the interest of moving forward, I pushed this:
>
>   6454788a5c build-system/composer: Do not import host-side Guile-JSON modules.
>   9dab758791 build-system: Add ‘composer-build-system’.
>   e8fd78d54e gnu: Add composer-classloader.
>   b7e3945283 guix: import: Add composer importer.
>
> I squashed the importer commits.
>
> However, I also add to make way too many fixes to my taste: adding
> missing #:use-module, fixing unbound variables (guessing…), fixing
> typos, untangling and build system commit that was fixing things in the
> importer, fixing ‘tests/composer.scm’ which wouldn’t pass, fixing a case
> where the importer would return a single value instead of two (breaking
> recursive imports), and probably others that I forgot.  Not great.
>
> Could you please take a closer look and see whether anything is amiss at
> this point?

Not great indeed, seemed to work fine on my end, will take a look. I
hope I didn't send a different patch series than intended. 

>
> Next, which PHP packages do we add?  Julien initially submitted 30ish of
> them, should we take those?  Or are you planning to submit a separate
> set?

I have a set of 94-97 packages, I've sent them in an email to you and
Julien (an email from ngraves@ngraves.fr on november 2nd), these should
work with this set of commits. Will cut that in commits and submit them
quickly. 

>
> It would also be nice if the updater would fill in the ‘inputs’ fields
> of <upstream-source>: that would allow ‘guix refresh -u’ to
> automatically update inputs.

I will first focus on fixes and packages.

>
> Thanks in advance!
>
> Ludo’.