1 /* opkglib.c - the opkg package management system
5 Copyright (C) 2003 kernel concepts
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2, or (at
10 your option) any later version.
12 This program is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
22 #include "opkg_conf.h"
24 #include "file_util.h"
26 #include "opkg_message.h"
27 #include "opkg_error.h"
29 opkg_status_callback opkg_cb_status = NULL;
30 opkg_list_callback opkg_cb_list = NULL;
34 opkg_init (opkg_message_callback mcall,
35 opkg_response_callback rcall,
38 opkg_cb_message = mcall;
39 opkg_cb_response = rcall;
48 opkg_deinit (args_t * args)
51 opkg_cb_message = NULL;
52 opkg_cb_response = NULL;
54 /* place other cleanup stuff here */
61 opkg_packages_list(args_t *args,
63 opkg_list_callback cblist,
67 opkg_conf_t opkg_conf;
70 err = opkg_conf_init (&opkg_conf, args);
76 opkg_cb_list = cblist;
77 /* we need to do this because of static declarations,
78 * maybe a good idea to change */
79 cmd = opkg_cmd_find ("list");
81 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &packages, userdata);
83 err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, userdata);
85 opkg_conf_deinit (&opkg_conf);
91 opkg_packages_status(args_t *args,
93 opkg_status_callback cbstatus,
97 opkg_conf_t opkg_conf;
100 err = opkg_conf_init (&opkg_conf, args);
106 opkg_cb_status = cbstatus;
108 /* we need to do this because of static declarations,
109 * maybe a good idea to change */
110 cmd = opkg_cmd_find ("status");
112 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &packages, userdata);
114 err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, userdata);
116 opkg_cb_status = NULL;
117 opkg_conf_deinit (&opkg_conf);
123 opkg_packages_info(args_t *args,
124 const char *packages,
125 opkg_status_callback cbstatus,
129 opkg_conf_t opkg_conf;
132 err = opkg_conf_init (&opkg_conf, args);
138 opkg_cb_status = cbstatus;
140 /* we need to do this because of static declarations,
141 * maybe a good idea to change */
142 cmd = opkg_cmd_find ("info");
144 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &packages, userdata);
146 err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, userdata);
148 opkg_cb_status = NULL;
149 opkg_conf_deinit (&opkg_conf);
155 opkg_packages_install (args_t * args, const char *name)
158 opkg_conf_t opkg_conf;
161 /* this error should be handled in application */
162 if (!name || !strlen (name))
165 err = opkg_conf_init (&opkg_conf, args);
171 /* we need to do this because of static declarations,
172 * maybe a good idea to change */
173 cmd = opkg_cmd_find ("install");
174 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &name, NULL);
176 opkg_conf_deinit(&opkg_conf);
182 opkg_packages_remove(args_t *args, const char *name, int purge)
185 opkg_conf_t opkg_conf;
188 /* this error should be handled in application */
189 if (!name || !strlen (name))
192 err = opkg_conf_init (&opkg_conf, args);
198 /* we need to do this because of static declarations,
199 * maybe a good idea to change */
201 cmd = opkg_cmd_find ("purge");
203 cmd = opkg_cmd_find ("remove");
205 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &name, NULL);
207 opkg_conf_deinit(&opkg_conf);
213 opkg_lists_update(args_t *args)
216 opkg_conf_t opkg_conf;
219 err = opkg_conf_init (&opkg_conf, args);
225 /* we need to do this because of static declarations,
226 * maybe a good idea to change */
227 cmd = opkg_cmd_find ("update");
229 err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, NULL);
231 opkg_conf_deinit(&opkg_conf);
237 opkg_packages_upgrade(args_t *args)
240 opkg_conf_t opkg_conf;
243 err = opkg_conf_init (&opkg_conf, args);
249 /* we need to do this because of static declarations,
250 * maybe a good idea to change */
251 cmd = opkg_cmd_find ("upgrade");
253 err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, NULL);
255 opkg_conf_deinit(&opkg_conf);
261 opkg_packages_download (args_t * args, const char *name)
264 opkg_conf_t opkg_conf;
267 /* this error should be handled in application */
268 if (!name || !strlen (name))
271 err = opkg_conf_init (&opkg_conf, args);
277 /* we need to do this because of static declarations,
278 * maybe a good idea to change */
279 cmd = opkg_cmd_find ("download");
280 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &name, NULL);
282 opkg_conf_deinit(&opkg_conf);
288 opkg_package_files(args_t *args,
290 opkg_list_callback cblist,
294 opkg_conf_t opkg_conf;
297 /* this error should be handled in application */
298 if (!name || !strlen (name))
301 err = opkg_conf_init (&opkg_conf, args);
307 opkg_cb_list = cblist;
309 /* we need to do this because of static declarations,
310 * maybe a good idea to change */
311 cmd = opkg_cmd_find ("files");
313 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &name, userdata);
316 opkg_conf_deinit(&opkg_conf);
322 opkg_file_search(args_t *args,
324 opkg_list_callback cblist,
328 opkg_conf_t opkg_conf;
331 /* this error should be handled in application */
332 if (!file || !strlen (file))
335 err = opkg_conf_init (&opkg_conf, args);
341 opkg_cb_list = cblist;
343 /* we need to do this because of static declarations,
344 * maybe a good idea to change */
345 cmd = opkg_cmd_find ("search");
346 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &file, userdata);
349 opkg_conf_deinit(&opkg_conf);
355 opkg_file_what(args_t *args, const char *file, const char* command)
358 opkg_conf_t opkg_conf;
361 /* this error should be handled in application */
362 if (!file || !strlen (file))
365 err = opkg_conf_init (&opkg_conf, args);
371 /* we need to do this because of static declarations,
372 * maybe a good idea to change */
373 cmd = opkg_cmd_find (command);
374 err = opkg_cmd_exec (cmd, &opkg_conf, 1, &file, NULL);
376 opkg_conf_deinit(&opkg_conf);
380 #define opkg_package_whatdepends(args,file) opkg_file_what(args,file,"whatdepends")
381 #define opkg_package_whatrecommends(args, file) opkg_file_what(args,file,"whatrecommends")
382 #define opkg_package_whatprovides(args, file) opkg_file_what(args,file,"whatprovides")
383 #define opkg_package_whatconflicts(args, file) opkg_file_what(args,file,"whatconflicts")
384 #define opkg_package_whatreplaces(args, file) opkg_file_what(args,file,"whatreplaces")
387 int default_opkg_message_callback(opkg_conf_t *conf, message_level_t level,
390 if (conf && (conf->verbosity < level)) {
393 if ( level == OPKG_ERROR ){
394 push_error_list(&error_list, msg);
401 int default_opkg_list_callback(char *name, char *desc, char *version,
402 pkg_state_status_t status, void *userdata)
405 printf("%s - %s - %s\n", name, version, desc);
407 printf("%s - %s\n", name, version);
411 int default_opkg_files_callback(char *name, char *desc, char *version,
412 pkg_state_status_t status, void *userdata)
415 printf("%s\n", desc);
419 int default_opkg_status_callback(char *name, int istatus, char *desc,
422 printf("%s\n", desc);
426 char* default_opkg_response_callback(char *question)
428 char *response = NULL;
432 response = (char *)file_read_line_alloc(stdin);
433 } while (response == NULL);
437 /* This is used for backward compatibility */
439 opkg_op (int argc, char *argv[])
445 opkg_conf_t opkg_conf;
449 optind = args_parse (&args, argc, argv);
450 if (optind == argc || optind < 0)
452 args_usage ("opkg must have one sub-command argument");
455 cmd_name = argv[optind++];
456 /* Pigi: added a flag to disable the checking of structures if the command does not need to
457 read anything from there.
459 if ( !strcmp(cmd_name,"print-architecture") ||
460 !strcmp(cmd_name,"print_architecture") ||
461 !strcmp(cmd_name,"print-installation-architecture") ||
462 !strcmp(cmd_name,"print_installation_architecture") )
463 args.nocheckfordirorfile = 1;
465 /* Pigi: added a flag to disable the reading of feed files if the command does not need to
466 read anything from there.
468 if ( !strcmp(cmd_name,"flag") ||
469 !strcmp(cmd_name,"configure") ||
470 !strcmp(cmd_name,"remove") ||
471 !strcmp(cmd_name,"files") ||
472 !strcmp(cmd_name,"search") ||
473 !strcmp(cmd_name,"compare_versions") ||
474 !strcmp(cmd_name,"compare-versions") ||
475 !strcmp(cmd_name,"list_installed") ||
476 !strcmp(cmd_name,"list-installed") ||
477 !strcmp(cmd_name,"status") )
478 args.noreadfeedsfile = 1;
480 opkg_cb_message = default_opkg_message_callback;
481 opkg_cb_response = default_opkg_response_callback;
482 opkg_cb_status = default_opkg_status_callback;
485 err = opkg_conf_init (&opkg_conf, &args);
493 if ( strcmp(cmd_name, "files")==0)
494 opkg_cb_list = default_opkg_files_callback;
496 opkg_cb_list = default_opkg_list_callback;
498 cmd = opkg_cmd_find (cmd_name);
501 fprintf (stderr, "%s: unknown sub-command %s\n", argv[0],
506 if (cmd->requires_args && optind == argc)
509 "%s: the ``%s'' command requires at least one argument\n",
510 __FUNCTION__, cmd_name);
514 err = opkg_cmd_exec (cmd, &opkg_conf, argc - optind, (const char **) (argv + optind), NULL);
516 opkg_conf_deinit (&opkg_conf);