1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 1996,2008 Oracle. All rights reserved. 5 * 6 * $Id: db_codegen.c,v 1.3 2008/01/08 20:58:12 bostic Exp $ 7 */ 8 9#include "db_codegen.h" 10 11#ifndef lint 12static const char copyright[] = 13 "Copyright (c) 1996,2008 Oracle. All rights reserved.\n"; 14#endif 15 16static int usage __P((void)); 17 18int main __P((int, char *[])); 19 20const char *progname; 21struct __head_env env_tree; 22 23int 24main(argc, argv) 25 int argc; 26 char *argv[]; 27{ 28 extern char *optarg; 29 extern int optind; 30 enum { C, CXX, JAVA } api; 31 int ch, verbose; 32 char *ofname; 33 34 TAILQ_INIT(&env_tree); 35 36 if ((progname = __db_rpath(argv[0])) == NULL) 37 progname = argv[0]; 38 else 39 ++progname; 40 41 api = C; 42 ofname = NULL; 43 verbose = 0; 44 45 while ((ch = getopt(argc, argv, "a:i:o:Vv")) != EOF) 46 switch (ch) { 47 case 'a': 48 if (strcasecmp(optarg, "c") == 0) { 49 api = C; 50 } 51 else if ( 52 strcasecmp(optarg, "c++") == 0 || 53 strcasecmp(optarg, "cxx") == 0) 54 api = CXX; 55 else if (strcasecmp(optarg, "java") == 0) 56 api = JAVA; 57 else 58 return (usage()); 59 break; 60 case 'i': 61 if (freopen(optarg, "r", stdin) == NULL) { 62 fprintf(stderr, "%s: %s: %s\n", 63 progname, optarg, strerror(errno)); 64 return (EXIT_FAILURE); 65 } 66 break; 67 case 'o': 68 ofname = optarg; 69 break; 70 case 'V': 71 printf("%s\n", db_version(NULL, NULL, NULL)); 72 return (EXIT_SUCCESS); 73 case 'v': 74 verbose = 1; 75 break; 76 case '?': 77 default: 78 return (usage()); 79 } 80 argc -= optind; 81 argv += optind; 82 83 if (argc != 0) 84 return (usage()); 85 86 if (parse_input(stdin)) 87 return (EXIT_FAILURE); 88 89#ifdef DEBUG 90 if (verbose && parse_dump()) 91 return (EXIT_FAILURE); 92#endif 93 94 if (TAILQ_FIRST(&env_tree) != NULL) 95 switch (api) { 96 case C: 97 if (api_c(ofname)) 98 return (EXIT_FAILURE); 99 break; 100 case CXX: 101 case JAVA: 102 fprintf(stderr, 103 "C++ and Java APIs not yet supported\n"); 104 return (EXIT_FAILURE); 105 } 106 107 return (EXIT_SUCCESS); 108} 109 110static int 111usage() 112{ 113 (void)fprintf(stderr, 114 "usage: %s [-Vv] [-a c] [-i input] [-o output]\n", progname); 115 return (EXIT_FAILURE); 116} 117