chaz_SharedLib* chaz_SharedLib_new(const char *name, const char *version, const char *major_version) { chaz_SharedLib *lib = (chaz_SharedLib*)malloc(sizeof(chaz_SharedLib)); lib->name = chaz_Util_strdup(name); lib->version = chaz_Util_strdup(version); lib->major_version = chaz_Util_strdup(major_version); return lib; }
void chaz_CFlags_clear(chaz_CFlags *flags) { if (flags->string[0] != '\0') { free(flags->string); flags->string = chaz_Util_strdup(""); } }
chaz_CFlags* chaz_CFlags_new(int style) { chaz_CFlags *flags = (chaz_CFlags*)malloc(sizeof(chaz_CFlags)); flags->style = style; flags->string = chaz_Util_strdup(""); return flags; }
void chaz_CFlags_append(chaz_CFlags *flags, const char *string) { char *new_string; if (flags->string[0] == '\0') { new_string = chaz_Util_strdup(string); } else { new_string = chaz_Util_join(" ", flags->string, string, NULL); } free(flags->string); flags->string = new_string; }
int chaz_Probe_parse_cli_args(int argc, const char *argv[], chaz_CLI *cli) { int i; /* Register Charmonizer-specific options. */ chaz_CLI_register(cli, "enable-c", "generate charmony.h", CHAZ_CLI_NO_ARG); chaz_CLI_register(cli, "enable-perl", "generate Charmony.pm", CHAZ_CLI_NO_ARG); chaz_CLI_register(cli, "enable-python", "generate charmony.py", CHAZ_CLI_NO_ARG); chaz_CLI_register(cli, "enable-ruby", "generate charmony.rb", CHAZ_CLI_NO_ARG); chaz_CLI_register(cli, "enable-makefile", NULL, CHAZ_CLI_NO_ARG); chaz_CLI_register(cli, "enable-coverage", NULL, CHAZ_CLI_NO_ARG); chaz_CLI_register(cli, "cc", "compiler command", CHAZ_CLI_ARG_REQUIRED); chaz_CLI_register(cli, "cflags", NULL, CHAZ_CLI_ARG_OPTIONAL); chaz_CLI_register(cli, "make", "make command", CHAZ_CLI_ARG_OPTIONAL); chaz_CLI_register(cli, "prefix", "install prefix", CHAZ_CLI_ARG_OPTIONAL); chaz_CLI_register(cli, "bindir", "install dir for executables", CHAZ_CLI_ARG_OPTIONAL); chaz_CLI_register(cli, "datarootdir", "root install dir for data files", CHAZ_CLI_ARG_OPTIONAL); chaz_CLI_register(cli, "datadir", "install dir for data files", CHAZ_CLI_ARG_OPTIONAL); chaz_CLI_register(cli, "libdir", "install dir for libraries", CHAZ_CLI_ARG_OPTIONAL); chaz_CLI_register(cli, "mandir", "install dir for man pages", CHAZ_CLI_ARG_OPTIONAL); /* Parse options, exiting on failure. */ if (!chaz_CLI_parse(cli, argc, argv)) { fprintf(stderr, "%s", chaz_CLI_help(cli)); exit(1); } /* Accumulate compiler flags. */ { char *cflags = chaz_Util_strdup(""); size_t cflags_len = 0; for (i = 0; i < argc; i++) { if (strcmp(argv[i], "--") == 0) { i++; break; } } for (; i < argc; i++) { const char *arg = argv[i]; cflags_len += strlen(arg) + 2; cflags = (char*)realloc(cflags, cflags_len); strcat(cflags, " "); strcat(cflags, arg); } chaz_CLI_set(cli, "cflags", cflags); free(cflags); } /* Some Perl setups have a 'cc' config value with leading whitespace. */ if (chaz_CLI_defined(cli, "cc")) { const char *arg = chaz_CLI_strval(cli, "cc"); char *cc; size_t len = strlen(arg); size_t l = 0; size_t r = len; size_t trimmed_len; while (isspace((unsigned char)arg[l])) { ++l; } while (r > l && isspace((unsigned char)arg[r-1])) { --r; } trimmed_len = r - l; cc = (char*)malloc(trimmed_len + 1); memcpy(cc, arg + l, trimmed_len); cc[trimmed_len] = '\0'; chaz_CLI_unset(cli, "cc"); chaz_CLI_set(cli, "cc", cc); free(cc); } /* Validate. */ if (!chaz_CLI_defined(cli, "cc") || !strlen(chaz_CLI_strval(cli, "cc")) ) { return false; } return true; }