// +build !nacl,!js
// run

// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Run the sinit test.

package main

import (
	"fmt"
	"os"
	"os/exec"
	"strings"
)

func cleanup() {
	os.Remove("linkmain.o")
	os.Remove("linkmain.a")
	os.Remove("linkmain1.o")
	os.Remove("linkmain1.a")
	os.Remove("linkmain.exe")
}

func run(cmdline string) {
	args := strings.Fields(cmdline)
	cmd := exec.Command(args[0], args[1:]...)
	out, err := cmd.CombinedOutput()
	if err != nil {
		fmt.Printf("$ %s\n", cmdline)
		fmt.Println(string(out))
		fmt.Println(err)
		cleanup()
		os.Exit(1)
	}
}

func runFail(cmdline string) {
	args := strings.Fields(cmdline)
	cmd := exec.Command(args[0], args[1:]...)
	out, err := cmd.CombinedOutput()
	if err == nil {
		fmt.Printf("$ %s\n", cmdline)
		fmt.Println(string(out))
		fmt.Println("SHOULD HAVE FAILED!")
		cleanup()
		os.Exit(1)
	}
}

func main() {
	// helloworld.go is package main
	run("go tool compile -o linkmain.o helloworld.go")
	run("go tool compile -pack -o linkmain.a helloworld.go")
	run("go tool link -o linkmain.exe linkmain.o")
	run("go tool link -o linkmain.exe linkmain.a")

	// linkmain.go is not
	run("go tool compile -o linkmain1.o linkmain.go")
	run("go tool compile -pack -o linkmain1.a linkmain.go")
	runFail("go tool link -o linkmain.exe linkmain1.o")
	runFail("go tool link -o linkmain.exe linkmain1.a")
	cleanup()
}
