Files
xsrc/external/mit/ctwm/dist/make.com

484 lines
16 KiB
Plaintext

$! Make.com for building CTWM
$ SAVE_VERIFY='F$VERIFY(0)
$!
$! Compile the CTWM Window Manager
$!
$!--------------------------- Customization -------------------------------
$! Define logicals pointing to the needed directories
$!
$! this is where the Xmu include files are held,
$! usually in sys$sysroot:[decw$include.xmu]
$ define/nolog x11xmu sys$sysroot:[decw$include.xmu]
$
$! the file spec. of the Xmu library.
$ define/nolog x11xmulib "SYS$SHARE:DECW$XMULIBSHR/share"
$
$! where the xpm object library is.
$ define/nolog xpmlib pd:[src.xpm-3_4e]
$
$! ctwm exit style:
$! 0 - Just exit with error code 20.
$! 1 - run sys$system:decw$endsession.exe on exit
$ EXIT_ENDSESSION = 0
$
$!------------------------ End of Customization ---------------------------
$!
$ if p1 .Eqs. "CLEAN" then goto clean
$ if p1 .Eqs. "CLOBBER" then goto clobber
$
$! Sanity check! suggested by Michael Lemke
$ if f$search("XPM.H") .eqs. ""
$ then
$ write sys$output "Hey, you there! Read README.VMS! It says that you have to copy XPM.H"
$ write sys$output "from somewhere, like a XPM library distribution! I can't work without it,"
$ write sys$output "so I'll quit for now."
$ exit
$ endif
$ FAKE_XPMLIB:=you:[must.define.this.in]
$ l=f$trnlnm("XPMLIB")
$ if l - (FAKE_XPMLIB+"make.com") .nes. l
$ then
$ write sys$output "You must change the definition of XPMLIB in MAKE.COM."
$ exit
$ endif
$
$ FLEX = FLEX
$ Set Symbol/Scope=NoGlobal
$ if p1 .Eqs. "LINK"
$ then
$ link_options = "/NOTRACE"
$ __axp = f$getsyi("CPU") .ge. 128
$ __decc = f$search("SYS$SHARE:DECC$SHR.EXE") .nes. ""
$
$ EXT = "VAX_"
$ if __axp then EXT = "AXP_"
$ OPT_EXT = "DECC_OPT"
$ CLIB = ""
$ if .not. __axp .and (.not. __decc .or. f$search("*.''EXT'OBJ") .eqs. "")
$ then
$ OPT_EXT = "VAXC_OPT"
$ EXT = EXT + "VAXC_"
$ CLIB := SYS$SHARE:VAXCRTL/SHARE
$ endif
$ if f$search("*.''EXT'OBJ") .eqs. ""
$ then
$ write sys$output "Sorry, but the object files I need are missing."
$ write sys$output "You need to compile them first. Read README.VMS"
$ write sys$output "for further instructions"
$ exit
$ endif
$ Goto Link
$ endif
$!
$! Establish the Compiling Environment
$!
$ COPTS = F$TrnLnm("COPTS")
$ extra_defs = ""
$ CLIB = ""
$ Cpu_Model = F$GetSYI("HW_MODEL")
$ If Cpu_Model .gt. 1024 ! Cross compiling
$ Then
$ CC := CC/PREFIX=ALL/L_DOUBLE=64
$ OPT_EXT = "DECC_OPT"
$ EXT = "AXP_"
$ Else
$ write sys$error "Ignore the possible %DCL-W-IVQUAL or %CC-W-EMPTYFILE"
$ CC := CC/PREFIX=ALL
$ OPT_EXT = "DECC_OPT"
$ EXT = "VAX_"
$ CLIB = ""
$ Set Noon
$ CC NL:/OBJ=NL:
$ If $status .eq. %x00038240
$ Then ! no DEC C or the standard is to run VAX C
$ CC := CC/DECC/PREFIX=ALL
$ CC NL:/OBJ=NL:
$ If $status .eq. %x00038240
$ Then ! no DEC C, meaning VAX C without the /VAXC qualifier
$ CC := CC
$ OPT_EXT = "VAXC_OPT"
$ EXT = "VAX_VAXC_"
$ CLIB = "SYS$SHARE:VAXCRTL/SHARE"
$ extra_defs = extra_defs + ",NO_LOCALE"
$ Endif
$ Endif
$ write sys$error "There, you can look again now..."
$ Endif
$
$ ! This is a pure hack to circumvent a bug in the file provided by
$ ! Digital. This is so ugly we don't want the user to see what
$ ! really happens.
$ ! But perhaps we'll give him just a little hint, huh? :-)
$ write sys$output "Doing some hackery with XWDFile.h... Sit tight"
$ DEP_XWDFILE = ""
$ if f$search("DECW$UTILS:XWDFILE.H") .nes. ""
$ then
$ open/write foo xwdfile.tpu_tmp
$ write foo "input_file:=GET_INFO(COMMAND_LINE, ""file_name"");"
$ write foo "main_buffer := CREATE_BUFFER (""main"", input_file);"
$ write foo "position (beginning_of (main_buffer));"
$ write foo "loop"
$ write foo " r := search_quietly (""""""copyright.h"""""", FORWARD);"
$ write foo " EXITIF r = 0;"
$ write foo " if beginning_of(r) <> end_of(r)"
$ write foo " then"
$ write foo " erase (r);"
$ write foo " position (r);"
$ write foo " copy_text (""<decw$utils/copyright.h>"");"
$ write foo " endif;"
$ write foo " position (end_of (r));"
$ write foo "endloop;"
$ write foo "position (beginning_of (main_buffer));"
$ write foo "loop"
$ write foo " r := search_quietly (LINE_BEGIN + ""struct {"", FORWARD);"
$ write foo " EXITIF r = 0;"
$ write foo " if beginning_of(r) <> end_of(r)"
$ write foo " then"
$ write foo " erase (r);"
$ write foo " position (r);"
$ write foo " copy_text (""typedef struct {"");"
$ write foo " endif;"
$ write foo " position (end_of (r));"
$ write foo "endloop;"
$ write foo "write_file(main_buffer, get_info (command_line, ""output_file""));"
$ write foo "quit;"
$ close foo
$ save_mesg = f$environment("MESSAGE")
$ !set message/nofacility/noidentification/noseverity/notext
$ edit/tpu/nosection/nodisplay -
/command=xwdfile.tpu_tmp/out=xwdfile.h -
decw$utils:xwdfile.h
$ purge xwdfile.h
$ delete xwdfile.tpu_tmp;*
$ set message'save_mesg'
$ DEP_XWDFILE = "XWDFILE.H"
$ write sys$output "There, done."
$ endif
$
$ if f$search("xwdfile.h") .nes. "" then -
extra_defs = extra_defs + ",HAVE_XWDFILE_H"
$!
$! Get the compiler options via the logical name COPTS
$!
$ cc_options = COPTS + -
"/define=(VMS,XPM,C_ALLOCA,""emacs"",BLOCK_INPUT," + -
"EXIT_ENDSESSION=''EXIT_ENDSESSION'''extra_defs')" + -
"/OBJ=.''EXT'OBJ"
$!
$! Get the linker options via the logical name LOPTS
$!
$ link_options = f$trnlnm("LOPTS")
$!
$! Compile the "C" files
$!
$! procedure target command depends upon
$! CALL MAKE FILE.OBJ "CC ''cc_options' FILE.C" FILE.C
$!
$ write sys$output "Building LEX.C from LEX.L using flex"
$ CALL MAKE LEX.C "FLEX LEX.L" -
LEX.L
$ if f$search("LEXYY.C") .nes. ""
$ then
$ CALL MAKE LEX.C -
"RENAME LEXYY.C LEX.C/LOG" -
LEXYY.C
$ else
$ CALL MAKE LEX.C -
"COPY LEX.C_VMS LEX.C/LOG" -
LEX.C_VMS
$ endif
$ write sys$output -
"Building GRAM.C and GRAM.H from GRAM.Y using bison/def/yacc"
$ CALL MAKE Y_TAB.C "BISON /DEF/YACC GRAM.Y" GRAM.Y
$ if f$search("Y_TAB.C") .nes. ""
$ then
$ CALL MAKE GRAM.C -
"RENAME Y_TAB.C GRAM.C/LOG; RENAME Y_TAB.H GRAM.H/LOG" -
Y_TAB.C Y_TAB.H
$ else
$ CALL MAKE GRAM.C -
"COPY GRAM.C_VMS GRAM.C/LOG; COPY GRAM.H_VMS GRAM.H/LOG" -
GRAM.C_VMS GRAM.H_VMS
$ endif
$ CALL MAKE GRAM.H -
"BISON /DEF/YACC GRAM.Y; DELETE Y_TAB.C.*" -
GRAM.Y
$ if f$search("Y_TAB.H") .nes. ""
$ then
$ CALL MAKE GRAM.H -
"RENAME Y_TAB.H GRAM.H/LOG" -
Y_TAB.H
$ else
$ CALL MAKE GRAM.H -
"COPY GRAM.H_VMS GRAM.H/LOG" -
GRAM.H_VMS
$ endif
$ write sys$output -
"Building DEFTWMRC.C from SYSTEM.CTWMRC using GENDEFTWMRC.COM"
$ CALL MAKE DEFTWMRC.C "@GENDEFTWMRC.COM" SYSTEM.CTWMRC -
GENDEFTWMRC.COM
$ write sys$output "Compiling CTWM sources with CC=",CC
$ CALL MAKE ADD_WINDOW.'EXT'OBJ "CC 'cc_options' ADD_WINDOW.C" ADD_WINDOW.C -
"TWM.H ADD_WINDOW.H UTIL.H RESIZE.H PARSE.H GRAM.H LIST.H EVENTS.H" -
"MENUS.H SCREEN.H ICONS.H ICONMGR.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE CLICKTOFOCUS.'EXT'OBJ-
"CC 'cc_options' CLICKTOFOCUS.C" CLICKTOFOCUS.C -
"CLICKTOFOCUS.H TWM.H UTIL.H SCREEN.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE CTWM.'EXT'OBJ "CC 'cc_options' CTWM.C" CTWM.C -
"TWM.H ADD_WINDOW.H GC.H PARSE.H VERSION.H MENUS.H EVENTS.H UTIL.H" -
"GRAM.H SCREEN.H ICONS.H ICONMGR.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE CURSOR.'EXT'OBJ "CC 'cc_options' CURSOR.C" CURSOR.C -
"TWM.H SCREEN.H UTIL.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE DEFTWMRC.'EXT'OBJ "CC 'cc_options' DEFTWMRC.C" DEFTWMRC.C
$ CALL MAKE EVENTS.'EXT'OBJ "CC 'cc_options' EVENTS.C" EVENTS.C -
"TWM.H ADD_WINDOW.H MENUS.H EVENTS.H RESIZE.H PARSE.H GRAM.H UTIL.H" -
"SCREEN.H ICONS.H ICONMGR.H VERSION.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE GC.'EXT'OBJ "CC 'cc_options' GC.C" GC.C -
"TWM.H UTIL.H GRAM.H SCREEN.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE GRAM.'EXT'OBJ "CC 'cc_options' GRAM.C" GRAM.C -
"TWM.H MENUS.H ICONS.H ADD_WINDOW.H LIST.H UTIL.H SCREEN.H PARSE.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE ICONMGR.'EXT'OBJ "CC 'cc_options' ICONMGR.C" ICONMGR.C -
"TWM.H UTIL.H PARSE.H SCREEN.H RESIZE.H ADD_WINDOW.H SICONIFY.BM" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE ICONS.'EXT'OBJ "CC 'cc_options' ICONS.C" ICONS.C -
"TWM.H SCREEN.H ICONS.H GRAM.H LIST.H PARSE.H UTIL.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE LEX.'EXT'OBJ "CC 'cc_options' LEX.C" LEX.C -
"GRAM.H PARSE.H"
$ CALL MAKE LIST.'EXT'OBJ "CC 'cc_options' LIST.C" LIST.C -
"TWM.H SCREEN.H GRAM.H UTIL.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE MENUS.'EXT'OBJ "CC 'cc_options' MENUS.C" MENUS.C -
"TWM.H GC.H MENUS.H RESIZE.H EVENTS.H UTIL.H PARSE.H GRAM.H SCREEN.H" -
"ICONS.H VMS_CMD_SERVICE.H VERSION.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE PARSE.'EXT'OBJ "CC 'cc_options' PARSE.C" PARSE.C -
"TWM.H SCREEN.H MENUS.H UTIL.H GRAM.H PARSE.H VERSION.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE RESIZE.'EXT'OBJ "CC 'cc_options' RESIZE.C" RESIZE.C -
"TWM.H PARSE.H UTIL.H RESIZE.H ADD_WINDOW.H SCREEN.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE UTIL.'EXT'OBJ "CC 'cc_options' UTIL.C" UTIL.C -
"TWM.H UTIL.H GRAM.H SCREEN.H ICONS.H XPM.H SICONIFY.BM" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H ''DEP_XWDFILE'"
$ CALL MAKE VERSION.'EXT'OBJ "CC 'cc_options' VERSION.C" VERSION.C
$ CALL MAKE VSCREEN.'EXT'OBJ "CC 'cc_options' VSCREEN.C" VSCREEN.C -
"TWM.H SCREEN.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE WORKMGR.'EXT'OBJ "CC 'cc_options' WORKMGR.C" WORKMGR.C -
"TWM.H UTIL.H PARSE.H SCREEN.H ICONS.H RESIZE.H ADD_WINDOW.H EVENTS.H" -
"GRAM.H CLICKTOFOCUS.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE WINDOWBOX.'EXT'OBJ "CC 'cc_options' WINDOWBOX.C" WINDOWBOX.C -
"TWM.H SCREEN.H WINDOWBOX.H" -
"LIST.H MENUS.H ICONMGR.H VSCREEN.H WORKMGR.H"
$ CALL MAKE VMS_CMD_SERVICES.'EXT'OBJ "CC 'cc_options' VMS_CMD_SERVICES.C" -
VMS_CMD_SERVICES.C VMS_CMD_SERVICES.H LNM.H
$ CALL MAKE LNM.'EXT'OBJ "CC 'cc_options' LNM.C" LNM.C
$ CALL MAKE ALLOCA.'EXT'OBJ "CC 'cc_options' ALLOCA.C" ALLOCA.C
$!
$ Link: ! Link the executable. If all object files aren't here,
$ ! I'm deeply sorry
$ EXE_EXT = EXT - "VAXC_"
$ OPTION := CTWM.'OPT_EXT'
$ OPTION_CMD := ,CTWM.'OPT_EXT'/OPT
$
$ CALL MAKE VERSION.OPT "CALL MAKEVEROPT VERSION.OPT" VERSION.C -
MAKE.COM
$ CALL MAKE 'OPTION' "CALL MAKELIBOPT ''OPTION' ''F$TRNLNM("X11XMULIB")' ''CLIB'" -
MAKE.COM
$ CALL MAKE OBJS.'EXT'OPT "CALL MAKEOBJOPT OBJS.''EXT'OPT *.''EXT'OBJ" -
*.'EXT'OBJ MAKE.COM
$ write sys$output "Building CTWM image"
$ CALL MAKE CTWM.'EXE_EXT'EXE -
"LINK ''link_options'/EXE=CTWM.''EXE_EXT'EXE OBJS.''EXT'OPT/OPT,VERSION.OPT/OPT ''OPTION_CMD'" -
OBJS.'EXT'OPT 'OPTION' VERSION.OPT
$!
$ deassign xpmlib
$ deassign x11xmu
$
$ write sys$output "All done"
$!
$ exit
$!
$ Clobber: ! Delete executables, Purge directory and clean up object files and listings
$ Delete/noconfirm/log *.exe;*
$!
$ Clean: ! Purge directory, clean up object files and listings
$ Purge
$ Delete/noconfirm/log *.lis;*
$ Delete/noconfirm/log *.obj;*
$!
$ exit
$!
$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
$ V = 'F$Verify(0)
$! P1 = What we are trying to make
$! P2 = Command to make it
$! P3 - P8 What it depends on
$
$ If F$Search(P1) .Eqs. "" Then Goto Makeit
$ Time = F$CvTime(F$File(P1,"RDT"))
$arg=3
$Loop:
$ Argument = P'arg
$ If Argument .Eqs. "" Then Goto NoWork
$ El=0
$Loop2:
$ File = F$Element(El," ",Argument)
$ If File .Eqs. " " Then Goto Endl
$ AFile = ""
$Loop3:
$ OFile = AFile
$ AFile = F$Search(File)
$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
$ Goto Loop3
$NextEL:
$ El = El + 1
$ Goto Loop2
$EndL:
$ arg=arg+1
$ If arg .Le. 8 Then Goto Loop
$NoWork:
$ Goto Exit
$
$BailOut:
$ tmp = $status ! 'F$Verify(0)
$ If V Then Set Verify
$ write sys$error "Exiting with status code ",tmp
$ Exit tmp
$KillMe:
$ If V Then Set Verify
$ write sys$error -
"Exiting because user pressed Ctrl-Y (we do this the ugly way)"
$ Exit 20
$Makeit:
$ On Error Then Goto BailOut
$ On Control_y Then Goto KillMe
$ _Index = 0
$Makeit2:
$ _Command = F$Edit(F$Element(_Index,";",P2),"TRIM")
$ _Index = _Index + 1
$ If _Command .nes. ";"
$ Then
$ If F$Edit(F$Extract(0,5,_Command),"UPCASE") .nes. "CALL " Then Set Verify
$ '_Command
$ VV='F$Verify(0)
$ Goto Makeit2
$ Endif
$Exit:
$ If V Then Set Verify
$ENDSUBROUTINE
$
$MAKELIBOPT: SUBROUTINE !SUBROUTINE TO BUILD A LIBRARY OPTIONS FILE
$ V = 'F$Verify(0)
$ goto Makeit2
$BailOut2:
$ tmp = $status ! 'F$Verify(0)
$ close foo
$ If V Then Set Verify
$ write sys$error "Exiting with status code ",tmp
$ Exit tmp
$Makeit2:
$ On Error Then Goto BailOut2
$ On Control_y Then Goto BailOut2
$ write sys$output "Building the library option file ",P1
$ if p3 .nes. "" then write foo p3
$ __result := XPMLIB:XPM.OLB
$ if f$search(__result) .eqs. "" then -
__result := XPMLIB:LIBXPM.OLB
$ if EXT .eqs. "VAX_VAXC_" .and. -
f$search("XPMLIB:LIBXPM.OLB_VAXC") .nes. "" then -
__result := XPMLIB:LIBXPM.OLB_VAXC
$ if EXT .eqs. "VAX_" .and. -
f$search("XPMLIB:LIBXPM.OLB_DECC") .nes. "" then -
__result := XPMLIB:LIBXPM.OLB_DECC
$ if EXT .eqs. "AXP_" .and. -
f$search("XPMLIB:LIBXPM.OLB_AXP") .nes. "" then -
__result := XPMLIB:LIBXPM.OLB_AXP
$ if f$search(__result) .eqs. "" then -
libr/list=nl: '__result'
$ open/write foo 'P1'
$ write foo __result,"/LIB"
$ write foo p2
$ write foo "SYS$SHARE:DECW$XTSHR/SHARE"
$ write foo "SYS$SHARE:DECW$XEXTLIBSHR/SHARE"
$ write foo "SYS$SHARE:DECW$XLIBSHR/SHARE"
$ VV='F$Verify(0)
$Exit2:
$ close foo
$ If V Then Set Verify
$ENDSUBROUTINE
$
$MAKEVEROPT: SUBROUTINE !SUBROUTINE TO BUILD AN IDENTITY OPTIONS FILE
$ V = 'F$Verify(0)
$ goto Makeit3
$BailOut3:
$ tmp = $status ! 'F$Verify(0)
$ close foo
$ If V Then Set Verify
$ write sys$error "Exiting with status code ",tmp
$ Exit tmp
$Makeit3:
$ On Error Then Goto BailOut3
$ On Control_y Then Goto BailOut3
$ write sys$output "Building the identity option file VERSION.OPT
$ sear version.c "*VersionNumber"/out=version.tmp
$ open/read foo version.tmp
$ read foo line
$ close foo
$ delete version.tmp;*
$ version = f$extract(0,10,f$element(1,"""",line))
$ open/write foo 'p1'
$ write foo "NAME=""CTWM"""
$ write foo "IDENT=""V''version'"""
$ VV='F$Verify(0)
$Exit3:
$ close foo
$ If V Then Set Verify
$ENDSUBROUTINE
$
$MAKEOBJOPT: SUBROUTINE !SUBROUTINE TO BUILD AN IDENTITY OPTIONS FILE
$ V = 'F$Verify(0)
$ goto OBJ_Makeit
$OBJ_BailOut:
$ tmp = $status ! 'F$Verify(0)
$ close foo
$ If V Then Set Verify
$ write sys$error "Exiting with status code ",tmp
$ Exit tmp
$OBJ_Makeit:
$ On Error Then Goto OBJ_BailOut
$ On Control_y Then Goto OBJ_BailOut
$ write sys$output "Building object option file ",p1
$ open/write foo 'p1'
$ OFile = ""
$OBJ_Loop:
$ AFile = F$Search(P2)
$! DEBUG: P2 = 'P2'
$! DEBUG: AFile = 'AFile'
$ if OFile .nes. ""
$ then
$ if AFile .nes. ""
$ then
$ write foo OFile,",-"
$ else
$ write foo OFile
$ endif
$ endif
$ OFile = F$Parse(AFile,,,"NAME") + F$Parse(AFile,,,"TYPE")
$ if AFile .nes. "" then goto OBJ_Loop
$ VV='F$Verify(0)
$OBJ_Exit:
$ close foo
$ If V Then Set Verify
$ENDSUBROUTINE