diff --git a/cross/crossdirect/APKBUILD b/cross/crossdirect/APKBUILD index 1cd2ba968..a0d4cf4ff 100644 --- a/cross/crossdirect/APKBUILD +++ b/cross/crossdirect/APKBUILD @@ -13,7 +13,7 @@ # implementation details (llvm, fakeroot, rpath). pkgname=crossdirect -pkgver=1 +pkgver=2 pkgrel=0 pkgdesc="Wrappers to launch native cross compilers in foreign chroots" url="https://postmarketOS.org" @@ -29,7 +29,13 @@ build() { for _arch in $_archs; do [ "$_arch" == "$CARCH" ] && continue _hostspec="$(arch_to_hostspec $_arch)" - $CC -o "crossdirect-$_arch" -static -DHOSTSPEC="\"$_hostspec\"" \ + + # Build with -Werror, because we maintain this short program. (If + # upstream is elsewhere, having -Werror is usually not desired.) + $CC -o "crossdirect-$_arch" \ + -static \ + -Werror \ + -DHOSTSPEC="\"$_hostspec\"" \ crossdirect.c done } @@ -57,4 +63,4 @@ package() { done done } -sha512sums="12801031928103bd898a0d54a5c68b33da9bded10a3d145fdf5ce8b70eb0bbbcdd50764279004b6997d85d710fa581dc8b05aa5e0eb62d50c1054cc6d66db87f crossdirect.c" +sha512sums="6a94a2e0842c95b8ca862b71a7b54f280d0fe9da40fe40691628ef6089a995159c1b53513fb006589af064110a9d2592b24c772264c02d27e7bac9871428f757 crossdirect.c" diff --git a/cross/crossdirect/crossdirect.c b/cross/crossdirect/crossdirect.c index 5cff6cccb..319e11fca 100644 --- a/cross/crossdirect/crossdirect.c +++ b/cross/crossdirect/crossdirect.c @@ -9,6 +9,8 @@ #include #include +#define NATIVE_BIN_DIR "/native/usr/lib/ccache/bin" + void exit_userfriendly() { fprintf(stderr, "Please report this at: https://gitlab.com/postmarketOS/pmaports/issues\n"); fprintf(stderr, "As a workaround, you can compile without crossdirect.\n"); @@ -25,9 +27,9 @@ int main(int argc, char** argv) { bool startsWithHostSpec = (strncmp(HOSTSPEC, executableName, sizeof(HOSTSPEC) -1) == 0); if (isClang || startsWithHostSpec) { - snprintf(newExecutable, sizeof(newExecutable), "/native/usr/bin/%s", executableName); + snprintf(newExecutable, sizeof(newExecutable), NATIVE_BIN_DIR "/%s", executableName); } else { - snprintf(newExecutable, sizeof(newExecutable), "/native/usr/bin/" HOSTSPEC "-%s", executableName); + snprintf(newExecutable, sizeof(newExecutable), NATIVE_BIN_DIR "/" HOSTSPEC "-%s", executableName); } char** newArgsPtr = newargv; @@ -58,19 +60,23 @@ int main(int argc, char** argv) { *newArgsPtr = NULL; // new arguments prepared; now setup environmental vars - setenv("LD_LIBRARY_PATH", "/native/lib:/native/usr/lib", true); + char* env[] = {"LD_PRELOAD=", + "LD_LIBRARY_PATH=/native/lib:/native/usr/lib", + "CCACHE_PATH=/native/usr/bin", + NULL}; char* ldPreload = getenv("LD_PRELOAD"); if (ldPreload) { if (strcmp(ldPreload, "/usr/lib/libfakeroot.so") == 0) { - setenv("LD_PRELOAD", "/native/usr/lib/libfakeroot.so", true); + env[0] = "LD_PRELOAD=/native/usr/lib/libfakeroot.so"; } else { fprintf(stderr, "ERROR: crossdirect: can't handle LD_PRELOAD: %s\n", ldPreload); exit_userfriendly(); } } - if (execv(newExecutable, newargv) == -1) { + if (execve(newExecutable, newargv, env) == -1) { fprintf(stderr, "ERROR: crossdirect: failed to execute %s: %s\n", newExecutable, strerror(errno)); + fprintf(stderr, "Maybe the target arch is missing in the ccache-cross-symlinks package?\n"); exit_userfriendly(); } return 1;