mirror of
https://github.com/Relintai/osxcross.git
synced 2025-02-03 22:45:56 +01:00
pkg-config wrapper: move setenv() out of the env var loop
This commit is contained in:
parent
7db4705be9
commit
adc32dd2e7
@ -30,27 +30,32 @@ extern char **environ;
|
|||||||
namespace program {
|
namespace program {
|
||||||
namespace osxcross {
|
namespace osxcross {
|
||||||
|
|
||||||
|
struct envvar {
|
||||||
|
std::string name;
|
||||||
|
std::string value;
|
||||||
|
envvar(std::string name, std::string value) : name(name), value(value) {}
|
||||||
|
};
|
||||||
|
|
||||||
int pkg_config(int argc, char **argv) {
|
int pkg_config(int argc, char **argv) {
|
||||||
(void)argc;
|
(void)argc;
|
||||||
|
|
||||||
bool execute = false;
|
std::vector<envvar> envvars;
|
||||||
std::string varname;
|
|
||||||
const char *val;
|
|
||||||
|
|
||||||
// Map OSXCROSS_PKG_* to PKG_*
|
// Map OSXCROSS_PKG_* to PKG_*
|
||||||
for (char **env = environ; *env; ++env) {
|
for (char **env = environ; *env; ++env) {
|
||||||
char *p = *env;
|
char *p = *env;
|
||||||
|
|
||||||
if (!strncmp(p, "OSXCROSS_PKG", 12)) {
|
if (!strncmp(p, "OSXCROSS_PKG", 12)) {
|
||||||
execute = true;
|
|
||||||
p += 9; // skip OSXCROSS_
|
p += 9; // skip OSXCROSS_
|
||||||
val = strchr(p, '=') + 1; // find value offset
|
const char *val = strchr(p, '=') + 1; // find value offset
|
||||||
varname.assign(p, val - p - 1);
|
envvars.push_back(envvar(std::string(p, val - p - 1), val));
|
||||||
setenv(varname.c_str(), val, 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (execute && execvp("pkg-config", argv))
|
for (const envvar &evar : envvars)
|
||||||
|
setenv(evar.name.c_str(), evar.value.c_str(), 1);
|
||||||
|
|
||||||
|
if (!envvars.empty() && execvp("pkg-config", argv))
|
||||||
std::cerr << "cannot find or execute pkg-config" << std::endl;
|
std::cerr << "cannot find or execute pkg-config" << std::endl;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user