mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			343 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
$! BUILD_XSLT.COM
 | 
						||
$!
 | 
						||
$! Build the XSLT library
 | 
						||
$!
 | 
						||
$! Arguments:
 | 
						||
$!
 | 
						||
$!	p1	- "DEBUG" is you want to build with debug
 | 
						||
$!
 | 
						||
$! This package requires libxml to have already been installed.  You need
 | 
						||
$! to ensure that the logical name LIBXML is defined and points to the 
 | 
						||
$! directory containing libxml's .h files
 | 
						||
$!
 | 
						||
$! This procedure creates the object libraries
 | 
						||
$!
 | 
						||
$!	XML_LIBDIR:LIBXSLT.OLB
 | 
						||
$!	XML_LIBDIR:LIBEXSLT.OLB
 | 
						||
$!
 | 
						||
$! and the program
 | 
						||
$!
 | 
						||
$!	XSLTPROC
 | 
						||
$!
 | 
						||
$! After the library is built, you can link these routines into
 | 
						||
$! your code with the command  
 | 
						||
$!
 | 
						||
$! 	LINK your_modules,XML_LIBDIR:LIBEXSLT/LIB,LIBXSLT/LIBRARY,LIBXML/LIB
 | 
						||
$!
 | 
						||
$! Change History
 | 
						||
$! --------------
 | 
						||
$! Command file author : John A Fotheringham (jaf@jafsoft.com)
 | 
						||
$! Last update         : 2 Nov 2001
 | 
						||
$! 
 | 
						||
$!- configuration -------------------------------------------------------------
 | 
						||
$!
 | 
						||
$!- compile command.
 | 
						||
$!
 | 
						||
$   cc_opts = "/INCLUDE=([],XML_SRCDIR:,[-.libxslt])/NAMES=(SHORTENED)/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS"
 | 
						||
$!
 | 
						||
$   if p1.eqs."DEBUG"
 | 
						||
$   then
 | 
						||
$     debug = "Y"
 | 
						||
$     cc_command = "CC''cc_opts'/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL"
 | 
						||
$   else
 | 
						||
$     debug = "N"
 | 
						||
$     cc_command = "CC''cc_opts'"
 | 
						||
$   endif
 | 
						||
$!
 | 
						||
$!- configure multiple build passes for each library. -------------------------
 | 
						||
$!
 | 
						||
$!  For each pass:
 | 
						||
$!
 | 
						||
$!  "libname" is the name of the library or module being created
 | 
						||
$!
 | 
						||
$!  "progname" is the name of the program being created
 | 
						||
$!
 | 
						||
$!  "src" is the list of sources to be built into the library  or program
 | 
						||
$!	- This should be compared to the definition of 
 | 
						||
$!	  "<NAME>_la_SOURCES" in the MAKEFILE.IN file in 
 | 
						||
$!	  corresponding directory.
 | 
						||
$!
 | 
						||
$   num_passes = 3	! two libraries and a program
 | 
						||
$!
 | 
						||
$!- pass 1 - library LIBXSLT
 | 
						||
$!
 | 
						||
$   libname_1  = "LIBXSLT"
 | 
						||
$   h_file_1   = "xslt.h"
 | 
						||
$   progname_1 = ""
 | 
						||
$!
 | 
						||
$   ! see "libxslt_la_SOURCES" in [.libxslt]makefile.in
 | 
						||
$   src_1 = "xslt.c xsltutils.c pattern.c templates.c variables.c keys.c"
 | 
						||
$   src_1 = src_1 + " numbers.c extensions.c extra.c functions.c"
 | 
						||
$   src_1 = src_1 + " namespaces.c imports.c attributes.c documents.c"
 | 
						||
$   src_1 = src_1 + " preproc.c transform.c security.c"
 | 
						||
$!
 | 
						||
$!- pass 2 - library LIBEXSLT
 | 
						||
$!
 | 
						||
$   libname_2  = "LIBEXSLT"
 | 
						||
$   h_file_2   = "exslt.h"
 | 
						||
$   progname_2 = ""
 | 
						||
$!
 | 
						||
$   ! see "libexslt_la_SOURCES" in [.libexslt]makefile.in
 | 
						||
$   src_2   = "exslt.c common.c math.c sets.c functions.c strings.c date.c saxon.c dynamic.c"
 | 
						||
