Commit Graph

7507 Commits

Author SHA1 Message Date
Ricardo Wurmus
389c6082a4
import/cran: Set HOME when ExperimentHub is among the inputs.
* guix/import/cran.scm (phases-for-inputs): Add 'set-HOME phase when
ExperimentHub is among inputs.

Change-Id: Ie3a2443934704eed8694a76a651b806209722421
2024-01-22 13:54:44 +01:00
Ricardo Wurmus
29353820f2
import/cran: Also update annotation and experiment packages.
* guix/import/cran.scm (latest-bioconductor-release): Determine package type
and pass it to LATEST-BIOCONDUCTOR-PACKAGE-VERSION and BIOCONDUCTOR-URI.
(%bioconductor-updater): Compose all bioconductor predicates.

Change-Id: Icef3ae05e28ed0f2796d9abf90e51821d2dfcc4c
2024-01-22 13:54:44 +01:00
Jean-Pierre De Jesus DIAZ
2a43692aa7
guix: Add ork1-elf platform.
* doc/guix.texi: Document or1k-elf platform.
* guix/platforms/or1k.scm (or1k-elf): New variable.
* Makefile.am (MODULES): Add guix/platforms/or1k.scm.

Change-Id: I3f71a0fa97f1ebd2bbdbf6cd00a93b477a123648
2024-01-22 11:26:56 +01:00
Ricardo Wurmus
2d83a25450
import/cran: Generate rudimentary ARGUMENTS field.
* guix/import/cran.scm (phases-for-inputs, maybe-arguments): New procedures.
(description->package): Splice in result of MAYBE-ARGUMENTS.

Change-Id: I578e1903f37c91bf865f0be49b04187ec372ed05
2024-01-21 11:08:13 +01:00
Maxim Cournoyer
2d40e6f7ab
build: perl: Accept Gexps for #:module-build-flags.
* guix/build-system/perl.scm (perl-build) [module-build-flags]: Accept gexps.

Change-Id: If1daa4d9a8cf97824b75f2113f4d7d83256463ce
2024-01-18 22:10:58 -05:00
Ricardo Wurmus
d7baeddebe
import/cran: Add transformation for "packaging".
* guix/import/cran.scm (transform-sysname): Add case for "python-packaging".

Change-Id: I0d125fb3858c009a8527d60f56754b9b9c90b409
2024-01-18 16:01:54 +01:00
Ricardo Wurmus
b94047cf81
import/cran: Accept optional alternative download procedure.
This is useful for cached mass imports.

* guix/import/cran.scm (fetch-description-from-tarball): Accept optional
download keyword.
(fetch-description): Accept optional replacement-download argument.

Change-Id: Ic917074656ac34a24c8e7eea3d3e0528fc5180b3
2024-01-17 22:59:11 +01:00
Ricardo Wurmus
01bf69177d
import/cran: Add more invalid package names and translations.
These were encountered in a mass import of Bioconductor packages.

* guix/import/cran.scm (invalid-packages): Add "rtools".
(transform-sysname): Add aliases for Python and bioinformatics packages.

Change-Id: I97e13cee10c2ee85d4b9296d91afccbdbcec4946
2024-01-16 22:36:39 +01:00
Ricardo Wurmus
171ac4fa4f
import/cran: Add more invalid package names and translations.
* guix/import/cran.scm (invalid-packages): Add "build-essential".
(transform-sysname): Add aliases for openssl, libxml2, and zlib.

Change-Id: Ia142ebc388dbcd47caf3b2c5165bc21227bc1832
2024-01-16 19:40:50 +01:00
Efraim Flashner
8520f00d69
import: crate: Simplify find-crate-version.
* guix/import/crate.scm (find-crate-version): Reuse
nonyanked-crate-versions, max-crate-version-of-semver.

Change-Id: I976a3b5a397f0d6a7d723804a98356544bfc7da3
2024-01-16 14:24:10 +02:00
Efraim Flashner
5ce1512b0f
import: crate: Update to latest semver version.
* guix/import/crate.scm (min-element, max-crate-version-of-semver,
nonyanked-crate-versions): New procedures.
(import-release)[version]: Update to the requested version or the newest
semver-compatible version.

