1 /// This tests uses the PATH environment variable.
2 // UNSUPPORTED: system-windows
3 
4 // RUN: cd %S
5 
6 /// If --ld-path= specifies a word (without /), -B and COMPILER_PATH are
7 /// consulted to locate the linker.
8 // RUN: %clang %s -### -B %S/Inputs/basic_freebsd_tree/usr/bin --ld-path=ld.bfd \
9 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
10 // RUN:   FileCheck %s --check-prefix=BFD
11 // RUN: env COMPILER_PATH=%S/Inputs/basic_freebsd_tree/usr/bin %clang %s -### --ld-path=ld.bfd \
12 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
13 // RUN:   FileCheck %s --check-prefix=BFD
14 /// Then PATH is consulted.
15 // RUN: env PATH=%S/Inputs/basic_freebsd_tree/usr/bin %clang %s -### --ld-path=ld.bfd \
16 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
17 // RUN:   FileCheck %s --check-prefix=BFD
18 
19 // BFD: Inputs/basic_freebsd_tree/usr/bin/ld.bfd"
20 
21 // RUN: env PATH=%S/Inputs/basic_freebsd_tree/usr/bin %clang %s -### --ld-path=ld.gold \
22 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
23 // RUN:   FileCheck %s --check-prefix=GOLD
24 
25 // GOLD: Inputs/basic_freebsd_tree/usr/bin/ld.gold"
26 
27 // RUN: env COMPILER_PATH= PATH=%S/Inputs/basic_freebsd_tree/usr/bin %clang %s -### --ld-path=not_exist \
28 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
29 // RUN:   FileCheck %s --check-prefix=NOT_EXIST
30 
31 // NOT_EXIST: error: invalid linker name in argument '--ld-path=not_exist'
32 
33 // RUN: %clang %s -### --ld-path= \
34 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
35 // RUN:   FileCheck %s --check-prefix=EMPTY
36 
37 // EMPTY: error: invalid linker name in argument '--ld-path='
38 
39 /// If --ld-path= contains a slash, PATH is not consulted.
40 // RUN: env COMPILER_PATH=%S/Inputs/basic_freebsd_tree/usr/bin %clang %s -### --ld-path=./ld.bfd \
41 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
42 // RUN:   FileCheck %s --check-prefix=NO_BFD
43 
44 // NO_BFD: error: invalid linker name in argument '--ld-path=./ld.bfd'
45 
46 /// --ld-path can specify an absolute path.
47 // RUN: %clang %s -### --ld-path=%S/Inputs/basic_freebsd_tree/usr/bin/ld.bfd \
48 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
49 // RUN:   FileCheck %s --check-prefix=BFD
50 
51 // RUN: %clang %s -### --ld-path=Inputs/basic_freebsd_tree/usr/bin/ld.bfd \
52 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
53 // RUN:   FileCheck %s --check-prefix=BFD
54 
55 /// --ld-path= and -fuse-ld= can be used together. --ld-path= takes precedence.
56 /// -fuse-ld= can be used to specify the linker flavor.
57 // RUN: %clang %s -### -Werror --ld-path=%S/Inputs/basic_freebsd_tree/usr/bin/ld.bfd -fuse-ld=gold \
58 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
59 // RUN:   FileCheck %s --check-prefix=BFD --implicit-check-not=error:
60 
61 /// --ld-path= respects -working-directory.
62 // RUN: %clang %s -### --ld-path=usr/bin/ld.bfd -working-directory=%S/Inputs/basic_freebsd_tree \
63 // RUN:   --target=x86_64-unknown-freebsd --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
64 // RUN:   FileCheck %s --check-prefix=USR_BIN_BFD
65 
66 // USR_BIN_BFD: "usr/bin/ld.bfd"
67