[BACK]Return to generate.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / make

Annotation of src/usr.bin/make/generate.c, Revision 1.3

1.1       espie       1:
                      2: #include <stdio.h>
                      3: #include <stdlib.h>
                      4: #include <stddef.h>
                      5:
                      6: #include "make.h"
1.3     ! espie       7: #include "stats.h"
1.1       espie       8: #include "ohash.h"
1.3     ! espie       9: #include "cond_int.h"
1.1       espie      10:
                     11: #define M(x)   x, #x
1.3     ! espie      12: char *table_var[] = {
1.1       espie      13:        M(TARGET),
                     14:        M(OODATE),
                     15:        M(ALLSRC),
                     16:        M(IMPSRC),
                     17:        M(PREFIX),
                     18:        M(ARCHIVE),
                     19:        M(MEMBER),
                     20:        M(LONGTARGET),
                     21:        M(LONGOODATE),
                     22:        M(LONGALLSRC),
                     23:        M(LONGIMPSRC),
                     24:        M(LONGPREFIX),
                     25:        M(LONGARCHIVE),
1.3     ! espie      26:        M(LONGMEMBER),
        !            27:        M(FTARGET),
        !            28:        M(DTARGET),
        !            29:        M(FPREFIX),
        !            30:        M(DPREFIX),
        !            31:        M(FARCHIVE),
        !            32:        M(DARCHIVE),
        !            33:        M(FMEMBER),
        !            34:        M(DMEMBER),
        !            35:        NULL
1.1       espie      36: };
                     37:
1.3     ! espie      38: char *table_cond[] = {
        !            39:        M(COND_IF),
        !            40:        M(COND_IFDEF),
        !            41:        M(COND_IFNDEF),
        !            42:        M(COND_IFMAKE),
        !            43:        M(COND_IFNMAKE),
        !            44:        M(COND_ELSE),
        !            45:        M(COND_ELIFDEF),
        !            46:        M(COND_ELIFNDEF),
        !            47:        M(COND_ELIFMAKE),
        !            48:        M(COND_ELIFNMAKE),
        !            49:        M(COND_ENDIF),
        !            50:        M(COND_FOR),
        !            51:        M(COND_INCLUDE),
        !            52:        M(COND_UNDEF),
        !            53:        NULL
        !            54: };
        !            55:
        !            56:
        !            57: char **table[] = {
        !            58:        table_var,
        !            59:        table_cond
        !            60: };
1.1       espie      61:
                     62: int
                     63: main(int argc, char *argv[])
                     64: {
                     65:        u_int32_t i;
                     66:        u_int32_t v;
                     67:        u_int32_t h;
                     68:        u_int32_t slots;
                     69:        const char *e;
                     70:        char **occupied;
1.3     ! espie      71:        char **t;
        !            72:        int tn;
1.1       espie      73:
                     74: #ifdef HAS_STATS
                     75:        Init_Stats();
                     76: #endif
1.3     ! espie      77:        if (argc != 3)
1.1       espie      78:                exit(1);
                     79:
1.3     ! espie      80:        tn = atoi(argv[1]);
        !            81:        if (!tn)
1.1       espie      82:                exit(1);
1.3     ! espie      83:        t = table[tn-1];
        !            84:        slots = atoi(argv[2]);
        !            85:        if (slots) {
        !            86:                occupied = malloc(sizeof(char *) * slots);
        !            87:                if (!occupied)
        !            88:                        exit(1);
        !            89:                for (i = 0; i < slots; i++)
        !            90:                        occupied[i] = NULL;
        !            91:        } else
        !            92:                occupied = NULL;
        !            93:
        !            94:        printf("/* File created by generate %d %d, do not edit */\n",
        !            95:            tn, slots);
        !            96:        for (i = 0; t[i] != NULL; i++) {
1.1       espie      97:                e = NULL;
1.3     ! espie      98:                v = ohash_interval(t[i], &e);
        !            99:                if (slots) {
        !           100:                        h = v % slots;
        !           101:                        if (occupied[h]) {
        !           102:                                fprintf(stderr,
        !           103:                                    "Collision: %s / %s (%d)\n", occupied[h],
        !           104:                                    t[i], h);
        !           105:                                exit(1);
        !           106:                        }
        !           107:                        occupied[h] = t[i];
1.1       espie     108:                }
1.3     ! espie     109:                i++;
        !           110:                printf("#define K_%s %u\n", t[i], v);
1.1       espie     111:        }
1.3     ! espie     112:        if (slots)
        !           113:                printf("#define MAGICSLOTS%d %u\n", tn, slots);
1.1       espie     114:        exit(0);
                    115: }