# Test to ensure runtime/debug.ReadBuildInfo parses
# the modinfo embedded in a binary by the go tool
# when module is enabled.
env GO111MODULE=on

[gccgo] stop

cd x
go mod edit -require=rsc.io/quote@v1.5.2
go mod edit -replace=rsc.io/quote@v1.5.2=rsc.io/quote@v1.0.0

# Build a binary and ensure that it can output its own debug info.
# The debug info should be accessible before main starts (golang.org/issue/29628).
go build
exec ./x$GOEXE
stderr 'mod\s+x\s+\(devel\)'
stderr 'dep\s+rsc.io/quote\s+v1.5.2\s+'
stderr '=>\s+rsc.io/quote\s+v1.0.0\s+h1:'
stderr 'Hello, world.'

[short] skip

# Build a binary that accesses its debug info by reading the binary directly
# (rather than through debug.ReadBuildInfo).
# The debug info should still be present (golang.org/issue/28753).
cd unused
go build
exec ./unused$GOEXE

-- x/go.mod --
module x

-- x/lib/lib.go --
// Package lib accesses runtime/debug.modinfo before package main's init
// functions have run.
package lib

import "runtime/debug"

func init() {
	m, ok := debug.ReadBuildInfo()
	if !ok {
		panic("failed debug.ReadBuildInfo")
	}
	println("mod", m.Main.Path, m.Main.Version)
	for _, d := range m.Deps {
		println("dep", d.Path, d.Version, d.Sum)
		if r := d.Replace; r != nil {
			println("=>", r.Path, r.Version, r.Sum)
		}
	}
}

-- x/main.go --
package main

import (
	"rsc.io/quote"
	_ "x/lib"
)

func main() {
	println(quote.Hello())
}

-- x/unused/main.go --
// The unused binary does not access runtime/debug.modinfo.
package main

import (
	"bytes"
	"encoding/hex"
	"io/ioutil"
	"log"
	"os"

	_ "rsc.io/quote"
)

func main() {
	b, err := ioutil.ReadFile(os.Args[0])
	if err != nil {
		log.Fatal(err)
	}

	infoStart, _ := hex.DecodeString("3077af0c9274080241e1c107e6d618e6")
	if !bytes.Contains(b, infoStart) {
		log.Fatal("infoStart not found in binary")
	}
	log.Println("ok")
}
