From 1bc3d75a41d21dfbac111a93936977e52330e24e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Sat, 6 Oct 2018 00:16:11 +0300 Subject: [PATCH] For cross-built toolchains, rename the clang executable to clang-$MAJOR.exe --- install-wrappers.sh | 10 ++++++++-- wrappers/clang-target-wrapper.c | 10 +++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/install-wrappers.sh b/install-wrappers.sh index bfc1503..11eb335 100755 --- a/install-wrappers.sh +++ b/install-wrappers.sh @@ -22,13 +22,14 @@ MINGW*) esac if [ -n "$EXEEXT" ]; then - UNICODE=-municode + CLANG_MAJOR=$(basename $(echo $PREFIX/lib/clang/* | awk '{print $NF}') | cut -f 1 -d .) + CTW_FLAGS="-municode -DCLANG=\"clang-$CLANG_MAJOR\"" fi mkdir -p $PREFIX/bin cp wrappers/*-wrapper.sh $PREFIX/bin $CC wrappers/change-pe-arch.c -o $PREFIX/bin/change-pe-arch$EXEEXT -$CC wrappers/clang-target-wrapper.c -o $PREFIX/bin/clang-target-wrapper$EXEEXT -O2 -Wl,-s $UNICODE +$CC wrappers/clang-target-wrapper.c -o $PREFIX/bin/clang-target-wrapper$EXEEXT -O2 -Wl,-s $CTW_FLAGS if [ -n "$EXEEXT" ]; then # For Windows, we should prefer the executable wrapper, which also works # when invoked from outside of MSYS. @@ -52,3 +53,8 @@ for arch in $ARCHS; do ln -sf objcopy-wrapper.sh $arch-w64-mingw32-$exec done done +if [ -n "$EXEEXT" ]; then + if [ ! -L clang$EXEEXT ]; then + mv clang$EXEEXT clang-$CLANG_MAJOR$EXEEXT + fi +fi diff --git a/wrappers/clang-target-wrapper.c b/wrappers/clang-target-wrapper.c index d432c07..0474157 100644 --- a/wrappers/clang-target-wrapper.c +++ b/wrappers/clang-target-wrapper.c @@ -20,6 +20,10 @@ #define _UNICODE #endif +#ifndef CLANG +#define CLANG "clang" +#endif + #include #include #include @@ -82,13 +86,13 @@ int _tmain(int argc, TCHAR* argv[]) { const TCHAR *sep = _tcsrchr(argv0, '/'); if (!sep) sep = _tcsrchr(argv0, '\\'); - TCHAR *clang = _T("clang"); + TCHAR *clang = _T(CLANG); const TCHAR *basename = argv0; if (sep) { int baselen = sep + 1 - argv0; clang = malloc((_tcslen(argv0) + 50) * sizeof(*clang)); memcpy(clang, argv0, baselen * sizeof(*clang)); - _tcscpy(clang + baselen, _T("clang")); + _tcscpy(clang + baselen, _T(CLANG)); basename = sep + 1; } #ifdef _WIN32 @@ -96,7 +100,7 @@ int _tmain(int argc, TCHAR* argv[]) { GetModuleFileName(NULL, module_path, sizeof(module_path)/sizeof(module_path[0])); TCHAR *sep2 = _tcsrchr(module_path, '\\'); if (sep2) { - _tcscpy(sep2 + 1, _T("clang")); + _tcscpy(sep2 + 1, _T(CLANG)); clang = module_path; } #endif