| // Copyright 2019 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| package main | |
| import ( | |
| "path" | |
| "regexp" | |
| "testing" | |
| ) | |
| func TestOmitSysrootGivenSysrootSuppressionFlag(t *testing.T) { | |
| escapedAutodetectionFlag := regexp.QuoteMeta(skipSysrootAutodetectionFlag) | |
| withTestContext(t, func(ctx *testContext) { | |
| runWithCompiler := func(compiler string) { | |
| cmd := ctx.must(callCompiler(ctx, ctx.cfg, | |
| ctx.newCommand(compiler, skipSysrootAutodetectionFlag, mainCc))) | |
| if err := verifyArgOrder(cmd, mainCc); err != nil { | |
| t.Error(err) | |
| } | |
| if err := verifyArgCount(cmd, 0, "--sysroot.*"); err != nil { | |
| t.Error(err) | |
| } | |
| if err := verifyArgCount(cmd, 0, "-L.*"); err != nil { | |
| t.Error(err) | |
| } | |
| if err := verifyArgCount(cmd, 0, escapedAutodetectionFlag); err != nil { | |
| t.Error(err) | |
| } | |
| } | |
| runWithCompiler(gccX86_64) | |
| runWithCompiler(clangX86_64) | |
| }) | |
| } | |
| func TestOmitSysrootGivenUserDefinedSysroot(t *testing.T) { | |
| withTestContext(t, func(ctx *testContext) { | |
| runWithCompiler := func(compiler string) { | |
| cmd := ctx.must(callCompiler(ctx, ctx.cfg, | |
| ctx.newCommand(compiler, "--sysroot=/somepath", mainCc))) | |
| if err := verifyArgOrder(cmd, "--sysroot=/somepath", mainCc); err != nil { | |
| t.Error(err) | |
| } | |
| if err := verifyArgCount(cmd, 1, "--sysroot.*"); err != nil { | |
| t.Error(err) | |
| } | |
| } | |
| runWithCompiler(gccX86_64) | |
| runWithCompiler(clangX86_64) | |
| }) | |
| } | |
| func TestSetSysrootFlagFromEnv(t *testing.T) { | |
| withTestContext(t, func(ctx *testContext) { | |
| ctx.env = []string{"SYSROOT=/envpath"} | |
| cmd := ctx.must(callCompiler(ctx, ctx.cfg, | |
| ctx.newCommand(gccX86_64, mainCc))) | |
| if err := verifyEnvUpdate(cmd, "SYSROOT="); err != nil { | |
| t.Error(err) | |
| } | |
| if err := verifyArgOrder(cmd, "--sysroot=/envpath", mainCc); err != nil { | |
| t.Error(err) | |
| } | |
| }) | |
| } | |
| func TestClearEmptySysrootFlagInEnv(t *testing.T) { | |
| withTestContext(t, func(ctx *testContext) { | |
| ctx.env = []string{"SYSROOT="} | |
| cmd := ctx.must(callCompiler(ctx, ctx.cfg, | |
| ctx.newCommand(gccX86_64, mainCc))) | |
| if err := verifyEnvUpdate(cmd, "SYSROOT="); err != nil { | |
| t.Error(err) | |
| } | |
| if err := verifyArgOrder(cmd, "--sysroot=.*/x86_64-cros-linux-gnu", mainCc); err != nil { | |
| t.Error(err) | |
| } | |
| }) | |
| } | |
| func TestSetSysrootRelativeToWrapperPath(t *testing.T) { | |
| withTestContext(t, func(ctx *testContext) { | |
| ctx.cfg.gccRootRelPath = "somepath" | |
| cmd := ctx.must(callCompiler(ctx, ctx.cfg, | |
| ctx.newCommand(gccX86_64, mainCc))) | |
| if err := verifyArgOrder(cmd, | |
| "--sysroot="+ctx.tempDir+"/somepath/usr/x86_64-cros-linux-gnu", mainCc); err != nil { | |
| t.Error(err) | |
| } | |
| }) | |
| } | |
| func TestSetSysrootRelativeToSymlinkedWrapperPath(t *testing.T) { | |
| withTestContext(t, func(ctx *testContext) { | |
| ctx.cfg.gccRootRelPath = "somepath" | |
| linkedWrapperPath := path.Join(ctx.tempDir, "a/linked/path/x86_64-cros-linux-gnu-gcc") | |
| ctx.symlink(path.Join(ctx.tempDir, gccX86_64), linkedWrapperPath) | |
| cmd := ctx.must(callCompiler(ctx, ctx.cfg, | |
| ctx.newCommand(linkedWrapperPath, mainCc))) | |
| if err := verifyArgOrder(cmd, | |
| "--sysroot="+ctx.tempDir+"/somepath/usr/x86_64-cros-linux-gnu", mainCc); err != nil { | |
| t.Error(err) | |
| } | |
| }) | |
| } |