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

package main

import (
	"path/filepath"
	"strings"
)

func processSysrootFlag(builder *commandBuilder) {
	fromUser := false
	userSysroot := ""
	for _, arg := range builder.args {
		if arg.fromUser && strings.HasPrefix(arg.value, "--sysroot=") {
			fromUser = true
			sysrootArg := strings.Split(arg.value, "=")
			if len(sysrootArg) == 2 {
				userSysroot = sysrootArg[1]
			}
			break
		}
	}
	sysroot, syrootPresent := builder.env.getenv("SYSROOT")
	if syrootPresent {
		builder.updateEnv("SYSROOT=")
	}
	if sysroot == "" {
		// Use the bundled sysroot by default.
		sysroot = filepath.Join(builder.rootPath, "usr", builder.target.target)
	}
	if !fromUser {
		builder.addPreUserArgs("--sysroot=" + sysroot)
	} else {
		sysroot = userSysroot
	}

	libdir := "-L" + sysroot + "/usr/lib"
	if strings.Contains(builder.target.target, "64") {
		libdir += "64"
	}
	builder.addPostUserArgs(libdir)
}
