diff --git a/uppsrc/ide/clang/clang.h b/uppsrc/ide/clang/clang.h index c383f1a01..c1a7029f6 100644 --- a/uppsrc/ide/clang/clang.h +++ b/uppsrc/ide/clang/clang.h @@ -30,7 +30,7 @@ void PutAssist(const char *s); #include "libclang.h" -bool LoadLibClang(const char *dir); +bool LoadLibClang(const String& dir); bool LoadLibClangAutomatically(); inline bool HasLibClang() diff --git a/uppsrc/ide/clang/libclang.cpp b/uppsrc/ide/clang/libclang.cpp index 53493c544..23b4820bc 100644 --- a/uppsrc/ide/clang/libclang.cpp +++ b/uppsrc/ide/clang/libclang.cpp @@ -10,9 +10,8 @@ bool hasLibClang = false; String LibClangPath; -bool LoadLibClang0(const char *dir, const char *file) +bool LoadLibClang0(const char *path) { - String path = AppendFileName(dir, file); hasLibClang = LibClang(path); if(hasLibClang) { LibClangPath = path; @@ -21,16 +20,20 @@ bool LoadLibClang0(const char *dir, const char *file) return hasLibClang; } -bool LoadLibClang(const char *dir) +bool LoadLibClang(const String& dir) { #ifdef PLATFORM_MACOS // it does not seem to work for some reason, block it for now if(LoadLibClang0(dir, "libclang.dylib")) return true; #endif - if(LoadLibClang0(dir, "libclang.so")) + if(LoadLibClang0(dir + "/libclang.so")) return true; - for(int i = 0; i < 20; i++) - if(LoadLibClang0(dir, "libclang.so." + AsString(i))) + Vector ps; + for(FindFile ff(dir + "/libclang.so*"); ff; ff.Next()) + ps << ff.GetPath(); + Sort(ps, StdGreater()); + for(String p : ps) + if(LoadLibClang0(p)) return true; return false; } diff --git a/uppsrc/ide/main.cpp b/uppsrc/ide/main.cpp index 7b30d1c2f..991091471 100644 --- a/uppsrc/ide/main.cpp +++ b/uppsrc/ide/main.cpp @@ -149,6 +149,8 @@ bool TryLoadLibClang() } if(LoadLibClang(libdir)) return true; + if(LoadLibClang("/usr/lib64")) + return true; if(LoadLibClang("/usr/lib")) return true; for(int i = 200; i >= 10; i--)