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); }
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; }