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