Annotation of GNUtools/cc/vmsconfig.com, revision 1.1.1.1

1.1       root        1: $ !
                      2: $ !    Set up to compile GCC on VAX/VMS
                      3: $ !
                      4: $! Set the def dir to proper place for use in batch. Works for interactive too.
                      5: $flnm = f$enviroment("PROCEDURE")     ! get current procedure name
                      6: $set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
                      7: $ !
                      8: $set symbol/scope=(nolocal,noglobal)
                      9: $ !
                     10: $ echo = "write sys$output"
                     11: $ !
                     12: $ if f$search("config.h") .nes. "" then delete config.h.*
                     13: $ copy [.config.vax]xm-vms.h []config.h
                     14: $ echo "Linked `config.h' to `[.config.vax]xm-vms.h'.
                     15: $ !
                     16: $ if f$search("tconfig.h") .nes. "" then delete tconfig.h.*
                     17: $ create []tconfig.h
                     18: $DECK
                     19: /* tconfig.h == config.h :: target and host configurations are the same */
                     20: #include "config.h"
                     21: $EOD
                     22: $ echo "Created `tconfig.h'.
                     23: $ !
                     24: $ if f$search("hconfig.h") .nes. "" then delete hconfig.h.*
                     25: $ create []hconfig.h
                     26: $DECK
                     27: /* hconfig.h == config.h :: host and target configurations are the same */
                     28: #include "config.h"
                     29: $EOD
                     30: $ echo "Created `hconfig.h'.
                     31: $ !
                     32: $ if f$search("tm.h") .nes. "" then delete tm.h.*
                     33: $!! copy [.config.vax]vms.h []tm.h
                     34: $ edit/tpu/nojournal/nosection/nodisplay/command=sys$input -
                     35:         [.config.vax]vms.h /output=[]tm.h
                     36: $DECK
                     37: !
                     38: !  Copy file, changing lines of the form
                     39: !      #include "vax/*"
                     40: !  into
                     41: !      #include "[.config.vax]*"
                     42: !
                     43:    file := CREATE_BUFFER("file", GET_INFO(COMMAND_LINE, "file_name"));
                     44:    targ := LINE_BEGIN & '#include' & SPAN(ASCII(32)+ASCII(9)) & '"vax/';
                     45:    rang := CREATE_RANGE(BEGINNING_OF(file), END_OF(file));
                     46:    LOOP
                     47:       incl := SEARCH_QUIETLY(targ, FORWARD, EXACT, rang);
                     48:       EXITIF incl = 0;
                     49:       POSITION(BEGINNING_OF(incl));
                     50:       ERASE(incl);
                     51:       COPY_TEXT('#include "[.config.vax]');
                     52:       rang := CREATE_RANGE(END_OF(incl), END_OF(file));
                     53:    ENDLOOP;
                     54:    WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file"));
                     55:    QUIT
                     56: $EOD
                     57: $ echo "Generated `tm.h' from `[.config.vax]vms.h'.
                     58: $ !
                     59: $ if f$search("md.") .nes. "" then delete md..*
                     60: $ copy [.config.vax]vax.md []md.
                     61: $ echo "Linked `md' to `[.config.vax]vax.md'.
                     62: $ !
                     63: $ if f$search("aux-output.c") .nes. "" then delete aux-output.c.*
                     64: $ copy [.config.vax]vax.c []aux-output.c
                     65: $ echo "Linked `aux-output.c' to `[.config.vax]vax.c'.
                     66: $ !
                     67: $!
                     68: $!
                     69: $! Create the file version.opt, which helps identify the executable.
                     70: $!
                     71: $search version.c version_string,"="/match=and/output=t.tmp
                     72: $open ifile$ t.tmp
                     73: $read ifile$ line
                     74: $close ifile$
                     75: $delete t.tmp;
                     76: $ijk=f$locate("""",line)+1
                     77: $line=f$extract(ijk,f$length(line)-ijk,line)
                     78: $ijk=f$locate("""",line)
                     79: $line=f$extract(0,ijk,line)
                     80: $ijk=f$locate("\n",line)
                     81: $line=f$extract(0,ijk,line)
                     82: $!
                     83: $i=0
                     84: $loop:
                     85: $elm=f$element(i," ",line)
                     86: $if elm.eqs."" then goto no_ident
                     87: $if (elm.les."9").and.(elm.ges."0") then goto write_ident
                     88: $i=i+1
                     89: $goto loop
                     90: $!
                     91: $no_ident:
                     92: $elm="?.??"
                     93: $!
                     94: $!
                     95: $write_ident:
                     96: $open ifile$ version.opt/write
                     97: $write ifile$ "ident="+""""+elm+""""
                     98: $close ifile$
                     99: $purge version.opt
                    100: $!
                    101: $!
                    102: $! create linker options files that lists all of the components for all
                    103: $! possible compilers.  We do this by editing the file Makefile.in, and 
                    104: $! generating the relevant files from it.
                    105: $!
                    106: $!
                    107: $! Make a copy of the makefile if the sources are on a disk that is NFS 
                    108: $!    mounted on a unix machine.
                    109: $if f$search("Makefile.in").eqs."" .and. f$search("$M$akefile.in").nes."" -
                    110:        then copy $M$akefile.in Makefile.in
                    111: $!
                    112: $!
                    113: $echo "Now processing Makefile.in to generate linker option files."
                    114: $edit/tpu/nojournal/nosection/nodisplay/command=sys$input
                    115:    PROCEDURE generate_option_file (TAG_NAME, outfile)
                    116:         position (beginning_of (newbuffer));
                    117:         recursive_fetch_tag (TAG_NAME);
                    118: !
                    119: ! Now fix up a few things in the output buffer
                    120: !
                    121:        pat_replace ("bytecode "," ");
                    122:        pat_replace (".o ",",");
                    123:        pat_replace (".o","");  !appear at end of lines.
                    124: !
                    125: ! Remove trailing commas, if present.
                    126: !
                    127:        position (beginning_of (newbuffer));
                    128:        LOOP
                    129:          range1 := search_quietly("," & ((SPAN(" ") & LINE_END) | LINE_END),
                    130:                                   FORWARD, EXACT);
                    131:          exitif range1 = 0;
                    132:          position (beginning_of (range1));
                    133:          erase(range1);
                    134:          split_line;           
                    135:          ENDLOOP;
                    136: ! get rid of leading spaces on lines.
                    137:         position (beginning_of (current_buffer)) ;
                    138:        LOOP
                    139:           range1 := search_quietly ( LINE_BEGIN & " ", FORWARD, EXACT) ;
                    140:          EXITIF range1 = 0;
                    141:          position (end_of (range1));
                    142:          erase_character(1);
                    143:        ENDLOOP;       
                    144: !
                    145: ! Now write the output file.
                    146: !
                    147:        SET(OUTPUT_FILE, newbuffer, outfile);
                    148:       write_file (newbuffer);
                    149:       erase (newbuffer);
                    150:    ENDPROCEDURE;
                    151: 
                    152: !
                    153: ! Looks up a tag, copies it to newbuffer, and then translates any $(...)
                    154: ! definitions that appear.  The translation is put at the current point.
                    155: !
                    156:    PROCEDURE recursive_fetch_tag (TAG_N);
                    157:    fetch_tag (TAG_N);
                    158: !
                    159: ! substitute any  makefile symbols $(...)
                    160: !
                    161:         position (beginning_of (current_buffer)) ;
                    162:        LOOP
                    163:          range1 := search_quietly ("$(" &  
                    164:       SPAN("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ#~0123456789")
                    165:                                    & ")", FORWARD, EXACT) ;
                    166:          EXITIF range1 = 0;
                    167:          position (beginning_of (range1));
                    168:          move_horizontal(2);
                    169:          mark_1 := MARK (NONE);
                    170:          position (end_of (range1));
                    171:          move_horizontal(-1);
                    172:          mark_2 := MARK (NONE);
                    173:          tag_range := CREATE_RANGE(MARK_1, MARK_2, NONE);
                    174:          position (end_of (range1));
                    175:          tag_string := STR (tag_range);
                    176:          erase (range1);
                    177:          fetch_tag (LINE_BEGIN & tag_string & ((SPAN(" ") & "=") | "="));
                    178:           position (beginning_of (current_buffer)) ;
                    179:        ENDLOOP;       
                    180:    ENDPROCEDURE;
                    181: 
                    182: !
                    183: ! Looks up the translation of a tag, and inserts it at the current location
                    184: ! in the buffer
                    185: !
                    186:    PROCEDURE fetch_tag (TAG_N);
                    187:       LOCAL mark1, mark2, mark3, range2;
                    188:       mark3 := MARK(NONE) ;
                    189:       position (beginning_of (mainbuffer)) ;
                    190:       range2 := search_quietly (TAG_N, FORWARD, EXACT) ;
                    191:       IF (range2 = 0) then 
                    192:        position (mark3);
                    193:        return;
                    194:        endif;
                    195:       position (end_of (range2)) ;
                    196:       MOVE_HORIZONTAL(1);
                    197:       mark1 := MARK(NONE) ;
                    198:       position (beginning_of (range2)) ;
                    199:       MOVE_VERTICAL(1);
                    200:       MOVE_HORIZONTAL(-2);
                    201:       LOOP
                    202:        EXITIF CURRENT_CHARACTER <> "\" ;
                    203:        ERASE_CHARACTER(1);
                    204:        MOVE_HORIZONTAL(1);
                    205:        MOVE_VERTICAL(1);
                    206:        MOVE_HORIZONTAL(-2);
                    207:        ENDLOOP;
                    208:       MOVE_HORIZONTAL(1);
                    209:       mark2 := MARK(NONE) ;
                    210:       range2 := CREATE_RANGE(mark1, mark2, NONE) ;
                    211:       position (mark3);
                    212:       if (length(range2) = 0) then return; endif;
                    213:       copy_text(range2);
                    214:    ENDPROCEDURE;
                    215: 
                    216:    PROCEDURE pat_replace (
                    217:       oldstring, !
                    218:       newstring)  !
                    219:       LOCAL range2;
                    220:       position (beginning_of (current_buffer)) ;
                    221:       LOOP
                    222:          range2 := search_quietly (oldstring, FORWARD, EXACT) ;
                    223:          EXITIF range2 = 0 ;
                    224:          position (beginning_of (range2)) ;
                    225:          erase (range2) ;
                    226:          copy_text (newstring) ;
                    227:          ENDLOOP ;
                    228:    ENDPROCEDURE ;
                    229: 
                    230: ! this is the start of the main procedure
                    231:    filename := GET_INFO (COMMAND_LINE, 'file_name') ;
                    232:    mainbuffer := CREATE_BUFFER ("Makefile.in", "Makefile.in") ;
                    233:    newbuffer := CREATE_BUFFER("outfile");
                    234:    compiler_list := CREATE_BUFFER("compilers");
                    235: !
                    236: ! Add to this list, as required.  The file "Makefile.in" is searched for a
                    237: ! tag that looks like "LINE_BEGIN + 'tag + (optional space) + "="".  The
                    238: ! contents are assumed to be a list of object files, and from this list a
                    239: ! VMS linker options file is generated.
                    240: !
                    241:    position (beginning_of (compiler_list));
                    242:    recursive_fetch_tag(LINE_BEGIN & "COMPILERS" & ((SPAN(" ") & "=") | "="));
                    243:    position (beginning_of (compiler_list));
                    244:    LOOP ! kill leading spaces.
                    245:        exitif current_character <> " ";
                    246:        erase_character(1);
                    247:        ENDLOOP;
                    248:    position (beginning_of (compiler_list));
                    249:       LOOP ! remove any double spaces.
                    250:          range1 := search_quietly ("  ", FORWARD, EXACT) ; EXITIF range1 = 0 ;
                    251:          position (beginning_of (range1)) ;
                    252:          erase_character(1);
                    253:          ENDLOOP ;
                    254:    position (end_of (compiler_list));
                    255:    move_horizontal(-1);
                    256:    LOOP ! kill trailing spaces.
                    257:        exitif current_character <> " ";
                    258:        erase_character(1);
                    259:        move_horizontal(-1);
                    260:        ENDLOOP;
                    261:    position (beginning_of (compiler_list));
                    262:       LOOP
                    263:          range1 := search_quietly (" ", FORWARD, EXACT) ;
                    264:          EXITIF range1 = 0 ;
                    265:          position (beginning_of (range1)) ;
                    266:          erase (range1) ;
                    267:         split_line;
                    268:          ENDLOOP ;
                    269: !
                    270: ! We now have a list of supported compilers.  Now write it, and use it.
                    271: !
                    272:        SET(OUTPUT_FILE, compiler_list, "compilers.list");
                    273:       write_file (compiler_list);
                    274:    generate_option_file(LINE_BEGIN & "OBJS" & ((SPAN(" ") & "=") | "="),
                    275:                        "independent.opt");
                    276:    generate_option_file(LINE_BEGIN & "LIB2FUNCS" & ((SPAN(" ") & "=") | "="),
                    277:                        "libgcc2.list");
                    278:    generate_option_file(LINE_BEGIN & "BC_ALL" & ((SPAN(" ") & "=") | "="),
                    279:                        "bc_all.opt");
                    280:    generate_option_file(LINE_BEGIN & "BI_OBJ" & ((SPAN(" ") & "=") | "="),
                    281:                        "bi_all.opt");
                    282: !
                    283: ! Now change OBJS in the Makefile, so each language specific options file 
                    284: ! does not pick up all of the language independent files.
                    285: !
                    286:    position (beginning_of (mainbuffer));
                    287:    range1 := search_quietly (LINE_BEGIN & "OBJS" & ((SPAN(" ") & "=") | "="),
                    288:                             FORWARD, EXACT) ;
                    289:    position (end_of (range1));
                    290:    split_line;
                    291:    position (beginning_of (compiler_list));
                    292:    LOOP
                    293:      cmark := mark(NONE);
                    294:      exitif cmark = end_of(compiler_list);
                    295:      message(current_line);
                    296:      generate_option_file(LINE_BEGIN & Current_line & ((SPAN(" ") & ":") | ":"),
                    297:                          current_line+"-objs.opt");
                    298:      position (cmark);
                    299:      move_vertical(1);
                    300:    ENDLOOP ;
                    301:    quit ;
                    302: $ echo ""
                    303: $!
                    304: $! Remove excessive versions of the option files...
                    305: $!
                    306: $ purge *.opt
                    307: $ purge compilers.list,libgcc2.list
                    308: $!
                    309: $!
                    310: $!
                    311: $ if f$search("config.status") .nes. "" then delete config.status.*
                    312: $ open/write file config.status
                    313: $ write file "Links are now set up for use with a vax running VMS."
                    314: $ close file
                    315: $ type config.status
                    316: $ echo ""

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.