$ v0 = 0 $ v = f$verify(v0) $! $LynxId: build.com,v 1.17 2010/06/19 16:01:33 Christoph.J.Gartmann Exp $ $! BUILD.COM $! $! Command file to build LYNX.EXE on VMS systems. $! Also invokes build of the WWWLibrary if its $! object library does not already exist. $! $! $! 11-Jun-2010 Ch. Gartmann $! add support for "Multinet UCX emulation" $! 01-Jul-2007 T.Dickey $! add support for "TCPIP" (TCPIP Services) $! 04-Nov-2004 T.Dickey $! workarounds to build with IA64 platform. $! 23-Oct-2004 T.Dickey $! cleanup, remove duplication, etc. $! 08-Oct-1997 F.Macrides macrides@sci.wfeb.edu $! Added comments and minor tweaks for convenient addition of $! compiler definitions and compiler and linker options. $! 28-Jun-1997 F.Macrides macrides@sci.wfeb.edu $! Added chartrans support. $! 29-Feb-1996 F.Macrides macrides@sci.wfeb.edu $! Added LYMap to the compilation and link lists. $! 26-Jul-1995 F.Macrides macrides@sci.wfeb.edu $! Reorganized the option files into ones for the transport and $! ones for the compiler, and adding support for GNUC. $! 14-Jun-1995 F.Macrides macrides@sci.wfeb.edu $! Added LYList. $! 03-May-1995 F.Macrides macrides@sci.wfeb.edu $! Include /nomember for compilations with DECC. It's not the $! default on AXP and the code assumes byte alignment. $! 23-Mar-1995 F.Macrides macrides@sci.wfeb.edu $! Replaced references to v2.3.8 or v2.3.9 with v2.3-FM to avoid $! any confusion with official releases at UKans. $! 16-Mar-1995 F.Macrides macrides@sci.wfeb.edu $! Updated to permit submission to BATCH. $! 17-Feb-1995 F.Macrides macriees@sci.wfeb.edu $! Updated for v2.3-FM $! 07-Dec-1994 F.Macrides macrides@sci.wfeb.edu $! Updated for DECC/VAX, VAXC/VAX and DECC/AXP $! 03-OCT-1994 A.Harper A.Harper@kcl.ac.uk $! Mods to support SOCKETSHR/NETLIB and add a /DEBUG/NOOPT option $! 02-Jun-1994 F.Macrides macrides@sci.wfeb.edu $! Mods to support TCPWare (To use non-blocking connects, you need $! the DRIVERS_V405B.INC patch from FTP.PROCESS.COM for TCPware for $! OpenVMS Version 4.0-5, or a higher version of TCPWare, which will $! have that bug in the TCPDRIVER fixed. Otherwise, add NO_IOCTL to $! the $ cc := cc/define=(...) list in [.WWW.Library.VMS]libmake.com). $! 20-May-1994 Andy Harper A.Harper@bay.cc.kcl.ac.uk $! Mods to support CMU TCP/IP $! 13-Dec-1993 F.Macrides macrides@sci.wfeb.edu $! Mods for conditional compilations with VAXC versus DECC $! 10-Dec-1993 F.Macrides macrides@sci.wfeb.edu $! Initial version, for Lynx v2.1 $! $ ON CONTROL_Y THEN GOTO CLEANUP $ ON ERROR THEN GOTO CLEANUP $ proc = f$environment("PROCEDURE") $ where = f$parse(proc,,,"DEVICE") + f$parse(proc,,,"DIRECTORY") $ set default 'where' $ write sys$output "Default directory:" $ show default $ write sys$output "" $! $! Compiler definitions can be added here as a comma separated $! list with a lead comma, e.g., ",HAVE_FOO_H,DO_BLAH". The $! definitions will apply only to the LYfoo.c modules. Ones $! for the libwww-FM modules can be added equivalently in $! [.WWW.Library.vms]libmake.com. - FM $! $ extra_defs = "" $! $! Include-paths can be added here as a comma separated $! list with a lead comma, e.g., ",foo". $! $ extra_incs = "" $! $! Library definitions can be added here as a comma separated $! list with a lead comma, e.g., ",foo/LIB". $! $ extra_libs = "" $! $! If no TCP/IP agent is specified (as the first argument), $! prompt for a number from the list. Note that the agent $! must be the first argument if the debugger mode is to be $! set via a second argument (see below). - FM $! $ agent = 0 $ IF P1 .EQS. "" $ THEN $ If f$mode() .eqs. "BATCH" $ Then $ write sys$output "TCP/IP agent not specified!" $ write sys$output "Defaulting to MULTINET" $ agent = 1 $ Else $ write sys$output "Acceptable TCP/IP agents are" $ write sys$output " [1] MULTINET (default)" $ write sys$output " [2] UCX" $ write sys$output " [3] WIN_TCP" $ write sys$output " [4] CMU_TCP" $ write sys$output " [5] SOCKETSHR_TCP" $ write sys$output " [6] TCPWARE" $ write sys$output " [7] DECNET" $ write sys$output " [8] TCPIP" $ write sys$output " [9] Multinet with UCX emulation" $ read sys$command/prompt="Agent [1,2,3,4,5,6,7,8,9] (RETURN = [1]) " agent $ EndIf $ ENDIF $ option = "" $ if agent .eq. 1 .or. agent .eqs. "" .or. p1 .eqs. "" .or. p1 .eqs. "MULTINET" then - option = "MULTINET" $ if agent .eq. 2 .or. p1 .eqs. "UCX" then option = "UCX" $ if agent .eq. 3 .or. p1 .eqs. "WIN_TCP" then option = "WIN_TCP" $ if agent .eq. 4 .or. p1 .eqs. "CMU_TCP" then option = "CMU_TCP" $ if agent .eq. 5 .or. p1 .eqs. "SOCKETSHR_TCP" then option = "SOCKETSHR_TCP" $ if agent .eq. 6 .or. p1 .eqs. "TCPWARE" then option = "TCPWARE" $ if agent .eq. 7 .or. p1 .eqs. "DECNET" then option = "DECNET" $ if agent .eq. 8 .or. p1 .eqs. "TCPIP" then option = "TCPIP" $ if agent .eq. 9 .or. p1 .eqs. "MULTINETUCX" $ then $ option = "UCX" $ mucx = 1 $ extra_defs = extra_defs + ",MUCX" $ ELSE $ mucx = 0 $ ENDIF $! $ if option .eqs. "" $ then $ write sys$output "TCP/IP agent could not be determined" $ exit 18 $ endif $! $ if option .eqs. "TCPWARE" $ then $ write sys$output "Building Lynx for TCPWARE with UCX emulation..." $ extra_defs = extra_defs + ",UCX" $ endif $! $ optfile = "''option'" $! $! Compiler and linker options can be specified here. If $! there was a second argument (with any value), then debugger $! mode with no optimization will be specified as well. The $! compiler options will apply only to the LYfoo.c and UCfoo.c $! modules. Ones for the libwww-FM modules can be specified $! in [.WWW.Library.vms]libmake.com. - FM $! $ cc_opts = "" $ link_opts = "" $! $! The second parameter is a comma-separated list of the optional $! libraries: $! bzlib, slang, ssl, zlib $! Because these are normally not installed in a standard place, $! you must define their locations (see below for the symbols ending $! with "_INC" or "_LIB"). $! $ if P2 .nes. "" $ then $ count_parm = 0 $ parse_p2: $ value_parm = f$element('count_parm, ",", "''p2'") $ if value_parm .nes. "," $ then $ if value_parm .eqs. "BZLIB" $ then $ write sys$output "** adding BZlib to build." $ extra_defs = extra_defs + ",USE_BZLIB" $ extra_incs = extra_incs + "," + BZLIB_INC $ extra_libs = extra_libs + "," + BZLIB_LIB + "libbz2/LIB" $ endif $ if value_parm .eqs. "SLANG" $ then $ write sys$output "** adding SLang to build." $ extra_defs = extra_defs + ",USE_SLANG" $ extra_incs = extra_incs + "," + SLANG_INC $ extra_libs = extra_libs + "," + SLANG_LIB + "slang.olb/lib" $ endif $ if value_parm .eqs. "SSL" $ then $ write sys$output "** adding SSL to build." $ IF F$TYPE( ssl_lib ) .EQS. "" THEN ssl_lib = F$TRNLNM("SSLLIB") $ IF F$TYPE( ssl_inc ) .EQS. "" THEN ssl_inc = F$TRNLNM("SSLINCLUDE") $ extra_defs = extra_defs + ",USE_SSL,USE_OPENSSL_INCL" $ extra_libs = extra_libs + "," + SSL_LIB + "libssl/LIB," + SSL_LIB + "libcrypto/LIB" $! $! The "#include " requires a logical variable "openssl". $! $ define/nolog openssl 'SSL_INC $ endif $ if value_parm .eqs. "ZLIB" $ then $ write sys$output "** adding Zlib to build." $ extra_defs = extra_defs + ",USE_ZLIB" $ extra_incs = extra_incs + "," + ZLIB_INC $ extra_libs = extra_libs + "," + ZLIB_LIB + "libz/LIB" $ endif $ count_parm = count_parm + 1 $ goto parse_p2 $ endif $ endif $! $! The third parameter is nonempty to make a debug build $! $ if P3 .nes. "" $ then $ debug_arg = "DEBUG" $ cc_opts = cc_opts + "/DEBUG/NOOPT" $ link_opts = link_opts + "/DEBUG" $ else $ debug_arg = "" $ endif $! $ IF f$search("[.WWW.Library.Implementation]WWWLib_''option'.olb") .nes. "" $ THEN $ write sys$output " WWWLib_''option'.olb already exists." $ If f$mode() .eqs. "BATCH" $ Then $ write sys$output " Updating WWWLib_''option'.olb" $ Else $ read sys$command/prompt=" Update it [default Y]? " reply $ if reply .nes. "" .and. - f$extract(0,1,f$edit(reply, "TRIM, UPCASE")) .nes. "Y" then - $ goto Compile_CHRTRANS $ EndIf $ ENDIF $ v1 = f$verify(1) $! $! Build the WWWLibrary $! $ set default [.WWW.Library.VMS] $ v1 = f$verify(v0) $ @libmake "''option'" "''P2'" "''debug_arg'" $ v1 = f$verify(1) $ set default [-.-.-] $ v1 = f$verify(v0) $ ON CONTROL_Y THEN GOTO CLEANUP $ ON ERROR THEN GOTO CLEANUP $! $Compile_CHRTRANS: $ IF f$search("[.src.chrtrans]makeuctb.exe") .nes. "" $ THEN $ write sys$output " [.src.chrtrans]makeuctb.exe already exists." $ If f$mode() .eqs. "BATCH" $ Then $ write sys$output " Updating makeuctb.exe and chrtrans header files." $ Else $ read sys$command - /prompt=" Update it and chrtrans header files [default Y]? " reply $ if reply .nes. "" .and. - f$extract(0,1,f$edit(reply, "TRIM, UPCASE")) .nes. "Y" then - $ goto Compile_SRC $ EndIf $ ENDIF $! $ v1 = f$verify(1) $! $! Build the chrtrans modules. $! $ set default [.src.chrtrans] $ v1 = 'f$verify(v0) $ @build-chrtrans $ v1 = f$verify(1) $ set default [-.-] $ v1 = f$verify(v0) $ ON CONTROL_Y THEN GOTO CLEANUP $ ON ERROR THEN GOTO CLEANUP $! $Compile_SRC: $ v1 = f$verify(1) $! $! Compile the Lynx [.SRC] modules $! $ set default [.SRC] $ v1 = f$verify(v0) $ IF f$getsyi("ARCH_NAME") .eqs. "Alpha" .or. - f$getsyi("ARCH_NAME") .eqs. "IA64" .or. - f$trnlnm("VAXCMSG") .eqs. "DECC$MSG" .or. - f$trnlnm("DECC$CC_DEFAULT") .eqs. "/DECC" .or. - f$trnlnm("DECC$CC_DEFAULT") .eqs. "/VAXC" $ THEN $ compiler := "DECC" $! $ if option .eqs. "UCX" $ then $ optfile = "UCXSHR" $ IF mucx THEN optfile = "MULTINET_UCX" $ ENDIF $ if option .eqs. "TCPIP" then optfile = "TCPIPSHR" $ if option .eqs. "TCPWARE" then optfile = "TCPWARESHR" $! $ if option .eqs. "SOCKETSHR_TCP" then extra_defs = extra_defs + ",_DECC_V4_SOURCE" $ if option .eqs. "TCPIP" then extra_defs = extra_defs + ",_DECC_V4_SOURCE,TCPIP_SERVICES" $ if option .eqs. "MULTINET" then - extra_defs = extra_defs + ",_DECC_V4_SOURCE,__SOCKET_TYPEDEFS" $! $ v1 = f$verify(1) $! DECC: $ cc := cc/decc/prefix=all/nomember'cc_opts' - /DEFINE=(ACCESS_AUTH,'option''extra_defs',__VMS_CURSES)- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans]'extra_incs') $ v1 = f$verify(v0) $ ELSE $ IF option .eqs. "UCX" $ THEN $ optfile = "UCXSHR" $ IF mucx THEN optfile = "MULTINET_UCX" $ ENDIF $ if option .eqs. "TCPIP" then optfile = "TCPIPOLB" $ if option .eqs. "TCPWARE" then optfile = "TCPWAREOLB" $ IF f$search("gnu_cc:[000000]gcclib.olb") .nes. "" $ THEN $ compiler := "GNUC" $ v1 = f$verify(1) $! GNUC: $ cc := gcc'cc_opts' - /DEFINE=(ACCESS_AUTH,'option''extra_defs')- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans]'extra_incs') $ v1 = f$verify(v0) $ ELSE $ compiler := "VAXC" $ v1 = f$verify(1) $! VAXC: $ cc := cc'cc_opts' - /DEFINE=(ACCESS_AUTH,'option''extra_defs')- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans]'extra_incs') $ v1 = f$verify(v0) $ ENDIF $ ENDIF $ v1 = f$verify(1) $! $ cc DefaultStyle $ cc GridText $ cc HTAlert $ cc HTFWriter $ cc HTInit $ cc HTML $ cc LYBookmark $ cc LYCgi $ cc LYCharSets $ cc LYCharUtils $ cc LYClean $ cc LYCookie $ cc/nooptimize LYCurses $ cc LYDownload $ cc LYEdit $ cc LYEditmap $ cc LYexit $ cc LYForms $ cc LYGetFile $ cc LYHistory $ cc LYJump $ cc LYKeymap $ cc LYLeaks $ cc LYList $ cc LYMail $ cc LYMain $ cc LYMainLoop $ cc LYMap $ cc LYMktime $ cc LYNews $ cc LYOptions $ cc LYPrint $ cc LYrcFile $ cc LYReadCFG $ cc LYSearch $ cc LYSession $ cc LYShowInfo $ cc LYStrings $ cc LYTraversal $ cc LYUpload $ cc LYUtils $ cc PARSDATE $ cc TRSTable $ cc UCAuto $ cc UCAux $ cc UCdomap $! $! Link the objects and libaries. $! $ IF f$getsyi("ARCH_NAME") .eqs. "IA64" $ THEN $ optslibs="''extra_libs'" $ ELSE $ optslibs=", sys$disk:[]''optfile'.opt/opt, sys$disk:[]''compiler'.opt/opt ''extra_libs'" $ ENDIF $! $ link/exe=lynx.exe/map=lynx 'link_opts' - DefaultStyle.obj, - GridText.obj, - HTAlert.obj, - HTFWriter.obj, - HTInit.obj, - HTML.obj, - LYBookmark.obj, - LYCgi.obj, - LYCharSets.obj, - LYCharUtils.obj, - LYClean.obj, - LYCookie.obj, - LYCurses.obj, - LYDownload.obj, - LYEdit.obj, - LYEditmap.obj, - LYexit.obj, - LYForms.obj, - LYGetFile.obj, - LYHistory.obj, - LYJump.obj, - LYKeymap.obj, - LYLeaks.obj, - LYList.obj, - LYMail.obj, - LYMain.obj, - LYMainLoop.obj, - LYMap.obj, - LYMktime.obj, - LYNews.obj, - LYOptions.obj, - LYPrint.obj, - LYrcFile.obj, - LYReadCFG.obj, - LYSearch.obj, - LYSession.obj, - LYShowInfo.obj, - LYStrings.obj, - LYTraversal.obj, - LYUpload.obj, - LYUtils.obj, - Parsdate.obj, - TRSTable.obj, - UCAuto.obj, - UCAux.obj, - UCdomap.obj, - [-.WWW.Library.Implementation]WWWLib_'option'.olb/library 'optslibs $! $! Copy the executable to the top directory and restore the default. $! $ copy lynx.exe [-] $ set def [-] $! $ v1 = f$verify(v0) $! $! Issue message on how to include LYNX.HLP in the system HELP library $! $ write sys$output "" $ write sys$output " To install or update lynx.hlp in the system HELP library," $ write sys$output " use:" $ write sys$output " library/replace sys$help:helplib.hlb lynx.hlp" $ write sys$output "" $! $ CLEANUP: $ v1 = f$verify(v0) $ set default 'where' $ write sys$output "Default directory:" $ show default $ v1 = f$verify(v) $ exit