}
}
- // Rewrite overlaid paths in cgo files.
- // cgo adds //line and #line pragmas in generated files with these paths.
- var trimpath []string
- for i := range cgofiles {
- path := mkAbs(p.Dir, cgofiles[i])
- if opath, ok := fsys.OverlayPath(path); ok {
- cgofiles[i] = opath
- trimpath = append(trimpath, opath+"=>"+path)
- }
- }
- if len(trimpath) > 0 {
- cgoflags = append(cgoflags, "-trimpath", strings.Join(trimpath, ";"))
- }
-
if err := b.run(a, execdir, p.ImportPath, cgoenv, cfg.BuildToolexec, cgoExe, "-objdir", objdir, "-importpath", p.ImportPath, cgoflags, "--", cgoCPPFLAGS, cgoCFLAGS, cgofiles); err != nil {
return nil, nil, err
}
exec ./main_cgo_angle$GOEXE
stdout '^hello cgo\r?\n'
-go list -compiled -overlay -f '{{range .CompiledGoFiles}}{{. | printf "%s\n"}}{{end}}' ./cgo_hello_replace
-cp stdout compiled_cgo_sources.txt
-go run ../print_line_comments.go compiled_cgo_sources.txt
-stdout $GOPATH/src/m/cgo_hello_replace/cgo_hello_replace.go
-!stdout $GOPATH/src/m/overlay/hello.c
-
# Run same tests but with gccgo.
env GO111MODULE=off
[!exec:gccgo] stop
void say_hello() { puts("hello cgo\n"); fflush(stdout); }
--- print_line_comments.go --
-package main
-
-import (
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "strings"
-)
-
-func main() {
- compiledGoFilesArg := os.Args[1]
- b, err := ioutil.ReadFile(compiledGoFilesArg)
- if err != nil {
- log.Fatal(err)
- }
- compiledGoFiles := strings.Split(strings.TrimSpace(string(b)), "\n")
- for _, f := range compiledGoFiles {
- b, err := ioutil.ReadFile(f)
- if err != nil {
- log.Fatal(err)
- }
- for _, line := range strings.Split(string(b), "\n") {
- if strings.HasPrefix(line, "#line") || strings.HasPrefix(line, "//line") {
- fmt.Println(line)
- }
- }
- }
-}
\ No newline at end of file