# 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 doesn't support reading modinfo in init functions.
[gccgo] skip

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
go mod tidy # populate go.sum

# 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"
	"log"
	"os"

	_ "rsc.io/quote"
)

func main() {
	b, err := os.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")
}
