5.17.2. Contents of The Sysroot Wrapper
Installed programs:
sysroot_wrapper
The Sysroot Wrapper is used to wrap certain binaries that have hardcoded paths to libraries or are architecture specific.
Create the source file:
cat > sysroot_wrapper.c << "EOF" #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> char *sysrootdir = ""; int main(int argc, char *argv[]) { sysrootdir = getenv("CLFS"); if (!sysrootdir) sysrootdir=""; int stdout_pipe[2]; pipe(stdout_pipe); pid_t pid = fork(); if (pid == 0) { /* Redirect stdout to our pipe */ close(1); dup(stdout_pipe[1]); close(stdout_pipe[0]); close(stdout_pipe[1]); char *name = strdup(argv[0]); strcat(name, ".sysroot"); execvp(name, argv); free(name); exit(0); } else { /* Close stdout for write */ close(stdout_pipe[1]); /* redirect our stdout pipe from the child to our stdin */ close(0); dup(stdout_pipe[0]); close(stdout_pipe[0]); char c, lc; char *d = malloc(1); int d_len = 0; while ((c = fgetc(stdin)) != EOF) { d_len++; d = realloc(d, d_len + 1); *(d + d_len - 1) = c; *(d + d_len) = '\0'; if ((lc == '-')&&((c == 'L')||(c == 'I'))) { d_len = d_len + strlen(sysrootdir); d = realloc(d, d_len + 1); strcat(d, sysrootdir); } lc = c; } printf ("%s", d); free(d); exit(0); } return 0; } EOF
Compile and Install the Sysroot Wrapper:
gcc ${BUILD64} sysroot_wrapper.c -o ${CLFS}/cross-tools/bin/sysroot_wrapper