Home
       as.c - scc - simple c99 compiler
  HTML git clone git://git.simple-cc.org/scc
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       as.c (1467B)
       ---
            1 #include <stdio.h>
            2 #include <stdlib.h>
            3 
            4 #include <scc/arg.h>
            5 #include <scc/config.h>
            6 #include <scc/scc.h>
            7 
            8 #define MAXCMD 400
            9 
           10 char *argv0;
           11 
           12 static char *arch, *format, *prefix, *outfile;
           13 static int debug;
           14 
           15 static void
           16 usage(void)
           17 {
           18         fputs("usage: as [-o outfile][-m arch][-f format] file ...\n",
           19               stderr);
           20         exit(EXIT_FAILURE);
           21 }
           22 
           23 int
           24 main(int argc, char *argv[])
           25 {
           26         int cnt, len, rem, r;
           27         char cmd[MAXCMD];
           28 
           29         if (!(arch = getenv("ARCH")))
           30                 arch = ARCH;
           31         if (!(format = getenv("FORMAT")))
           32                 format = FORMAT;
           33         if (!(prefix = getenv("SCCPREFIX")))
           34                 prefix = PREFIX;
           35 
           36         ARGBEGIN {
           37         case 'o':
           38                 outfile = EARGF(usage());
           39                 break;
           40         case 'm':
           41                 arch = EARGF(usage());
           42                 break;
           43         case 'f':
           44                 format = EARGF(usage());
           45                 break;
           46         case 'd':
           47                 debug = 1;
           48                 break;
           49         } ARGEND
           50 
           51         if (argc < 1)
           52                 usage();
           53 
           54         r = snprintf(cmd, sizeof(cmd), "%s/libexec/scc/as-%s", prefix, arch);
           55         if (r < 0 || r >= sizeof(cmd))
           56                 goto toolong;
           57 
           58         cnt = r;
           59         rem = sizeof(cmd) - cnt;
           60         if (outfile) {
           61                 r = snprintf(cmd + cnt, rem, " -o %s", outfile);
           62                 if (r < 0 || r >= rem)
           63                         goto toolong;
           64                 rem -= r;
           65                 cnt += r;
           66         }
           67 
           68         for ( ; *argv; ++argv) {
           69                 r = snprintf(cmd + cnt, rem, " %s", *argv);
           70                 if (r < 0 || r >= rem)
           71                         goto toolong;
           72                 rem -= r;
           73                 cnt += r;
           74         }
           75 
           76         if (debug)
           77                 fprintf(stderr, "as: command line '%s'\n", cmd);
           78 
           79         r = system(cmd);
           80         if (r == 0)
           81                 return 0;
           82         if (r < 0)
           83                 perror("as");
           84         exit(EXIT_FAILURE);
           85 
           86 toolong:
           87         fputs("as: too long command line\n", stderr);
           88         exit(EXIT_FAILURE);
           89 }