build_vms.com   [plain text]


$! $Id: build_vms.com,v 1.4 2005/02/11 22:42:16 curlvms Exp $
$! BUILD_VMS.COM 
$!
$! I've taken the original build_vms.com, supplied by Nico Baggus, if
$! memory serves me correctly, and made some modifications.
$!
$! SSL support is based on logicals, or lack thereof.  If SSL$INCLUDE
$! is defined, then it assumed that hp's SSL product has been installed.
$! If OPENSSL is defined, but SSL$INCLUDE isn't, then the OpenSSL defined
$! via the defines.com procedure will be used.  If neither logical is 
$! defined, then SSL support will not be compiled/linked in.
$!
$! If CURL_BUILD_NOSSL is defined to anything, then no SSL support will
$! be built in.  This way you can build without SSL support on systems
$! that have it without the "automatic" build/link "features".
$!
$! If CURL_BUILD_NOHPSSL is defined to anything, it will override the
$! SSL$INCLUDE check.  This way you can build against OpenSSL, even if
$! you have hp SSL installed.
$!
$! Parameter(s):
$!
$! P1 - LISTING will create .lis files during the C compile
$!      DEBUG will compile and link with debug
$!
$! Revisions:
$!
$!  2-DEC-2003, MSK, the "original" version. <marty@barra.com>
$!                   It works for me.  Your mileage may vary.
$! 13-JAN-2004, MSK, moved this procedure to the [.packages.vms] directory
$!                   and updated it to do hardware dependant builds.
$! 29-JAN-2004, MSK, moved logical defines into defines.com
$!  6-FEB-2004, MSK, put in various SSL support bits
$!  9-MAR-2004, MSK, the config-vms.h* files are now copied to the lib and
$!                   src directories as config.h.
$! 15-MAR-2004, MSK, All of the curlmsg*.* files have also been moved to 
$!                   this build directory.  They will be copied to the src 
$!                   directory before build.  The .msg file will be compiled 
$!                   to get the .obj for messages, but the .h and .sdl files 
$!                   are not automatically created since they partly rely on 
$!                   the freeware SDL tool.
$!  8-FEB-2005, MSK, merged the two config-vms.h* files into one that uses
$!                   USE_SSLEAY to define if the target has SSL support built
$!                   in.  Changed the cc/define parameter accordingly.
$! 11-FEB-2005, MSK, If [--.LIB]AMIGAOS.C and NWLIB.C are there, rename them
$!
$ on control_y then goto Common_Exit
$ ctrl_y  = 1556 
$ origdir = f$environment("DEFAULT")
$ proc    = f$environment("PROCEDURE")
$ thisdir = f$parse( proc,,,"DEVICE") + f$parse( proc,,,"DIRECTORY")
$!
$! Verbose output message stuff.  Define symbol to "write sys$output" or "!".
$! vo_c - verbose output for compile
$! vo_l - link
$! vo_o - object check
$!
$ vo_c = "write sys$output"
$ vo_l = "write sys$output"
$ vo_o = "!"
$!
$ defines = thisdir + "defines.com"
$ if f$trnlnm( "curl_defines_done") .eqs. "" 
$ then 
$    if f$search( defines) .eqs. "" 
$    then
$       write sys$output "%CURL-F-DEFFNF, cannot find defines.com procedure"
$       exit %X18290 ! FNF
$    else
$       @'defines'
$    endif
$ endif
$ set def 'thisdir'
$ cc_qual = "/define=HAVE_CONFIG_H=1/OBJ=OBJDIR:"
$ link_qual = ""
$ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE"
$ if p1 .eqs. "DEBUG" 
$ then 
$    cc_qual = cc_qual + "/LIST/MACHINE/DEBUG/NOOPT"
$    link_qual = "/DEBUG"
$ endif
$ msg_qual = "/OBJ=OBJDIR:"
$!
$ hpssl   = 0
$ openssl = 0
$ if f$trnlnm( "CURL_BUILD_NOSSL") .eqs. ""
$ then
$    if f$trnlnm( "OPENSSL") .nes. "" 
$    then
$       openssl = 1
$       cc_qual = "/define=(HAVE_CONFIG_H=1,USE_SSLEAY=1)/OBJ=OBJDIR:"
$       if ( f$trnlnm( "SSL$INCLUDE") .nes. "") .and. -
           ( f$trnlnm( "CURL_BUILD_NOHPSSL") .eqs. "")
