/* GNU mailutils - a suite of utilities for electronic mail Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include const char *argp_program_version = "mailutils-config (" PACKAGE_STRING ")"; static char doc[] = "GNU mailutils-config"; static char args_doc[] = "[arg...]"; static struct argp_option options[] = { {"link", 'l', NULL, 0, "print libraries to link with", 1}, {NULL, 0, NULL, 0, "Up to two args can be given. Each arg is " "a string \"auth\" or \"guile\"." , 2}, {"compile", 'c', NULL, 0, "print C compiler flags to compile with", 3}, {0, 0, 0, 0} }; enum config_mode { MODE_VOID, MODE_COMPILE, MODE_LINK }; enum config_mode mode; static error_t parse_opt (int key, char *arg, struct argp_state *state) { switch (key) { case 'l': mode = MODE_LINK; break; case 'c': mode = MODE_COMPILE; break; default: return ARGP_ERR_UNKNOWN; } return 0; } static struct argp argp = { options, parse_opt, args_doc, doc, NULL, NULL, NULL }; static const char *argp_capa[] = { "common", "license", NULL }; int main (int argc, char **argv) { int index; if (mu_argp_parse (&argp, &argc, &argv, 0, argp_capa, &index, NULL)) { argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name); return 1; } argc -= index; argv += index; switch (mode) { case MODE_VOID: break; case MODE_LINK: { int n = 0, j; struct entry { int level; char *ptr; } entry[4]; entry[n].level = 1; asprintf (&entry[n].ptr, " %s -lmailbox", LINK_FLAGS); n++; for (; n < sizeof(entry)/sizeof(entry[0]) && argc > 0; argc--, argv++, n++) { if (strcmp (argv[0], "auth") == 0) { entry[n].level = 2; asprintf (&entry[n].ptr, " -lmuauth %s", AUTHLIBS); } #ifdef WITH_GUILE else if (strcmp (argv[0], "guile") == 0) { entry[n].level = -1; asprintf (&entry[n].ptr, " -lmu_scm %s", GUILE_LIBS); } #endif else { argp_help (&argp, stdout, ARGP_HELP_USAGE, program_invocation_short_name); return 1; } } for (j = 0; j < n; j++) { int i; for (i = j; i < n; i++) if (entry[j].level > entry[i].level) { struct entry tmp; tmp = entry[i]; entry[i] = entry[j]; entry[j] = tmp; } } for (j = 0; j < n; j++) printf ("%s", entry[j].ptr); printf ("\n"); return 0; } case MODE_COMPILE: if (argc != 0) break; printf ("%s\n", COMPILE_FLAGS); return 0; } argp_help (&argp, stdout, ARGP_HELP_USAGE, program_invocation_short_name); return 0; }