Annotation of GNUtools/cc/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.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.