1 #pragma once
2 
3 #include "lldb/lldb-defines.h"
4 
5 #if defined(_MSC_VER)
6 #define REPLACE_GETOPT
7 #define REPLACE_GETOPT_LONG
8 #endif
9 #if defined(_MSC_VER) || defined(__NetBSD__)
10 #define REPLACE_GETOPT_LONG_ONLY
11 #endif
12 
13 #if defined(REPLACE_GETOPT)
14 // from getopt.h
15 #define no_argument 0
16 #define required_argument 1
17 #define optional_argument 2
18 
19 // option structure
20 struct option {
21   const char *name;
22   // has_arg can't be an enum because some compilers complain about type
23   // mismatches in all the code that assumes it is an int.
24   int has_arg;
25   int *flag;
26   int val;
27 };
28 
29 int getopt(int argc, char *const argv[], const char *optstring);
30 
31 // from getopt.h
32 extern char *optarg;
33 extern int optind;
34 extern int opterr;
35 extern int optopt;
36 
37 // defined in unistd.h
38 extern int optreset;
39 #else
40 #include <getopt.h>
41 #include <unistd.h>
42 #endif
43 
44 #if defined(REPLACE_GETOPT_LONG)
45 int getopt_long(int argc, char *const *argv, const char *optstring,
46                 const struct option *longopts, int *longindex);
47 #endif
48 
49 #if defined(REPLACE_GETOPT_LONG_ONLY)
50 int getopt_long_only(int argc, char *const *argv, const char *optstring,
51                      const struct option *longopts, int *longindex);
52 #endif
53