Merge commit 'grg' into HEAD
[oweals/opkg-lede.git] / libopkg / libopkg.c
1 /* opkglib.c - the opkg package management system
2
3    Florian Boor
4
5    Copyright (C) 2003 kernel concepts
6
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.
11
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.
16 */
17
18 #include "includes.h"
19 #include "libopkg.h"
20
21 #include "args.h"
22 #include "opkg_conf.h"
23 #include "opkg_cmd.h"
24 #include "file_util.h"
25
26 #include "opkg_message.h"
27
28 /* This is used for backward compatibility */
29 int
30 opkg_op (int argc, char *argv[])
31 {
32         int err, opts;
33         args_t args;
34         char *cmd_name;
35         opkg_cmd_t *cmd;
36
37         args_init (&args);
38
39         opts = args_parse (&args, argc, argv);
40         if (opts == argc || opts < 0)
41         {
42                 args_usage ("opkg must have one sub-command argument");
43         }
44
45         cmd_name = argv[opts++];
46
47         if ( !strcmp(cmd_name,"print-architecture") ||
48              !strcmp(cmd_name,"print_architecture") ||
49              !strcmp(cmd_name,"print-installation-architecture") ||
50              !strcmp(cmd_name,"print_installation_architecture") )
51            args.nocheckfordirorfile = 1;
52
53         if ( !strcmp(cmd_name,"flag") ||
54              !strcmp(cmd_name,"configure") ||
55              !strcmp(cmd_name,"remove") ||
56              !strcmp(cmd_name,"files") ||
57              !strcmp(cmd_name,"search") ||
58              !strcmp(cmd_name,"compare_versions") ||
59              !strcmp(cmd_name,"compare-versions") ||
60              !strcmp(cmd_name,"list_installed") ||
61              !strcmp(cmd_name,"list-installed") ||
62              !strcmp(cmd_name,"status") )
63            args.noreadfeedsfile = 1;
64
65         cmd = opkg_cmd_find (cmd_name);
66         if (cmd == NULL)
67         {
68                 fprintf (stderr, "%s: unknown sub-command %s\n", argv[0],
69                          cmd_name);
70                 args_usage (NULL);
71         }
72
73         conf->pfm = cmd->pfm;
74
75         err = opkg_conf_init (&args);
76         args_deinit (&args);
77         if (err)
78         {
79                 print_error_list();
80                 free_error_list();
81                 return err;
82         }
83
84         if (cmd->requires_args && opts == argc)
85         {
86                 fprintf (stderr,
87                          "%s: the ``%s'' command requires at least one argument\n",
88                          argv[0], cmd_name);
89                 args_usage (NULL);
90         }
91
92         err = opkg_cmd_exec (cmd, argc - opts, (const char **) (argv + opts));
93
94 #ifdef HAVE_CURL
95         opkg_curl_cleanup();
96 #endif
97         opkg_conf_deinit ();
98
99         return err;
100 }