1*760c253cSXin Li// Copyright 2019 The ChromiumOS Authors 2*760c253cSXin Li// Use of this source code is governed by a BSD-style license that can be 3*760c253cSXin Li// found in the LICENSE file. 4*760c253cSXin Li 5*760c253cSXin Lipackage main 6*760c253cSXin Li 7*760c253cSXin Liimport ( 8*760c253cSXin Li "path" 9*760c253cSXin Li "regexp" 10*760c253cSXin Li "testing" 11*760c253cSXin Li) 12*760c253cSXin Li 13*760c253cSXin Lifunc TestOmitSysrootGivenSysrootSuppressionFlag(t *testing.T) { 14*760c253cSXin Li escapedAutodetectionFlag := regexp.QuoteMeta(skipSysrootAutodetectionFlag) 15*760c253cSXin Li withTestContext(t, func(ctx *testContext) { 16*760c253cSXin Li runWithCompiler := func(compiler string) { 17*760c253cSXin Li cmd := ctx.must(callCompiler(ctx, ctx.cfg, 18*760c253cSXin Li ctx.newCommand(compiler, skipSysrootAutodetectionFlag, mainCc))) 19*760c253cSXin Li if err := verifyArgOrder(cmd, mainCc); err != nil { 20*760c253cSXin Li t.Error(err) 21*760c253cSXin Li } 22*760c253cSXin Li if err := verifyArgCount(cmd, 0, "--sysroot.*"); err != nil { 23*760c253cSXin Li t.Error(err) 24*760c253cSXin Li } 25*760c253cSXin Li if err := verifyArgCount(cmd, 0, "-L.*"); err != nil { 26*760c253cSXin Li t.Error(err) 27*760c253cSXin Li } 28*760c253cSXin Li if err := verifyArgCount(cmd, 0, escapedAutodetectionFlag); err != nil { 29*760c253cSXin Li t.Error(err) 30*760c253cSXin Li } 31*760c253cSXin Li } 32*760c253cSXin Li 33*760c253cSXin Li runWithCompiler(gccX86_64) 34*760c253cSXin Li runWithCompiler(clangX86_64) 35*760c253cSXin Li }) 36*760c253cSXin Li} 37*760c253cSXin Li 38*760c253cSXin Lifunc TestOmitSysrootGivenUserDefinedSysroot(t *testing.T) { 39*760c253cSXin Li withTestContext(t, func(ctx *testContext) { 40*760c253cSXin Li runWithCompiler := func(compiler string) { 41*760c253cSXin Li cmd := ctx.must(callCompiler(ctx, ctx.cfg, 42*760c253cSXin Li ctx.newCommand(compiler, "--sysroot=/somepath", mainCc))) 43*760c253cSXin Li if err := verifyArgOrder(cmd, "--sysroot=/somepath", mainCc); err != nil { 44*760c253cSXin Li t.Error(err) 45*760c253cSXin Li } 46*760c253cSXin Li if err := verifyArgCount(cmd, 1, "--sysroot.*"); err != nil { 47*760c253cSXin Li t.Error(err) 48*760c253cSXin Li } 49*760c253cSXin Li } 50*760c253cSXin Li 51*760c253cSXin Li runWithCompiler(gccX86_64) 52*760c253cSXin Li runWithCompiler(clangX86_64) 53*760c253cSXin Li }) 54*760c253cSXin Li} 55*760c253cSXin Li 56*760c253cSXin Lifunc TestSetSysrootFlagFromEnv(t *testing.T) { 57*760c253cSXin Li withTestContext(t, func(ctx *testContext) { 58*760c253cSXin Li ctx.env = []string{"SYSROOT=/envpath"} 59*760c253cSXin Li cmd := ctx.must(callCompiler(ctx, ctx.cfg, 60*760c253cSXin Li ctx.newCommand(gccX86_64, mainCc))) 61*760c253cSXin Li if err := verifyEnvUpdate(cmd, "SYSROOT="); err != nil { 62*760c253cSXin Li t.Error(err) 63*760c253cSXin Li } 64*760c253cSXin Li if err := verifyArgOrder(cmd, "--sysroot=/envpath", mainCc); err != nil { 65*760c253cSXin Li t.Error(err) 66*760c253cSXin Li } 67*760c253cSXin Li }) 68*760c253cSXin Li} 69*760c253cSXin Li 70*760c253cSXin Lifunc TestClearEmptySysrootFlagInEnv(t *testing.T) { 71*760c253cSXin Li withTestContext(t, func(ctx *testContext) { 72*760c253cSXin Li ctx.env = []string{"SYSROOT="} 73*760c253cSXin Li cmd := ctx.must(callCompiler(ctx, ctx.cfg, 74*760c253cSXin Li ctx.newCommand(gccX86_64, mainCc))) 75*760c253cSXin Li if err := verifyEnvUpdate(cmd, "SYSROOT="); err != nil { 76*760c253cSXin Li t.Error(err) 77*760c253cSXin Li } 78*760c253cSXin Li if err := verifyArgOrder(cmd, "--sysroot=.*/x86_64-cros-linux-gnu", mainCc); err != nil { 79*760c253cSXin Li t.Error(err) 80*760c253cSXin Li } 81*760c253cSXin Li }) 82*760c253cSXin Li} 83*760c253cSXin Li 84*760c253cSXin Lifunc TestSetSysrootRelativeToWrapperPath(t *testing.T) { 85*760c253cSXin Li withTestContext(t, func(ctx *testContext) { 86*760c253cSXin Li ctx.cfg.gccRootRelPath = "somepath" 87*760c253cSXin Li cmd := ctx.must(callCompiler(ctx, ctx.cfg, 88*760c253cSXin Li ctx.newCommand(gccX86_64, mainCc))) 89*760c253cSXin Li if err := verifyArgOrder(cmd, 90*760c253cSXin Li "--sysroot="+ctx.tempDir+"/somepath/usr/x86_64-cros-linux-gnu", mainCc); err != nil { 91*760c253cSXin Li t.Error(err) 92*760c253cSXin Li } 93*760c253cSXin Li }) 94*760c253cSXin Li} 95*760c253cSXin Li 96*760c253cSXin Lifunc TestSetSysrootRelativeToSymlinkedWrapperPath(t *testing.T) { 97*760c253cSXin Li withTestContext(t, func(ctx *testContext) { 98*760c253cSXin Li ctx.cfg.gccRootRelPath = "somepath" 99*760c253cSXin Li linkedWrapperPath := path.Join(ctx.tempDir, "a/linked/path/x86_64-cros-linux-gnu-gcc") 100*760c253cSXin Li ctx.symlink(path.Join(ctx.tempDir, gccX86_64), linkedWrapperPath) 101*760c253cSXin Li 102*760c253cSXin Li cmd := ctx.must(callCompiler(ctx, ctx.cfg, 103*760c253cSXin Li ctx.newCommand(linkedWrapperPath, mainCc))) 104*760c253cSXin Li if err := verifyArgOrder(cmd, 105*760c253cSXin Li "--sysroot="+ctx.tempDir+"/somepath/usr/x86_64-cros-linux-gnu", mainCc); err != nil { 106*760c253cSXin Li t.Error(err) 107*760c253cSXin Li } 108*760c253cSXin Li }) 109*760c253cSXin Li} 110