Annotation of gcc/vmsconfig.com, revision 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.