$!
 | 
						||
$!- pass 3 - program XSLTPROC
 | 
						||
$!
 | 
						||
$   libname_3  = ""
 | 
						||
$   h_file_3   = ""
 | 
						||
$   progname_3 = "XSLTPROC"
 | 
						||
$!
 | 
						||
$   ! see "xsltproc_SOURCES" in [.xsltproc]makefile.in
 | 
						||
$   src_3   = "xsltproc.c"
 | 
						||
$!
 | 
						||
$!- set up and check logicals  -----------------------------------------------
 | 
						||
$!
 | 
						||
$!  XML_LIBDIR - object library directory
 | 
						||
$!  XML_SRCDIR - top-level build directory of libxml package -- needed for config.h and trio.h
 | 
						||
$!  LIBXML - source directory containing .h files for libxml package
 | 
						||
$!
 | 
						||
$   if f$trnlnm("XML_LIBDIR").eqs.""
 | 
						||
$   then
 | 
						||
$     on error then continue
 | 
						||
$     globfile = f$search("[--...]libxml.olb")
 | 
						||
$     if globfile.eqs.""
 | 
						||
$     then
 | 
						||
$       write sys$output ""
 | 
						||
$       write sys$output "	You need to define the XML_LIBDIR logical name to"
 | 
						||
$       write sys$output "	point to the directory containing your object"
 | 
						||
$       write sys$output "	libraries.  This should already contain LIBXML.OLB"
 | 
						||
$       write sys$output "	from the libxml package, and will be the directory"
 | 
						||
$       write sys$output "	the new LIBXSLT.OLB library will be placed in"
 | 
						||
$       write sys$output ""
 | 
						||
$       exit
 | 
						||
$     else
 | 
						||
$	srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY")
 | 
						||
$	define/process XML_LIBDIR "''srcdir'"
 | 
						||
$       write sys$output "Defining XML_LIBDIR as ""''srcdir'"""
 | 
						||
$     endif
 | 
						||
$   endif
 | 
						||
$!
 | 
						||
$   if f$trnlnm("libxml").eqs.""
 | 
						||
$   then
 | 
						||
$     ! look for globals.h in a directory installed paralle to this one
 | 
						||
$     on error then continue
 | 
						||
$     globfile = f$search("[--...]globals.h")
 | 
						||
$     if globfile.eqs.""
 | 
						||
$     then
 | 
						||
$       write sys$output ""
 | 
						||
$       write sys$output "	You need to define a LIBXML logical directory to"
 | 
						||
$       write sys$output "	point to the directory containing the .h files"
 | 
						||
$       write sys$output "	for the libxml package"
 | 
						||
$       write sys$output ""
 | 
						||
$       exit
 | 
						||
$     else
 | 
						||
$	srcdir = f$element(0,"]",globfile)+ "]"
 | 
						||
$	define/process LIBXML "''srcdir'"
 | 
						||
$       write sys$output "Defining LIBXML as ""''srcdir'"""
 | 
						||
$     endif
 | 
						||
$   endif
 | 
						||
$!
 | 
						||
$   if f$trnlnm("XML_SRCDIR").eqs.""
 | 
						||
$   then
 | 
						||
$     globfile = f$search("[--...]globals.c")
 | 
						||
$     if globfile.eqs.""
 | 
						||
$     then
 | 
						||
$	write sys$output "Can't locate globals.c.  You need to manually define a XML_SRCDIR logical"
 | 
						||
$	exit
 | 
						||
$     else
 | 
						||
$	srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY")
 | 
						||
$	define/process XML_SRCDIR "''srcdir'"
 | 
						||
$       write sys$output "Defining XML_SRCDIR as ""''srcdir'"""
 | 
						||
$     endif
 | 
						||
$   endif
 | 
						||
$!
 | 
						||
$!- set up some working logicals -------------------
 | 
						||
$!
 | 
						||
$ pass_no = 1
 | 
						||
$ set_pass_logical:
 | 
						||
$!
 | 
						||
$   if pass_no.le.num_passes
 | 
						||
$   then
 | 
						||
$!
 | 
						||
$     Libname  = libname_'pass_no'
 | 
						||
$     progname = progname_'pass_no'
 | 
						||
