/* Remove a package from the given target. */ retvalue target_removepackage(struct target *target, struct logger *logger, const char *name, struct trackingdata *trackingdata) { struct package old; retvalue r; assert(target != NULL && target->packages != NULL && name != NULL); r = package_get(target, name, NULL, &old); if (RET_WAS_ERROR(r)) { return r; } else if (r == RET_NOTHING) { if (verbose >= 10) fprintf(stderr, "Could not find '%s' in '%s'...\n", name, target->identifier); return RET_NOTHING; } r = package_remove(&old, logger, trackingdata); package_done(&old); return r; }
int main(int argc, char* argv[]) { stringtab_init(); pass_opt_t opt; pass_opt_init(&opt); opt.release = true; opt.output = "."; ast_setwidth(get_width()); bool print_program_ast = false; bool print_package_ast = false; opt_state_t s; opt_init(args, &s, &argc, argv); bool ok = true; bool print_usage = false; int id; while((id = opt_next(&s)) != -1) { switch(id) { case OPT_VERSION: printf("%s\n", PONY_VERSION); return 0; case OPT_DEBUG: opt.release = false; break; case OPT_BUILDFLAG: define_build_flag(s.arg_val); break; case OPT_STRIP: opt.strip_debug = true; break; case OPT_PATHS: package_add_paths(s.arg_val); break; case OPT_OUTPUT: opt.output = s.arg_val; break; case OPT_LIBRARY: opt.library = true; break; case OPT_DOCS: opt.docs = true; break; case OPT_SAFE: if(!package_add_safe(s.arg_val)) ok = false; break; case OPT_IEEEMATH: opt.ieee_math = true; break; case OPT_CPU: opt.cpu = s.arg_val; break; case OPT_FEATURES: opt.features = s.arg_val; break; case OPT_TRIPLE: opt.triple = s.arg_val; break; case OPT_STATS: opt.print_stats = true; break; case OPT_AST: print_program_ast = true; break; case OPT_ASTPACKAGE: print_package_ast = true; break; case OPT_TRACE: parse_trace(true); break; case OPT_WIDTH: ast_setwidth(atoi(s.arg_val)); break; case OPT_IMMERR: error_set_immediate(true); break; case OPT_VERIFY: opt.verify = true; break; case OPT_FILENAMES: opt.print_filenames = true; break; case OPT_CHECKTREE: enable_check_tree(true); break; case OPT_BNF: print_grammar(false, true); return 0; case OPT_ANTLR: print_grammar(true, true); return 0; case OPT_ANTLRRAW: print_grammar(true, false); return 0; case OPT_PASSES: if(!limit_passes(&opt, s.arg_val)) { ok = false; print_usage = true; } break; default: usage(); return -1; } } for(int i = 1; i < argc; i++) { if(argv[i][0] == '-') { printf("Unrecognised option: %s\n", argv[i]); ok = false; print_usage = true; } } #ifdef PLATFORM_IS_WINDOWS opt.strip_debug = true; #endif if(!ok) { print_errors(); if(print_usage) usage(); return -1; } if(package_init(&opt)) { if(argc == 1) { ok &= compile_package(".", &opt, print_program_ast, print_package_ast); } else { for(int i = 1; i < argc; i++) ok &= compile_package(argv[i], &opt, print_program_ast, print_package_ast); } } if(!ok && get_error_count() == 0) printf("Error: internal failure not reported\n"); package_done(&opt); pass_opt_done(&opt); stringtab_done(); return ok ? 0 : -1; }