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_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

View File

@ -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

View File

@ -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<char *>(arg.c_str());
}
for (auto &arg : target.args) {
for (auto &arg : target.args)
cargs[i++] = const_cast<char *>(arg.c_str());
}
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)
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;

View File

@ -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;
@ -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;

View File

@ -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(); }

View File

@ -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,10 +339,9 @@ 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
result.swap(sfile);
@ -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;

View File

@ -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
//