Add support for L4Re Virtio Sockets
[src/app-framework-binder.git] / src / afb-args.c
index 64f5cac..edc0a32 100644 (file)
@@ -58,7 +58,9 @@
 /**
  * The default timeout of cache in seconds
  */
+#if WITH_LIBMICROHTTPD
 #define DEFAULT_CACHE_TIMEOUT          100000
+#endif
 
 /**
  * The default maximum count of sessions
 /**
  * The default HTTP port to serve
  */
+#if WITH_LIBMICROHTTPD
 #define DEFAULT_HTTP_PORT              1234
+#endif
 
 // Define command line option
 #define SET_BACKGROUND       1
 #define SET_FOREGROUND       2
 #define SET_ROOT_DIR         3
+
+#if WITH_LIBMICROHTTPD
 #define SET_ROOT_BASE        4
 #define SET_ROOT_API         5
 #define ADD_ALIAS            6
-
 #define SET_CACHE_TIMEOUT    7
+#endif
 
-#define AUTO_WS              8
-#define AUTO_LINK            9
-
+#if WITH_DYNAMIC_BINDING
 #define ADD_LDPATH          10
-#define SET_API_TIMEOUT     11
-#define SET_SESSION_TIMEOUT 12
-#define ADD_WEAK_LDPATH     13
-#define SET_NO_LDPATH       14
+#define ADD_WEAK_LDPATH     11
+#define SET_NO_LDPATH       12
+#endif
+#define SET_API_TIMEOUT     13
+#define SET_SESSION_TIMEOUT 14
 
 #define SET_SESSIONMAX      15
 
 #define ADD_WS_CLIENT       16
 #define ADD_WS_SERVICE      17
 
+#if WITH_LIBMICROHTTPD
 #define SET_ROOT_HTTP       18
-
 #define SET_NO_HTTPD        19
+#endif
 
 #define SET_TRACEEVT        20
 #define SET_TRACESES        21
 #endif
 
 #define ADD_AUTO_API       'A'
+#if WITH_DYNAMIC_BINDING
 #define ADD_BINDING        'b'
+#endif
 #define SET_CONFIG         'C'
 #define SET_COLOR          'c'
 #define SET_DAEMON         'D'
 #define SET_EXEC           'e'
 #define GET_HELP           'h'
 #define SET_LOG            'l'
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
 #define SET_MONITORING     'M'
 #endif
 #define SET_NAME           'n'
 #define SET_OUTPUT         'o'
 #define SET_PORT           'p'
 #define SET_QUIET          'q'
+#if WITH_LIBMICROHTTPD
 #define SET_RANDOM_TOKEN   'r'
+#endif
 #define ADD_SET            's'
+#if WITH_LIBMICROHTTPD
 #define SET_TOKEN          't'
 #define SET_UPLOAD_DIR     'u'
+#endif
 #define GET_VERSION        'V'
 #define SET_VERBOSE        'v'
 #define SET_WORK_DIR       'w'
