Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/compile: should support multiple trimpath arguments and/or splitter in the GOPATH #22382

Closed
polomsky opened this issue Oct 22, 2017 · 9 comments

Comments

Projects
None yet
9 participants
@polomsky
Copy link

commented Oct 22, 2017

What version of Go are you using (go version)?

go 1.9.1

Does this issue reproduce with the latest release?

yes

What operating system and processor architecture are you using (go env)?

does not matter (linux, windows)

What did you do?

When I run go build -gcflags -trimpath somepath go will execute go tool compile -trimpath $WORK -trimpath somepath during build process. Due to this default -trimpath $WORK is not effective.

Another use case is go build -gcflags -trimpath $GOPATH because I want to prevent storing my username (from the homedir) to built binaries and I have more directories in the GOPATH.

What did you expect to see?

all trimpath arguments are used

What did you see instead?

last trimpath argument is used

@ianlancetaylor ianlancetaylor changed the title go tool compile should support multiple trimpath arguments and/or splitter in the GOPATH cmd/compile: should support multiple trimpath arguments and/or splitter in the GOPATH Oct 23, 2017

@ianlancetaylor

This comment has been minimized.

Copy link
Contributor

commented Oct 23, 2017

Thanks, but you are describing a solution rather than a problem. What is the real goal? What paths do you want to trim and why?

@polomsky

This comment has been minimized.

Copy link
Author

commented Oct 23, 2017

I have configuration where there are two gopaths. And both of them show local system information (e.g. my username). I want to remove these paths from the project and keep only src/... part and this is the only method which currently helps.
But trimpath supports only one path and by this default remove of $WORK directory is not working anymore.

@jefferyto

This comment has been minimized.

Copy link

commented Mar 21, 2018

I'm encountering this issue when I'm compiling a program using cgo (with Go 1.10). For example, for this program:

package main

// typedef int (*intFunc) ();
//
// int
// bridge_int_func(intFunc f)
// {
//		return f();
// }
//
// int fortytwo()
// {
//	    return 42;
// }
import "C"
import "fmt"

func main() {
	f := C.intFunc(C.fortytwo)
	fmt.Println(int(C.bridge_int_func(f)))
	// Output: 42
}

If I compile this program with no trimpath flags (go build fortytwo.go), the executable will have these two paths:

/home/jeff/fortytwo.go
_cgo_gotypes.go

If I compile with trimpath flags (go build -gcflags "all=-trimpath=/home/jeff" -asmflags "all=-trimpath=/home/jeff" fortytwo.go), the executable will have these two paths:

fortytwo.go
/tmp/go-build073316115/b001/_cgo_gotypes.go

Because I supplied the trimpath flags, the built-in -trimpath $WORK is overridden. Neither option is great in terms of reproducibility; ideally both paths are trimmed.

@andybons andybons added this to the Unplanned milestone Mar 21, 2018

@jclc

This comment has been minimized.

Copy link

commented Sep 26, 2018

This issue should be more relevant now with modules, since the project you're building can be outside the $GOPATH while modules that your project depends on are built inside $GOPATH.

@ttaylorr

This comment has been minimized.

Copy link

commented Oct 1, 2018

I agree with @jclc that this issue is relevant when using modules, since it is impossible to remove $GOPATH/pkg strings from your binary if you are already using -trimpath on any other location.

I suppose that there are a few of ways to solve this, and I would be curious to which one is most amenable to the Go community:

  1. Teach -trimpath to respect os.PathListSeparator, so that we could say: -trimpath=$(pwd):$GOPATH/pkg, or similar.

  2. Teach cmd/compile to respect multiple -trimpath arguments, which I believe would address issues like #24976, too.

  3. Add additional semantics to always trim $GOPATH/pkg or others from the compiled binary. This option seems too mysterious to me, but I would defer to the judgement of others.

I'd be happy myself to write a patch for any of the above three.

@bcmills

This comment has been minimized.

Copy link
Member

commented Oct 4, 2018

Instead of multiple paths, probably we should have some mode that means “trim all paths that aren't part of the import path”. That would help with cases like #28008 where the caller doesn't actually know the full set of paths in play.

@ttaylorr

This comment has been minimized.

Copy link

commented Oct 5, 2018

@rsc

This comment has been minimized.

Copy link
Contributor

commented Oct 24, 2018

Users should not be using -trimpath. The general problem here is #16860.

@rsc rsc closed this Oct 24, 2018

@wmark

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.