/* * The Apache Software License, Version 1.1 * * * Copyright (c) 1999-2000 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xerces" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 1999, International * Business Machines, Inc., http://www.apache.org. For more * information on the Apache Software Foundation, please see * . */ /* * $Id$ * Object Rexx script to generate ICC include files for Xerces-C project. */ IF LoadRexxUtil() THEN EXIT msgloader = 'InMemory' transcoder = 'Iconv' argv = cli(arg(1)) DO i = 1 TO argv~items SELECT 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 END END msgloaderdef = 'XML_USE_' || msgloader~translate || '_MSGLOADER' transcoderdef = 'XML_USE_' || transcoder~translate || '_TRANSCODER' /* Figure out the project's base directory */ here = Directory()~translate('* ', ' \') base = here~subword(1, here~words - 3)~strip~translate(' \', '* ') basedir = .subdirlist~new(base'\src') basedir~removeAnyContaining("\CVS") /* Generate the project_options file */ projOpt = .array~of( , 'BASE_DIR = "' || (base)~changestr('\', '\\') || '"', , '', , 'option project_options =', , ' gen(unreferenced, "yes"),', , ' link(linkwithmultithreadlib, "yes"),', , ' link(map, "Yes"),', , ' link(dllinitinstance, "yes"),', , ' link(pmtype, "vio"),', , ' link(stub, "No"),', , ' link(exportall, "yes"),', , ' opt(inline, "yes"),', , ' opt(level, "2"),', , ' opt(tune, "pentium"),', , ' incl(searchpath, BASE_DIR "\\src"),', , ' incl(searchpath, BASE_DIR "\\src\\dom"),', , ' incl(searchpath, BASE_DIR "\\src\\idom"),', , ' define("' || msgloaderdef || '", 1),', , ' define("' || transcoderdef || '", 1)' ) fl = .stream~new('project_options.icc') fl~open('Write Replace') fl~arrayout(projOpt) fl~close /* List of directories to ignore */ ignore = .array~of( , "\CVS", , "\Transcoders\", , "\MsgLoaders\", , "\Platforms\", , "\Compilers\", , "\NetAccessors\", , "\dom\AncestorNode.cpp", , "\dom\CommonParentNode.cpp", , "\com\", , "\NLS\", , "Win32", , "LibWWW" ) /* List to build up contents of base project file */ incl = .list~new incl~insert('include "project_options.icc"') targ = .list~new targ~insert('') targ~insert('option') targ~insert(' project_options') targ~insert('{') targ~insert(' target "xerces-c.dll"') targ~insert(' {') /* Walk over each directory and produce a project file for that * directory. Directories that don't apply to the OS/2 build are * removed from the list. */ DO dir OVER basedir thisdir = FileSpec('N', dir) grpname = 'xerces_' || thisdir thisfile = grpname || '.icc' files = .filelist~new(dir || '\*.cpp') DO ignoreThis OVER ignore files~removeAnyContaining(ignoreThis) END IF thisdir = 'util' THEN DO f1 = .filelist~new(dir || '\Transcoders\*.cpp') f1~removeAllBut('\'transcoder'\') files~merge(f1) f2 = .filelist~new(dir || '\MsgLoaders\*.cpp') f2~removeAllBut('\'msgloader'\') files~merge(f2) END IF files~items > 0 THEN DO fl = .stream~new(thisfile) fl~open('Write Replace') fl~lineout('group' grpname '=') incl~insert('include "' || thisfile || '"') targ~insert(' source type("cpp")' grpname) delim = ',' count = files~items DO file OVER files count = count - 1 IF count = 0 THEN delim = '' fn = file~changestr(base, 'BASE_DIR "') || '"' fl~lineout(' ' || fn~changestr('\', '\\') || delim) END END END /* Generate a group for the OS/2-specific files */ flos2 = .filelist~new(base'\src\util\*.cpp') flos2~removeAllBut('Platforms\OS2\') thisfile = 'xerces_OS2.icc' fl = .stream~new(thisfile) fl~open('Write Replace') fl~lineout('group xerces_os2 =') incl~insert('include "' || thisfile || '"') targ~insert(' source type("cpp") xerces_os2') delim = ',' count = flos2~items DO file OVER flos2 count = count - 1 IF count = 0 THEN delim = '' fn = file~changestr(base, 'BASE_DIR "') || '"' fl~lineout(' ' || fn~changestr('\', '\\') || delim) END /* Generate the root project file */ thisfile = 'Xerces.icc' fl = .stream~new(thisfile) fl~open('Write Replace') here = incl~first DO WHILE here <> .nil fl~lineout(incl[here]) here = incl~next(here) END targ~insert(' }') targ~insert('}') here = targ~first DO WHILE here <> .nil fl~lineout(targ[here]) here = targ~next(here) END fl~close EXIT /*------------------------------ 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 /******************************** SubdirList ******************************** */ ::class SubdirList PUBLIC ::method init EXPOSE !root !dirs USE ARG !root !dirs = .list~new CALL SysFileTree !root'\*', 'dirs.', 'DO' DO i = 1 TO dirs.0 !dirs~insert(dirs.i) END /*================================= basedir ================================= */ ::method basedir EXPOSE !root RETURN !root /*================================ makearray ================================ */ ::method makearray EXPOSE !dirs RETURN !dirs~makearray /*=========================== removeAnyContaining =========================== */ ::method removeAnyContaining EXPOSE !dirs USE ARG sub i = !dirs~first DO WHILE i <> .nil n = i i = !dirs~next(i) IF !dirs[n]~pos(sub) <> 0 THEN DO !dirs~remove(n) END END /*============================== removeAllBut =============================== */ ::method removeAllBut EXPOSE !dirs USE ARG sub DO i = !dirs~first TO !dirs~last n = i i = !dirs~next(i) IF !dirs[n]~pos(sub) = 0 THEN DO !dirs~remove(n) END END /********************************* FileList ********************************* */ ::class FileList PUBLIC ::method init EXPOSE !pattern !files USE ARG !pattern !files = .list~new CALL SysFileTree !pattern, 'files.', 'FOS' DO i = 1 TO files.0 !files~insert(files.i) END /*================================= basedir ================================= */ ::method basedir EXPOSE !pattern RETURN (FileSpec('D', !pattern) || FileSpec('P', !pattern))~strip('T', '\') /*================================ makearray ================================ */ ::method makearray EXPOSE !files RETURN !files~makearray /*================================== items ================================== */ ::method items EXPOSE !files RETURN !files~items /*=========================== removeAnyContaining =========================== */ ::method removeAnyContaining EXPOSE !files USE ARG sub i = !files~first DO WHILE i <> .nil n = i i = !files~next(i) IF !files[n]~pos(sub) <> 0 THEN DO !files~remove(n) END END /*============================== removeAllBut =============================== */ ::method removeAllBut EXPOSE !files USE ARG sub i = !files~first DO WHILE i <> .nil n = i i = !files~next(i) IF !files[n]~pos(sub) = 0 THEN DO !files~remove(n) END END /*================================== merge ================================== */ ::method merge EXPOSE !files USE ARG fl DO f OVER fl !files~insert(f) END