static void data_callback(const char *key, const char *value) { /* handle case where text file does not contain any special compiler options field */ if (parse_options_idx < 0 && 0 != strcmp(key, "compiler_args")) { options_data_expand(NULL); } if (0 == strcmp(key, "compiler_args")) { options_data_expand(value); } else if (0 == strcmp(key, "language")) { if (NULL != value) options_data[parse_options_idx].language = strdup(value); } else if (0 == strcmp(key, "compiler")) { if (NULL != value) options_data[parse_options_idx].compiler = strdup(value); } else if (0 == strcmp(key, "project")) { if (NULL != value) options_data[parse_options_idx].project = strdup(value); } else if (0 == strcmp(key, "version")) { if (NULL != value) options_data[parse_options_idx].version = strdup(value); } else if (0 == strcmp(key, "module_option")) { if (NULL != value) options_data[parse_options_idx].module_option = strdup(value); } else if (0 == strcmp(key, "extra_includes")) { if (NULL != value) options_data[parse_options_idx].extra_includes = strdup(value); if (NULL != value && NULL != options_data[parse_options_idx].path_includedir) { /* includedir already found -- we now have both pieces of information, and the includedir code didn't do this because it didn't have the extra includes */ add_extra_includes(value, options_data[parse_options_idx].path_includedir); } } else if (0 == strcmp(key, "preprocessor_flags")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].preproc_flags, opal_argv_count(options_data[parse_options_idx].preproc_flags), values); expand_flags(options_data[parse_options_idx].preproc_flags); opal_argv_free(values); } else if (0 == strcmp(key, "compiler_flags")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].comp_flags, opal_argv_count(options_data[parse_options_idx].comp_flags), values); expand_flags(options_data[parse_options_idx].comp_flags); opal_argv_free(values); } else if (0 == strcmp(key, "linker_flags")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].link_flags, opal_argv_count(options_data[parse_options_idx].link_flags), values); expand_flags(options_data[parse_options_idx].link_flags); opal_argv_free(values); } else if (0 == strcmp(key, "libs")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].libs, opal_argv_count(options_data[parse_options_idx].libs), values); opal_argv_free(values); } else if (0 == strcmp(key, "required_file")) { if (NULL != value) options_data[parse_options_idx].req_file = strdup(value); } else if (0 == strcmp(key, "project_short")) { if (NULL != value) options_data[parse_options_idx].project_short = strdup(value); } else if (0 == strcmp(key, "compiler_env")) { if (NULL != value) options_data[parse_options_idx].compiler_env = strdup(value); } else if (0 == strcmp(key, "compiler_flags_env")) { if (NULL != value) options_data[parse_options_idx].compiler_flags_env = strdup(value); } else if (0 == strcmp(key, "includedir")) { if (NULL != value) { options_data[parse_options_idx].path_includedir = opal_install_dirs_expand(value); if (0 != strcmp(options_data[parse_options_idx].path_includedir, "/usr/include") || 0 == strncmp(options_data[parse_options_idx].language, "Fortran", strlen("Fortran"))) { char *line; #if defined(__WINDOWS__) asprintf(&line, OPAL_INCLUDE_FLAG"\"%s\"", options_data[parse_options_idx].path_includedir); #else asprintf(&line, OPAL_INCLUDE_FLAG"%s", options_data[parse_options_idx].path_includedir); #endif /* defined(__WINDOWS__) */ opal_argv_append_nosize(&options_data[parse_options_idx].preproc_flags, line); free(line); } /* Now that we have an include dir, see if we already have the extra includes, so that we can post them as well */ if (NULL != options_data[parse_options_idx].extra_includes) { add_extra_includes(options_data[parse_options_idx].extra_includes, options_data[parse_options_idx].path_includedir); } } } else if (0 == strcmp(key, "libdir")) { if (NULL != value) options_data[parse_options_idx].path_libdir = opal_install_dirs_expand(value); #if defined(__WINDOWS__) opal_argv_append_nosize( &options_data[parse_options_idx].link_flags, "/link" ); #endif /* defined(__WINDOWS__) */ if (0 != strcmp(options_data[parse_options_idx].path_libdir, "/usr/lib")) { char *line; #if defined(__WINDOWS__) asprintf(&line, OPAL_LIBDIR_FLAG"\"%s\"", options_data[parse_options_idx].path_libdir); #else asprintf(&line, OPAL_LIBDIR_FLAG"%s", options_data[parse_options_idx].path_libdir); #endif /* defined(__WINDOWS__) */ opal_argv_append_nosize(&options_data[parse_options_idx].link_flags, line); free(line); } } }
static void data_callback(const char *key, const char *value) { /* handle case where text file does not contain any special compiler options field */ if (parse_options_idx < 0 && 0 != strcmp(key, "compiler_args")) { options_data_expand(NULL); } if (0 == strcmp(key, "compiler_args")) { options_data_expand(value); } else if (0 == strcmp(key, "language")) { if (NULL != value) options_data[parse_options_idx].language = strdup(value); } else if (0 == strcmp(key, "compiler")) { if (NULL != value) options_data[parse_options_idx].compiler = strdup(value); } else if (0 == strcmp(key, "project")) { if (NULL != value) options_data[parse_options_idx].project = strdup(value); } else if (0 == strcmp(key, "version")) { if (NULL != value) options_data[parse_options_idx].version = strdup(value); } else if (0 == strcmp(key, "preprocessor_flags")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].preproc_flags, opal_argv_count(options_data[parse_options_idx].preproc_flags), values); expand_flags(options_data[parse_options_idx].preproc_flags); opal_argv_free(values); } else if (0 == strcmp(key, "compiler_flags")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].comp_flags, opal_argv_count(options_data[parse_options_idx].comp_flags), values); expand_flags(options_data[parse_options_idx].comp_flags); opal_argv_free(values); } else if (0 == strcmp(key, "compiler_flags_prefix")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].comp_flags_prefix, opal_argv_count(options_data[parse_options_idx].comp_flags_prefix), values); expand_flags(options_data[parse_options_idx].comp_flags_prefix); opal_argv_free(values); } else if (0 == strcmp(key, "linker_flags")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].link_flags, opal_argv_count(options_data[parse_options_idx].link_flags), values); expand_flags(options_data[parse_options_idx].link_flags); opal_argv_free(values); } else if (0 == strcmp(key, "libs")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].libs, opal_argv_count(options_data[parse_options_idx].libs), values); opal_argv_free(values); } else if (0 == strcmp(key, "libs_static")) { char **values = opal_argv_split(value, ' '); opal_argv_insert(&options_data[parse_options_idx].libs_static, opal_argv_count(options_data[parse_options_idx].libs_static), values); opal_argv_free(values); } else if (0 == strcmp(key, "dyn_lib_file")) { if (NULL != value) options_data[parse_options_idx].dyn_lib_file = strdup(value); } else if (0 == strcmp(key, "static_lib_file")) { if (NULL != value) options_data[parse_options_idx].static_lib_file = strdup(value); } else if (0 == strcmp(key, "required_file")) { if (NULL != value) options_data[parse_options_idx].req_file = strdup(value); } else if (0 == strcmp(key, "project_short")) { if (NULL != value) options_data[parse_options_idx].project_short = strdup(value); } else if (0 == strcmp(key, "compiler_env")) { if (NULL != value) options_data[parse_options_idx].compiler_env = strdup(value); } else if (0 == strcmp(key, "compiler_flags_env")) { if (NULL != value) options_data[parse_options_idx].compiler_flags_env = strdup(value); } else if (0 == strcmp(key, "includedir")) { if (NULL != value) { options_data[parse_options_idx].path_includedir = opal_install_dirs_expand(value); if (0 != strcmp(options_data[parse_options_idx].path_includedir, "/usr/include") || 0 == strncmp(options_data[parse_options_idx].language, "Fortran", strlen("Fortran"))) { char *line; asprintf(&line, OPAL_INCLUDE_FLAG"%s", options_data[parse_options_idx].path_includedir); opal_argv_append_nosize(&options_data[parse_options_idx].preproc_flags, line); free(line); } } } else if (0 == strcmp(key, "libdir")) { if (NULL != value) options_data[parse_options_idx].path_libdir = opal_install_dirs_expand(value); if (0 != strcmp(options_data[parse_options_idx].path_libdir, "/usr/lib")) { char *line; asprintf(&line, OPAL_LIBDIR_FLAG"%s", options_data[parse_options_idx].path_libdir); opal_argv_append_nosize(&options_data[parse_options_idx].link_flags, line); free(line); } } }