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
Labels
FrozenDueToAge NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone

Comments

@polomsky
Copy link

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
Copy link
Contributor

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
Copy link
Author

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
Copy link

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 the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Mar 21, 2018
@andybons andybons added this to the Unplanned milestone Mar 21, 2018
@jclc
Copy link

jclc 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
Copy link

ttaylorr 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 cmd/go: setting a global "-trimpath" untrims some temporary cgo files #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
Copy link
Contributor

bcmills 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
Copy link

ttaylorr commented Oct 5, 2018 via email

@rsc
Copy link
Contributor

rsc commented Oct 24, 2018

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

@rsc rsc closed this as completed Oct 24, 2018
@mark-kubacki
Copy link

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Projects
None yet
Development

No branches or pull requests

10 participants