am e375c940: Merge "SDK: Use "strip -x" for atree."

* commit 'e375c940b9210ea514227b0ee8cfb896d7f11d93':
  SDK: Use "strip -x" for atree.
This commit is contained in:
Raphael Moll
2012-06-07 13:06:23 -07:00
committed by Android Git Automerger
2 changed files with 49 additions and 3 deletions

View File

@@ -1447,6 +1447,7 @@ $(INTERNAL_SDK_TARGET): $(deps)
done; \ done; \
if [ $$FAIL ]; then exit 1; fi if [ $$FAIL ]; then exit 1; fi
$(hide) ( \ $(hide) ( \
ATREE_STRIP="strip -x" \
$(HOST_OUT_EXECUTABLES)/atree \ $(HOST_OUT_EXECUTABLES)/atree \
$(addprefix -f ,$(PRIVATE_INPUT_FILES)) \ $(addprefix -f ,$(PRIVATE_INPUT_FILES)) \
-m $(PRIVATE_DEP_FILE) \ -m $(PRIVATE_DEP_FILE) \

View File

@@ -152,8 +152,8 @@ copy_file(const string& src, const string& dst)
int int
strip_file(const string& path) strip_file(const string& path)
{ {
// Default strip command to run is "strip" unless overridden by the STRIP env var. // Default strip command to run is "strip" unless overridden by the ATREE_STRIP env var.
const char* strip_cmd = getenv("STRIP"); const char* strip_cmd = getenv("ATREE_STRIP");
if (!strip_cmd || !strip_cmd[0]) { if (!strip_cmd || !strip_cmd[0]) {
strip_cmd = "strip"; strip_cmd = "strip";
} }
@@ -163,7 +163,52 @@ strip_file(const string& path)
return -1; return -1;
} else if (pid == 0) { } else if (pid == 0) {
// Exec in the child. Only returns if execve failed. // Exec in the child. Only returns if execve failed.
return execlp(strip_cmd, strip_cmd, path.c_str(), (char *)NULL);
int num_args = 0;
const char *s = strip_cmd;
while (*s) {
while (*s == ' ') ++s;
if (*s && *s != ' ') {
++num_args;
while (*s && *s != ' ') ++s;
}
}
if (num_args <= 0) {
fprintf(stderr, "Invalid ATREE_STRIP command '%s'\n", strip_cmd);
return 1;
} else if (num_args == 1) {
return execlp(strip_cmd, strip_cmd, path.c_str(), (char *)NULL);
} else {
// Split the arguments if more than 1
char* cmd = strdup(strip_cmd);
const char** args = (const char**) malloc(sizeof(const char*) * (num_args + 2));
const char** curr = args;
char* s = cmd;
while (*s) {
while (*s == ' ') ++s;
if (*s && *s != ' ') {
*curr = s;
++curr;
while (*s && *s != ' ') ++s;
if (*s) {
*s = '\0';
++s;
}
}
}
args[num_args] = path.c_str();
args[num_args + 1] = NULL;
int ret = execvp(args[0], (char* const*)args);
free(args);
free(cmd);
return ret;
}
} else { } else {
// Wait for child pid and return its exit code. // Wait for child pid and return its exit code.
int status; int status;