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

unix.superglobalmegacorp.com

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