misc fixes

This commit is contained in:
Thomas Pöchtrager 2014-09-27 10:07:15 +02:00
parent 0d9ba01d5b
commit a34ce76854
8 changed files with 44 additions and 36 deletions

View File

@ -9,7 +9,7 @@ OSXCROSS_LINKER_VERSION ?= 134.9
OSXCROSS_LIBLTO_PATH ?= OSXCROSS_LIBLTO_PATH ?=
OSXCROSS_CXXFLAGS ?= 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) ifeq ($(LTO), 1)
override CXXFLAGS+=-flto override CXXFLAGS+=-flto

View File

@ -92,10 +92,10 @@ function compile_wrapper()
export PLATFORM export PLATFORM
export CXX export CXX
verbose_cmd make clean verbose_cmd $MAKE clean
OSXCROSS_CXXFLAGS="$FLAGS" \ OSXCROSS_CXXFLAGS="$FLAGS" \
verbose_cmd make wrapper -j$JOBS verbose_cmd $MAKE wrapper -j$JOBS
} }
compile_wrapper compile_wrapper

View File

@ -85,7 +85,7 @@ bool detectTarget(int argc, char **argv, Target &target) {
val = argv[++i]; val = argv[++i];
if (i >= argc) { if (i >= argc) {
std::cerr << "missing argument for '" << val << "'" << std::endl; std::cerr << "missing argument for '" << flag << "'" << std::endl;
return nullptr; return nullptr;
} }
} }
@ -380,9 +380,8 @@ bool detectTarget(int argc, char **argv, Target &target) {
else else
return false; return false;
if (const char *p = strchr(cmd, '-')) { if (const char *p = strchr(cmd, '-'))
target.compiler = &cmd[p - cmd + 1]; target.compiler = &cmd[p - cmd + 1];
}
if (!parseArgs()) if (!parseArgs())
return false; return false;
@ -397,8 +396,8 @@ bool detectTarget(int argc, char **argv, Target &target) {
// and clang + -oc-use-gcc-libs // and clang + -oc-use-gcc-libs
// //
void generateMultiArchObjectFile(int &rc, int argc, char **argv, Target &target, void generateMultiArchObjectFile(int &rc, int argc, char **argv,
int debug) { Target &target, int debug) {
#ifndef _WIN32 #ifndef _WIN32
std::string stdintmpfile; std::string stdintmpfile;
string_vector objs; string_vector objs;
@ -705,13 +704,11 @@ int main(int argc, char **argv) {
cargs = new char *[target.fargs.size() + target.args.size() + 1]; cargs = new char *[target.fargs.size() + target.args.size() + 1];
size_t i = 0; size_t i = 0;
for (auto &arg : target.fargs) { for (auto &arg : target.fargs)
cargs[i++] = const_cast<char *>(arg.c_str()); cargs[i++] = const_cast<char *>(arg.c_str());
}
for (auto &arg : target.args) { for (auto &arg : target.args)
cargs[i++] = const_cast<char *>(arg.c_str()); cargs[i++] = const_cast<char *>(arg.c_str());
}
cargs[i] = nullptr; cargs[i] = nullptr;
} }

18
wrapper/programs/osxcross-conf.cpp Normal file → Executable file
View File

@ -43,23 +43,29 @@ int conf(const Target &target) {
if (!ltopath) if (!ltopath)
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::cout << "export OSXCROSS_OSX_VERSION_MIN=" << OSXVersionMin.shortStr()
<< std::endl; << std::endl;
std::cout << "export OSXCROSS_TARGET=" << getDefaultTarget() << std::endl; std::cout << "export OSXCROSS_TARGET=" << getDefaultTarget() << std::endl;
std::cout << "export OSXCROSS_SDK_VERSION=" << target.getSDKOSNum().shortStr() std::cout << "export OSXCROSS_SDK_VERSION=" << target.getSDKOSNum().shortStr()
<< std::endl; << 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 std::cout << "export OSXCROSS_TARBALL_DIR=" << target.execpath
<< "/../../tarballs" << std::endl; << "/../../tarballs"
<< std::endl;
std::cout << "export OSXCROSS_PATCH_DIR=" << target.execpath std::cout << "export OSXCROSS_PATCH_DIR=" << target.execpath
<< "/../../patches" << std::endl; << "/../../patches"
<< std::endl;
std::cout << "export OSXCROSS_TARGET_DIR=" << target.execpath << "/.." std::cout << "export OSXCROSS_TARGET_DIR=" << target.execpath << "/.."
<< std::endl; << std::endl;
std::cout << "export OSXCROSS_BUILD_DIR=" << target.execpath << "/../../build" std::cout << "export OSXCROSS_BUILD_DIR=" << target.execpath << "/../../build"
<< std::endl; << std::endl;
std::cout << "export OSXCROSS_CCTOOLS_PATH=" << target.execpath << std::endl; std::cout << "export OSXCROSS_CCTOOLS_PATH=" << target.execpath
std::cout << "export OSXCROSS_LIBLTO_PATH=" << ltopath << std::endl; << std::endl;
std::cout << "export OSXCROSS_LIBLTO_PATH=" << ltopath
<< std::endl;
std::cout << "export OSXCROSS_LINKER_VERSION=" << getLinkerVersion() std::cout << "export OSXCROSS_LINKER_VERSION=" << getLinkerVersion()
<< std::endl; << std::endl;

View File

@ -41,9 +41,9 @@ int env(int argc, char **argv) {
// TODO: escape? // TODO: escape?
auto check = [](const char * p, const char * desc)->const char * { auto containsBadChars = [](const char * p, const char * desc)->bool {
if (!p) if (!p)
return nullptr; return false;
const char *pp = p; const char *pp = p;
@ -69,10 +69,10 @@ int env(int argc, char **argv) {
case ' ': case ' ':
case ';': case ';':
badChar(p); badChar(p);
return nullptr; return true;
} }
} }
return pp; return false;
}; };
if (argc <= 1) { if (argc <= 1) {
@ -83,8 +83,8 @@ int env(int argc, char **argv) {
<< std::endl << "please use " << std::endl << std::endl << std::endl << "please use " << std::endl << std::endl
<< "setenv PATH `" << epath << "/osxcross-env -v=PATH`" << "setenv PATH `" << epath << "/osxcross-env -v=PATH`"
<< std::endl << "setenv LD_LIBRARY_PATH `" << epath << std::endl << "setenv LD_LIBRARY_PATH `" << epath
<< "/osxcross-env -v=LD_LIBRARY_PATH`" << std::endl << std::endl << "/osxcross-env -v=LD_LIBRARY_PATH`" << std::endl
<< "instead." << std::endl << 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)); return ((hasPathSeparator && (check(0) || check(1))) || check(-1));
}; };
if (!check(oldpath, "PATH") || !check(oldlibpath, "LD_LIBRARY_PATH") || if (containsBadChars(oldpath, "PATH") ||
!check(ltopath, "LIB LTO PATH")) containsBadChars(oldlibpath, "LD_LIBRARY_PATH") ||
containsBadChars(ltopath, "LIB LTO PATH"))
return 1; return 1;
std::stringstream path; std::stringstream path;

View File

@ -107,10 +107,13 @@ struct Target {
return false; 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 { 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(); } bool isKnownCompiler() const { return isClang() || isGCC(); }

View File

@ -82,8 +82,8 @@ char *getExecutablePath(char *buf, size_t len) {
if (l <= 0) if (l <= 0)
return nullptr; return nullptr;
buf[len - 1] = '\0'; buf[len - 1] = '\0';
p = strrchr(buf, '/'); p = strrchr(buf, PATHDIV);
if (*p) { if (p) {
*p = '\0'; *p = '\0';
} }
return buf; return buf;
@ -328,9 +328,8 @@ std::string &realPath(const char *file, std::string &result, realpathcmp cmp) {
sfile += "/"; sfile += "/";
sfile += file; 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; break;
}
sfile.clear(); sfile.clear();
} while (*p); } while (*p);
@ -340,10 +339,9 @@ std::string &realPath(const char *file, std::string &result, realpathcmp cmp) {
char buf[PATH_MAX + 1]; char buf[PATH_MAX + 1];
ssize_t len; 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); result.assign(buf, len);
} }
}
#endif #endif
result.swap(sfile); result.swap(sfile);
@ -365,7 +363,7 @@ std::string &getPathOfCommand(const char *command, std::string &result) {
} }
const char *getFileName(const char *file) { const char *getFileName(const char *file) {
const char *p = strrchr(file, '/'); const char *p = strrchr(file, PATHDIV);
if (!p) if (!p)
p = file; p = file;

View File

@ -201,6 +201,9 @@ typedef OSVersion ClangVersion;
#ifdef _WIN32 #ifdef _WIN32
int setenv(const char *name, const char *value, int overwrite); int setenv(const char *name, const char *value, int overwrite);
int unsetenv(const char *name); int unsetenv(const char *name);
constexpr char PATHDIV = '\\';
#else
constexpr char PATHDIV = '/';
#endif #endif
// //