END_TEST START_TEST (test_pkg_info) { size_t i = -1; char *string = NULL; slapt_rc_config *rc = slapt_read_rc_config("./data/rc1"); string = slapt_gen_short_pkg_description(&pkg); fail_if (string == NULL); fail_unless (strcmp(string,"gslapt (GTK slapt-get, an APT like system for Slackware)") == 0); free(string); string = NULL; string = slapt_gen_filename_from_url("http://software.jaos.org/slackpacks/11.0/","PACKAGES.TXT"); fail_if (string == NULL); fail_unless (strcmp(string,".http:##software.jaos.org#slackpacks#11.0#PACKAGES.TXT") == 0); free(string); string = NULL; string = slapt_gen_head_cache_filename(".http:##software.jaos.org#slackpacks#11.0#PACKAGES.TXT"); fail_if (string == NULL); fail_unless (strcmp(string,".http:##software.jaos.org#slackpacks#11.0#PACKAGES.TXT.head") == 0); free(string); string = NULL; string = slapt_gen_pkg_url(&pkg); fail_if (string == NULL); fail_unless (strcmp(string,"http://software.jaos.org/slackpacks/11.0/./gslapt-0.3.15-i386-1.tgz") == 0); free(string); string = NULL; slapt_add_list_item(rc->exclude_list,"^gslapt$"); fail_if (slapt_is_excluded(rc,&pkg) == 0); slapt_remove_list_item(rc->exclude_list,"^gslapt$"); fail_unless (slapt_download_pkg(rc, &pkg, NULL) == 0); fail_unless (slapt_verify_downloaded_pkg(rc,&pkg) == 0); i = slapt_get_pkg_file_size(rc, &pkg); fail_if (i < 1); string = strdup(pkg.description); slapt_clean_description(string, pkg.name); fail_unless (strcmp(string," gslapt (GTK slapt-get, an APT like system for Slackware)\n") == 0); free(string); string = NULL; /* retrieve the packages changelog entry, if any. Returns NULL otherwise */ /* char *slapt_get_pkg_changelog(const slapt_pkg_info_t *pkg); */ /* get the package filelist, returns (char *) on success or NULL on error */ /* char *slapt_get_pkg_filelist(const slapt_pkg_info_t *pkg); */ fail_unless (pkg.priority == SLAPT_PRIORITY_DEFAULT); fail_unless (strcmp(slapt_priority_to_str(pkg.priority),gettext("Default")) == 0); slapt_free_rc_config(rc); }
static void add_suggestion(slapt_transaction_t *tran, slapt_pkg_info_t *pkg) { slapt_list_t *suggests = NULL; unsigned int i = 0; if (pkg->suggests == NULL || strlen(pkg->suggests) == 0) { return; } suggests = slapt_parse_delimited_list(pkg->suggests, ','); for (i = 0; i < suggests->count; i++) { /* no need to add it if we already have it */ if (slapt_search_transaction(tran,suggests->items[i]) == 1) continue; slapt_add_list_item(tran->suggests, suggests->items[i]); } slapt_free_list(suggests); }
int main (int argc, char *argv[]) { int c = -1, option_index = 0, action = 0, i = 0, rval = 0; slapt_list_t *names = slapt_init_list (); slapt_src_config *config = NULL; slapt_src_slackbuild_list *sbs = NULL; slapt_src_slackbuild_list *remote_sbs = NULL; slapt_pkg_list_t *installed = NULL; SLAPT_BOOL_T prompt = SLAPT_TRUE, do_dep = SLAPT_TRUE, simulate = SLAPT_FALSE; char *config_file = NULL, *postcmd = NULL; static struct option long_options[] = { {"version", no_argument, 0, VERSION_OPT}, {"help", no_argument, 0, HELP_OPT}, {"update", no_argument, 0, UPDATE_OPT}, {"list", no_argument, 0, LIST_OPT}, {"clean", no_argument, 0, CLEAN_OPT}, {"e", no_argument, 0, CLEAN_OPT}, {"search", required_argument, 0, SEARCH_OPT}, {"s", required_argument, 0, SEARCH_OPT}, {"show", required_argument, 0, SHOW_OPT}, {"w", required_argument, 0, SHOW_OPT}, {"fetch", required_argument, 0, FETCH_OPT}, {"build", required_argument, 0, BUILD_OPT}, {"install", required_argument, 0, INSTALL_OPT}, {"yes", no_argument, 0, YES_OPT}, {"simulate", no_argument, 0, SIMULATE_OPT}, {"t", no_argument, 0, SIMULATE_OPT}, {"no-dep", no_argument, 0, NODEP_OPT}, {"config", required_argument, 0, CONFIG_OPT}, {"c", required_argument, 0, CONFIG_OPT}, {"postprocess", required_argument, 0, POSTCMD_OPT}, {0, 0, 0, 0} }; /* initialization */ setbuf (stdout, NULL); #ifdef ENABLE_NLS setlocale (LC_ALL,""); textdomain (GETTEXT_PACKAGE); #endif #ifdef SLAPT_HAS_GPGME gpgme_check_version (NULL); #ifdef ENABLE_NLS gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL)); #endif #endif curl_global_init (CURL_GLOBAL_ALL); uname (&uname_v); /* stop early */ if (argc < 2) { help (); exit (EXIT_SUCCESS); } while ( (c = getopt_long_only (argc, argv, "", long_options, &option_index)) != -1) { switch (c) { case HELP_OPT: help (); break; case VERSION_OPT: version (); break; case UPDATE_OPT: action = UPDATE_OPT; break; case LIST_OPT: action = LIST_OPT; break; case CLEAN_OPT: action = CLEAN_OPT; break; case FETCH_OPT: action = FETCH_OPT; slapt_add_list_item (names, optarg); break; case SEARCH_OPT: action = SEARCH_OPT; slapt_add_list_item (names, optarg); break; case SHOW_OPT: action = SHOW_OPT; slapt_add_list_item (names, optarg); break; case BUILD_OPT: action = BUILD_OPT; slapt_add_list_item (names, optarg); break; case INSTALL_OPT: action = INSTALL_OPT; slapt_add_list_item (names, optarg); break; case YES_OPT: prompt = SLAPT_FALSE; break; case SIMULATE_OPT: simulate = SLAPT_TRUE; break; case NODEP_OPT: do_dep = SLAPT_FALSE; break; case CONFIG_OPT: config_file = strdup (optarg); break; case POSTCMD_OPT: postcmd = strdup (optarg); break; default: help (); exit (EXIT_FAILURE); } } /* add extra arguments */ while (optind < argc) { slapt_add_list_item (names, argv[optind]); ++optind; } if (config_file != NULL) config = slapt_src_read_config (config_file); else config = slapt_src_read_config (SLAPT_SRC_RC); if (config == NULL) { fprintf (stderr, gettext ("Failed to read %s\n"), SLAPT_SRC_RC); exit (EXIT_FAILURE); } /* honor command line option */ config->do_dep = do_dep; config->postcmd = postcmd; /* to be freed in slapt_src_config_free */ init_builddir (config); if ( (chdir (config->builddir)) != 0) { perror (gettext ("Failed to chdir to build directory")); exit (EXIT_FAILURE); } /* setup, fetch, and other preperation steps */ switch (action) { case LIST_OPT: case SEARCH_OPT: case SHOW_OPT: remote_sbs = slapt_src_get_available_slackbuilds (); break; case FETCH_OPT: case BUILD_OPT: case INSTALL_OPT: remote_sbs = slapt_src_get_available_slackbuilds (); installed = slapt_get_installed_pkgs (); /* convert all names to slackbuilds */ if (names->count > 0) { sbs = slapt_src_names_to_slackbuilds (config, remote_sbs, names, installed); if (sbs == NULL || sbs->count == 0) { printf (gettext ("Unable to find all specified slackbuilds.\n")); exit (EXIT_FAILURE); } } /* provide summary */ if (!simulate) action = show_summary (sbs, names, action, prompt); break; } /* now, actually do what was requested */ switch (action) { case UPDATE_OPT: rval = slapt_src_update_slackbuild_cache (config); break; case FETCH_OPT: for (i = 0; i < sbs->count; i++) { if (simulate) { printf (gettext ("FETCH: %s\n"), sbs->slackbuilds[i]->name); continue; } else slapt_src_fetch_slackbuild (config, sbs->slackbuilds[i]); } break; case BUILD_OPT: for (i = 0; i < sbs->count; i++) { slapt_src_slackbuild *sb = sbs->slackbuilds[i]; int r = 0, nv_len = strlen (sb->name) + strlen (sb->version) + 2; char *namever = slapt_malloc (sizeof *namever * nv_len); r = snprintf (namever, nv_len, "%s:%s", sb->name, sb->version); if (r+1 != nv_len) exit (EXIT_FAILURE); if (simulate) { printf (gettext ("BUILD: %s\n"), sb->name); free (namever); continue; } slapt_src_fetch_slackbuild (config, sb); slapt_src_build_slackbuild (config, sb); /* XXX we assume if we didn't request the slackbuild, then it is a dependency, and needs to be installed */ if (slapt_search_list (names, sb->name) == NULL && slapt_search_list (names, namever) == NULL) slapt_src_install_slackbuild (config, sbs->slackbuilds[i]); free (namever); } break; case INSTALL_OPT: for (i = 0; i < sbs->count; i++) { slapt_src_slackbuild *sb = sbs->slackbuilds[i]; if (simulate) { printf (gettext ("INSTALL: %s\n"), sb->name); continue; } slapt_src_fetch_slackbuild (config, sb); slapt_src_build_slackbuild (config, sb); slapt_src_install_slackbuild (config, sb); } break; case SEARCH_OPT: { slapt_src_slackbuild_list *search = slapt_src_search_slackbuild_cache (remote_sbs, names); for (i = 0; i < search->count; i++) { slapt_src_slackbuild *sb = search->slackbuilds[i]; printf ("%s:%s - %s\n", sb->name, sb->version, sb->short_desc != NULL ? sb->short_desc : "" ); } slapt_src_slackbuild_list_free (search); } break; case LIST_OPT: for (i = 0; i < remote_sbs->count; i++) { slapt_src_slackbuild *sb = remote_sbs->slackbuilds[i]; printf ("%s:%s - %s\n", sb->name, sb->version, sb->short_desc != NULL ? sb->short_desc : "" ); } break; case SHOW_OPT: { int c; for (i = 0; i < names->count; i++) { slapt_src_slackbuild *sb = NULL; slapt_list_t *parts = slapt_parse_delimited_list (names->items[i], ':'); const char *name = parts->items[0]; const char *ver = NULL; if (parts->count > 1) ver = parts->items[1]; sb = slapt_src_get_slackbuild (remote_sbs, name, ver); if (sb != NULL) { printf (gettext ("SlackBuild Name: %s\n"), sb->name); printf (gettext ("SlackBuild Version: %s\n"), sb->version); printf (gettext ("SlackBuild Category: %s\n"), sb->location); printf (gettext ("SlackBuild Description: %s\n"), sb->short_desc != NULL ? sb->short_desc : ""); printf (gettext ("SlackBuild Files:\n")); for (c = 0; c < sb->files->count; c++) { printf (" %s\n", sb->files->items[c]); } if (sb->requires != NULL) printf (gettext ("SlackBuild Requires: %s\n"), sb->requires); if (i+1 != names->count) printf ("\n"); /* slapt_src_slackbuild_free (sb); NO FREE */ } slapt_free_list (parts); } } break; case CLEAN_OPT: clean (config); break; } if (names != NULL) slapt_free_list (names); if (sbs != NULL) slapt_src_slackbuild_list_free (sbs); if (remote_sbs != NULL) slapt_src_slackbuild_list_free (remote_sbs); if (installed != NULL) slapt_free_pkg_list (installed); if (config_file != NULL) free (config_file); slapt_src_config_free (config); return rval; }