$     if libname.nes.""
 | 
						||
$     then
 | 
						||
$       logname  = "''libname'_SRCDIR"
 | 
						||
$     else
 | 
						||
$       logname  = "''progname'_SRCDIR"
 | 
						||
$     endif
 | 
						||
$     findfile = f$element(0," ",src_'pass_no')
 | 
						||
$!
 | 
						||
$!--- set up a source directory logical
 | 
						||
$!
 | 
						||
$     if f$trnlnm("''logname'").eqs.""
 | 
						||
$     then
 | 
						||
$       ! look for the target file in a parallel subdirectory
 | 
						||
$       globfile = f$search("[-...]''findfile'")
 | 
						||
$       if globfile.eqs.""
 | 
						||
$       then
 | 
						||
$  	  write sys$output "Can't locate ''findfile'.  You need to manually define a ''logname' logical"
 | 
						||
$	  exit
 | 
						||
$       else
 | 
						||
$  	  srcdir = f$element(0,"]",globfile)+ "]"
 | 
						||
$	  define/process 'logname' "''srcdir'"
 | 
						||
$         write sys$output "Defining ''logname' as ""''srcdir'"""
 | 
						||
$       endif
 | 
						||
$     endif
 | 
						||
$!
 | 
						||
$!--- if it's a library, set up a logical pointing to the .h files
 | 
						||
$!
 | 
						||
$     if libname.nes."" 
 | 
						||
$     then
 | 
						||
$	if f$trnlnm("''libname'").eqs."" 
 | 
						||
$       then 
 | 
						||
$         ! look for the target .h file in a parallel subdirectory
 | 
						||
$  	  h_file = h_file_'pass_no'
 | 
						||
$         globfile = f$search("[-...]''h_file'")
 | 
						||
$         if globfile.eqs.""
 | 
						||
$         then
 | 
						||
$	    write sys$output "Can't locate ''h_file'.  You need to manually define a ''libname' logical"
 | 
						||
$	    exit
 | 
						||
$         else
 | 
						||
$	    includedir = f$element(0,"]",globfile)+ "]"
 | 
						||
$	    define/process 'libname' "''includedir'"
 | 
						||
$           write sys$output "Defining ''libname' as ""''includedir'"""
 | 
						||
$	  endif
 | 
						||
$       endif
 | 
						||
$     endif
 | 
						||
$!
 | 
						||
$     pass_no = pass_no +1
 | 
						||
$     goto set_pass_logical
 | 
						||
$!
 | 
						||
$   endif	! for each pass
 | 
						||
$!
 | 
						||
$!- set up error handling (such as it is) -------------------------------------
 | 
						||
$!
 | 
						||
$ exit_status = 1
 | 
						||
$ saved_default = f$environment("default")
 | 
						||
$ on error then goto ERROR_OUT 
 | 
						||
$ on control_y then goto ERROR_OUT 
 | 
						||
$!
 | 
						||
$ goto start_here
 | 
						||
$ start_here:	  ! move this line to debug/rerun parts of this command file
 | 
						||
$!
 | 
						||
$!- compile modules into the library ------------------------------------------
 | 
						||
$!
 | 
						||
$!
 | 
						||
$ pass_no = 1	! make three passes, one for each library, one for XSLTPROC
 | 
						||
$ pass_loop:
 | 
						||
$!
 | 
						||
$ if pass_no.le.num_passes
 | 
						||
$ then
 | 
						||
$   Libname  = libname_'pass_no'
 | 
						||
$   progname = progname_'pass_no'
 | 
						||
$   if libname.nes.""
 | 
						||
$   then
 | 
						||
$     logname  = "''libname'_SRCDIR"
 | 
						||
$     pass_description = "the XML_LIBDIR:''libname'.OLB object library"
 | 
						||
$   else
 | 
						||
$     logname  = "''progname'_SRCDIR"
 | 
						||
$     pass_description = "the programs in ''progname'"
 | 
						||
$   endif
 | 
						||
$   src  = src_'pass_no'
 | 
						||
$!
 | 
						||
$!- create the library if need
 | 
						||
$!
 | 
						||
$   if libname.nes."" 
 | 
						||
$   then
 | 
						||
$     if f$search("XML_LIBDIR:''libname'.OLB").eqs."" 
 | 
						||
