1873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey/*
2873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * Copyright (C) 2015 The Android Open Source Project
3873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey *
4873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * This software is licensed under the terms of the GNU General Public
5873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * License version 2, as published by the Free Software Foundation, and
6873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * may be copied, distributed, and modified under those terms.
7873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey *
8873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * This program is distributed in the hope that it will be useful,
9873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * but WITHOUT ANY WARRANTY; without even the implied warranty of
10873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * GNU General Public License for more details.
12873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey */
13873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
14873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#ifndef ANDROID_POPT_H
15873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#define ANDROID_POPT_H
16873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
17873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey/*
18873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * popt has been deprecated for some time, and is replaced by GNOME's glib
19873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * option parser. Instead of pulling in either of those dependencies, this
20873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey * stub implements just enough of popt to get things working.
21873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey */
22873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
23873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#include <stdio.h>
24873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#include <stdlib.h>
25873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#include <string.h>
26873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#include <getopt.h>
27873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
28873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#define POPT_ARG_NONE		 0U
29873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#define POPT_ARG_STRING		 1U
30873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#define POPT_ARG_INT		 2U
31873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
32873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#define POPT_AUTOHELP
33873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
34873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#pragma pack(push)
35873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#pragma pack(0)
36873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
37873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkeystruct poptOption {
38873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    const char *longName;
39873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    char shortName;
40873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    unsigned int argInfo;
41873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    void *arg;
42873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    int val;
43873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    const char *descrip;
44873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    const char *argDescrip;
45873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey};
46873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
47873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkeystruct _poptContext {
48873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    int argc;
49873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    const char **argv;
50873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    const struct poptOption *options;
51873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    struct option *long_options;
52873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey    const char *otherHelp;
53873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey};
54873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
55873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkeytypedef struct _poptContext *poptContext;
56873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
57873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#pragma pack(pop)
58873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
59873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff SharkeypoptContext poptGetContext(const char *name, int argc, const char **argv,
60873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey        const struct poptOption *options, unsigned int flags);
61873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff SharkeypoptContext poptFreeContext(poptContext con);
62873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkeyvoid poptResetContext(poptContext con);
63873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
64873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkeyvoid poptSetOtherOptionHelp(poptContext con, const char *text);
65873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkeyvoid poptPrintUsage(poptContext con, FILE *fp, int flags);
66873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
67873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkeyint poptGetNextOpt(poptContext con);
68873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkeyconst char *poptGetArg(poptContext con);
69873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey
70873988ad03aba810fd5abbb3810720d7a6eb5c51Jeff Sharkey#endif
71