You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2015/02/01 23:07:10 UTC

lucy git commit: Regenerate charmonizer.c

Repository: lucy
Updated Branches:
  refs/heads/master 85eb501f0 -> 2b8601a7a


Regenerate charmonizer.c


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/2b8601a7
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/2b8601a7
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/2b8601a7

Branch: refs/heads/master
Commit: 2b8601a7af58517cba5bbffed49b7feb943dbc16
Parents: 85eb501
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sun Feb 1 23:06:34 2015 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Feb 1 23:06:34 2015 +0100

----------------------------------------------------------------------
 common/charmonizer.c | 192 +++++++++++++++++++++++++++-------------------
 1 file changed, 114 insertions(+), 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/2b8601a7/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index 573e213..3ad0e1e 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -599,6 +599,10 @@ chaz_HeadCheck_check_header(const char *header_name);
 int
 chaz_HeadCheck_check_many_headers(const char **header_names);
 
+/* Return true if the symbol is defined (possibly as a macro). */
+int
+chaz_HeadCheck_defines_symbol(const char *symbol, const char *includes);
+
 /* Return true if the member is present in the struct. */
 int
 chaz_HeadCheck_contains_member(const char *struct_name, const char *member,
@@ -2305,6 +2309,18 @@ S_chaz_CLI_rebuild_help(chaz_CLI *self) {
     strcat(self->help, "\n");
 }
 
+static chaz_CLIOption*
+S_find_opt(chaz_CLI *self, const char *name) {
+    int i;
+    for (i = 0; i < self->num_opts; i++) {
+        chaz_CLIOption *opt = &self->opts[i];
+        if (strcmp(opt->name, name) == 0) {
+            return opt;
+        }
+    }
+    return NULL;
+}
+
 chaz_CLI*
 chaz_CLI_new(const char *name, const char *description) {
     chaz_CLI *self  = calloc(1, sizeof(chaz_CLI));
@@ -2390,81 +2406,78 @@ chaz_CLI_register(chaz_CLI *self, const char *name, const char *help,
 
 int
 chaz_CLI_set(chaz_CLI *self, const char *name, const char *value) {
-    int i;
-    for (i = 0; i < self->num_opts; i++) {
-        chaz_CLIOption *opt = &self->opts[i];
-        if (strcmp(opt->name, name) == 0) {
-            if (opt->defined) {
-                S_chaz_CLI_error(self, "'%s' specified multiple times", name);
-                return 0;
-            }
-            opt->defined = 1;
-            if (value != NULL) {
-                opt->value = chaz_Util_strdup(value);
-            }
-            return 1;
+    chaz_CLIOption *opt = S_find_opt(self, name);
+    if (opt == NULL) {
+        S_chaz_CLI_error(self, "Attempt to set unknown option: '%s'", name);
+        return 0;
+    }
+    if (opt->defined) {
+        S_chaz_CLI_error(self, "'%s' specified multiple times", name);
+        return 0;
+    }
+    opt->defined = 1;
+    if (opt->flags == CHAZ_CLI_NO_ARG) {
+        if (value != NULL) {
+            S_chaz_CLI_error(self, "'%s' expects no value", name);
+            return 0;
         }
     }
-    S_chaz_CLI_error(self, "Attempt to set unknown option: '%s'", name);
-    return 0;
+    else {
+        if (value == NULL) {
+            S_chaz_CLI_error(self, "'%s' expects a value", name);
+            return 0;
+        }
+        opt->value = chaz_Util_strdup(value);
+    }
+    return 1;
 }
 
 int
 chaz_CLI_unset(chaz_CLI *self, const char *name) {
-    int i;
-    for (i = 0; i < self->num_opts; i++) {
-        chaz_CLIOption *opt = &self->opts[i];
-        if (strcmp(opt->name, name) == 0) {
-            free(opt->value);
-            opt->value = NULL;
-            opt->defined = 0;
-            return 1;
-        }
+    chaz_CLIOption *opt = S_find_opt(self, name);
+    if (opt == NULL) {
+        S_chaz_CLI_error(self, "Attempt to unset unknown option: '%s'", name);
+        return 0;
     }
-    S_chaz_CLI_error(self, "Attempt to unset unknown option: '%s'", name);
-    return 0;
+    free(opt->value);
+    opt->value = NULL;
+    opt->defined = 0;
+    return 1;
 }
 
 int
 chaz_CLI_defined(chaz_CLI *self, const char *name) {
-    int i;
-    for (i = 0; i < self->num_opts; i++) {
-        chaz_CLIOption *opt = &self->opts[i];
-        if (strcmp(opt->name, name) == 0) {
-            return opt->defined;
-        }
+    chaz_CLIOption *opt = S_find_opt(self, name);
+    if (opt == NULL) {
+        S_chaz_CLI_error(self, "Inquiry for unknown option: '%s'", name);
+        return 0;
     }
-    S_chaz_CLI_error(self, "Inquiry for unknown option: '%s'", name);
-    return 0;
+    return opt->defined;
 }
 
 long
 chaz_CLI_longval(chaz_CLI *self, const char *name) {
-    int i;
-    for (i = 0; i < self->num_opts; i++) {
-        chaz_CLIOption *opt = &self->opts[i];
-        if (strcmp(opt->name, name) == 0) {
-            if (!opt->defined || !opt->value) {
-                return 0;
-            }
-            return strtol(opt->value, NULL, 10);
-        }
+    chaz_CLIOption *opt = S_find_opt(self, name);
+    if (opt == NULL) {
+        S_chaz_CLI_error(self, "Longval request for unknown option: '%s'",
+                         name);
+        return 0;
     }
-    S_chaz_CLI_error(self, "Longval request for unknown option: '%s'", name);
-    return 0;
+    if (!opt->defined || !opt->value) {
+        return 0;
+    }
+    return strtol(opt->value, NULL, 10);
 }
 
 const char*
 chaz_CLI_strval(chaz_CLI *self, const char *name) {
-    int i;
-    for (i = 0; i < self->num_opts; i++) {
-        chaz_CLIOption *opt = &self->opts[i];
-        if (strcmp(opt->name, name) == 0) {
-            return opt->value;
-        }
+    chaz_CLIOption *opt = S_find_opt(self, name);
+    if (opt == NULL) {
+        S_chaz_CLI_error(self, "Strval request for unknown option: '%s'",
+                         name);
+        return 0;
     }
-    S_chaz_CLI_error(self, "Strval request for unknown option: '%s'", name);
-    return 0;
+    return opt->value;
 }
 
 int
@@ -2477,7 +2490,6 @@ chaz_CLI_parse(chaz_CLI *self, int argc, const char *argv[]) {
     for (i = 1; i < argc; i++) {
         const char *arg = argv[i];
         size_t name_len = 0;
-        int has_equals = 0;
         const char *value = NULL;
 
         /* Stop processing if we see `-` or `--`. */
@@ -2518,6 +2530,21 @@ chaz_CLI_parse(chaz_CLI *self, int argc, const char *argv[]) {
         memcpy(name, arg + 2, name_len);
         name[name_len] = '\0';
 
+        if (value == NULL && i + 1 < argc) {
+            /* Support both '--opt=val' and '--opt val' styles. */
+            chaz_CLIOption *opt = S_find_opt(self, name);
+            if (opt == NULL) {
+                S_chaz_CLI_error(self, "Attempt to set unknown option: '%s'",
+                                 name);
+                free(name);
+                return 0;
+            }
+            if (opt->flags != CHAZ_CLI_NO_ARG) {
+                i++;
+                value = argv[i];
+            }
+        }
+
         /* Attempt to set the option. */
         if (!chaz_CLI_set(self, name, value)) {
             free(name);
@@ -4205,6 +4232,34 @@ chaz_HeadCheck_check_many_headers(const char **header_names) {
 }
 
 int
+chaz_HeadCheck_defines_symbol(const char *symbol, const char *includes) {
+    /*
+     * Casting function pointers to object pointers like 'char*' is a C
+     * extension, so for a bullet-proof check, a separate test for functions
+     * might be necessary.
+     */
+    static const char defines_code[] =
+        CHAZ_QUOTE(  %s                                            )
+        CHAZ_QUOTE(  int main() {                                  )
+        CHAZ_QUOTE(  #ifdef %s                                     )
+        CHAZ_QUOTE(      return 0;                                 )
+        CHAZ_QUOTE(  #else                                         )
+        CHAZ_QUOTE(      return *(char*)&%s;                       )
+        CHAZ_QUOTE(  #endif                                        )
+        CHAZ_QUOTE(  }                                             );
+    long needed = sizeof(defines_code)
+                  + 2 * strlen(symbol)
+                  + strlen(includes)
+                  + 10;
+    char *buf = (char*)malloc(needed);
+    int retval;
+    sprintf(buf, defines_code, includes, symbol, symbol);
+    retval = chaz_CC_test_compile(buf);
+    free(buf);
+    return retval;
+}
+
+int
 chaz_HeadCheck_contains_member(const char *struct_name, const char *member,
                                const char *includes) {
     static const char contains_code[] =
@@ -5115,7 +5170,7 @@ static struct {
     char shared_lib_ext[7];
     char local_command_start[3];
     int  shell_type;
-} chaz_OS = { "", "", "", "", "", "", 0 };
+} chaz_OS = { "", "", "", "", "", "", "", 0 };
 
 void
 chaz_OS_init(void) {
@@ -5574,7 +5629,6 @@ chaz_Util_can_open_file(const char *file_path) {
 int
 chaz_Probe_parse_cli_args(int argc, const char *argv[], chaz_CLI *cli) {
     int i;
-    int output_enabled = 0;
 
     /* Register Charmonizer-specific options. */
     chaz_CLI_register(cli, "enable-c", "generate charmony.h", CHAZ_CLI_NO_ARG);
@@ -5953,7 +6007,6 @@ chaz_DirManip_try_rmdir(void) {
 void
 chaz_DirManip_run(void) {
     const char *dir_sep = chaz_OS_dir_sep();
-    int remove_zaps_dirs = false;
     int has_dirent_h = chaz_HeadCheck_check_header("dirent.h");
     int has_direct_h = chaz_HeadCheck_check_header("direct.h");
     int has_dirent_d_namlen = false;
@@ -6025,7 +6078,6 @@ chaz_DirManip_run(void) {
     /* See whether remove works on directories. */
     chaz_OS_mkdir("_charm_test_remove_me");
     if (0 == remove("_charm_test_remove_me")) {
-        remove_zaps_dirs = true;
         chaz_ConfWriter_add_def("REMOVE_ZAPS_DIRS", NULL);
     }
     chaz_OS_rmdir("_charm_test_remove_me");
@@ -6567,7 +6619,6 @@ chaz_Integers_run(void) {
     int has___int64       = false;
     int has_inttypes      = chaz_HeadCheck_check_header("inttypes.h");
     int has_stdint        = chaz_HeadCheck_check_header("stdint.h");
-    int can_convert_u64_to_double = true;
     char i32_t_type[10];
     char i32_t_postfix[10];
     char u32_t_postfix[10];
@@ -7315,13 +7366,8 @@ chaz_Memory_probe_alloca(void) {
         CHAZ_QUOTE(      void *foo = %s(1);         )
         CHAZ_QUOTE(      return 0;                  )
         CHAZ_QUOTE(  }                              );
-    int has_sys_mman_h = false;
-    int has_alloca_h   = false;
-    int has_malloc_h   = false;
-    int need_stdlib_h  = false;
     int has_alloca     = false;
     int has_builtin_alloca    = false;
-    int has_underscore_alloca = false;
     char code_buf[sizeof(alloca_code) + 100];
 
     {
@@ -7334,7 +7380,6 @@ chaz_Memory_probe_alloca(void) {
             NULL
         };
         if (chaz_HeadCheck_check_many_headers((const char**)mman_headers)) {
-            has_sys_mman_h = true;
             chaz_ConfWriter_add_def("HAS_SYS_MMAN_H", NULL);
         }
     }
@@ -7342,8 +7387,7 @@ chaz_Memory_probe_alloca(void) {
     /* Unixen. */
     sprintf(code_buf, alloca_code, "alloca.h", "alloca");
     if (chaz_CC_test_compile(code_buf)) {
-        has_alloca_h = true;
-        has_alloca   = true;
+        has_alloca = true;
         chaz_ConfWriter_add_def("HAS_ALLOCA_H", NULL);
         chaz_ConfWriter_add_def("alloca", "alloca");
     }
@@ -7355,8 +7399,7 @@ chaz_Memory_probe_alloca(void) {
          */
         sprintf(code_buf, alloca_code, "stdlib.h", "alloca");
         if (chaz_CC_test_compile(code_buf)) {
-            has_alloca    = true;
-            need_stdlib_h = true;
+            has_alloca = true;
             chaz_ConfWriter_add_def("ALLOCA_IN_STDLIB_H", NULL);
             chaz_ConfWriter_add_def("alloca", "alloca");
         }
@@ -7374,8 +7417,7 @@ chaz_Memory_probe_alloca(void) {
     if (!(has_alloca || has_builtin_alloca)) {
         sprintf(code_buf, alloca_code, "malloc.h", "alloca");
         if (chaz_CC_test_compile(code_buf)) {
-            has_malloc_h = true;
-            has_alloca   = true;
+            has_alloca = true;
             chaz_ConfWriter_add_def("HAS_MALLOC_H", NULL);
             chaz_ConfWriter_add_def("alloca", "alloca");
         }
@@ -7383,8 +7425,6 @@ chaz_Memory_probe_alloca(void) {
     if (!(has_alloca || has_builtin_alloca)) {
         sprintf(code_buf, alloca_code, "malloc.h", "_alloca");
         if (chaz_CC_test_compile(code_buf)) {
-            has_malloc_h = true;
-            has_underscore_alloca = true;
             chaz_ConfWriter_add_def("HAS_MALLOC_H", NULL);
             chaz_ConfWriter_add_def("chy_alloca", "_alloca");
         }
@@ -7670,9 +7710,7 @@ void
 chaz_VariadicMacros_run(void) {
     char *output;
     size_t output_len;
-    int has_varmacros      = false;
-    int has_iso_varmacros  = false;
-    int has_gnuc_varmacros = false;
+    int has_varmacros = false;
 
     chaz_ConfWriter_start_module("VariadicMacros");
 
@@ -7680,7 +7718,6 @@ chaz_VariadicMacros_run(void) {
     output = chaz_CC_capture_output(chaz_VariadicMacros_iso_code, &output_len);
     if (output != NULL) {
         has_varmacros = true;
-        has_iso_varmacros = true;
         chaz_ConfWriter_add_def("HAS_VARIADIC_MACROS", NULL);
         chaz_ConfWriter_add_def("HAS_ISO_VARIADIC_MACROS", NULL);
         free(output);
@@ -7689,7 +7726,6 @@ chaz_VariadicMacros_run(void) {
     /* Test for GNU-style variadic macros. */
     output = chaz_CC_capture_output(chaz_VariadicMacros_gnuc_code, &output_len);
     if (output != NULL) {
-        has_gnuc_varmacros = true;
         if (has_varmacros == false) {
             has_varmacros = true;
             chaz_ConfWriter_add_def("HAS_VARIADIC_MACROS", NULL);