summaryrefslogtreecommitdiff
path: root/guix
Commit message (Collapse)AuthorAge
* import: Add binary npm importer.Jelle Licht2024-05-19
| | | | | | | | | | | | | | * guix/scripts/import.scm: (importers): Add "npm-binary". * doc/guix.texi (Invoking guix import): Document npm-binary importer. * guix/import/npm-binary.scm: New file. * guix/scripts/import/npm-binary.scm: New file. * tests/npm-binary.scm: New file. * Makefile.am: Add them. Co-authored-by: Timothy Sample <samplet@ngyro.com> Co-authored-by: Lars-Dominik Braun <lars@6xq.net> Change-Id: I98a45068cf5b9c42790664cc743feaa7ac76f807
* store: Add with-store/non-blocking.Christopher Baines2024-05-13
| | | | | | | | | | | | | | | | | | | | | | | For some applications, it's important to establish a non-blocking connection rather than just making the socket non-blocking after the connection is established. This is because there is I/O on the socket that will block during the handshake. I've noticed this blocking during the handshake causing issues in the build coordinator for example. This commit adds a new with-store variant to avoid changing the behaviour of with-store/open-connection to ensure that this change can't break anything that depends on the blocking nature of the socket. * guix/store.scm (open-unix-domain-socket, open-inet-socket): Take #:non-blocking? and use SOCK_NONBLOCK when calling socket if appropriate. (connect-to-daemon, open-connection, call-with-store): Take #:non-blocking? and pass it on. (with-store/non-blocking): New syntax rule. * .dir-locals.el (scheme-mode): Add entry for with-store/non-blocking. Change-Id: I8225762b78448bc1f7b698c8de5d736e13f577bf
* Use po4a-minimal for guix.Christopher Baines2024-05-13
| | | | | | | | | | As this avoids the indirect dependency on nss, which has a testsuite that takes a long time to run. * gnu/packages/package-management.scm (guix)[native-inputs]: Use po4a-minimal. * guix/self.scm (%packages, translate-texi-manuals): Use po4a-minimal. Change-Id: Iac7555cc850c1618d3d54f1b290faa4f9cfb4f8a
* guix: channels: Handle single case with authenticating message.Rostislav Svoboda2024-05-13
| | | | | | | | | * guix/channels.scm (authenticate-channel): Handle single case with authenticating message. Change-Id: I7759607f37405e6d3bd4b7f5958fd11d908db204 Reviewed-by: Dale Mellor <guix-devel-0brg6a@rdmp.org> Signed-off-by: Christopher Baines <mail@cbaines.net>
* import/cran: Use CRAN mirrors.Ricardo Wurmus2024-05-09
| | | | | | | * guix/import/cran.scm (%cran-url): Use mirror URL instead of primary project domain name. Change-Id: I23a51147d785d6cb645f953ca5ce0ff72f8bd367
* guix: Update Bioconductor version to 3.19.Ricardo Wurmus2024-05-08
| | | | | | | * guix/build-system/r.scm (bioconductor-uri): Use 3.19 URL. * guix/import/cran.scm (%bioconductor-version): Set to 3.19. Change-Id: I7a2c4dfcdb2c4cdfef581f823d87e73acc163549
* packages: ‘sanitize-inputs’ does not add labels when unnecessary.Ludovic Courtès2024-05-05
| | | | | | | | | | | | | | Fixes a bug introduced in 402d0a9b9d290a2e3c549932c8d7262622c58ce1 whereby labels would be added in cases like: (inputs (list `("label" ,whatever))) This idiom is found for example in the ‘nmon’ package. * guix/packages.scm (add-input-labels): Call ‘maybe-add-input-labels’ instead of (map add-input-label …). Change-Id: I3e86d4607f19482a4e461ef8e7a20cde2a41ead7
* packages: Reduce code bloat due to list allocation in input fields.Ludovic Courtès2024-05-04
| | | | | | | * guix/packages.scm (add-input-labels): New procedure. (sanitize-inputs): Add case for (list …). Change-Id: Ice8241508ded51efd38867b97ca19c262b8c4363
* packages: ‘define-public’ replacement calls ‘module-export!’ directly.Ludovic Courtès2024-05-04
| | | | | | | | | | This reduces code bloat and loading overhead for package modules, which use ‘define-public’ extensively. * guix/packages.scm (define-public*): Use ‘define’ followed by ‘module-export!’ directly instead of ‘define-public’. Change-Id: I7f56d46b391c1e3eeeb0b9a08a9d34b5de341245
* records: Do not inline the constructor.Ludovic Courtès2024-05-04
| | | | | | | | | | | | | | | | Struct initialization uses one instruction per field, which contributes to code bloat in the case of package modules. With this change, the ‘.rtl-text’ section of ‘gnu/packages/tex.go’ goes from 7,334,508 B to 6,356,592 B (-13%; -7% on the whole file size), which alone is still larger than the source file (4,2 MB). * guix/records.scm (make-syntactic-constructor)[record-inheritance]: Use CTOR instead of ‘make-struct/no-tail’. Pass ABI-COOKIE as the first argument to CTOR. (define-record-type*): Define CTOR-PROCEDURE and pass it to ‘make-syntactic-constructor’. Change-Id: Ifd7b4e884e9fbf21c43fb4c3ad963126ef5cb476
* packages: Reduce bloat induced by ‘sanitize-inputs’.Ludovic Courtès2024-05-04
| | | | | | | | | | | At -O1, peval does the bulk of the optimization work and it cannot reduce things like (null? (list 1 2)), unlike what happens in CPS at -O2. Thus, reduce the part of ‘sanitize-inputs’ that’s inlined. * guix/packages.scm (maybe-add-input-labels): New procedure. (sanitize-inputs): Turn into a macro; use ‘maybe-add-input-labels’. Change-Id: Id2283bb5a2f5d714722200bdcfe0b0bfa606923f
* records: Do not inline throws for ABI mismatches.Ludovic Courtès2024-05-04
| | | | | | | * guix/records.scm (record-abi-mismatch-error): New procedure. (abi-check): Use it. Change-Id: I49936599716e117b8fbf26fb9d8f462bbbb8e88b
* git authenticate: Install pre-push and post-checkout hooks.Ludovic Courtès2024-05-01
| | | | | | | | * guix/scripts/git/authenticate.scm (install-hooks): New procedure. (guix-git-authenticate): Use it. * doc/guix.texi (Invoking guix git authenticate): Document it. Change-Id: I4464a33193186e85b476a12740e54412bd58429c
* git authenticate: Print something upon success.Ludovic Courtès2024-05-01
| | | | | | | | | Until now the command would be silent and exit with 0. * guix/scripts/git/authenticate.scm (guix-git-authenticate): Print something upon success. Change-Id: I08d086c35df6ac74ee847df0479660293c68987d
* git authenticate: Discover the repository.Ludovic Courtès2024-05-01
| | | | | | | | | | | | This allows one to run ‘guix git authenticate’ from a sub-directory of the checkout. * guix/scripts/git/authenticate.scm (%default-options): Remove ‘directory’ key. (guix-git-authenticate): Use ‘repository-discover’ when ‘directory’ option is missing. Change-Id: Ifada00d559254971ed7eeb8c0a8d4ae74ff3defc
* git authenticate: Record introduction and keyring in ‘.git/config’.Ludovic Courtès2024-05-01
| | | | | | | | | | | | | | * guix/scripts/git/authenticate.scm (%default-options): Remove ‘keyring-reference’. (config-value, configured-introduction, configured-keyring-reference) (configured?, record-configuration, current-branch): New procedures. (guix-git-authenticate)[missing-arguments]: New procedure. Use ‘configured-introduction’ when zero arguments are given. Use ‘configured-keyring-reference’ when ‘-k’ is not passed. Add call to ‘record-configuration’. * doc/guix.texi (Invoking guix git authenticate): Document it. Change-Id: I66e111a83f50407b52da71662629947f83a78bbc
* svn-download: Add dependency on tar+gzip for SWH retrieval.Ludovic Courtès2024-05-01
| | | | | | | | | | | | | | | | Fixes a bug whereby ‘swh-download-directory-by-nar-hash’ would fail due to ‘tar’ not being found in $PATH: $ GUIX_DOWNLOAD_METHODS=swh guix build -S texlive-geometry --check In execvp of tar: No such file or directory SWH: found directory with nar-sha256 hash 217e1c8d33aa6fd063f205453a946509b059b85fa7e8d32b7e80054d5e6e5c26 at 'swh:1:dir:ccb56476fb36b2ba0298e57f2b2e69c735ac0a2f' […] * guix/svn-download.scm (svn-fetch)[tar+gzip]: New variable. [build]: Use it. (svn-multi-fetch): Likewise. Change-Id: I37ba9824a5feb6d38f85743519cbd2b2c3e1a9e8
* import: beautify-description: Fix ". ." case.Nicolas Graves2024-04-29
| | | | | | | | * guix/import/utils.scm (beautify-description): Ensure the matched string pre is long enough not to fail. Change-Id: I3172d9a41350b98222cd9ab758487485f26650b3 Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* pack: ‘-R’ (once) does not include fakechroot fallback.Ludovic Courtès2024-04-29
| | | | | | | | | | | | Previously, ‘guix pack -R’ would build a wrapper containing both the “userns” and “fakechroot” engines, instead of providing nothing but the “userns” engine as the manual says. This patch fixes it. * guix/scripts/pack.scm (wrapped-package): Add #:fakechroot? [build]: When FAKECHROOT? is false, ‘elf-loader-compile-flags’ always returns '(). Change-Id: Ic75cc8c36bf0a3881f299b274d78bd9fc2d4e2bb
* publish: Catch all compression errors.Ludovic Courtès2024-04-28
| | | | | | | | | * guix/scripts/publish.scm (swallow-zlib-error): Remove. (exception-with-kind-and-args?): New variable. (swallow-compression-error): New macro. (http-write): Use it instead of ‘swallow-zlib-error’. Change-Id: I835a1eddd9686741d48365ed37f82b1e1d6f6bdd
* guix: Add xtensa-ath9k-elf platform.Jean-Pierre De Jesus DIAZ2024-04-17
| | | | | | | | | * Makefile.am (MODULES): Add guix/platforms/xtensa.scm. * guix/platforms/xtensa.scm (xtensa-ath9k-elf): New variable. * doc/guix.texi: Add xtensa-ath9k-elf documentation. Change-Id: I51eef245142ed58613340c16d4bf7266e6bf6adb Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* import: github: Recognize more URLs.Giacomo Leidi2024-04-17
| | | | | | | | | | | | | Fixes <https://issues.guix.gnu.org/66396>. This allows more packages to be refreshed, such as launchmon, love, retux, preseq, edgar, antlr3, and runc. * guix/import/github.scm (updated-github-url)[updated-url]: Add additional heuristics to Github url updater. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Change-Id: I6409b3f61872a954f53480afd63b307d16d0b9c0
* Autoload (gcrypt hash).Ludovic Courtès2024-04-15
| | | | | | | * guix/derivations.scm: Autoload (guix utils) and (gcrypt hash). * guix/git.scm, guix/store.scm: Autoload (gcrypt hash). Change-Id: I6145231d41c61f2d8c36e28f29e91074910bdd15
* Autoload (guix build syscalls).Ludovic Courtès2024-04-15
| | | | | | | | * guix/discovery.scm, guix/git.scm, guix/nar.scm, guix/scripts.scm, guix/scripts/build.scm: Autoload (guix build syscalls). * guix/packages.scm: Autoload (guix build utils). Change-Id: Ia7703b5f46e55fbfadff63b13c35bfe097ce2220
* ui: Delay use of (guix build syscalls).Ludovic Courtès2024-04-15
| | | | | | | | | | | This ensures (guix build syscalls) is loaded only when needed. * guix/ui.scm (%text-width): Unconditionally alias ‘*line-width*’. Remove initialization. <top level>: Remove code for Guile < 2.2.7. (package->recutils): Change default #:width to (terminal-columns). Change-Id: I990a1b5b0f20a6243e47e314d1d3d4f8298b7151
* guix: Delay loading of (gnutls).Ludovic Courtès2024-04-15
| | | | | | | | | | | | | | (web …) modules pull in (gnutls) indirectly. Arrange to load them lazily, thereby reducing I/O and allocations when GnuTLS is not needed such as when running ‘guix describe’ or ‘guix shell’ on a cache hit. * guix/download.scm: Autoload (web uri). * guix/scripts/describe.scm: Likewise. * guix/store.scm: Likewise. (%default-substitute-urls): Remove ‘resolve-interface’ call and use https URLs unconditionally. Change-Id: Ide470c556a14866e8740966d25821df487a79859
* utils: Don’t re-export ‘call-with-temporary-output-file’.Ludovic Courtès2024-04-15
| | | | | | | | | | | | * guix/utils.scm: Remove re-export of ‘call-with-temporary-output-file’. Autoload a number of modules. * guix/download.scm, guix/import/hackage.scm, guix/import/hexpm.scm, guix/import/opam.scm, guix/import/pypi.scm, tests/cpio.scm, tests/egg.scm, tests/opam.scm, tests/publish.scm, tests/store-database.scm, tests/utils.scm: Adjust imports accordingly. Change-Id: I3f5e94631397996a30be2ea4ff8b50a3371e8ee7
* guix system: Autoload some more.Ludovic Courtès2024-04-15
| | | | | | * guix/scripts/system.scm: Autoload more modules. Change-Id: I665857109bbfd1e3755135daacc01affcb3eb2eb
* channels: Autoload (git …) modules.Ludovic Courtès2024-04-15
| | | | | | | | | | | | | | | | | | | | Autoloading Guile-Git is important in cases where (guix channels) is used for little more than the <channel> definition. This is the case, for example, of ‘guix describe’ or ‘guix shell’. This reduces from 177 to 121 the number of .go files loaded when running: ./pre-inst-env strace -e openat -o /tmp/log.strace \ guix describe -p /var/guix/profiles/per-user/$USER/current-guix grep 'openat.*\.go.* = [0-9]' < /tmp/log.strace |wc -l Likewise, it reduces the max RSS (as measured by ‘time -f %M guix describe -p …’) from 54 to 37 MiB. * guix/channels.scm: Autoload (git …) modules. Change-Id: Ia58a99c865bf0f6fe461a1e71390d075e760f8d6
* git: Add ‘tag->commit’ and use it in (guix channels).Ludovic Courtès2024-04-15
| | | | | | | | | * guix/git.scm (tag->commit): New procedure, taken from… (resolve-reference): … here. Use it in the ‘tag’ case. * guix/channels.scm (resolve-channel-news-entry-tag): Use ‘tag->commit’ instead of custom code. Change-Id: I46ea387345dc1b695ce0702991a52d0cde29e2f0
* channels: Move ‘commit-short-id’ to (guix git).Ludovic Courtès2024-04-15
| | | | | | | * guix/channels.scm (commit-short-id): Move to… * guix/git.scm (commit-short-id): … here. Change-Id: If4b34b1d82b1aa5068d157f26e57e8aecc967061
* git: Add ‘repository-info’ and use it in (guix channels).Ludovic Courtès2024-04-15
| | | | | | | | * guix/git.scm (repository-info): New procedure. * guix/channels.scm (repository->guix-channel): Use it instead of local code. Change-Id: I74c758c73a22e16031571ca4271cc9cab0492f6e
* channels: Use SRFI-71 instead of SRFI-11.Ludovic Courtès2024-04-15
| | | | | | * guix/channels.scm (latest-channel-instance): Use SRFI-71. Change-Id: I73531c98b3034e228006ed91518cc7bfedc784fd
* gexp: Add #:guile parameter to ‘gexp->file’ and ‘scheme-file’.Ludovic Courtès2024-04-08
| | | | | | | | | | | | | | | | | | | | | | | | | | This brings ‘gexp->file’ in line with its documentation and mirrors what’s done for ‘gexp->script’ and ‘program-file’. Fixes <https://issues.guix.gnu.org/69401>. * guix/gexp.scm (gexp->file): Add #:guile, as was already documented. (<scheme-file>)[guile]: New field. (scheme-file): Add #:guile. (scheme-file-compiler): Honor ‘guile’ field. * tests/gexp.scm ("gexp->file") ("gexp->file + file-append", "gexp->file + #:splice?") ("gexp->file, cross-compilation") ("gexp->file, cross-compilation with default target") Add #:guile to ‘gexp->file’ calls. ("gexp-modules deletes duplicates") ("gexp->derivation & with-imported-module & computed module") ("gexp->derivation & with-extensions", "scheme-file"): Likewise for ‘scheme-file’ calls. Change-Id: I47536063d5e411e561ec321e535267e92dd06044 Reported-by: Efraim Flashner <efraim@flashner.co.il> Change-Id: I58d653c7fbe65c665bafcbd332ac9b264ddeab64
* reconfigure: /run/current-system points to generation.Ludovic Courtès2024-04-08
| | | | | | | | | | * guix/scripts/system/reconfigure.scm (switch-system-program): Set ‘GUIX_NEW_SYSTEM’ to GENERATION rather than OS, for consistency with what ‘boot-system’ does. * gnu/tests/reconfigure.scm (run-switch-to-system-test) ["script activated the new generation"]: Adjust accordingly. Change-Id: I57b693606a41b8c952df32bbdc2b9120c6dbfd6a
* gnu: open-ssh-session: Don’t require public key.Ian Eure2024-04-07
| | | | | | | | | | | Public keys aren’t required for client connections, and this binding is unused. The behavior of assuming a ".pub"-suffixed file exists in the same directory as the secret key is undocumented and surprising. * guix/scripts/offload.scm (open-ssh-session): Delete `public' binding. Signed-off-by: Christopher Baines <mail@cbaines.net> Change-Id: I9b532be2abe68dae0323e4ef6e1ceab1e5603359
* guix: nar: Update path-id to valid-path-id.Christopher Baines2024-04-07
| | | | | | | | To match the change in (guix store database). * guix/nar.scm (finalize-store-file): Update path-id to valid-path-id. Change-Id: I69255c7acc1ea4e4855a4621bfcec54f595dd24d
* store: database: Use correct function name in assertion.Wojtek Kosior2024-04-07
| | | | | | | | * guix/store/database.scm (register-valid-path): Replace "sqlite-register" with "register-valid-path" as argument to `assert-integer'. Change-Id: Id93687e90d0a806d715006ca0b2498a1d10cfba6 Signed-off-by: Christopher Baines <mail@cbaines.net>
* scripts: system: Rename `sqlite-register'.Wojtek Kosior2024-04-07
| | | | | | | | | * guix/scripts/system.scm (define-module): #:autoload `register-valid-path' instead of `sqlite-register'. (copy-item): Call it with the new name. Change-Id: I24f71f822a5f400a47adee43f61184a4fbcb9741 Signed-off-by: Christopher Baines <mail@cbaines.net>
* build: qt-utils: Use QML_IMPORT_PATH2 for Qt 5 (fixup).Zheng Junjie2024-04-06
| | | | | | | | | | | This follows a499d1772df63784e7df1767e58ca1dd5a4b1124 ("build: qt-utils: Use QML_IMPORT_PATH for Qt 6."). * guix/build/qt-utils.scm (variables-for-wrapping): Use QML_IMPORT_PATH2 when the Qt major version is <= 6, QML_IMPORT_PATH otherwise. Change-Id: I2dd1d426aef117105708cc4004078deaa28c15cd Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
* build-system/channel: Add support for additional channels.Ludovic Courtès2024-04-05
| | | | | | | | | | | | | Until now, ‘channel-build-system’ would assume a single channel, the ‘guix’ channel. This change lets users specify additional channels using the #:channels parameter. * guix/build-system/channel.scm (build-channels): Add #:channels and honor it. (channel-build-system): In ‘lower’, add #:channels and honor it. * doc/guix.texi (Build Systems): Document it. Change-Id: I36c1d19cbeee02a4d1144de089b78df0390774a0
* ssh: ‘open-ssh-session’ displays the port number upon error.Ludovic Courtès2024-04-04
| | | | | | * guix/ssh.scm (open-ssh-session): Show the port number in error message. Change-Id: I18a3dc54223bb29782dcdd43d3252c720525c31d
* build: qt-utils: Use QML_IMPORT_PATH for Qt 6.Maxim Cournoyer2024-04-03
| | | | | | | * guix/build/qt-utils.scm (variables-for-wrapping): Use QML_IMPORT_PATH instead of QML2_IMPORT_PATH when the major version is greater or equal to 6. Change-Id: I3480b540d3c0caafd3cc3d6574442dc97f540953
* store: database: Rename a couple of procedures.Christopher Baines2024-04-03
| | | | | | | | | | These names should be more descriptive. * guix/store/database.scm (path-id): Rename to select-valid-path-id. (sqlite-register): Rename to register-valid-path. (register-items): Update accordingly. Change-Id: I6d4a14d4cde9d71ab34d6ffdbfbfde51b2c0e1db
* store: database: Refactor sqlite-register.Christopher Baines2024-04-03
| | | | | | | | | | The update-or-insert procedure name was unhelpfully generic, and these changes should improve the code readability. * guix/store/database.scm (update-or-insert): Remove procedure and inline functionality in to sqlite-register. Change-Id: Ifab0cdb7972d095460cc1f79b8b2f0e9b958059c
* store: database: Stop finalizing prepared statements.Christopher Baines2024-04-03
| | | | | | | | | | | | | | | | Especially since we're asking for these to be cached. Management of prepared statements isn't trivial, since you don't want to keep them forever as this can lead to poor query performance, but I don't think that finalizing them immediately is the right solution. Change-Id: I61706b4d09d771835bb8f074b8f6a6ee871f5e2d * guix/store/database.scm (sqlite-step-and-reset): New procedure. (last-insert-row, path-id, update-or-insert, add-references): Don't finalize prepared statements. Change-Id: I2a2c6deb43935d67df9e43000a5105343d72b3e6
* store: database: Inline SQL to where it's used.Christopher Baines2024-04-03
| | | | | | | | | | | This makes the code easier to read, as you don't have to keep jumping between the two places. * guix/store/database.scm (path-id-sql, update-sql, insert-sql, add-reference-sql): Remove variables. (path-id, update-or-insert, add-references): Include SQL. Change-Id: I53b4ab973be8d0cd10a0f35ba25972f1c9680353
* store: database: Remove with-statement and associated code.Christopher Baines2024-04-03
| | | | | | | | | | | | | | | | | | I think using dynamic-wind to finalize all statements is the wrong approach. Firstly it would be good to allow reseting statements rather than finalizing them. Then for the problem of handling errors, the approach I've settled on in the build coordinator is to close the database connection, since that'll trigger guile-sqlite3 to finalize all the cached statements. This reverts commit 5d6e2255286e591def122ec2f4a3cbda497fea21. * .dir-locals.el (scheme-mode): Remove with-statement. * guix/store/database.scm (call-with-statement): Remove procedure. (with-statement): Remove syntax rule. (call-with-transaction, last-insert-row-id, path-id, update-or-insert, add-references): Don't use with-statement. Change-Id: I2fd976b3f12ec8105cc56350933a953cf53647e8
* store: database: Remove call-with-savepoint and associated code.Christopher Baines2024-04-03
| | | | | | | | | | | | | | | | | | While care does need to be taken with making updates or inserts to the ValidPaths table, I think that trying to ensure this within update-or-insert is the wrong approach. Instead, when working with the store database, only one connection should be used to make changes to the database and those changes should happen in transactions that ideally begin immediately. This reverts commit 37545de4a3bf59611c184b31506fe9a16abe4c8b. * .dir-locals.el (scheme-mode): Remove entries for call-with-savepoint and call-with-retrying-savepoint. * guix/store/database.scm (call-with-savepoint, call-with-retrying-savepoint): Remove procedures. (update-or-insert): Remove use of call-with-savepoint. Change-Id: I2f986e8623d8235a90c40d5f219c1292c1ab157b
* scripts: substitute: Replace some leave calls with raise.Christopher Baines2024-04-03
| | | | | | | | | | | | | These calls happen inside of with-error-handling, so the effect should be the same, but this opens up the possibility of using this code in a program that doesn't want to exit when one of these error conditions is met. Change-Id: I15d963615d85d419559fa0f4333fa4dc1dfbfd3b * guix/scripts/substitute.scm (download-nar, process-substitution): Use raise formatted-message rather than leave. Change-Id: Idd0880206b69e3903e19e0536b87d65a52c200d5