⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jlibtool.c

📁 Apache官方在今天放出产品系列2.2的最新版本2.2.11的源码包 最流行的HTTP服务器软件之一
💻 C
📖 第 1 页 / 共 4 页
字号:
 * Add a directory to the runtime library search path. */void add_runtimedirlib(char *arg, command_t *cmd_data){#ifdef RPATH    add_rpath(cmd_data->shared_opts.dependencies, arg);#else#endif}int parse_long_opt(char *arg, command_t *cmd_data){    char *equal_pos = strchr(arg, '=');    char var[50];    char value[500];    if (equal_pos) {        strncpy(var, arg, equal_pos - arg);        var[equal_pos - arg] = 0;        strcpy(value, equal_pos + 1);    } else {        strcpy(var, arg);    }    if (strcmp(var, "silent") == 0) {        cmd_data->options.silent = 1;    } else if (strcmp(var, "mode") == 0) {        if (strcmp(value, "compile") == 0) {            cmd_data->mode = mCompile;            cmd_data->output = otObject;        }        if (strcmp(value, "link") == 0) {            cmd_data->mode = mLink;            cmd_data->output = otLibrary;        }        if (strcmp(value, "install") == 0) {            cmd_data->mode = mInstall;        }    } else if (strcmp(var, "shared") == 0) {        if (cmd_data->mode == mLink) {            cmd_data->output = otDynamicLibraryOnly;        }        cmd_data->options.shared = share_SHARED;    } else if (strcmp(var, "export-all") == 0) {        cmd_data->options.export_all = 1;    } else if (strcmp(var, "dry-run") == 0) {        printf("Dry-run mode on!\n");        cmd_data->options.dry_run = 1;    } else if (strcmp(var, "version") == 0) {        printf("Version " VERSION "\n");    } else if (strcmp(var, "help") == 0) {        printf("Sorry.  No help available.\n");    } else if (strcmp(var, "config") == 0) {        print_config();    } else if (strcmp(var, "tag") == 0) {        if (strcmp(value, "CC") == 0) {            /* Do nothing. */        }        if (strcmp(value, "CXX") == 0) {            /* Do nothing. */        }    } else {        return 0;    }    return 1;}/* Return 1 if we eat it. */int parse_short_opt(char *arg, command_t *cmd_data){    if (strcmp(arg, "export-dynamic") == 0) {        cmd_data->options.export_dynamic = 1;        return 1;    }    if (strcmp(arg, "module") == 0) {        cmd_data->output = otModule;        return 1;    }    if (strcmp(arg, "shared") == 0) {        if (cmd_data->mode == mLink) {            cmd_data->output = otDynamicLibraryOnly;        }        cmd_data->options.shared = share_SHARED;        return 1;    }    if (strcmp(arg, "Zexe") == 0) {        return 1;    }    if (strcmp(arg, "avoid-version") == 0) {        return 1;    }    if (strcmp(arg, "prefer-pic") == 0) {        cmd_data->options.pic_mode = pic_PREFER;        return 1;    }    if (strcmp(arg, "prefer-non-pic") == 0) {        cmd_data->options.pic_mode = pic_AVOID;        return 1;    }    if (strcmp(arg, "static") == 0) {        cmd_data->options.shared = share_STATIC;        return 1;    }    if (cmd_data->mode == mLink) {        if (strcmp(arg, "no-install") == 0) {            cmd_data->options.no_install = 1;            return 1;        }        if (arg[0] == 'L' || arg[0] == 'l') {            /* Hack... */            arg--;            push_count_chars(cmd_data->shared_opts.dependencies, arg);            return 1;        } else if (arg[0] == 'R' && arg[1]) {            /* -Rdir Add dir to runtime library search path. */            add_runtimedirlib(&arg[1], cmd_data);            return 1;        }    }    return 0;}char *truncate_dll_name(char *path){    /* Cut DLL name down to 8 characters after removing any mod_ prefix */    char *tmppath = strdup(path);    char *newname = strrchr(tmppath, '/') + 1;    char *ext = strrchr(tmppath, '.');    int len;    if (ext == NULL)        return tmppath;    len = ext - newname;    if (strncmp(newname, "mod_", 4) == 0) {        strcpy(newname, newname + 4);        len -= 4;    }    if (len > 8) {        strcpy(newname + 8, strchr(newname, '.'));    }    return tmppath;}long safe_strtol(const char *nptr, const char **endptr, int base){    long rv;    errno = 0;    rv = strtol(nptr, (char**)endptr, 10);    if (errno == ERANGE) {        return 0;    }    return rv; }void safe_mkdir(const char *path){    mode_t old_umask;    old_umask = umask(0);    umask(old_umask);#ifdef MKDIR_NO_UMASK    mkdir(path);#else    mkdir(path, ~old_umask);#endif}/* version_info is in the form of MAJOR:MINOR:PATCH */const char *darwin_dynamic_link_function(const char *version_info){    char *newarg;    long major, minor, patch;    major = 0;    minor = 0;    patch = 0;    if (version_info) {        major = safe_strtol(version_info, &version_info, 10);        if (version_info) {            if (version_info[0] == ':') {                version_info++;            }            minor = safe_strtol(version_info, &version_info, 10);            if (version_info) {                if (version_info[0] == ':') {                    version_info++;                }                patch = safe_strtol(version_info, &version_info, 10);            }        }    }    /* Avoid -dylib_compatibility_version must be greater than zero errors. */    if (major == 0) {        major = 1;    }    newarg = (char*)malloc(100);    snprintf(newarg, 99,             "-compatibility_version %ld -current_version %ld.%ld",             major, major, minor);    return newarg;}/* genlib values * 0 - static * 1 - dynamic * 2 - module */char *gen_library_name(const char *name, int genlib){    char *newarg, *newext;    newarg = (char *)malloc(strlen(name) + 10);    strcpy(newarg, ".libs/");    if (genlib == 2 && strncmp(name, "lib", 3) == 0) {        name += 3;    }    strcat(newarg, name);    newext = strrchr(newarg, '.') + 1;    switch (genlib) {    case 0:        strcpy(newext, STATIC_LIB_EXT);        break;    case 1:        strcpy(newext, DYNAMIC_LIB_EXT);        break;    case 2:        strcpy(newext, MODULE_LIB_EXT);        break;    }    return newarg;}/* genlib values * 0 - static * 1 - dynamic * 2 - module */char *gen_install_name(const char *name, int genlib){    struct stat sb;    char *newname;    int rv;    newname = gen_library_name(name, genlib);    /* Check if it exists. If not, return NULL.  */    rv = stat(newname, &sb);    if (rv) {        return NULL;    }    return newname;}char *check_object_exists(command_t *cmd, const char *arg, int arglen){    char *newarg, *ext;    int pass, rv;    newarg = (char *)malloc(arglen + 10);    memcpy(newarg, arg, arglen);    newarg[arglen] = 0;    ext = newarg + arglen;    pass = 0;    do {        struct stat sb;        switch (pass) {        case 0:            strcpy(ext, OBJECT_EXT);            break;/*        case 1:            strcpy(ext, NO_PIC_EXT);            break;*/        default:            break;        }         if (!cmd->options.silent) {            printf("Checking (obj): %s\n", newarg);        }        rv = stat(newarg, &sb);    }    while (rv != 0 && ++pass < 1);    if (rv == 0) {        if (pass == 1) {            cmd->options.pic_mode = pic_AVOID;        }        return newarg;    }    return NULL;}/* libdircheck values: * 0 - no .libs suffix * 1 - .libs suffix */char *check_library_exists(command_t *cmd, const char *arg, int pathlen,                           int libdircheck, enum lib_type *libtype){    char *newarg, *ext;    int pass, rv, newpathlen;    newarg = (char *)malloc(strlen(arg) + 10);    strcpy(newarg, arg);    newarg[pathlen] = 0;    newpathlen = pathlen;    if (libdircheck) {        strcat(newarg, ".libs/");        newpathlen += sizeof(".libs/") - 1;    }    strcpy(newarg+newpathlen, arg+pathlen);    ext = strrchr(newarg, '.') + 1;    pass = 0;    do {        struct stat sb;        switch (pass) {        case 0:            if (cmd->options.pic_mode != pic_AVOID &&                cmd->options.shared != share_STATIC) {                strcpy(ext, DYNAMIC_LIB_EXT);                *libtype = type_DYNAMIC_LIB;                break;            }            pass = 1;            /* Fall through */        case 1:            strcpy(ext, STATIC_LIB_EXT);            *libtype = type_STATIC_LIB;            break;        case 2:            strcpy(ext, MODULE_LIB_EXT);            *libtype = type_MODULE_LIB;            break;        case 3:            strcpy(ext, OBJECT_EXT);            *libtype = type_OBJECT;            break;        default:            *libtype = type_UNKNOWN;            break;        }         if (!cmd->options.silent) {            printf("Checking (lib): %s\n", newarg);        }        rv = stat(newarg, &sb);    }    while (rv != 0 && ++pass < 4);    if (rv == 0) {        return newarg;    }    return NULL;}char * load_install_path(const char *arg){    FILE *f;    char *path;    path = malloc(PATH_MAX);    f = fopen(arg,"r");    if (f == NULL) {        return NULL;    }    fgets(path, PATH_MAX, f);    fclose(f);    if (path[strlen(path)-1] == '\n') {        path[strlen(path)-1] = '\0';    }    /* Check that we have an absolute path.     * Otherwise the file could be a GNU libtool file.     */    if (path[0] != '/') {        return NULL;    }    return path;}char * load_noinstall_path(const char *arg, int pathlen){    char *newarg, *expanded_path;    int newpathlen;    newarg = (char *)malloc(strlen(arg) + 10);    strcpy(newarg, arg);    newarg[pathlen] = 0;    newpathlen = pathlen;    strcat(newarg, ".libs");    newpathlen += sizeof(".libs") - 1;    newarg[newpathlen] = 0;#ifdef HAS_REALPATH    expanded_path = malloc(PATH_MAX);    expanded_path = realpath(newarg, expanded_path);    /* Uh, oh.  There was an error.  Fall back on our first guess. */    if (!expanded_path) {        expanded_path = newarg;    }#else    /* We might get ../ or something goofy.  Oh, well. */    expanded_path = newarg;#endif    return expanded_path;}void add_dynamic_link_opts(command_t *cmd_data, count_chars *args){#ifdef DYNAMIC_LINK_OPTS    if (cmd_data->options.pic_mode != pic_AVOID) {        if (!cmd_data->options.silent) {           printf("Adding: %s\n", DYNAMIC_LINK_OPTS);        }        push_count_chars(args, DYNAMIC_LINK_OPTS);        if (cmd_data->undefined_flag) {            push_count_chars(args, "-undefined");#if defined(__APPLE__)            /* -undefined dynamic_lookup is used by the bundled Python in             * 10.4, but if we don't set MACOSX_DEPLOYMENT_TARGET to 10.3+,             * we'll get a linker error if we pass this flag.             */            if (strcasecmp(cmd_data->undefined_flag,                           "dynamic_lookup") == 0) {                insert_count_chars(cmd_data->program_opts,                                   "MACOSX_DEPLOYMENT_TARGET=10.3", 0);            }#endif            push_count_chars(args, cmd_data->undefined_flag);        }        else {#ifdef DYNAMIC_LINK_UNDEFINED            if (!cmd_data->options.silent) {                printf("Adding: %s\n", DYNAMIC_LINK_UNDEFINED);            }            push_count_chars(args, DYNAMIC_LINK_UNDEFINED);#endif        }    }#endif}/* Read the final install location and add it to runtime library search path. */#ifdef RPATHvoid add_rpath(count_chars *cc, const char *path){    int size = 0;    char *tmp;#ifdef LINKER_FLAG_PREFIX    size = strlen(LINKER_FLAG_PREFIX);#endif    size = size + strlen(path) + strlen(RPATH) + 2;    tmp = malloc(size);    if (tmp == NULL) {        return;    }#ifdef LINKER_FLAG_PREFIX    strcpy(tmp, LINKER_FLAG_PREFIX);    strcat(tmp, RPATH);#else    strcpy(tmp, RPATH);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -