blob: 6c17b30f71864a31b64512446b1158e6b92aeabc [file] [log] [blame]
/****************************************************************************
* Create directories and package binaries for Xerces-C OS/2 port
*/
IF LoadRexxUtil() THEN EXIT
sourcedir = ''
targetdir = ''
msgloader = 'InMemory'
transcoder = 'Iconv'
argv = cli(arg(1))
DO i = 1 TO argv~items
SELECT
WHEN argv[i] = "-s" THEN
DO
i = i + 1
sourcedir = argv[i]
END
WHEN argv[i] = "-o" THEN
DO
i = i + 1
targetdir = argv[i]
END
WHEN argv[i] = "-t" THEN
DO
i = i + 1
transcoder = argv[i]
END
WHEN argv[i] = "-m" THEN
DO
i = i + 1
msgloader = argv[i]
END
WHEN argv[i] = "-h" THEN
DO
CALL Usage
EXIT -1
END
OTHERWISE
NOP
END
END
IF targetdir = '' | sourcedir = '' THEN
DO
CALL Usage
EXIT -1
END
CALL MakeTargetDirectories targetdir
CALL CopyHeaderFiles targetdir, sourcedir
CALL CopyBinaries targetdir, sourcedir
CALL CopySamples targetdir, sourcedir
EXIT
/*---------------------------------- Usage ----------------------------------
* Display a usage message
*/
::routine Usage
SAY "Usage is:"
SAY " packageBinaries <options>"
SAY " options are:"
SAY " -s <source_directory>"
SAY " -o <target_directory>"
/*
SAY " -c <C compiler name> (e.g. gcc, cc or xlc_r)"
SAY " -x <C++ compiler name> (e.g. g++, CC, aCC, c++ or xlC_r)"
*/
SAY " -m <message loader> can be 'inmem' (default), 'icu' or 'iconv'"
SAY " -n <net accessor> can be 'fileonly' or 'socket' (default)"
SAY " -t <transcoder> can be 'icu' or 'native' (default)"
SAY " -h to get help on these commands"
SAY "Example:"
SAY " packageBinaries -s D:\xml-xerces\c -o E:\xerces-c_1_1_0 -m inmem -n fileonly"
RETURN
/*-------------------------- MakeTargetDirectories --------------------------
* Make the target directory and its main subdirectories
*/
::routine MakeTargetDirectories
USE ARG targetdir
CALL SysMkDir targetdir
CALL SysMkDir targetdir || "\bin"
CALL SysMkDir targetdir || "\lib"
CALL SysMkDir targetdir || "\include"
CALL SysMkDir targetdir || "\samples"
CALL SysMkDir targetdir || "\samples\Projects"
CALL SysMkDir targetdir || "\samples\Projects\OS2"
CALL SysMkDir targetdir || "\samples\Projects\OS2\VACPP40"
CALL SysMkDir targetdir || "\samples\data"
CALL SysMkDir targetdir || "\samples\SAXCount"
CALL SysMkDir targetdir || "\samples\SAX2Count"
CALL SysMkDir targetdir || "\samples\SAXPrint"
CALL SysMkDir targetdir || "\samples\SAX2Print"
CALL SysMkDir targetdir || "\samples\DOMCount"
CALL SysMkDir targetdir || "\samples\DOMPrint"
CALL SysMkDir targetdir || "\samples\IDOMCount"
CALL SysMkDir targetdir || "\samples\IDOMPrint"
CALL SysMkDir targetdir || "\samples\Redirect"
CALL SysMkDir targetdir || "\samples\MemParse"
CALL SysMkDir targetdir || "\samples\PParse"
CALL SysMkDir targetdir || "\samples\StdInParse"
CALL SysMkDir targetdir || "\samples\EnumVal"
CALL SysMkDir targetdir || "\samples\CreateDOMDocument"
CALL SysMkDir targetdir || "\doc"
CALL SysMkDir targetdir || "\doc\html"
CALL SysMkDir targetdir || "\doc\html\apiDocs"
RETURN
/*------------------------------- CopySamples -------------------------------
*/
::routine CopySamples
USE ARG targetdir, sourcedir
project = "\samples\Projects\OS2\VACPP40"
/* Copy the project files */
srcSpec = sourcedir || project || "\*"
CALL SysFileTree srcSpec, 'F.', 'FO'
DO i = 1 TO f.0
srcfn = f.i
trgfn = targetdir || project || "\" || Filespec('N', f.i)
'copy' srcfn trgfn '> nul'
END
samples = .array~of( ,
"SAXCount", ,
"SAX2Count", ,
"SAXPrint", ,
"SAX2Print", ,
"DOMCount", ,
"DOMPrint", ,
"IDOMCount", ,
"IDOMPrint", ,
"Redirect", ,
"MemParse", ,
"PParse", ,
"StdInParse", ,
"EnumVal", ,
"CreateDOMDocument" ,
)
/* Copy the sample code */
DO sample OVER samples
srcSpec = sourcedir || "\samples\" || sample || "\*.?pp"
CALL SysFileTree srcSpec, 'F.', 'FO'
DO i = 1 TO f.0
srcfn = f.i
trgfn = targetdir || "\samples\" || sample || "\" || Filespec('N', f.i)
'copy' srcfn trgfn '> nul'
END
END
RETURN
/*------------------------------ CopyBinaries -------------------------------
* Copy the DLL and LIB files to their destination directories
*/
::routine CopyBinaries
USE ARG targetdir, sourcedir
srcdll = sourcedir || "\Projects\OS2\VACPP40\xerces-c.dll"
trgdll = targetdir || "\bin\xerces-c.dll"
srclib = sourcedir || "\Projects\OS2\VACPP40\xerces-c.lib"
trglib = targetdir || "\lib\xerces-c.lib"
'copy' srcdll trgdll '> nul'
'copy' srclib trglib '> nul'
RETURN
/*----------------------------- CopyHeaderFiles -----------------------------
* Copy the header files to the target include directory
*/
::routine CopyHeaderFiles
USE ARG targetdir, sourcedir
hdirs = .array~of( ,
"sax", ,
"sax2", ,
"framework", ,
"dom", ,
"idom", ,
"internal", ,
"parsers", ,
"util", ,
"util\Compilers", ,
"util\MsgLoaders", ,
"util\MsgLoaders\ICU", ,
"util\MsgLoaders\InMemory", ,
"util\MsgLoaders\MsgCatalog", ,
"util\Platforms", ,
"util\Platforms\AIX", ,
"util\Platforms\HPUX", ,
"util\Platforms\Linux", ,
"util\Platforms\MacOS", ,
"util\Platforms\OS2", ,
"util\Platforms\OS390", ,
"util\Platforms\PTX", ,
"util\Platforms\Solaris", ,
"util\Platforms\Tandem", ,
"util\Platforms\Win32", ,
"util\Transcoders", ,
"util\Transcoders\ICU", ,
"util\Transcoders\Iconv", ,
"util\regx", ,
"validators", ,
"validators\common", ,
"validators\datatype", ,
"validators\DTD" )
DO dir OVER hdirs
CALL SysMkDir targetdir || "\include\" || dir
/* Copy the *.hpp files */
hppSpec = sourcedir || "\src\" || dir || "\*.hpp"
CALL SysFileTree hppSpec, 'F.', 'FO'
DO i = 1 TO f.0
srcfn = f.i
trgfn = targetdir || "\include\" || dir || "\" || Filespec('N', f.i)
IF srcfn~pos("\dom\") > 0 THEN
IF srcfn~pos("Impl.hpp") > 0 | srcfn~pos("\dom\DS") > 0 THEN
ITERATE
IF srcfn~pos("\idom\") > 0 THEN
IF srcfn~pos("Impl.hpp") > 0 | srcfn~pos("\idom\IDS") > 0 THEN
ITERATE
'copy' srcfn trgfn '> nul'
END
/* Copy the *.c files */
cSpec = sourcedir || "\src\" || dir || "\*.c"
CALL SysFileTree cSpec, 'F.', 'FO'
DO i = 1 TO f.0
srcfn = f.i
trgfn = targetdir || "\include\" || dir || "\" || Filespec('N', f.i)
'copy' srcfn trgfn '> nul'
END
END
RETURN
/*------------------------------ LoadRexxUtil -------------------------------
* Load the RexxUtil library
*/
::routine LoadRexxUtil
IF RxFuncQuery('SysLoadFuncs') THEN
DO
IF RxFuncAdd('SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs') THEN
DO
.output~lineout("Error: Couldn't load RexxUtil library.")
RETURN 1
END
CALL SysLoadFuncs
END
RETURN 0
/*----------------------------------- cli -----------------------------------
* Command Line Interpreter
*/
::routine cli
USE ARG cmdline
argv = .array~new
DO i = 1 WHILE cmdline <> ''
cmdline = cmdline~strip
IF cmdline~left(1) = '"' THEN
PARSE VAR cmdline '"' thisArg '"' cmdline
ELSE
PARSE VAR cmdline thisArg cmdline
argv[i] = thisArg
END
RETURN argv