summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-02-16 23:00:15 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-02-17 22:47:02 +0900
commit4113862c0068a8a95d752f5fdf14980f92cd41d7 (patch)
tree8645c7b805dec97d3c7661744e58cd7aaad12bbf
parent992bdfea2d3030c041a33d58221ffdcd91f1a999 (diff)
downloadruby-4113862c0068a8a95d752f5fdf14980f92cd41d7.tar.gz
Do not search for commands with double tool prefixes [Bug #18504]
The `CC` found by `AC_CHECK_TOOL` is prefixed by the host triplet when cross compiling. To search for commands with `AC_CHECK_TOOL` based on that `CC` means to search also doubly prefixed names.
-rw-r--r--configure.ac42
1 files changed, 23 insertions, 19 deletions
diff --git a/configure.ac b/configure.ac
index 4feefb5791..4b8dce1a2f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -169,38 +169,42 @@ AC_ARG_VAR([STRIP], [Strip command])
# We don't want to bother things like `ccache gcc`, `clang -shared-libgcc`, ...
set rb_dummy ${CC}
rb_CC=$2
+AC_DEFUN([RUBY_CHECK_PROG_FOR_CC], [
+ rb_prog=`echo "${rb_CC}" | sed "$2"`
+ AC_CHECK_PROG([$1], [$rb_prog], [$rb_prog])
+])
AS_CASE(["/${rb_CC} "],
[*@<:@\ /@:>@"cc "*], [
# Don't try g++/clang++ when CC=cc
- AC_CHECK_TOOLS([CXX], [cl.exe CC c++])
+ AC_CHECK_PROGS([CXX], [cl.exe CC c++])
],
[*icc*], [
# Intel C++ has interprocedural optimizations. It tends to come with its
# own linker etc.
- AC_CHECK_TOOL([AR], [`echo "${rb_CC}" | sed s/icc/xiar/`])
- AC_CHECK_TOOL([CXX], [`echo "${rb_CC}" | sed s/icc/icpc/`])
- AC_CHECK_TOOL([LD], [`echo "${rb_CC}" | sed s/icc/xild/`])
+ RUBY_CHECK_PROG_FOR_CC([AR], [s/icc/xiar/])
+ RUBY_CHECK_PROG_FOR_CC([CXX], [s/icc/icpc/])
+ RUBY_CHECK_PROG_FOR_CC([LD], [s/icc/xild/])
],
[*gcc*], [
- # Dito for GCC.
- AC_CHECK_TOOL([LD], [`echo "${rb_CC}" | sed s/gcc/ld/`])
- AC_CHECK_TOOL([AR], [`echo "${rb_CC}" | sed s/gcc/gcc-ar/`])
- AC_CHECK_TOOL([CXX], [`echo "${rb_CC}" | sed s/gcc/g++/`])
- AC_CHECK_TOOL([NM], [`echo "${rb_CC}" | sed s/gcc/gcc-nm/`])
- AC_CHECK_TOOL([RANLIB], [`echo "${rb_CC}" | sed s/gcc/gcc-ranlib/`])
+ # Ditto for GCC.
+ RUBY_CHECK_PROG_FOR_CC([LD], [s/gcc/ld/])
+ RUBY_CHECK_PROG_FOR_CC([AR], [s/gcc/gcc-ar/])
+ RUBY_CHECK_PROG_FOR_CC([CXX], [s/gcc/g++/])
+ RUBY_CHECK_PROG_FOR_CC([NM], [s/gcc/gcc-nm/])
+ RUBY_CHECK_PROG_FOR_CC([RANLIB], [s/gcc/gcc-ranlib/])
],
[*clang*], [
- # Dito for LLVM. Note however that llvm-as is a LLVM-IR to LLVM bitcode
+ # Ditto for LLVM. Note however that llvm-as is a LLVM-IR to LLVM bitcode
# assembler that does not target your machine native binary.
: ${LD:="${CC}"} # ... try -fuse-ld=lld ?
- AC_CHECK_TOOL([AR], [`echo "${rb_CC}" | sed s/clang/llvm-ar/`])
-# AC_CHECK_TOOL([AS], [`echo "${rb_CC}" | sed s/clang/llvm-as/`])
- AC_CHECK_TOOL([CXX], [`echo "${rb_CC}" | sed s/clang/clang++/`])
- AC_CHECK_TOOL([NM], [`echo "${rb_CC}" | sed s/clang/llvm-nm/`])
- AC_CHECK_TOOL([OBJCOPY], [`echo "${rb_CC}" | sed s/clang/llvm-objcopy/`])
- AC_CHECK_TOOL([OBJDUMP], [`echo "${rb_CC}" | sed s/clang/llvm-objdump/`])
- AC_CHECK_TOOL([RANLIB], [`echo "${rb_CC}" | sed s/clang/llvm-ranlib/`])
- AC_CHECK_TOOL([STRIP], [`echo "${rb_CC}" | sed s/clang/llvm-strip/`])
+ RUBY_CHECK_PROG_FOR_CC([AR], [s/clang/llvm-ar/])
+# RUBY_CHECK_PROG_FOR_CC([AS], [s/clang/llvm-as/])
+ RUBY_CHECK_PROG_FOR_CC([CXX], [s/clang/clang++/])
+ RUBY_CHECK_PROG_FOR_CC([NM], [s/clang/llvm-nm/])
+ RUBY_CHECK_PROG_FOR_CC([OBJCOPY], [s/clang/llvm-objcopy/])
+ RUBY_CHECK_PROG_FOR_CC([OBJDUMP], [s/clang/llvm-objdump/])
+ RUBY_CHECK_PROG_FOR_CC([RANLIB], [s/clang/llvm-ranlib/])
+ RUBY_CHECK_PROG_FOR_CC([STRIP], [s/clang/llvm-strip/])
])
AS_UNSET(rb_CC)
AS_UNSET(rb_dummy)