Exemple #1
0
void
CFCPerl_write_callbacks(CFCPerl *self) {
    CFCBindCore *core_binding
        = CFCBindCore_new(self->hierarchy, self->header, self->footer);
    CFCBindCore_write_callbacks_h(core_binding);
    CFCBase_decref((CFCBase*)core_binding);

    S_write_callbacks_c(self);
}
Exemple #2
0
int
main(int argc, char **argv) {
    int           i;
    size_t        file_len;
    CFCArgs       args;
    CFCHierarchy *hierarchy;
    CFCBindCore  *core_binding;
    CFCC         *c_binding;
    char         *header = NULL;
    char         *footer = NULL;
    const char   *include_env;

    S_parse_arguments(argc, argv, &args);

    hierarchy = CFCHierarchy_new(args.dest);

    for (i = 0; args.source_dirs[i]; ++i) {
        CFCHierarchy_add_source_dir(hierarchy, args.source_dirs[i]);
    }
    for (i = 0; args.include_dirs[i]; ++i) {
        CFCHierarchy_add_include_dir(hierarchy, args.include_dirs[i]);
    }

    /* Add include dirs from environment variable CLOWNFISH_INCLUDE. */
    include_env = getenv("CLOWNFISH_INCLUDE");
    if (include_env != NULL) {
        char *include_env_copy = CFCUtil_strdup(include_env);
        const char *include_dir;

        for (include_dir = strtok(include_env_copy, ":");
             include_dir != NULL;
             include_dir = strtok(NULL, ":")
        ) {
            if (include_dir[0] != '\0') {
                CFCHierarchy_add_include_dir(hierarchy, include_dir);
            }
        }

        FREEMEM(include_env_copy);
    }
    else if (UNIX_FILESYSTEM) {
        /*
         * Only add system include dirs if CLOWNFISH_INCLUDE is unset to
         * avoid errors when a parcel is found in multiple locations.
         */
        CFCHierarchy_add_include_dir(hierarchy, "/usr/local/" SYS_INCLUDE_DIR);
        CFCHierarchy_add_include_dir(hierarchy, "/usr/" SYS_INCLUDE_DIR);
    }

    for (i = 0; args.parcels[i]; ++i) {
        CFCHierarchy_add_prereq(hierarchy, args.parcels[i]);
    }

    CFCHierarchy_build(hierarchy);

    if (args.header_filename) {
        header = CFCUtil_slurp_text(args.header_filename, &file_len);
    }
    else {
        header = CFCUtil_strdup("");
    }
    if (args.footer_filename) {
        footer = CFCUtil_slurp_text(args.footer_filename, &file_len);
    }
    else {
        footer = CFCUtil_strdup("");
    }

    core_binding = CFCBindCore_new(hierarchy, header, footer);
    CFCBindCore_write_all_modified(core_binding, 0);

    c_binding = CFCC_new(hierarchy, header, footer);
    CFCC_write_hostdefs(c_binding);
    if (args.num_source_dirs != 0) {
        CFCC_write_html_docs(c_binding);
        CFCC_write_man_pages(c_binding);
    }

    CFCHierarchy_write_log(hierarchy);

    CFCBase_decref((CFCBase*)c_binding);
    CFCBase_decref((CFCBase*)core_binding);
    CFCBase_decref((CFCBase*)hierarchy);
    FREEMEM(header);
    FREEMEM(footer);

    CFCClass_clear_registry();
    CFCParcel_reap_singletons();

    S_free_arguments(&args);

    return EXIT_SUCCESS;
}