Golang project's root may miss any .go files which makes build phase to
fail with error similar to:
no Go files in /tmp/<...>/src/golang.org/x/mod
This change implements a SKIP-BUILD? key parameter which is, by default,
set to #f to invoke build procedure. It is taken from cargo-build-system
* guix/build-system/go.scm (go-build, go-cross-build): Add "skip-build?"
key parameter.
* guix/build/go-build-system.scm (build): Add "skip-build?" key
parameter and implement logic.
Change-Id: I3f41414868a7329cbe99324106427cdae4884d94
Golang projects may contain subdirectories with test files, which can't
be reached by providing just IMPORT-PATH to the test runner. This
change implements a TEST-SUBDIRS key parameter which is by default set
to "import-path/..." to run all available tests in the project, and may
be limited to particular subdirs list.
* guix/build-system/go.scm (go-build, go-cross-build): Add "test-subdirs"
key parameter.
* guix/build/go-build-system.scm (check): Add "test-subdirs" key
parameter and adjust test invokation accordingly.
Change-Id: Ibc107deea060f0d71e6f4e1e37c81d3b7c9992f5
During the build phase "-x" option forces go compiler to generate quite
a noisy build log which does not help too much when the build is failed.
This change makes it optional and governed by #:verbosity key passed to
`build' procedure.
* guix/build/go-build-system.scm (build): Provide a link to online
example. Consolidate options in GOFLAGS environment variable, make "-x"
optional. Add description for "-trimpath" option.
Change-Id: Icf1b03eb79db8a6f79f86f3cc212a53de5aa7c1c
This is a follow up adjustment, proposed by Maxim Cournoyer
<maxim.cournoyer@gmail.com> in <https://issues.guix.gnu.org/73299>.
* guix/build/go-build-system.scm (fix-embed-files): Improve the grammar
and style, and provide a URL to the raw source file for reference.
Change-Id: I78824b92d70a2431f61d11e8737bca6a2ddea3fa
By allowing the use of test flags, we can more precisely skip failing tests
(for go version >=1.20), disable the vetting stage or select a subset of tests
(e.g. if an upstream flag is provided to skip tests which require a network
connection). At the moment, the only way around these test failures is to
remove the test file completely or patch the code ourselves.
* guix/build-system/go.scm (go-build): Add test-flags variable.
(go-cross-build): Add test-flags variable.
* guix/build/go-build-system.scm (check): Pass the additional test flags to the invoke call.
* doc/guix.texi (go-build-system): Document <#:test-flags> parameter.
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Change-Id: I4015870fbbc15503cb405fe9ef6032953a5ff17f
Go 1.13 introduced[1] a new "trimpath" flag in charge of removing the
references to the go toolchain in the produced ELFs. We used to remove
these references using the "remove-go-reference" function. This function
was executed after go install. By using this new trimpath flag, we don't
have to remove any store path from the ELFs produced by go install.
We're not using any go older than 1.13 anymore, it's safe to remove
these functions.
[1] https://go.dev/doc/go1.13
-trimpath
remove all file system paths from the resulting executable.
Instead of absolute file system paths, the recorded file names
will begin either a module path@version (when using modules),
or a plain import path (when using the standard library, or
GOPATH).
* guix/build/go-build-system.scm (build): Add -trimpath
(%standard-phases): Remove remove-go-references.
(remove-go-references): Remove.
Change-Id: Idcae366d226da5ce095693f81fd33133fd1d70d6
Co-authored-by: Picnoir <picnoir@alternativebit.fr>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
This causes build failures on powerpc-linux.
* guix/build/go-build-system.scm (unpack): When the unpack-path is unset
use the import-path but don't redefine the unpack-path.
Change-Id: I2b5a36eb738abb14307941d388038139dbaf2bdf
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
This causes build failures on powerpc-linux.
* guix/build/go-build-system.scm (unpack): When the unpack-path is unset
use the import-path but don't redefine the unpack-path.
Change-Id: I2b5a36eb738abb14307941d388038139dbaf2bdf
* guix/build/go-build-system.com (setup-go-environment): Set GOCACHE to
a location within the build directory. Union "/var/cache/go/build"
input directories to initialize the cache. Generate "trim.txt" within
the cache, with the current time.
Signed-off-by: Leo Famulari <leo@famulari.name>
Before when building for i686-linux on x86_64-linux GOARCH would be set
to amd64, not 386.
* guix/build-system/go.scm (go-build): Set goarch and goos to #f when
not cross-compiling.
* guix/build/go-build-system.scm (setup-go-environment): Set GOARCH
according to the calculated goarch or using GOHOSTARCH and GOOS
according to the calculated goos or using GOHOSTOS.
* guix/build-system/go.scm (go-target): New procedure.
(go-build): Add goarch, goos keywords. Adjust bag depending if doing a
native or cross compile.
(go-cross-build): New procedure.
* guix/build/go-build-system.scm (setup-go-environment): Accept goarch,
goos keywords. Set go environment variables based on target architecture.
* doc/guix.texi (Build Systems): Mention new go-build-system keywords.
* guix/build-system/go.scm (build-flags): New argument.
* guix/build/go-build-system.scm (build): Use apply to pass the
additional arguments to invoke.
This allows for upgrading the Go compiler without overhauling
go-build-system first.
* guix/build/go-build-system.scm (setup-go-environment): Set GO111MODULE to
off.
Signed-off-by: Alex Griffin <a@ajgrf.com>
This follows commit f42e4ebb56, which made it so that the unpack phase return
value could be left unspecified.
* guix/build/go-build-system.scm (unpack): Ensure that the value returned upon
a successful completion of the phase is #t.
There was an extraneous pair of parens in commit 7e84d3eef7. Thanks for Mark
Weaver for reporting the issue.
* guix/build/go-build-system.scm (unpack): Remove the extraneous pair of
parentheses surrounding the `display' function call.
Depending on whether the source is a directory or an archive, we strip the
source directory or preserve it, respectively. This change makes it so that
whether the type of the source, it is unpacked at the expected location given
by the IMPORT-PATH of the Go build system.
* guix/build/go-build-system.scm: Add the (ice-9 ftw) module.
(unpack): Add inner procedure to maybe strip the top level directory of an
archive, document it and use it.
This basically changes (guix build-system go) so that instead of looking
up its dependencies in a list of directories in $GOPATH, all the
Go dependencies are symlinked into a single directory.
Fixes <https://bugs.gnu.org/33620>.
* guix/build/go-build-system.scm (setup-go-environment): New variable.
(setup-environment, install-source): Remove variables.
(unpack): Unpack the source relative to $GOPATH.
(install): Do not install the compiled objects in the 'pkg' directory.
Install the source code in this phase, and only install the source of
the package named by IMPORT-PATH.
* doc/guix.texi (Build Systems): Adjust accordingly.
* gnu/packages/docker.scm (docker): Import (guix build union) on the build side
and adjust to build phase name changes in (guix build-system go).
* gnu/packages/shellutils.scm (direnv): Likewise.
* gnu/packages/databases.scm (mongo-tools)[arguments]:
Set '#:install-source #f'.
* gnu/packages/music.scm (demlo)[arguments]: Move the 'install-scripts'
phase after the 'install' phase.