Co-authored by David Elsing <david.elsing@posteo.net>
Change-Id: I72b081147c4eb9faf482f159b7145aaaf9f91f29
2024-01-16 14:24:10 +02:00
Tomas Volf
31e736dac2
scripts: pack: Set correct default value for entry-point-argument.
The default value of #f led to ("..." . #f) being passed further down as an
entry point.  That is not an issue for command line invocation, since in that
code path '() was already used as a default value, but it broke docker system
test with the following error:

    building /gnu/store/dll8jj6h5pfgf6ya9skk1g1546smwbib-docker-pack.tar.gz.drv...
    tar: Removing leading `/' from member names
    Backtrace:
               6 (primitive-load "/gnu/store/g8hqzccfvn4mkm41jqs65c27gs7?")
    In ./guix/docker.scm:
        268:6  5 (build-docker-image "/gnu/store/zi2f5dfdrhviinm6jxp3cj?" ?)
    In ice-9/ports.scm:
       433:17  4 (call-with-output-file _ _ #:binary _ #:encoding _)
        476:4  3 (_ _)
    In ./guix/docker.scm:
       270:21  2 (_)
       123:40  1 (config "1996ead589ab366473d935c4d5bd0c38b998f3b299847?" ?)
    In unknown file:
               0 (list->vector ("/gnu/store/1pvqd30qi1aigjdf7s7l8v7?" . #))

    ERROR: In procedure list->vector:
    In procedure vector: Wrong type argument in position 1: ("/gnu/store/1pvqd30qi1aigjdf7s7l8v7wpvrrhfkj-profile/bin/guile" . #f)
    note: keeping build directory `/tmp/guix-build-docker-pack.tar.gz.drv-16'
    builder for `/gnu/store/dll8jj6h5pfgf6ya9skk1g1546smwbib-docker-pack.tar.gz.drv' failed with exit code 1
    build of /gnu/store/dll8jj6h5pfgf6ya9skk1g1546smwbib-docker-pack.tar.gz.drv failed
    View build log at '/var/log/guix/drvs/dl/l8jj6h5pfgf6ya9skk1g1546smwbib-docker-pack.tar.gz.drv.gz'.
    cannot build derivation `/gnu/store/dq9qk1ba0f07572m8ck3xws28x1b3rif-docker-test.drv': 1 dependencies couldn't be built
    guix build: error: build of `/gnu/store/dq9qk1ba0f07572m8ck3xws28x1b3rif-docker-test.drv' failed
    make: *** [Makefile:7044: check-system] Error 1

Breakage was introduced in 7d5168a2af.

* guix/scripts/pack.scm (docker-image)[entry-point-argument]: Default to '().

Change-Id: If5fc1f8bcb0981df11409636e71f2ca91b05612f
2024-01-13 15:39:09 +01:00
Zheng Junjie
c245a54aab
scripts: size: Fix guix size with --system argument.
guix/scripts/size.scm (guix-size): Parameterize %current-system.

Change-Id: Ia0c1ebff4397aa211f73360925f7c688d59b515a
Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2024-01-12 17:26:31 +01:00
David Elsing
b26926189e
guix: import: Optionally import necessary yanked crates.
* doc/guix.texi (Invoking guix import): Mention '--allow-yanked'.
* guix/import/crate.scm (make-crate-sexp): Add yanked? argument. For
yanked packages, use the full version suffixed by "-yanked" for
generated variable names and add a comment and package property.
(crate->guix-package): Add allow-yanked? argument and if it is set to #t,
allow importing yanked crates if no other version matching the
requirements exists.
[find-package-version]: Packages previously marked as yanked are only
included if allow-yanked? is #t and then take the lowest priority.
[find-crate-version]: If allow-yanked? is #t, also consider yanked
versions with the lowest priority.
[dependency-name+version]: Rename to ...
[dependency-name+version+yanked] ...this. Honor allow-yanked? and choose
between an existing package and an upstream package.  Exit with an error
message if no version fulfilling the requirement is found.
[version*]: Exit with an error message if the crate version is not found.
(cargo-recursive-import): Add allow-yanked? argument.
* guix/read-print.scm: Export <comment>.
* guix/scripts/import/crate.scm: Add "--allow-yanked".
* tests/crate.scm: Add test 'crate-recursive-import-only-yanked-available'.
[sort-map-dependencies]: Adjust accordingly.
[remove-yanked-info]: New variable.
Adjust test 'crate-recursive-import-honors-existing-packages'.
(test-bar-dependencies): Add yanked dev-dependencies.
(test-leaf-bob-crate): Add yanked versions.
(rust-leaf-bob-3.0.2-yanked): New variable.

Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
Change-Id: I175d89b39774e6b57dcd1f05bf68718d23866bb7
2024-01-09 09:38:38 +02:00
David Elsing
9f44ff2bb4
import: crate: Optionally import dev-dependencies recursively.
If --recursive-dev-dependencies is specified, development dependencies
are also included for all recursively imported packages.

* doc/guix.texi (Invoking guix import): Mention --recursive-dev-dependencies.
* guix/import/crate.scm (crate-recursive-import): Add
recursive-dev-dependencies? argument.
* guix/scripts/import/crate.scm (show-help, guix-import-crate): Add
"--recursive-dev-dependencies".
* tests/crate.scm: Test both #f and #t for #:recursive-dev-dependencies?
in the 'cargo-recursive-import' test.
(test-root-dependencies): Add intermediate-c as dev-dependency.
(test-intermediate-c-crate, test-intermediate-c-dependencies): New
variables.

Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
Change-Id: Iae89794681155d77f128733120e60f03bc297717
2024-01-09 09:38:38 +02:00
David Elsing
4b0aa65c0a
gnu: import: Fix memoization in crate-recursive-import.
* guix/import/crate.scm (crate-recursive-import): Apply memoize outside the
lambda passed to recursive-import in order to actually use the memoization.

Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
2024-01-09 09:38:38 +02:00
Oleg Pykhalov
519e1e3eb8
scripts: system: Build layered images.
* guix/scripts/system.scm (show-help, %docker-format-options, %options,
%default-options, show-docker-format-options,
show-docker-format-options/detailed, process-action): Handle '--max-layers'
option.
* gnu/system/image.scm (system-docker-image): Same.
* gnu/image.scm (<image>)[max-layers]: New record field.

Change-Id: I2726655aefd6688b976057fd5a38e9972ebfc292
2024-01-08 21:22:44 +03:00
Oleg Pykhalov
0cf75c9b2f
guix: pack: Build layered images.
* guix/scripts/pack.scm (docker-image, guix-pack, %default-options,
%docker-format-options, show-docker-format-options/detailed): Handle
'--max-layers' option.
* doc/guix.texi (Invoking guix pack): Document this.

Change-Id: I90660b2421fcdde891f003469fe2e2edaac7da41
2024-01-08 21:04:44 +03:00
Oleg Pykhalov
d3d3eedf7f
guix: docker: Build layered images.
* guix/docker.scm (%docker-image-max-layers): New variable.
(size-sorted-store-items, create-empty-tar): New procedures.
(config, manifest, build-docker-image): Build layered images.

Change-Id: I4c8846bff0a3ceccb77e6bdf95d4942e5c3efe41
2024-01-08 21:04:44 +03:00
Graham James Addis
7d5168a2af
guix: pack: Add '--entry-point-argument' option.
* guix/scripts/pack.scm:
(entry-point-argument-spec-option-parser): New procedure.
(docker-image, %default-options, %docker-format-options,
show-docker-format-options/detailed, %options, show-docker-format-options,
guix-pack): Handle '--entry-point-argument' option.
* doc/guix.texi: (Invoking guix pack): Document this

Signed-off-by: Oleg Pykhalov <go.wigust@gmail.com>
Change-Id: I1124feff6af39dcc63c85fd6cc7ad50f398489dc
2024-01-08 21:04:44 +03:00
Ekaitz Zarraga
4cafd86f77
build-system/zig: Add cross-compilation support.
* guix/build/zig-build-system.scm (zig-cross-build): New function
(lower): Add cross-compilation support
* guix/build-system/zig.scm (build): Add --target flag with target input
(check): Disable with cross compilation

Change-Id: I5f42ff897bfe00c92c6576900221a15ef210d669
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2024-01-07 16:56:00 +01:00
Ludovic Courtès
dc5e9c0130
ui: It’s 2024 now!
* guix/ui.scm (show-version-and-exit): Change year to 2024.

Change-Id: I00fc2754da2b93d8b595a35aacdff087124df706
2024-01-05 17:27:21 +01:00
Efraim Flashner
433b680dd6
gnu: Add target-x32?.
* guix/utils.scm (target-x32?): New procedure.

Change-Id: Ia16c7edce64de01d5ccb126c7bd9a6736f327b5f
Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
2024-01-04 21:48:17 +02:00
Efraim Flashner
c69230c81f
gnu: Add support for x86_64-linux-gnux32.
* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add entry for
x86_64-linux-gnux32.
* gnu/packages/gcc.scm (gcc-configure-flags-for-triplet): Add
configure-flag for x86_64-linux-gnux32.
* guix/platforms/x86.scm (x86_64-linux-gnux32): New variable.
* guix/utils.scm (gnu-triplet->nix-system): Force x86_64-linux-gnux32 to
output a different nix-system than x86_64-linux-gnu.

Change-Id: I519fea2f8357e4b9895ede05fe8a5e373e9b034a
Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
2024-01-04 21:48:13 +02:00
Ricardo Wurmus
513994aead
import/cran: Restore format-inputs.
This fixes a regression introduced in commit
e6223017d9 causing the selected input style to
be ignored.

* guix/import/cran.scm (format-inputs): New procedure.
(maybe-inputs): Use it.

Change-Id: I0d36f972fcb9888ed2be4ec9360bbcab13c25c5d
2024-01-01 14:35:15 +01:00
Ricardo Wurmus
31ccfe9c91
import/cran: Add invalid package.
* guix/import/cran.scm (invalid-packages): Add libR.

Change-Id: I1e06b44785051dfc4fb85ba06062aa8c8e003495
2024-01-01 14:35:13 +01:00
Romain GARBAGE
0a55bf68bb
scripts: download: Fix docstring typo.
* guix/scripts/download.scm (ensure-valid-store-file-name name): Fix
the docstring.

Change-Id: If3fe3a923f514bb69297b566e0642c5e80fe4648
Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2023-12-27 21:58:16 +01:00
Tobias Geerinckx-Rice
766822aa87
download: Update Apache mirror list.
* guix/download.scm (%mirrors): Remove several vanished hosts and all
FTP URLs.  Use HTTPS where supported.  Add some new HTTPS mirrors.

Change-Id: Ie707e92ae65b8a3287d941e3e6ffb84592417b95
2023-12-17 01:00:00 +01:00
Tobias Geerinckx-Rice
0a7cdaec87
download: Update KDE mirror list.
* guix/download.scm (%mirrors): Update one mirror URL and remove 2 dead
ones.

Change-Id: Ibdc03f0b7df94b73bb5be0fda5a6244b017e747e
2023-12-17 01:00:00 +01:00
Tobias Geerinckx-Rice
970d956128
download: Remove dead SourceForge mirrors.
* guix/download.scm (%mirrors): Remove 2 dead mirror URLs.

Change-Id: I7f0e15ab5499df26fdf0b1702f8bea73c8ec8230
2023-12-17 01:00:00 +01:00
Felix Lechner
7f2583cf55
deprecation: Fix docstring typo.
* guix/deprecation.scm (define-deprecated/public): Fix docstring.

Change-Id: I895b1a86654b2756a9f98e858c622e8e7a6e2c27
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-12-22 17:47:15 +01:00
Ludovic Courtès
7578c25b93
least-authority: Add support for changing UIDs/GIDs before exec.
Fixes <https://issues.guix.gnu.org/67175>.

* guix/least-authority.scm (least-authority-wrapper): Add #:user
and #:group.
[code]: Add calls to ‘setgid’ and ‘setuid’ when appropriate.

Change-Id: I2aad8e5686b42b5c92fc306b114c5c60cb8bc551
2023-12-22 00:31:41 +01:00
Ludovic Courtès
11a454f9da
gexp: #:references-graphs accepts and honors <gexp-input> records.
* guix/gexp.scm (lower-reference-graphs)[tuple->gexp-input]: Add
‘gexp-input?’ case.
(gexp->derivation): Update docstring.
* doc/guix.texi (G-Expressions): Adjust accordingly.
* tests/gexp.scm ("references-file, non-default output"): New test.

Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Change-Id: I595cb75da0867ab8ab44552887dc06ed1d23315e
2023-12-22 00:31:40 +01:00
Ludovic Courtès
d9190abbd2
gexp: Add compiler for <gexp-input>.
* guix/gexp.scm (gexp-input-compiler): New procedure.
* tests/gexp.scm ("gexp references non-existent output")
("gexp-input, as first-class input"): New tests.
* doc/guix.texi (G-Expressions): Document it.

Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Change-Id: I95b58d6e4d77a54364026b4324fbb00125a9402e
2023-12-22 00:31:40 +01:00
Ricardo Wurmus
ee93015b54
import/cran: Export a few more variables and procedures.
This allows users of this module to provide e.g. caching alternatives to the
download and fetch procedures.

* guix/import/cran.scm (%bioconductor-version, download, fetch-description):
Make these variables public.

Change-Id: I9ce14db9be9b8b3314b06fa9eb50a4e24c5dd718
2023-12-19 14:12:59 +01:00
Ludovic Courtès
6454788a5c
build-system/composer: Do not import host-side Guile-JSON modules.
Importing host-side (json …) modules would make builds dependent on the
Guile-JSON version currently installed by the user.  Use
‘with-extensions’ instead.

* guix/build-system/composer.scm (%composer-build-system-modules):
Remove (json …) modules.
(composer-build)[guile-json]: New variable.
[builder]: Wrap body in ‘with-extensions’.

Change-Id: Ibe565572d60481b31292d73c6fa23d42aa3ceecb
2023-12-18 23:16:57 +01:00
Nicolas Graves
9dab758791
build-system: Add ‘composer-build-system’.
* guix/build-system/composer.scm: New file.
* guix/build/composer-build-system.scm: New file.
* gnu/packages/aux-files/findclass.php: New file.
* Makefile.am: Add them.
* doc/guix.texi (Build Systems): Document it.

Co-authored-by: Julien Lepiller <julien@lepiller.eu>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Change-Id: Ie6a05b42ff04d3ad774a0a20278a77e4820bb8f6
2023-12-18 23:16:55 +01:00
Nicolas Graves
b7e3945283
guix: import: Add composer importer.
* guix/import/composer.scm: New file.
* guix/scripts/import/composer.scm: New file.
* guix/tests/composer.scm: New file.
* Makefile.am: Add them.
* guix/scripts/import.scm: Add composer importer.
* doc/guix.texi (Invoking guix import): Mention it.

Change-Id: I44a89b8cc80ef5b4a3cd15e8fbba4a18c1cea0b1

Co-authored-by: Julien Lepiller <julien@lepiller.eu>
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2023-12-18 23:16:28 +01:00
Pierre-Henry Fröhring
e0e6d659b5
build-system: Add mix-build-system.
* guix/build-system/mix.scm: New file.
* guix/build/mix-build-system.scm: New file.

Change-Id: I8066d00f7ada4a384621bf541e679bc512e93435
Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
2023-12-17 22:22:30 +01:00
Efraim Flashner
6aade039e1
guix: import: Report go version for go importer.
* guix/import/go.scm (go-package, go.mod-go-version): New procedures.
(go-module->guix-package): Add the #:go keyword in the generated package
definition if the required go is newer than the default go.
* tests/go.scm (mock-http-get): Use gexps for package arguments.

Change-Id: I8d005740a442330ac307a40a53764c803ceffc4f
2023-12-16 18:05:58 +02:00
Efraim Flashner
e35dd13d8a
guix: import: Don't include indirect dependencies in go.
* guix/import/go.scm (parse-go.mod)[define-peg-patern require]: Adjust
the peg pattern to reject lines with the 'indirect' comment in them.

Change-Id: I9618bbaa1cb8c6549ced875e3c8d32afc72c3b9b
2023-12-16 18:05:58 +02:00
Ludovic Courtès
8662741531
build-system/zig: Do not import (guix build syscalls).
* guix/build-system/zig.scm (%zig-build-system-modules): Remove (guix
build syscalls), which is unused.

Change-Id: Ie91c46c68787e0a8ffa3cbde2c5fd2294b82ed15
2023-12-14 23:12:23 +01:00
MarcoFalke
d5ca4d4fd7
syscalls: Define riscv64 syscall ID for clone.
* guix/build/syscalls.scm (clone): Add an entry for riscv64.

This allows the use of --container on riscv64.

Change-Id: I12b3cb5e2aa248266d006b6e456082f4ddc70e62
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-12-13 12:58:43 +01:00
Efraim Flashner
c9e1a72cc2
Merge branch 'rust-team'
Change-Id: Iee33d7b9067d2180fd4b2e28d81716a251a53a01
2023-12-13 09:28:20 +02:00
Ludovic Courtès
4348947c74
weather: Report unauthorized substitute servers.
The goal is to make it easier to diagnose substitute
misconfiguration (where we’re passing a substitute URL whose
corresponding key is not authorized).

Suggested by Emmanuel Agullo.

* guix/scripts/weather.scm (check-narinfo-authorization): New procedure.
(report-server-coverage): Use it.
* doc/guix.texi (Invoking guix weather): Document it.
(Getting Substitutes from Other Servers): Add “Troubleshooting” frame.

Change-Id: I0a049c39eefb10d6a06634c8b16aa86902769791
2023-12-11 23:19:04 +01:00
Ludovic Courtès
7e11369586
weather: Use the same substitute URLs as guix-daemon.
* guix/scripts/weather.scm (%default-options): Remove ‘substitute-urls’.
(guix-weather): Call ‘substitute-urls’ when OPTS doesn’t have it.  Warn
when ‘substitute-urls’ returns #f.
* doc/guix.texi (Invoking guix weather): Adjust accordingly.

Change-Id: I3e9100074f2ad559e5c408660db70430d64f2bef
2023-12-11 23:19:00 +01:00
Ludovic Courtès
f63a8c5ca2
challenge: Use the same substitute URLs as guix-daemon.
* guix/scripts/challenge.scm (%default-options): Remove ‘substitute-urls’.
(guix-challenge): Call ‘substitute-urls’ when OPTS doesn’t have it.  Warn
when ‘substitute-urls’ returns #f.

Change-Id: I49be0e89404c1889970a3430967fbb3498d35d99
2023-12-11 23:18:57 +01:00
Ludovic Courtès
1e47148f46
daemon: Implement ‘substitute-urls’ RPC.
* nix/libstore/worker-protocol.hh (PROTOCOL_VERSION): Bump.
(WorkerOp): Add ‘wopSubstituteURLs’.
* nix/nix-daemon/nix-daemon.cc (performOp): Implement it.
* guix/store.scm (%protocol-version): Bump.
(operation-id): Add ‘substitute-urls’.
(substitute-urls): New procedure.
* tests/store.scm ("substitute-urls, default")
("substitute-urls, client-specified URLs")
("substitute-urls, disabled"): New tests.

Change-Id: I2c0119500c3a1eecfa5ebf32463ffb0f173161de
2023-12-11 23:18:53 +01:00
Efraim Flashner
34eaf5714e
Merge remote-tracking branch 'origin/master' into rust-team
Change-Id: Ic45f7071abd6a02c2ccad411500e5103c8272ffb
2023-12-10 13:25:47 +02:00
Efraim Flashner
55faf486c7
build: cargo: Use correct config file for cargo config.
* guix/build/cargo-build-system.scm (configure): Use .cargo/config as
the config file.  Add a note.

Change-Id: Ice006c11184d4c8e1bdb765c3998b06ad299e55b
2023-11-28 12:58:36 +02:00