genICC.cmd
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:11k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  *
  5.  * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  6.  * reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  *
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  *
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in
  17.  *    the documentation and/or other materials provided with the
  18.  *    distribution.
  19.  *
  20.  * 3. The end-user documentation included with the redistribution,
  21.  *    if any, must include the following acknowledgment:
  22.  *       "This product includes software developed by the
  23.  *        Apache Software Foundation (http://www.apache.org/)."
  24.  *    Alternately, this acknowledgment may appear in the software itself,
  25.  *    if and wherever such third-party acknowledgments normally appear.
  26.  *
  27.  * 4. The names "Xerces" and "Apache Software Foundation" must
  28.  *    not be used to endorse or promote products derived from this
  29.  *    software without prior written permission. For written
  30.  *    permission, please contact apache@apache.org.
  31.  *
  32.  * 5. Products derived from this software may not be called "Apache",
  33.  *    nor may "Apache" appear in their name, without prior written
  34.  *    permission of the Apache Software Foundation.
  35.  *
  36.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  37.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  38.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  39.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  40.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  41.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  42.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  43.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  44.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  45.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  46.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  47.  * SUCH DAMAGE.
  48.  * ====================================================================
  49.  *
  50.  * This software consists of voluntary contributions made by many
  51.  * individuals on behalf of the Apache Software Foundation and was
  52.  * originally based on software copyright (c) 1999, International
  53.  * Business Machines, Inc., http://www.apache.org.  For more
  54.  * information on the Apache Software Foundation, please see
  55.  * <http://www.apache.org/>.
  56.  */
  57. /*
  58.  * $Id: genICC.cmd,v 1.3 2001/05/17 16:31:15 tng Exp $
  59.  * Object Rexx script to generate ICC include files for Xerces-C project.
  60.  */
  61. IF LoadRexxUtil() THEN EXIT
  62. msgloader  = 'InMemory'
  63. transcoder = 'Iconv'
  64. argv = cli(arg(1))
  65. DO i = 1 TO argv~items
  66.   SELECT
  67.     WHEN argv[i] = "-t" THEN
  68.      DO
  69.       i = i + 1
  70.       transcoder = argv[i]
  71.      END
  72.     WHEN argv[i] = "-m" THEN
  73.      DO
  74.       i = i + 1
  75.       msgloader = argv[i]
  76.      END
  77.   END
  78. END
  79. msgloaderdef  = 'XML_USE_' || msgloader~translate || '_MSGLOADER'
  80. transcoderdef = 'XML_USE_' || transcoder~translate || '_TRANSCODER'
  81. /* Figure out the project's base directory */
  82. here = Directory()~translate('* ', ' ')
  83. base = here~subword(1, here~words - 3)~strip~translate(' ', '* ')
  84. basedir = .subdirlist~new(base'src')
  85. basedir~removeAnyContaining("CVS")
  86. /* Generate the project_options file */
  87. projOpt = .array~of( ,
  88.             'BASE_DIR = "' || (base)~changestr('', '\') || '"', ,
  89.             '',                                                   ,
  90.             'option project_options =',                           ,
  91.             '    gen(unreferenced, "yes"),',                      ,
  92.             '    link(linkwithmultithreadlib, "yes"),',           ,
  93.             '    link(map, "Yes"),',                              ,
  94.             '    link(dllinitinstance, "yes"),',                  ,
  95.             '    link(pmtype, "vio"),',                           ,
  96.             '    link(stub, "No"),',                              ,
  97.             '    link(exportall, "yes"),',                        ,
  98.             '    opt(inline, "yes"),',                            ,
  99.             '    opt(level, "2"),',                               ,
  100.             '    opt(tune, "pentium"),',                          ,
  101.             '    incl(searchpath, BASE_DIR "\src"),',            ,
  102.             '    incl(searchpath, BASE_DIR "\src\dom"),',       ,
  103.             '    incl(searchpath, BASE_DIR "\src\idom"),',      ,
  104.             '    define("' || msgloaderdef || '", 1),',           ,
  105.             '    define("' || transcoderdef || '", 1)'            )
  106. fl = .stream~new('project_options.icc')
  107. fl~open('Write Replace')
  108. fl~arrayout(projOpt)
  109. fl~close
  110. /* List of directories to ignore */
  111. ignore = .array~of( ,
  112.            "CVS", ,
  113.            "Transcoders", ,
  114.            "MsgLoaders", ,
  115.            "Platforms", ,
  116.            "Compilers", ,
  117.            "NetAccessors", ,
  118.            "domAncestorNode.cpp", ,
  119.    "domCommonParentNode.cpp", ,
  120.            "com", ,
  121.            "NLS", ,
  122.            "Win32", ,
  123.            "LibWWW" )
  124. /* List to build up contents of base project file */
  125. incl = .list~new
  126. incl~insert('include "project_options.icc"')
  127. targ = .list~new
  128. targ~insert('')
  129. targ~insert('option')
  130. targ~insert('    project_options')
  131. targ~insert('{')
  132. targ~insert('   target "xerces-c.dll"')
  133. targ~insert('   {')
  134. /* Walk over each directory and produce a project file for that
  135.  * directory. Directories that don't apply to the OS/2 build are
  136.  * removed from the list.
  137.  */
  138. DO dir OVER basedir
  139.   thisdir = FileSpec('N', dir)
  140.   grpname = 'xerces_' || thisdir
  141.   thisfile = grpname || '.icc'
  142.   files = .filelist~new(dir || '*.cpp')
  143.   DO ignoreThis OVER ignore
  144.     files~removeAnyContaining(ignoreThis)
  145.   END
  146.   IF thisdir = 'util' THEN
  147.    DO
  148.     f1 = .filelist~new(dir || 'Transcoders*.cpp')
  149.     f1~removeAllBut(''transcoder'')
  150.     files~merge(f1)
  151.     f2 = .filelist~new(dir || 'MsgLoaders*.cpp')
  152.     f2~removeAllBut(''msgloader'')
  153.     files~merge(f2)
  154.    END
  155.   IF files~items > 0 THEN
  156.    DO
  157.     fl = .stream~new(thisfile)
  158.     fl~open('Write Replace')
  159.     fl~lineout('group' grpname '=')
  160.     incl~insert('include "' || thisfile || '"')
  161.     targ~insert('    source type("cpp")' grpname)
  162.     delim = ','
  163.     count = files~items
  164.     DO file OVER files
  165.       count = count - 1
  166.       IF count = 0 THEN
  167.         delim = ''
  168.       fn = file~changestr(base, 'BASE_DIR "') || '"'
  169.       fl~lineout('    ' || fn~changestr('', '\') || delim)
  170.     END
  171.    END
  172. END
  173. /* Generate a group for the OS/2-specific files */
  174. flos2 = .filelist~new(base'srcutil*.cpp')
  175. flos2~removeAllBut('PlatformsOS2')
  176. thisfile = 'xerces_OS2.icc'
  177. fl = .stream~new(thisfile)
  178. fl~open('Write Replace')
  179. fl~lineout('group xerces_os2 =')
  180. incl~insert('include "' || thisfile || '"')
  181. targ~insert('    source type("cpp") xerces_os2')
  182. delim = ','
  183. count = flos2~items
  184. DO file OVER flos2
  185.   count = count - 1
  186.   IF count = 0 THEN
  187.     delim = ''
  188.   fn = file~changestr(base, 'BASE_DIR "') || '"'
  189.   fl~lineout('   ' || fn~changestr('', '\') || delim)
  190. END
  191. /* Generate the root project file */
  192. thisfile = 'Xerces.icc'
  193. fl = .stream~new(thisfile)
  194. fl~open('Write Replace')
  195. here = incl~first
  196. DO WHILE here <> .nil
  197.   fl~lineout(incl[here])
  198.   here = incl~next(here)
  199. END
  200. targ~insert('   }')
  201. targ~insert('}')
  202. here = targ~first
  203. DO WHILE here <> .nil
  204.   fl~lineout(targ[here])
  205.   here = targ~next(here)
  206. END
  207. fl~close
  208. EXIT
  209. /*------------------------------ LoadRexxUtil -------------------------------
  210.  * Load the RexxUtil library
  211.  */
  212. ::routine LoadRexxUtil
  213.   IF RxFuncQuery('SysLoadFuncs') THEN
  214.    DO
  215.     IF RxFuncAdd('SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs') THEN
  216.      DO
  217.       .output~lineout("Error: Couldn't load RexxUtil library.")
  218.       RETURN 1
  219.      END
  220.     CALL SysLoadFuncs
  221.    END
  222.   RETURN 0
  223. /*----------------------------------- cli -----------------------------------
  224.  * Command Line Interpreter
  225.  */
  226. ::routine cli
  227.   USE ARG cmdline
  228.   argv = .array~new
  229.   DO i = 1 WHILE cmdline <> ''
  230.     cmdline = cmdline~strip
  231.     IF cmdline~left(1) = '"' THEN
  232.       PARSE VAR cmdline '"' thisArg '"' cmdline
  233.     ELSE
  234.       PARSE VAR cmdline thisArg cmdline
  235.     argv[i] = thisArg
  236.   END
  237.   RETURN argv
  238. /******************************** SubdirList ********************************
  239.  */
  240. ::class SubdirList PUBLIC
  241. ::method init
  242.   EXPOSE !root !dirs
  243.   USE ARG !root
  244.   !dirs = .list~new
  245.   CALL SysFileTree !root'*', 'dirs.', 'DO'
  246.   DO i = 1 TO dirs.0
  247.     !dirs~insert(dirs.i)
  248.   END
  249. /*================================= basedir =================================
  250.  */
  251. ::method basedir
  252.   EXPOSE !root
  253.   RETURN !root
  254. /*================================ makearray ================================
  255.  */
  256. ::method makearray
  257.   EXPOSE !dirs
  258.   RETURN !dirs~makearray
  259. /*=========================== removeAnyContaining ===========================
  260.  */
  261. ::method removeAnyContaining
  262.   EXPOSE !dirs
  263.   USE ARG sub
  264.   i = !dirs~first
  265.   DO WHILE i <> .nil
  266.     n = i
  267.     i = !dirs~next(i)
  268.     IF !dirs[n]~pos(sub) <> 0 THEN
  269.      DO
  270.       !dirs~remove(n)
  271.      END
  272.   END
  273. /*============================== removeAllBut ===============================
  274.  */
  275. ::method removeAllBut
  276.   EXPOSE !dirs
  277.   USE ARG sub
  278.   DO i = !dirs~first TO !dirs~last
  279.     n = i
  280.     i = !dirs~next(i)
  281.     IF !dirs[n]~pos(sub) = 0 THEN
  282.      DO
  283.       !dirs~remove(n)
  284.      END
  285.   END
  286. /********************************* FileList *********************************
  287.  */
  288. ::class FileList PUBLIC
  289. ::method init
  290.   EXPOSE !pattern !files
  291.   USE ARG !pattern
  292.   !files = .list~new
  293.   CALL SysFileTree !pattern, 'files.', 'FOS'
  294.   DO i = 1 TO files.0
  295.     !files~insert(files.i)
  296.   END
  297. /*================================= basedir =================================
  298.  */
  299. ::method basedir
  300.   EXPOSE !pattern
  301.   RETURN (FileSpec('D', !pattern) || FileSpec('P', !pattern))~strip('T', '')
  302. /*================================ makearray ================================
  303.  */
  304. ::method makearray
  305.   EXPOSE !files
  306.   RETURN !files~makearray
  307. /*================================== items ==================================
  308.  */
  309. ::method items
  310.   EXPOSE !files
  311.   RETURN !files~items
  312. /*=========================== removeAnyContaining ===========================
  313.  */
  314. ::method removeAnyContaining
  315.   EXPOSE !files
  316.   USE ARG sub
  317.   i = !files~first
  318.   DO WHILE i <> .nil
  319.     n = i
  320.     i = !files~next(i)
  321.     IF !files[n]~pos(sub) <> 0 THEN
  322.      DO
  323.       !files~remove(n)
  324.      END
  325.   END
  326. /*============================== removeAllBut ===============================
  327.  */
  328. ::method removeAllBut
  329.   EXPOSE !files
  330.   USE ARG sub
  331.   i = !files~first
  332.   DO WHILE i <> .nil
  333.     n = i
  334.     i = !files~next(i)
  335.     IF !files[n]~pos(sub) = 0 THEN
  336.      DO
  337.       !files~remove(n)
  338.      END
  339.   END
  340. /*================================== merge ==================================
  341.  */
  342. ::method merge
  343.   EXPOSE !files
  344.   USE ARG fl
  345.   DO f OVER fl
  346.     !files~insert(f)
  347.   END