$     then
 | 
						||
$       write sys$output "Creating new object library XML_LIBDIR:''libname'.OLB..."
 | 
						||
$       library/create XML_LIBDIR:'libname'.OLB
 | 
						||
$     endif
 | 
						||
$   endif
 | 
						||
$!
 | 
						||
$!- move to the source directory 
 | 
						||
$!
 | 
						||
$   set def 'logname'
 | 
						||
$!
 | 
						||
$!- define the library and link commands (link command not used as is)
 | 
						||
$!
 | 
						||
$   if libname.nes.""
 | 
						||
$   then
 | 
						||
$     lib_command  = "LIBRARY/REPLACE XML_LIBDIR:''libname'.OLB"
 | 
						||
$     link_command = ""
 | 
						||
$   else
 | 
						||
$     lib_command  = ""
 | 
						||
$     link_command = "LINK"
 | 
						||
$   endif
 | 
						||
$!
 | 
						||
$   write sys$output ""
 | 
						||
$   write sys$output "Building ''pass_description'
 | 
						||
$   write sys$output ""
 | 
						||
$!
 | 
						||
$   s_no = 0
 | 
						||
$   src = f$edit(src,"COMPRESS")
 | 
						||
$!
 | 
						||
$ source_loop:
 | 
						||
$!
 | 
						||
$     next_source = f$element (S_no," ",src)
 | 
						||
$     if next_source.nes."" .and. next_source.nes." "
 | 
						||
$     then
 | 
						||
$       call build 'next_source'
 | 
						||
$       s_no = s_no + 1
 | 
						||
$       goto source_loop
 | 
						||
$     endif
 | 
						||
$!
 | 
						||
$     pass_no = pass_no + 1
 | 
						||
$     goto pass_loop
 | 
						||
$!
 | 
						||
$   endif	! for each pass
 | 
						||
$!
 | 
						||
$!- Th-th-th-th-th-that's all folks! ------------------------------------------
 | 
						||
$!
 | 
						||
$EXIT_OUT:
 | 
						||
$!
 | 
						||
$ set def 'saved_default
 | 
						||
$ exit 'exit_status
 | 
						||
$!
 | 
						||
$
 | 
						||
$ERROR_OUT:
 | 
						||
$ exit_status = $status
 | 
						||
$ write sys$output "''f$message(exit_status)'"
 | 
						||
$ goto EXIT_OUT
 | 
						||
$!
 | 
						||
$!- the BUILD subroutine.  Compile then insert into library or link as required
 | 
						||
$!
 | 
						||
$BUILD: subroutine
 | 
						||
$   on warning then goto EXIT_BUILD
 | 
						||
$   source_file = p1
 | 
						||
$   name = f$element(0,".",source_file)
 | 
						||
$   object_file = f$fao("XML_LIBDIR:!AS.OBJ",name)
 | 
						||
$!
 | 
						||
$!- compile
 | 
						||
$   write sys$output "Compiling ",p1,p2,"..."
 | 
						||
$   cc_command /object='object_file 'source_file' 'p2'
 | 
						||
$!
 | 
						||
$!- insert into library if command defined
 | 
						||
$!
 | 
						||
$   if lib_command.nes.""  
 | 
						||
$   then 
 | 
						||
$     lib_command 'object_file'
 | 
						||
$     delete/nolog 'object_file';*
 | 
						||
$   endif
 | 
						||
$!
 | 
						||
$!- link module if command defined
 | 
						||
$!
 | 
						||
$   if link_command.nes."" 
 | 
						||
$   then
 | 
						||
$	text = f$element(0,".",p1)	! lose the ".c"
 | 
						||
$	write sys$output "Linking ",text,"..."
 | 
						||
$	dbgopts = ""
 | 
						||
$	if debug then dbgopts = "/DEBUG"
 | 
						||
$	link_command'dbgopts' 'object_file',-
 | 
						||
      		XML_LIBDIR:libexslt/lib,-
 | 
						||
      		XML_LIBDIR:libxslt/lib,-
 | 
						||
      		XML_LIBDIR:libxml/library
 | 
						||
$   endif
 | 
						||
$!
 | 
						||
$EXIT_BUILD:
 | 
						||
$   exit $status
 | 
						||
$!
 | 
						||
$endsubroutine
 |