From a34ce768548bf7ae27f9128c023a8cf569e8c81c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20P=C3=B6chtrager?= Date: Sat, 27 Sep 2014 10:07:15 +0200 Subject: [PATCH] misc fixes --- wrapper/Makefile | 2 +- wrapper/build.sh | 4 ++-- wrapper/main.cpp | 15 ++++++--------- wrapper/programs/osxcross-conf.cpp | 18 ++++++++++++------ wrapper/programs/osxcross-env.cpp | 19 ++++++++++--------- wrapper/target.h | 7 +++++-- wrapper/tools.cpp | 12 +++++------- wrapper/tools.h | 3 +++ 8 files changed, 44 insertions(+), 36 deletions(-) mode change 100644 => 100755 wrapper/programs/osxcross-conf.cpp diff --git a/wrapper/Makefile b/wrapper/Makefile index 2cf1f44..006aa30 100644 --- a/wrapper/Makefile +++ b/wrapper/Makefile @@ -9,7 +9,7 @@ OSXCROSS_LINKER_VERSION ?= 134.9 OSXCROSS_LIBLTO_PATH ?= OSXCROSS_CXXFLAGS ?= -override CXXFLAGS=-std=c++0x -Wall -Wextra -pedantic -I. -O$(OPTIMIZE) +override CXXFLAGS=-std=c++0x -Wall -Wextra -pedantic -I. -O$(OPTIMIZE) -g ifeq ($(LTO), 1) override CXXFLAGS+=-flto diff --git a/wrapper/build.sh b/wrapper/build.sh index f773cc5..9843dcd 100755 --- a/wrapper/build.sh +++ b/wrapper/build.sh @@ -92,10 +92,10 @@ function compile_wrapper() export PLATFORM export CXX - verbose_cmd make clean + verbose_cmd $MAKE clean OSXCROSS_CXXFLAGS="$FLAGS" \ - verbose_cmd make wrapper -j$JOBS + verbose_cmd $MAKE wrapper -j$JOBS } compile_wrapper diff --git a/wrapper/main.cpp b/wrapper/main.cpp index 3679798..94e045a 100644 --- a/wrapper/main.cpp +++ b/wrapper/main.cpp @@ -85,7 +85,7 @@ bool detectTarget(int argc, char **argv, Target &target) { val = argv[++i]; if (i >= argc) { - std::cerr << "missing argument for '" << val << "'" << std::endl; + std::cerr << "missing argument for '" << flag << "'" << std::endl; return nullptr; } } @@ -380,9 +380,8 @@ bool detectTarget(int argc, char **argv, Target &target) { else return false; - if (const char *p = strchr(cmd, '-')) { + if (const char *p = strchr(cmd, '-')) target.compiler = &cmd[p - cmd + 1]; - } if (!parseArgs()) return false; @@ -397,8 +396,8 @@ bool detectTarget(int argc, char **argv, Target &target) { // and clang + -oc-use-gcc-libs // -void generateMultiArchObjectFile(int &rc, int argc, char **argv, Target &target, - int debug) { +void generateMultiArchObjectFile(int &rc, int argc, char **argv, + Target &target, int debug) { #ifndef _WIN32 std::string stdintmpfile; string_vector objs; @@ -705,13 +704,11 @@ int main(int argc, char **argv) { cargs = new char *[target.fargs.size() + target.args.size() + 1]; size_t i = 0; - for (auto &arg : target.fargs) { + for (auto &arg : target.fargs) cargs[i++] = const_cast(arg.c_str()); - } - for (auto &arg : target.args) { + for (auto &arg : target.args) cargs[i++] = const_cast(arg.c_str()); - } cargs[i] = nullptr; } diff --git a/wrapper/programs/osxcross-conf.cpp b/wrapper/programs/osxcross-conf.cpp old mode 100644 new mode 100755 index 84965e7..3c9b2a7 --- a/wrapper/programs/osxcross-conf.cpp +++ b/wrapper/programs/osxcross-conf.cpp @@ -43,23 +43,29 @@ int conf(const Target &target) { if (!ltopath) ltopath = ""; - std::cout << "export OSXCROSS_VERSION=" << getOSXCrossVersion() << std::endl; + std::cout << "export OSXCROSS_VERSION=" << getOSXCrossVersion() + << std::endl; std::cout << "export OSXCROSS_OSX_VERSION_MIN=" << OSXVersionMin.shortStr() << std::endl; std::cout << "export OSXCROSS_TARGET=" << getDefaultTarget() << std::endl; std::cout << "export OSXCROSS_SDK_VERSION=" << target.getSDKOSNum().shortStr() << std::endl; - std::cout << "export OSXCROSS_SDK=" << sdkpath << std::endl; + std::cout << "export OSXCROSS_SDK=" << sdkpath + << std::endl; std::cout << "export OSXCROSS_TARBALL_DIR=" << target.execpath - << "/../../tarballs" << std::endl; + << "/../../tarballs" + << std::endl; std::cout << "export OSXCROSS_PATCH_DIR=" << target.execpath - << "/../../patches" << std::endl; + << "/../../patches" + << std::endl; std::cout << "export OSXCROSS_TARGET_DIR=" << target.execpath << "/.." << std::endl; std::cout << "export OSXCROSS_BUILD_DIR=" << target.execpath << "/../../build" << std::endl; - std::cout << "export OSXCROSS_CCTOOLS_PATH=" << target.execpath << std::endl; - std::cout << "export OSXCROSS_LIBLTO_PATH=" << ltopath << std::endl; + std::cout << "export OSXCROSS_CCTOOLS_PATH=" << target.execpath + << std::endl; + std::cout << "export OSXCROSS_LIBLTO_PATH=" << ltopath + << std::endl; std::cout << "export OSXCROSS_LINKER_VERSION=" << getLinkerVersion() << std::endl; diff --git a/wrapper/programs/osxcross-env.cpp b/wrapper/programs/osxcross-env.cpp index 719fd9c..6ca6e6a 100644 --- a/wrapper/programs/osxcross-env.cpp +++ b/wrapper/programs/osxcross-env.cpp @@ -41,9 +41,9 @@ int env(int argc, char **argv) { // TODO: escape? - auto check = [](const char * p, const char * desc)->const char * { + auto containsBadChars = [](const char * p, const char * desc)->bool { if (!p) - return nullptr; + return false; const char *pp = p; @@ -52,7 +52,7 @@ int env(int argc, char **argv) { std::cerr << desc << " should not contain '" << *p << "'" << std::endl; const char *start = - p - std::min(static_cast(p - pp), static_cast(30)); + p - std::min(static_cast(p - pp), static_cast(30)); size_t len = std::min(strlen(start), static_cast(60)); std::cerr << std::string(start, len) << std::endl; @@ -69,10 +69,10 @@ int env(int argc, char **argv) { case ' ': case ';': badChar(p); - return nullptr; + return true; } } - return pp; + return false; }; if (argc <= 1) { @@ -83,8 +83,8 @@ int env(int argc, char **argv) { << std::endl << "please use " << std::endl << std::endl << "setenv PATH `" << epath << "/osxcross-env -v=PATH`" << std::endl << "setenv LD_LIBRARY_PATH `" << epath - << "/osxcross-env -v=LD_LIBRARY_PATH`" << std::endl << std::endl - << "instead." << std::endl << std::endl; + << "/osxcross-env -v=LD_LIBRARY_PATH`" << std::endl + << std::endl << "instead." << std::endl << std::endl; } } @@ -127,8 +127,9 @@ int env(int argc, char **argv) { return ((hasPathSeparator && (check(0) || check(1))) || check(-1)); }; - if (!check(oldpath, "PATH") || !check(oldlibpath, "LD_LIBRARY_PATH") || - !check(ltopath, "LIB LTO PATH")) + if (containsBadChars(oldpath, "PATH") || + containsBadChars(oldlibpath, "LD_LIBRARY_PATH") || + containsBadChars(ltopath, "LIB LTO PATH")) return 1; std::stringstream path; diff --git a/wrapper/target.h b/wrapper/target.h index 8d21f74..1fbc7ef 100644 --- a/wrapper/target.h +++ b/wrapper/target.h @@ -107,10 +107,13 @@ struct Target { return false; } - bool isClang() const { return !compiler.compare(0, 4, "clang", 4); } + bool isClang() const { + return !strncmp(getFileName(compiler.c_str()), "clang", 5); + } bool isGCC() const { - return !compiler.compare(0, 3, "gcc") || !compiler.compare(0, 3, "g++"); + const char *c = getFileName(compiler.c_str()); + return (!strncmp(c, "gcc", 3) || !strncmp(c, "g++", 3)); } bool isKnownCompiler() const { return isClang() || isGCC(); } diff --git a/wrapper/tools.cpp b/wrapper/tools.cpp index 5b10c12..04f8aed 100644 --- a/wrapper/tools.cpp +++ b/wrapper/tools.cpp @@ -82,8 +82,8 @@ char *getExecutablePath(char *buf, size_t len) { if (l <= 0) return nullptr; buf[len - 1] = '\0'; - p = strrchr(buf, '/'); - if (*p) { + p = strrchr(buf, PATHDIV); + if (p) { *p = '\0'; } return buf; @@ -328,9 +328,8 @@ std::string &realPath(const char *file, std::string &result, realpathcmp cmp) { sfile += "/"; sfile += file; - if (!stat(sfile.c_str(), &st) && (!cmp || cmp(sfile.c_str(), st))) { + if (!stat(sfile.c_str(), &st) && (!cmp || cmp(sfile.c_str(), st))) break; - } sfile.clear(); } while (*p); @@ -340,9 +339,8 @@ std::string &realPath(const char *file, std::string &result, realpathcmp cmp) { char buf[PATH_MAX + 1]; ssize_t len; - if ((len = readlink(sfile.c_str(), buf, PATH_MAX)) != -1) { + if ((len = readlink(sfile.c_str(), buf, PATH_MAX)) != -1) result.assign(buf, len); - } } #endif @@ -365,7 +363,7 @@ std::string &getPathOfCommand(const char *command, std::string &result) { } const char *getFileName(const char *file) { - const char *p = strrchr(file, '/'); + const char *p = strrchr(file, PATHDIV); if (!p) p = file; diff --git a/wrapper/tools.h b/wrapper/tools.h index 792686f..bc74355 100644 --- a/wrapper/tools.h +++ b/wrapper/tools.h @@ -201,6 +201,9 @@ typedef OSVersion ClangVersion; #ifdef _WIN32 int setenv(const char *name, const char *value, int overwrite); int unsetenv(const char *name); +constexpr char PATHDIV = '\\'; +#else +constexpr char PATHDIV = '/'; #endif //