$       then hpssl = 1
$       endif
$    endif
$ endif
$!
$! Put the right main config file in the two source directories for the build.
$!
$ if ( openssl .eq. 1) .or. ( hpssl .eq. 1)
$ then
$    'vo_c' "%CURL-I-BLDSSL, building with SSL support"
$ else
$    'vo_c' "%CURL-I-BLDNOSSL, building without SSL support"
$ endif
$ config_h = "CONFIG-VMS.H"
$!
$! Only do the copy if the source and destination files are different.
$!
$ call MoveIfDiff 'config_h' "[--.LIB]CONFIG.H"
$ call MoveIfDiff 'config_h' "[--.SRC]CONFIG.H"
$! call MoveIfDiff "SETUP.H" "[--.LIB]"
$! call MoveIfDiff "SETUP.H" "[--.SRC]"
$ call MoveIfDiff "CURLMSG.H" "[--.SRC]"
$ call MoveIfDiff "CURLMSG.MSG" "[--.SRC]"
$ call MoveIfDiff "CURLMSG.SDL" "[--.SRC]"
$ call MoveIfDiff "CURLMSG_VMS.H" "[--.SRC]"
$!
$! The [--.LIB]amigaos.c and nwlib.c files aren't needed for the VMS build.
$! If they are there, rename them so the brute force build works right.
$!
$ if f$search( "[--.lib]amigaos.c") .nes. "" 
$ then
$    rename [--.lib]amigaos.c .c_not_used
$ endif
$ if f$search( "[--.lib]nwlib.c") .nes. "" 
$ then
$    rename [--.lib]nwlib.c .c_not_used
$ endif
$ on control_y then goto Common_Exit
$!
$ call build "[--.lib]" "*.c" "objdir:curllib.olb"
$ if ($status .eq. ctrl_y) then goto Common_Exit
$ call build "[--.src]" "*.c" "objdir:curlsrc.olb"
$ if ($status .eq. ctrl_y) then goto Common_Exit
$ call build "[--.src]" "*.msg" "objdir:curlsrc.olb"
$ if ($status .eq. ctrl_y) then goto Common_Exit
$ if ( openssl .eq. 1) .and. ( hpssl .eq. 0)
$ then
$    'vo_l' "%CURL-I-LINK_OSSL, linking with OpenSSL"
$    link 'link_qual'/exe=exedir:curl.exe -
          objdir:curlsrc/lib/include=(main,curlmsg),-
          objdir:curllib/lib, libssl/lib, libcrypto/lib
$ endif
$ if ( openssl .eq. 1) .and. ( hpssl .eq. 1)
$ then
$    'vo_l' "%CURL-I-LINK_HPSSL, linking with hp SSL option"
$    optfile = "[]hpssl_" + f$getsyi("ARCH_NAME") + ".opt/opt"
$    link 'link_qual'/exe=exedir:curl.exe -
          objdir:curlsrc/lib/include=(main,curlmsg),-
          objdir:curllib/lib, 'optfile'
$ endif
$ if ( openssl .eq. 0) .and. ( hpssl .eq. 0)
$ then
$    'vo_l' "%CURL-I-LINK_NOSSL, linking without SSL support"
$    link 'link_qual'/exe=exedir:curl.exe -
          objdir:curlsrc/lib/include=(main,curlmsg),-
          objdir:curllib/lib
$ endif
$!
$ goto Common_Exit
$!
$! Subroutine to build everything with a filetype passed in via P2 in 
$! the directory passed in via P1 and put it in the object library named 
$! via P3
$!
$build:   subroutine
$ on control_y then return ctrl_y ! SS$_CONTROLY
$ set noon
$   set default 'p1'
$   search = p2
$   reset = f$search("reset")
$   if f$search( p3) .eqs. ""
$   then
$      LIB/CREATE/OBJECT 'p3'
$   endif
$   reset = f$search("reset",1)
$Loop:
$   file = f$search(search,1)
$   if file .eqs. "" then goto EndLoop
$      objfile = f$parse("objdir:.OBJ;",file)
$      obj = f$search( objfile, 2)
$      if (obj .nes. "")
$      then
$         if (f$cvtime(f$file(file,"rdt")) .gts. f$cvtime(f$file(obj,"rdt")))
$         then
$            call compile 'file'
$            if .not. $status then return $status
$            lib/object 'p3' 'objfile'
$         else
$            'vo_o' "%CURL-I-OBJUTD, ", objfile, " is up to date"
$         endif
$      else
$         'vo_o' "%CURL-I-OBJDNE, ", file, " does not exist"
$         call compile 'file'
$         if .not. $status then return $status
$         lib/object 'p3' 'objfile'
$      endif
$   goto Loop
$EndLoop:
$   !purge
$   on control_y then return ctrl_y ! SS$_CONTROLY
$   set def 'origdir'
$   endsubroutine   ! Build
$!
$! Based on the file TYPE, do the right compile command.  
$! Only C and MSG supported.
$!
$compile:   subroutine
$   on control_y then return ctrl_y ! SS$_CONTROLY
$   set noon
$   file = p1
$   qual = p2+p3+p4+p5+p6+p7+p8
$   typ = f$parse(file,,,"TYPE") - "."
$   cmd_c = "CC "+cc_qual
$   cmd_msg = "MESSAGE "+msg_qual
$   x = cmd_'typ'
$   'vo_c' x," ",file
$   'x' 'file'
$   on control_y then return ctrl_y ! SS$_CONTROLY
$   ENDSUBROUTINE   ! Compile
$!
$! Do a diff of the file specified in P1 with that in P2.  If different
$! copy P1 to P2.  This also covers if P2 doesn't exist, but not if P2
$! is an invalid filespec.
$!
$MoveIfDiff:  subroutine
$   set NoOn
$   set message/nof/noi/nos/not
$   diff/out=nla0: 'p1' 'p2'
$   status = $status
$   set message/f/i/s/t
$   if ( status .ne. %X006C8009) ! if status is not "no diff"
$   then
$      copy 'p1' 'p2'
$      purge/nolog 'p2'
$   endif
$   on control_y then return ctrl_y ! SS$_CONTROLY
$   ENDSUBROUTINE   ! MoveIfDiff
$!
$Common_Exit:
$   set default 'origdir'
$   exit