@@ -160,27 +172,31 @@ static struct option_desc optdefs[] = {
 
        {SET_NAME,            1, "name",        "Set the visible name"},
 
+#if WITH_LIBMICROHTTPD
+       {SET_NO_HTTPD,        0, "no-httpd",    "Forbid HTTP service"},
        {SET_PORT,            1, "port",        "HTTP listening TCP port  [default " d2s(DEFAULT_HTTP_PORT) "]"},
        {SET_ROOT_HTTP,       1, "roothttp",    "HTTP Root Directory [default no root http (files not served but apis still available)]"},
        {SET_ROOT_BASE,       1, "rootbase",    "Angular Base Root URL [default /opa]"},
        {SET_ROOT_API,        1, "rootapi",     "HTML Root API URL [default /api]"},
        {ADD_ALIAS,           1, "alias",       "Multiple url map outside of rootdir [eg: --alias=/icons:/usr/share/icons]"},
+       {SET_UPLOAD_DIR,      1, "uploaddir",   "Directory for uploading files [default: workdir] relative to workdir"},
+       {SET_CACHE_TIMEOUT,   1, "cache-eol",   "Client cache end of live [default " d2s(DEFAULT_CACHE_TIMEOUT) "]"},
+       {SET_TOKEN,           1, "token",       "Initial Secret [default=random, use --token="" to allow any token]"},
+       {SET_RANDOM_TOKEN,    0, "random-token","Enforce a random token"},
+#endif
 
        {SET_API_TIMEOUT,     1, "apitimeout",  "Binding API timeout in seconds [default " d2s(DEFAULT_API_TIMEOUT) "]"},
        {SET_SESSION_TIMEOUT, 1, "cntxtimeout", "Client Session Context Timeout [default " d2s(DEFAULT_SESSION_TIMEOUT) "]"},
-       {SET_CACHE_TIMEOUT,   1, "cache-eol",   "Client cache end of live [default " d2s(DEFAULT_CACHE_TIMEOUT) "]"},
 
        {SET_WORK_DIR,        1, "workdir",     "Set the working directory [default: $PWD or current working directory]"},
-       {SET_UPLOAD_DIR,      1, "uploaddir",   "Directory for uploading files [default: workdir] relative to workdir"},
        {SET_ROOT_DIR,        1, "rootdir",     "Root Directory of the application [default: workdir] relative to workdir"},
 
+#if WITH_DYNAMIC_BINDING
        {ADD_LDPATH,          1, "ldpaths",     "Load bindings from dir1:dir2:... [default = " BINDING_INSTALL_DIR "]"},
        {ADD_BINDING,         1, "binding",     "Load the binding of path"},
        {ADD_WEAK_LDPATH,     1, "weak-ldpaths","Same as --ldpaths but ignore errors"},
        {SET_NO_LDPATH,       0, "no-ldpaths",  "Discard default ldpaths loading"},
-
-       {SET_TOKEN,           1, "token",       "Initial Secret [default=random, use --token="" to allow any token]"},
-       {SET_RANDOM_TOKEN,    0, "random-token","Enforce a random token"},
+#endif
 
        {GET_VERSION,         0, "version",     "Display version and copyright"},
        {GET_HELP,            0, "help",        "Display this help"},
@@ -210,10 +226,9 @@ static struct option_desc optdefs[] = {
 
        {ADD_CALL,            1, "call",        "Call at start, format of val: API/VERB:json-args"},
 
-       {SET_NO_HTTPD,        0, "no-httpd",    "Forbid HTTP service"},
        {SET_EXEC,            0, "exec",        "Execute the remaining arguments"},
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
        {SET_MONITORING,      0, "monitoring",  "Enable HTTP monitoring at <ROOT>/monitoring/"},
 #endif
 
@@ -229,7 +244,7 @@ static struct option_desc optdefs[] = {
 /* *INDENT-ON* */
 };
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
 static const char MONITORING_ALIAS[] = "/monitoring:"BINDING_INSTALL_DIR"/monitoring";
 #endif
 
@@ -237,9 +252,11 @@ static const struct {
        int optid;
        int valdef;
 } default_optint_values[] = {
+#if WITH_LIBMICROHTTPD
        { SET_PORT,             DEFAULT_HTTP_PORT },
        { SET_API_TIMEOUT,      DEFAULT_API_TIMEOUT },
        { SET_CACHE_TIMEOUT,    DEFAULT_CACHE_TIMEOUT },
+#endif
        { SET_SESSION_TIMEOUT,  DEFAULT_SESSION_TIMEOUT },
        { SET_SESSIONMAX,       DEFAULT_MAX_SESSION_COUNT }
 };
@@ -248,11 +265,13 @@ static const struct {
        int optid;
        const char *valdef;
 } default_optstr_values[] = {
-       { SET_WORK_DIR,         "." },
-       { SET_ROOT_DIR,         "." },
+#if WITH_LIBMICROHTTPD
        { SET_UPLOAD_DIR,       "." },
        { SET_ROOT_BASE,        "/opa" },
-       { SET_ROOT_API,         "/api" }
+       { SET_ROOT_API,         "/api" },
+#endif
+       { SET_WORK_DIR,         "." },
+       { SET_ROOT_DIR,         "." }
 };
 
 /**********************************
@@ -342,7 +361,7 @@ static void printVersion(FILE * file)
 #endif
                "DBUS "
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
                "+"
 #else
                "-"
@@ -369,7 +388,13 @@ static void printVersion(FILE * file)
 #endif
                "TRACE "
 
-               "[BINDINGS "
+               "["
+#if WITH_DYNAMIC_BINDING
+               "BINDINGS "
+               "+"
+#else
+               "-"
+#endif
 #if WITH_LEGACY_BINDING_V1
                "+"
 #else
@@ -426,7 +451,11 @@ static void printHelp(FILE * file, const char *name)
        fprintf(file,
                "Example:\n  %s  --verbose --port="
                d2s(DEFAULT_HTTP_PORT)
-               " --token='azerty' --ldpaths=build/bindings:/usr/lib64/agl/bindings\n",
+               " --token='azerty'"
+#if WITH_DYNAMIC_BINDING
+               " --ldpaths=build/bindings:/usr/lib64/agl/bindings"
+#endif
+               "\n",
                name);
 }
 
@@ -534,6 +563,7 @@ static int get_arg_bool(int optid)
        return value;
 }
 
+__attribute__((unused))
 static void config_del(struct json_object *config, int optid)
 {
        return json_object_object_del(config, name_of_optid(optid));
@@ -544,6 +574,7 @@ static int config_has(struct json_object *config, int optid)
        return json_object_object_get_ex(config, name_of_optid(optid), NULL);
 }
 
+__attribute__((unused))
 static int config_has_bool(struct json_object *config, int optid)
 {
        struct json_object *x;
@@ -802,7 +833,9 @@ static void parse_arguments_inner(int argc, char **argv, struct json_object *con
 
                case SET_API_TIMEOUT:
                case SET_SESSION_TIMEOUT:
+#if WITH_LIBMICROHTTPD
                case SET_CACHE_TIMEOUT:
+#endif
                        config_set_optint(config, optid, 0, INT_MAX);
                        break;
 
@@ -811,11 +844,13 @@ static void parse_arguments_inner(int argc, char **argv, struct json_object *con
                        break;
 
                case SET_ROOT_DIR:
+#if WITH_LIBMICROHTTPD
                case SET_ROOT_HTTP:
                case SET_ROOT_BASE:
                case SET_ROOT_API:
                case SET_TOKEN:
                case SET_UPLOAD_DIR:
+#endif
                case SET_WORK_DIR:
                case SET_NAME:
                        config_set_optstr(config, optid);
@@ -825,13 +860,17 @@ static void parse_arguments_inner(int argc, char **argv, struct json_object *con
                case ADD_DBUS_CLIENT:
                case ADD_DBUS_SERVICE:
 #endif
+#if WITH_LIBMICROHTTPD
                case ADD_ALIAS:
+#endif
+#if WITH_DYNAMIC_BINDING
                case ADD_LDPATH:
                case ADD_WEAK_LDPATH:
+               case ADD_BINDING:
+#endif
                case ADD_CALL:
                case ADD_WS_CLIENT:
                case ADD_WS_SERVICE:
-               case ADD_BINDING:
                case ADD_AUTO_API:
                        config_add_optstr(config, optid);
                        break;
@@ -840,16 +879,21 @@ static void parse_arguments_inner(int argc, char **argv, struct json_object *con
                        config_mix2_optstr(config, optid);
                        break;
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
                case SET_MONITORING:
 #endif
+#if WITH_LIBMICROHTTPD
                case SET_RANDOM_TOKEN:
                case SET_NO_HTTPD:
+#endif
+#if WITH_DYNAMIC_BINDING
                case SET_NO_LDPATH:
+#endif
+#if WITH_MONITORING || WITH_LIBMICROHTTPD || WITH_DYNAMIC_BINDING
                        noarg(optid);
                        config_set_bool(config, optid, 1);
                        break;
-
+#endif
 
                case SET_FOREGROUND:
                case SET_BACKGROUND:
@@ -976,13 +1020,16 @@ static void fulfill_config(struct json_object *config)
                        config_set_str(config, default_optstr_values[i].optid, default_optstr_values[i].valdef);
 
        // default AUTH_TOKEN
+#if WITH_LIBMICROHTTPD
        if (config_has_bool(config, SET_RANDOM_TOKEN))
                config_del(config, SET_TOKEN);
-
+#endif
+#if WITH_DYNAMIC_BINDING
        if (!config_has(config, ADD_LDPATH) && !config_has(config, ADD_WEAK_LDPATH) && !config_has_bool(config, SET_NO_LDPATH))
                config_add_str(config, ADD_LDPATH, BINDING_INSTALL_DIR);
+#endif
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
        if (config_has_bool(config, SET_MONITORING) && !config_has_str(config, ADD_ALIAS, MONITORING_ALIAS))
                config_add_str(config, ADD_ALIAS, MONITORING_ALIAS);
 #endif
@@ -1040,7 +1087,9 @@ static void parse_environment(struct json_object *config)
        on_environment_enum(config, SET_TRACESVC, "AFB_TRACESVC", afb_hook_flags_legacy_svc_from_text);
 #endif
 #endif
+#if WITH_DYNAMIC_BINDING
        on_environment(config, ADD_LDPATH, "AFB_LDPATHS", config_add_str);
+#endif
        on_environment(config, ADD_SET, "AFB_SET", config_mix2_str);
        on_environment_bool(config, SET_TRAP_FAULTS, "AFB_TRAP_FAULTS");
 }