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

xml/soap/webservice

开发平台:

C/C++

  1. #!/usr/local/bin/perl5
  2. push(@INC, "/home/xml4c/bin", "/home/xml4c/bin/perl/perl-RUN/opt/perl5/lib", "/Development2/cupert/bin/perl/perl-RUN/opt/perl5/lib", "/Development/cupert/usr/local/perl/perl-RUN/opt/perl5/lib");
  3. require "getopt.pl";
  4. require 5.0;
  5. $|=1;   # Force a flush after every print
  6. # Extract the source and target directories
  7. &Getopt('sopcxmntrj');
  8. $XERCESCROOT = $opt_s;
  9. $targetdir = $opt_o;
  10. # Check for the environment variables and exit if error
  11. if (!length($XERCESCROOT) || !length($targetdir) || (length($opt_h) > 0) ) {
  12.     print ("Usage is: packageBinaries <options>n");
  13.     print ("  where options are:n");
  14.     print ("    -s <source_directory>n");
  15.     print ("    -o <target_directory>n");
  16.     print ("    -c <C compiler name> (e.g. gcc, cc or xlc_r)n");
  17.     print ("    -x <C++ compiler name> (e.g. g++, CC, aCC, c++ or xlC_r)n");
  18.     print ("    -m <message loader> can be 'inmem' (default), 'icu' or 'iconv'n");
  19.     print ("    -n <net accessor> can be 'fileonly' or 'socket' (default)n");
  20.     print ("    -t <transcoder> can be 'icu' or 'native' (default)n");
  21.     print ("    -r <thread option> can be 'pthread' (default)or 'dce' (only used on HP-11)n");
  22.     print ("    -j suppress building of ICU (speeds up builds when debugging)n");
  23.     print ("    -h to get help on these commandsnn");
  24.     print ("Example: Under unix'sn");
  25.     print ("    perl packageBinaries.pl -s $HOME/xerces-c-src_1_6_0");
  26.     print (" -o $HOME/xerces-c_1_6_0-linux -c gcc -x g++ -m inmem -n fileonly -t nativenn");
  27.     print ("Example: Under Windowsn");
  28.     print ("    perl packageBinaries.pl -s \xerces-c-src_1_6_0");
  29.     print (" -o\xerces-c_1_6_0-win32 [-n fileonly] [-t icu]nn");
  30.     print ("Note:n");
  31.     print ("    Under Windows, by default the XercesLib project files isn");
  32.     print ("    configured to use Win32 resource file based message loader,n");
  33.     print ("    WinSocket based net accessor and native Win32 based transcoder.n");
  34.     print ("    The two options mentioned in the example above are the onlyn");
  35.     print ("    options relevant under Windows on the command line for this script.n");
  36.     exit(-1);
  37. }
  38. # Set up the environment variables for ICU
  39. # As of Version 3, ICU is not a required component of XERCES-C
  40. $ICUROOT = $ENV{'ICUROOT'};
  41. $ICU_DATA = $ENV{'ICU_DATA'};
  42. if (!length($ICUROOT)) {
  43.     print "You have not defined your ICU install directory.n";
  44.     print "To build with ICU, you must set an environment variable called ICUROOTn";
  45.     print "Proceeding to build XERCES-C without ICU...n";
  46. }
  47. # Check if the source directory exists or not
  48. if (!(-e $XERCESCROOT)) {
  49.     print ("The directory $XERCESCROOT does not exist. Cannot proceed any further.n");
  50.     exit(-1);
  51. }
  52. # Check if the target directory exists, exit if it does
  53. if (-e $targetdir) {
  54.     print ("Error: The target directory '$targetdir' already exists.n");
  55.     print ("       You must start with a clean directory to package your product.n");
  56.     exit(1);
  57. }
  58. #Fix the backslashes on the Windows platform
  59. $XERCESCROOT =~ s/\///g;
  60. $ICUROOT =~ s/\///g;
  61. $targetdir =~ s/\///g;
  62. # Find out the platform from 'uname -a'
  63. open(PLATFORM, "uname -s|");
  64. $platform = <PLATFORM>;
  65. chomp($platform);
  66. close (PLATFORM);
  67. print "Packaging binaries for `" . $platform . "` in " . $targetdir . " ...n";   # "
  68. #Construct the name of the zip file by extracting the last directory name
  69. $zipfiles = $targetdir;
  70. $zipfiles =~ s/.*/([w-.]*)$/$1/g;
  71. $zipfiles = $zipfiles . "/*";
  72. $buildmode = "Release";         # Universally, why do you want to package Debug builds anyway?
  73. #
  74. #   WINDOWS builds happen here ...
  75. #
  76. if ($platform =~ m/Windows/  || $platform =~ m/CYGWIN/) {
  77.     $platformname = 'Win32';    # Needed this way by nmake
  78.     if (-e "$targetdir.zip") {
  79.         print ("Deleting old target file '$targetdir.zip' n");
  80.         unlink("$targetdir.zip");
  81.     }
  82.     # Make the target directory and its main subdirectories
  83.     psystem ("mkdir $targetdir");
  84.     psystem ("mkdir $targetdir/bin");
  85.     psystem ("mkdir $targetdir/lib");
  86.     psystem ("mkdir $targetdir/etc");
  87.     psystem ("mkdir $targetdir/include");
  88.     psystem ("mkdir $targetdir/samples");
  89.     psystem ("mkdir $targetdir/samples/Projects");
  90.     psystem ("mkdir $targetdir/samples/Projects/Win32");
  91.     psystem ("mkdir $targetdir/samples/data");
  92.     psystem ("mkdir $targetdir/samples/SAXCount");
  93.     psystem ("mkdir $targetdir/samples/SAX2Count");
  94.     psystem ("mkdir $targetdir/samples/SAXPrint");
  95.     psystem ("mkdir $targetdir/samples/SAX2Print");
  96.     psystem ("mkdir $targetdir/samples/DOMCount");
  97.     psystem ("mkdir $targetdir/samples/DOMPrint");
  98.     psystem ("mkdir $targetdir/samples/IDOMCount");
  99.     psystem ("mkdir $targetdir/samples/IDOMPrint");
  100.     psystem ("mkdir $targetdir/samples/Redirect");
  101.     psystem ("mkdir $targetdir/samples/MemParse");
  102.     psystem ("mkdir $targetdir/samples/PParse");
  103.     psystem ("mkdir $targetdir/samples/StdInParse");
  104.     psystem ("mkdir $targetdir/samples/EnumVal");
  105.     psystem ("mkdir $targetdir/samples/SEnumVal");
  106.     psystem ("mkdir $targetdir/samples/CreateDOMDocument");
  107.     psystem ("mkdir $targetdir/doc");
  108.     psystem ("mkdir $targetdir/doc/html");
  109.     psystem ("mkdir $targetdir/doc/html/apiDocs");
  110.     # If 'FileOnly' NetAccessor has been specified, then the project files have to be
  111.     # changed.
  112.     if ($opt_n =~ m/fileonly/i) {
  113.         changeWindowsProjectForFileOnlyNA("$XERCESCROOT/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp");
  114.     }
  115.     #
  116.     # ICU Build happens here, if one is required.
  117.     #
  118.     if ($opt_t =~ m/icu/i && length($ICUROOT) > 0) {
  119.         print ("Building ICU from $ICUROOT ...n");
  120.         #Clean up all the dependency files, causes problems for nmake
  121.         pchdir ("$ICUROOT");
  122.         psystem ("del /s /f *.dep *.ncb *.plg *.opt");
  123.         # Make the icu dlls
  124.         pchdir ("$ICUROOT/source/allinone");
  125.         if (!$opt_j) {   # Optionally suppress ICU build, to speed up overlong builds while debugging.
  126.     #For nt we ship both debug and release dlls
  127.     psystem("msdev allinone.dsw /MAKE "all - $platformname Release" /REBUILD /OUT buildlog.txt");
  128.     psystem("cat buildlog.txt");
  129.     psystem("msdev allinone.dsw /MAKE "all - $platformname Debug" /REBUILD /OUT buildlog.txt");
  130.     psystem("cat buildlog.txt");
  131.         }
  132.         change_windows_project_for_ICU("$XERCESCROOT/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp");
  133.     }
  134.     # Clean up all the dependency files, causes problems for nmake
  135.     # Also clean up all MSVC-generated project files that just cache the IDE state
  136.     pchdir ("$XERCESCROOT");
  137.     psystem ("del /s /f *.dep *.ncb *.plg *.opt");
  138.     # Make all files in the Xerces-C system including libraries, samples and tests
  139.     pchdir ("$XERCESCROOT/Projects/Win32/VC6/xerces-all");
  140.     psystem( "msdev xerces-all.dsw /MAKE "all - $platformname $buildmode" /REBUILD /OUT buildlog.txt");
  141.     system("cat buildlog.txt");
  142.     # Build the debug xerces dll.  Both debug and release DLLs
  143.     #   are in the standard binary distribution of Xerces.
  144.     if ($buildmode ne "Debug") {
  145.         psystem("msdev xerces-all.dsw /MAKE "XercesLib - $platformname Debug" /REBUILD /OUT buildlog.txt");
  146.         system("cat buildlog.txt");
  147.     }
  148.     # Decide where you want the build copied from
  149.     pchdir ($targetdir);
  150.     $BUILDDIR = $XERCESCROOT . "/Build/Win32/VC6/" . $buildmode;
  151.     print "nBuild is being copied from '" . $BUILDDIR . "'";
  152.     # Populate the include output directory
  153.     print ("nnCopying headers files ...n");
  154.     @headerDirectories =
  155.      qw'sax
  156. sax2
  157.         framework
  158.         dom
  159.         idom
  160.         internal
  161.         parsers
  162.         util
  163.         util/Compilers
  164.         util/MsgLoaders
  165.         util/MsgLoaders/ICU
  166.         util/MsgLoaders/InMemory
  167.         util/MsgLoaders/MsgCatalog
  168.         util/MsgLoaders/Win32
  169.         util/Platforms
  170.         util/Platforms/AIX
  171.         util/Platforms/HPUX
  172.         util/Platforms/Linux
  173.         util/Platforms/MacOS
  174.         util/Platforms/OS2
  175.         util/Platforms/OS390
  176.         util/Platforms/PTX
  177.         util/Platforms/Solaris
  178.         util/Platforms/Tandem
  179.         util/Platforms/Win32
  180.         util/regx
  181.         util/Transcoders
  182.         util/Transcoders/ICU
  183.         util/Transcoders/Iconv
  184.         util/Transcoders/Win32
  185.         validators
  186.         validators/common
  187.         validators/datatype
  188.         validators/DTD
  189.         validators/schema
  190.         validators/schema/identity';
  191.     foreach $dir (@headerDirectories) {
  192.         $inclDir = "include/$dir";
  193.         if (! (-e $inclDir)) {
  194.             psystem("mkdir $inclDir");
  195.         }
  196.         $srcDir = "$XERCESCROOT/src/$dir";
  197.         # Weed out directories that have no files to copy, to avoid a bunch of
  198.         # warnings from the cp command in the build output.
  199.         opendir(dir, $srcDir);
  200.         @allfiles = readdir(dir);
  201.         closedir(dir);
  202.         foreach $fileKind ("hpp", "c") {
  203.             $matches = grep(/.$fileKind$/, @allfiles);
  204.             if ($matches > 0) {
  205.                 psystem("cp -f $srcDir/*.$fileKind  $inclDir/");
  206.             }
  207.         }
  208.     }
  209.     #
  210.     #  Remove internal implementation headers from the DOM include directory.
  211.     #
  212.     psystem ("rm  $targetdir/include/dom/*Impl.hpp");
  213.     psystem ("rm  $targetdir/include/dom/DS*.hpp");
  214.     psystem ("rm  $targetdir/include/idom/*Impl.hpp");
  215.     psystem ("rm  $targetdir/include/idom/IDS*.hpp");
  216.     if ($opt_t =~ m/icu/i && length($ICUROOT) > 0) {
  217.         psystem("cp -Rfv $ICUROOT/include/* $targetdir/include");
  218.     }
  219.     #
  220.     # Populate the binary output directory
  221.     #
  222.     print ("nnCopying binary outputs ...n");
  223.     psystem("cp -fv $BUILDDIR/*.dll $targetdir/bin");
  224.     psystem("cp -fv $BUILDDIR/*.exe $targetdir/bin");
  225.     if ($opt_t =~ m/icu/i && length($ICUROOT) > 0) {
  226.         # Copy the ICU dlls and libs
  227.         psystem("cp -fv $ICUROOT/bin/icuuc20.dll $targetdir/bin");
  228.         psystem("cp -fv $ICUROOT/bin/icuuc20d.dll $targetdir/bin");
  229.         # it seems icudt20*.DLL is generated (upper case dll)
  230.         # but just case, try lower case .dll as well
  231.         psystem("cp -fv $ICUROOT/bin/icudt20*.DLL $targetdir/bin");
  232.         psystem("cp -fv $ICUROOT/bin/icudt20*.dll $targetdir/bin");
  233.         psystem("cp -fv $ICUROOT/lib/icudata.lib $targetdir/lib");
  234.         psystem("cp -fv $ICUROOT/lib/icuuc.lib $targetdir/lib");
  235.         psystem("cp -fv $ICUROOT/lib/icuucd.lib $targetdir/lib");
  236.     }
  237.     psystem("cp -fv $BUILDDIR/xerces-c_*.lib $targetdir/lib");
  238.     if ($buildmode ne "Debug") {
  239.         $DEBUGBUILDDIR = "$XERCESCROOT/Build/Win32/VC6/Debug";
  240.         psystem("cp -fv $DEBUGBUILDDIR/xerces-c_*D.lib $targetdir/lib");
  241.         psystem("cp -fv $DEBUGBUILDDIR/xerces*D.dll $targetdir/bin");
  242.     }
  243.     # Populate the etc output directory like config.status and the map file
  244.     print ("nnCopying misc output to etc ...n");
  245.     psystem("cp -fv $XERCESCROOT/Build/Win32/VC6/Release/obj/*.map $targetdir/etc");
  246.     # Populate the samples directory
  247.     print ("nnCopying sample files ...n");
  248.     psystem("cp $XERCESCROOT/version.incl $targetdir");
  249.     psystem("cp -Rfv $XERCESCROOT/samples/Projects/* $targetdir/samples/Projects");
  250.     psystem("cp -Rfv $XERCESCROOT/samples/SAXCount/* $targetdir/samples/SAXCount");
  251.     psystem("rm -f $targetdir/samples/SAXCount/Makefile");
  252.     psystem("cp -Rfv $XERCESCROOT/samples/SAX2Count/* $targetdir/samples/SAX2Count");
  253.     psystem("rm -f $targetdir/samples/SAX2Count/Makefile");
  254.     psystem("cp -Rfv $XERCESCROOT/samples/SAXPrint/* $targetdir/samples/SAXPrint");
  255.     psystem("rm -f $targetdir/samples/SAXPrint/Makefile");
  256.     psystem("cp -Rfv $XERCESCROOT/samples/SAX2Print/* $targetdir/samples/SAX2Print");
  257.     psystem("rm -f $targetdir/samples/SAX2Print/Makefile");
  258.     psystem("cp -Rfv $XERCESCROOT/samples/DOMCount/* $targetdir/samples/DOMCount");
  259.     psystem("rm -f $targetdir/samples/DOMCount/Makefile");
  260.     psystem("cp -Rfv $XERCESCROOT/samples/DOMPrint/* $targetdir/samples/DOMPrint");
  261.     psystem("rm -f $targetdir/samples/DOMPrint/Makefile");
  262.     psystem("cp -Rfv $XERCESCROOT/samples/IDOMCount/* $targetdir/samples/IDOMCount");
  263.     psystem("rm -f $targetdir/samples/IDOMCount/Makefile");
  264.     psystem("cp -Rfv $XERCESCROOT/samples/IDOMPrint/* $targetdir/samples/IDOMPrint");
  265.     psystem("rm -f $targetdir/samples/IDOMPrint/Makefile");
  266.     psystem("cp -Rfv $XERCESCROOT/samples/Redirect/* $targetdir/samples/Redirect");
  267.     psystem("rm -f $targetdir/samples/Redirect/Makefile");
  268.     psystem("cp -Rfv $XERCESCROOT/samples/MemParse/* $targetdir/samples/MemParse");
  269.     psystem("rm -f $targetdir/samples/MemParse/Makefile");
  270.     psystem("cp -Rfv $XERCESCROOT/samples/PParse/* $targetdir/samples/PParse");
  271.     psystem("rm -f $targetdir/samples/PParse/Makefile");
  272.     psystem("cp -Rfv $XERCESCROOT/samples/StdInParse/* $targetdir/samples/StdInParse");
  273.     psystem("rm -f $targetdir/samples/StdInParse/Makefile");
  274.     psystem("cp -Rfv $XERCESCROOT/samples/EnumVal/* $targetdir/samples/EnumVal");
  275.     psystem("rm -f $targetdir/samples/EnumVal/Makefile");
  276.     psystem("cp -Rfv $XERCESCROOT/samples/SEnumVal/* $targetdir/samples/SEnumVal");
  277.     psystem("rm -f $targetdir/samples/SEnumVal/Makefile");
  278.     psystem("cp -Rfv $XERCESCROOT/samples/CreateDOMDocument/* $targetdir/samples/CreateDOMDocument");
  279.     psystem("rm -f $targetdir/samples/CreateDOMDocument/Makefile");
  280.     psystem("cp -Rfv $XERCESCROOT/samples/data/* $targetdir/samples/data");
  281.     # Populate the docs directory
  282.     print ("nnCopying documentation ...n");
  283.     psystem("cp -Rfv $XERCESCROOT/doc/* $targetdir/doc");
  284.     psystem("cp $XERCESCROOT/Readme.html $targetdir");
  285.     psystem("cp $XERCESCROOT/credits.txt $targetdir");
  286.     psystem("cp $XERCESCROOT/LICENSE.txt $targetdir");
  287.     if (length($ICUROOT) > 0) {
  288.         psystem("cp $XERCESCROOT/license.html $targetdir");
  289.         psystem("cp $XERCESCROOT/XLicense.html $targetdir");
  290.     }
  291.     psystem("rm -f $targetdir/doc/Doxyfile");
  292.     psystem("rm -rf $targetdir/doc/dtd");
  293.     psystem("rm -f $targetdir/doc/*.xml");
  294.     psystem("rm -f $targetdir/doc/*.ent");
  295.     psystem("rm -f $targetdir/doc/*.gif");
  296.     # Now package it all up using ZIP
  297.     pchdir ("$targetdir/..");
  298.     print ("nnZIPping up all files ...n");
  299.     $zipname = $targetdir . ".zip";
  300.     psystem ("zip -r $zipname $zipfiles");
  301. }
  302. #
  303. #     End of Windows Builds.
  304. #
  305. #  UNIX builds happen here ...
  306. #
  307. if ( ($platform =~ m/AIX/i)    || ($platform =~ m/HP-UX/i) ||
  308.      ($platform =~ m/SunOS/i) || ($platform =~ m/Linux/i) || ($platform =~ m/ptx/i) ) {
  309.     # Echo the current PATH to see what compiler it picks up
  310.     psystem ("echo PATH=$ENV{'PATH'}");
  311.     # Set defaults for platform-independent options.
  312.     if ($opt_m eq "") {$opt_m = "inmem";   # In memory  message loader.
  313.     }
  314.     if ($opt_n eq "") {$opt_n = "socket";  # Socket based net accessor.
  315.     }
  316.     if ($opt_t eq "") {$opt_t = "native";  # Native transcoding service.
  317.     }
  318.     # Set defaults for platform-specific options.
  319.     if ($platform =~ m/AIX/i) {
  320.         $platform = "aix";
  321.         if ($opt_c eq "") {$opt_c = "xlc_r"; }
  322.         if ($opt_x eq "") {$opt_x = "xlC_r"; }
  323.         $icuCompileFlags = 'CXX="xlC_r" ' .
  324.                            'CC="xlc_r" ' .
  325.                            'C_FLAGS="-w -O" ' .
  326.                            'CXX_FLAGS="-w -O" ';
  327.     }
  328.     if ($platform eq 'HP-UX') {
  329.         # Find out the operating system version from 'uname -r'
  330.         open(OSVERSION, "uname -r|");
  331.         $osversion = <OSVERSION>;
  332.         chomp($osversion);
  333.         close (OSVERSION);
  334.         $platform = 'hp-11' if ($osversion =~ m/11./);
  335.         $platform = 'hp-10' if ($osversion =~ m/10./);
  336.         if ($opt_c eq "") {$opt_c = "cc"; }
  337.         if ($opt_x eq "") {
  338.             $opt_x = "CC";
  339.             if ($platform eq "hp-11") {
  340.                 $opt_x = "aCC";
  341.             }
  342.         }
  343.         if ($opt_m eq "") {
  344.             $opt_m = "inmem";
  345.         }
  346.         if ($opt_x eq 'CC') {
  347.             $icuCompileFlags = 'CC=cc CXX=CC CXXFLAGS="+eh +DAportable -w -O" CFLAGS="+DAportable -w -O"';
  348.         } else {
  349.             $icuCompileFlags = 'CC=cc CXX=aCC CXXFLAGS="+DAportable -w -O" CFLAGS="+DAportable -w -O"';
  350.         }
  351.     }
  352.     if ($platform =~ m/Linux/i) {
  353.         $icuCompileFlags = 'CC=gcc CXX=g++ CXXFLAGS="-w -O" CFLAGS="-w -O"';
  354.         $platform = "linux";
  355.         if ($opt_c eq "") {$opt_c = "gcc";}
  356.         if ($opt_x eq "") {$opt_x = "g++";}
  357.     }
  358.     if ($platform =~ m/SunOS/i) {
  359.         $icuCompileFlags = 'CC=cc CXX=CC CXXFLAGS="-w -O" CFLAGS="-w -O"';
  360.         $platform = "solaris";
  361.         if ($opt_c eq "") {$opt_c = "cc";}
  362.         if ($opt_x eq "") {$opt_x = "CC";}
  363.     }
  364.     if ($platform =~ m/ptx/i) {
  365.         # Check if the patches have been applied or not
  366.         $platform = "ptx";
  367.         if (!(-d "$XERCESCROOT/src/util/Platforms/PTX")) {
  368.             print ("Error: Could not locate PTX-specific XML4C directory.n");
  369.             print ("    The PTX-specific patches must be applied to both XML4C and ICU before a build can succeed.n");
  370.             exit(-1);
  371.         }
  372.         # Generally speaking, ICU must be built, before XML4C can be built, for ptx.
  373.         # If this case causes problems, we can revisit it in the future. Right now,
  374.         # we fail only if ICUROOT is defined but mh-ptx is not present.
  375.         if (length($ICUROOT)) {
  376.             if (!(-e "$ICUROOT/source/config/mh-ptx")) {
  377.                 print ("Error: Could not locate PTX-specific ICU files.n");
  378.                 print ("    The PTX-specific patches must be applied to both XML4C and ICU before a build can succeed.n");
  379.                 exit(-1);
  380.             }
  381.         }
  382.         $icuCompileFlags = 'CC=cc CXX=c++ CXXFLAGS="-w -0" CFLAGS="-w -0"';
  383.         # XMLINSTALL is a ptx-port-specific variable used for manipulating where the files are installed.
  384.         if (!length($ENV{'XMLINSTALL'})) {
  385.             print ("XMLINSTALL has not been explicitly defined. Setting it to '$targetdir'.n");
  386.             $ENV{'XMLINSTALL'} = $targetdir;
  387.         }
  388.         $XMLINSTALL = $ENV{'XMLINSTALL'};
  389.     }
  390.     # Check if the target directories already exist or not
  391.     if (-e $targetdir.".tar") {
  392.         print ("Error: The target file '$targetdir.tar' already exists.n");
  393.         print ("       You must delete the file '$targetdir.tar' to package your product.n");
  394.         exit(1);
  395.     }
  396.     if (-e $srctargetdir.".tar") {
  397.         print ("Error: The target file '$srctargetdir.tar' already exists.n");
  398.         print ("       You must delete the file '$srctargetdir.tar' to package your product.n");
  399.         exit(1);
  400.     }
  401.     # Make the target directory and its main subdirectories
  402.     psystem ("mkdir $targetdir");
  403.     psystem ("mkdir $targetdir/bin");
  404.     psystem ("mkdir $targetdir/etc");
  405.     psystem ("mkdir $targetdir/lib");
  406.     psystem ("mkdir $targetdir/include");
  407.     if (length($ICUROOT) > 0) {
  408.         psystem ("mkdir $targetdir/include/unicode");
  409.     }
  410.     psystem ("mkdir $targetdir/include/sax");
  411.     psystem ("mkdir $targetdir/include/sax2");
  412.     psystem ("mkdir $targetdir/include/framework");
  413.     psystem ("mkdir $targetdir/include/internal");
  414.     psystem ("mkdir $targetdir/include/parsers");
  415.     psystem ("mkdir $targetdir/include/util");
  416.     psystem ("mkdir $targetdir/include/util/Compilers");
  417.     psystem ("mkdir $targetdir/include/util/MsgLoaders");
  418.     psystem ("mkdir $targetdir/include/util/MsgLoaders/ICU");
  419.     psystem ("mkdir $targetdir/include/util/MsgLoaders/InMemory");
  420.     psystem ("mkdir $targetdir/include/util/MsgLoaders/MsgCatalog");
  421.     psystem ("mkdir $targetdir/include/util/MsgLoaders/Win32");
  422.     psystem ("mkdir $targetdir/include/util/Platforms");
  423.     psystem ("mkdir $targetdir/include/util/Platforms/AIX");
  424.     psystem ("mkdir $targetdir/include/util/Platforms/HPUX");
  425.     psystem ("mkdir $targetdir/include/util/Platforms/Linux");
  426.     psystem ("mkdir $targetdir/include/util/Platforms/MacOS");
  427.     psystem ("mkdir $targetdir/include/util/Platforms/OS2");
  428.     psystem ("mkdir $targetdir/include/util/Platforms/OS390");
  429.     psystem ("mkdir $targetdir/include/util/Platforms/PTX");
  430.     psystem ("mkdir $targetdir/include/util/Platforms/Solaris");
  431.     psystem ("mkdir $targetdir/include/util/Platforms/Tandem");
  432.     psystem ("mkdir $targetdir/include/util/Platforms/Win32");
  433.     psystem ("mkdir $targetdir/include/util/regx");
  434.     psystem ("mkdir $targetdir/include/util/Transcoders");
  435.     psystem ("mkdir $targetdir/include/util/Transcoders/ICU");
  436.     psystem ("mkdir $targetdir/include/util/Transcoders/Iconv");
  437.     psystem ("mkdir $targetdir/include/util/Transcoders/Win32");
  438.     psystem ("mkdir $targetdir/include/dom");
  439.     psystem ("mkdir $targetdir/include/idom");
  440.     psystem ("mkdir $targetdir/include/validators");
  441.     psystem ("mkdir $targetdir/include/validators/common");
  442.     psystem ("mkdir $targetdir/include/validators/datatype");
  443.     psystem ("mkdir $targetdir/include/validators/DTD");
  444.     psystem ("mkdir $targetdir/include/validators/schema");
  445.     psystem ("mkdir $targetdir/include/validators/schema/identity");
  446.     psystem ("mkdir $targetdir/samples");
  447.     psystem ("mkdir $targetdir/samples/data");
  448.     psystem ("mkdir $targetdir/samples/SAXCount");
  449.     psystem ("mkdir $targetdir/samples/SAX2Count");
  450.     psystem ("mkdir $targetdir/samples/SAXPrint");
  451.     psystem ("mkdir $targetdir/samples/SAX2Print");
  452.     psystem ("mkdir $targetdir/samples/DOMCount");
  453.     psystem ("mkdir $targetdir/samples/DOMPrint");
  454.     psystem ("mkdir $targetdir/samples/IDOMCount");
  455.     psystem ("mkdir $targetdir/samples/IDOMPrint");
  456.     psystem ("mkdir $targetdir/samples/Redirect");
  457.     psystem ("mkdir $targetdir/samples/MemParse");
  458.     psystem ("mkdir $targetdir/samples/PParse");
  459.     psystem ("mkdir $targetdir/samples/StdInParse");
  460.     psystem ("mkdir $targetdir/samples/EnumVal");
  461.     psystem ("mkdir $targetdir/samples/SEnumVal");
  462.     psystem ("mkdir $targetdir/samples/CreateDOMDocument");
  463.     psystem ("mkdir $targetdir/doc");
  464.     psystem ("mkdir $targetdir/doc/html");
  465.     psystem ("mkdir $targetdir/doc/html/apiDocs");
  466.     # Build ICU if needed
  467.     if ($opt_t =~ m/icu/i && !$opt_j)
  468.     {
  469.         print("nnBuild ICU ...n");
  470.         if(length($ICUROOT) == 0) {
  471.            print("Error, ICUROOT not set, can not build ICUn");
  472.            exit(-1);
  473.            }
  474.         # First make the ICU files executable
  475.         pchdir ("$ICUROOT/source");
  476.         psystem ("chmod +x configure config.*");
  477.         psystem ("chmod +x install-sh");
  478.         $ENV{'ICU_DATA'} = "$ICUROOT/data";
  479.         if ($platform =~ m/ptx/i) {
  480.             psystem ("chmod +x runConfigureICU");
  481.             psystem ("runConfigureICU PTX");
  482.         } else {
  483.             psystem ("$icuCompileFlags configure --prefix=$ICUROOT");
  484.         }
  485.         psystem ("gmake clean"); # Clean up the build, may want to comment this line out!
  486.         psystem ("rm -f $ICUROOT/data/*.o"); # gmake clean is not enough
  487.         psystem ("rm -f $ICUROOT/data/*.c"); # same for .c files
  488.         psystem ("gmake");       # This will take a long time!
  489.         psystem ("gmake install"); # Make this separate since this breaks on Solaris
  490.         # Please check if the following needs any change in Version 1.5
  491.         # For the antiquated CC compiler under HPUX, we need to invoke
  492.         # gmake one extra time to generate the .cnv files.
  493.         # if ( ($platform =~ m/hp-/i) && ($opt_x eq 'CC') ) {
  494.         #   system ("gmake");
  495.         # }
  496.     }
  497.     # For ptx, ICUROOT must now be set to XMLINSTALL for further work.
  498.     if ($platform =~ m/ptx/i) {
  499.         $ENV{'ICUROOT'} = $ENV{'XMLINSTALL'};
  500.     }
  501.     # Copy the ICU libs for the source build
  502.     #
  503.     if (length($ICUROOT) > 0) {
  504.         # Only one of the following is generated, but don't know which is generated
  505.         # so trial and error
  506.         psystem("cp -f $ICUROOT/source/data/libicudt20e.a $ICUROOT/lib/libicudata.a");
  507.         psystem("cp -f $ICUROOT/source/data/libicudt20l.a $ICUROOT/lib/libicudata.a");
  508.         psystem("cp -f $ICUROOT/source/data/libicudt20b.a $ICUROOT/lib/libicudata.a");
  509.         psystem("cp -f $ICUROOT/source/data/libicudt20e.so $ICUROOT/lib/libicudata.so");
  510.         psystem("cp -f $ICUROOT/source/data/libicudt20l.so $ICUROOT/lib/libicudata.so");
  511.         psystem("cp -f $ICUROOT/source/data/libicudt20b.so $ICUROOT/lib/libicudata.so");
  512.         psystem("cp -f $ICUROOT/source/data/libicudt20e.sl $ICUROOT/lib/libicudata.sl");
  513.         psystem("cp -f $ICUROOT/source/data/libicudt20l.sl $ICUROOT/lib/libicudata.sl");
  514.         psystem("cp -f $ICUROOT/source/data/libicudt20b.sl $ICUROOT/lib/libicudata.sl");
  515.     }
  516.     # make the source files
  517.     print("nnBuild the xerces-c library ...n");
  518.     pchdir ("$XERCESCROOT/src");
  519.     psystem ("chmod +x run* con* install-sh");
  520.     if (length($opt_r) > 0) {
  521.         psystem ("runConfigure -p$platform -c$opt_c -x$opt_x -m$opt_m -n$opt_n -t$opt_t -r$opt_r");
  522.     } else {
  523.         psystem ("runConfigure -p$platform -c$opt_c -x$opt_x -m$opt_m -n$opt_n -t$opt_t");
  524.     }
  525.     psystem ("gmake clean");     # May want to comment this line out to speed up
  526.     psystem ("gmake");
  527.     # Move ICU libs into lib dir, so samples will link.  This matches the structure of
  528.     #   the eventual binary packaging, even though we are doing it in the build directory.
  529.     #
  530.     if (length($ICUROOT) > 0) {
  531.         psystem("cp -f $ICUROOT/lib/libicuuc.* $XERCESCROOT/lib");
  532.         psystem("cp -f $ICUROOT/lib/libicudata.* $XERCESCROOT/lib");
  533.         psystem("cp -f $ICUROOT/source/data/libicudt20*.* $XERCESCROOT/lib");
  534.     }
  535.     # Now build the samples
  536.     print("nnBuild the samples ...n");
  537.     pchdir ("$XERCESCROOT/samples");
  538.     psystem ("chmod +x run* con* install-sh");
  539.     psystem ("runConfigure -p$platform -c$opt_c -x$opt_x");
  540.     psystem ("gmake clean");     # May want to comment this line out to speed up
  541.     psystem ("gmake");
  542.     # Next build the tests
  543.     print("nnBuild the tests ...n");
  544.     pchdir ("$XERCESCROOT/tests");
  545.     psystem ("chmod +x run* con* install-sh");
  546.     psystem ("runConfigure -p$platform -c$opt_c -x$opt_x");
  547.     psystem ("gmake clean");     # May want to comment this line out to speed up
  548.     psystem ("gmake");
  549.     pchdir ($targetdir);
  550.     # Populate the include output directory
  551.     print ("nnCopying headers files ...n");
  552.     psystem("cp -Rf $XERCESCROOT/src/sax/*.hpp $targetdir/include/sax");
  553. psystem("cp -Rf $XERCESCROOT/src/sax2/*.hpp $targetdir/include/sax2");
  554.     psystem("cp -Rf $XERCESCROOT/src/framework/*.hpp $targetdir/include/framework");
  555.     psystem("cp -Rf $XERCESCROOT/src/dom/D*.hpp $targetdir/include/dom");
  556.     psystem("cp -Rf $XERCESCROOT/src/idom/ID*.hpp $targetdir/include/idom");
  557.     psystem("cp -Rf $XERCESCROOT/version.incl $targetdir");
  558.     psystem("rm -f $targetdir/include/dom/*Impl.hpp");
  559.     psystem("rm -f $targetdir/include/dom/DS*.hpp");
  560.     psystem("rm -f $targetdir/include/idom/*Impl.hpp");
  561.     psystem("rm -f $targetdir/include/idom/IDS*.hpp");
  562.     psystem("cp -Rf $XERCESCROOT/src/internal/*.hpp $targetdir/include/internal");
  563.     psystem("cp -Rf $XERCESCROOT/src/internal/*.c $targetdir/include/internal");
  564.     psystem("cp -Rf $XERCESCROOT/src/parsers/*.hpp $targetdir/include/parsers");
  565.     psystem("cp -Rf $XERCESCROOT/src/parsers/*.c $targetdir/include/parsers");
  566.     psystem("cp -Rf $XERCESCROOT/src/util/*.hpp $targetdir/include/util");
  567.     psystem("cp -Rf $XERCESCROOT/src/util/*.c $targetdir/include/util");
  568.     psystem("cp -Rf $XERCESCROOT/src/util/Compilers/*.hpp $targetdir/include/util/Compilers");
  569.     psystem("cp -Rf $XERCESCROOT/src/util/MsgLoaders/*.hpp $targetdir/include/util/MsgLoaders");
  570.     psystem("cp -Rf $XERCESCROOT/src/util/MsgLoaders/ICU/*.hpp $targetdir/include/util/MsgLoaders/ICU");
  571.     psystem("cp -Rf $XERCESCROOT/src/util/MsgLoaders/InMemory/*.hpp $targetdir/include/util/MsgLoaders/InMemory");
  572.     psystem("cp -Rf $XERCESCROOT/src/util/MsgLoaders/MsgCatalog/*.hpp $targetdir/include/util/MsgLoaders/MsgCatalog");
  573.     psystem("cp -Rf $XERCESCROOT/src/util/MsgLoaders/Win32/*.hpp $targetdir/include/util/MsgLoaders/Win32");
  574.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/*.hpp $targetdir/include/util/Platforms");
  575.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/AIX/*.hpp $targetdir/include/util/Platforms/AIX");
  576.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/HPUX/*.hpp $targetdir/include/util/Platforms/HPUX");
  577.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/Linux/*.hpp $targetdir/include/util/Platforms/Linux");
  578.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/MacOS/*.hpp $targetdir/include/util/Platforms/MacOS");
  579.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/OS2/*.hpp $targetdir/include/util/Platforms/OS2");
  580.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/OS390/*.hpp $targetdir/include/util/Platforms/OS390");
  581.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/PTX/*.hpp $targetdir/include/util/Platforms/PTX");
  582.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/Solaris/*.hpp $targetdir/include/util/Platforms/Solaris");
  583.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/Tandem/*.hpp $targetdir/include/util/Platforms/Tandem");
  584.     psystem("cp -Rf $XERCESCROOT/src/util/Platforms/Win32/*.hpp $targetdir/include/util/Platforms/Win32");
  585.     psystem("cp -Rf $XERCESCROOT/src/util/regx/*.hpp $targetdir/include/util/regx");
  586.     psystem("cp -Rf $XERCESCROOT/src/util/Transcoders/*.hpp $targetdir/include/util/Transcoders");
  587.     psystem("cp -Rf $XERCESCROOT/src/util/Transcoders/ICU/*.hpp $targetdir/include/util/Transcoders/ICU");
  588.     psystem("cp -Rf $XERCESCROOT/src/util/Transcoders/Iconv/*.hpp $targetdir/include/util/Transcoders/Iconv");
  589.     psystem("cp -Rf $XERCESCROOT/src/util/Transcoders/Win32/*.hpp $targetdir/include/util/Transcoders/Win32");
  590.     psystem("cp -Rf $XERCESCROOT/src/validators/common/*.hpp $targetdir/include/validators/common");
  591.     psystem("cp -Rf $XERCESCROOT/src/validators/datatype/*.hpp $targetdir/include/validators/datatype");
  592.     psystem("cp -Rf $XERCESCROOT/src/validators/DTD/*.hpp $targetdir/include/validators/DTD");
  593.     psystem("cp -Rf $XERCESCROOT/src/validators/schema/*.hpp $targetdir/include/validators/schema");
  594.     psystem("cp -Rf $XERCESCROOT/src/validators/schema/identity/*.hpp $targetdir/include/validators/schema/identity");
  595.     if (length($ICUROOT) > 0) {
  596.         print "nICU files are being copied from '$ICUROOT'";
  597.         psystem("cp -Rf $ICUROOT/include/* $targetdir/include");
  598.     }
  599.     # Populate the binary output directory
  600.     print ("nnCopying binary outputs ...n");
  601.     psystem("cp -Rf $XERCESCROOT/bin/* $targetdir/bin");
  602.     psystem("cp -f $XERCESCROOT/lib/* $targetdir/lib");
  603.     psystem("rm -rf $targetdir/bin/obj");
  604.     # Populate the etc output directory like config.status and the map file
  605.     print ("nnCopying misc output to etc ...n");
  606.     psystem("cp -Rf $XERCESCROOT/src/config.status $targetdir/etc");
  607.     psystem("cp -Rf $XERCESCROOT/obj/*.map $targetdir/etc");
  608.     # Populate the samples directory
  609.     print ("nnCopying sample files ...n");
  610.     foreach $iii ('config.guess', 'config.h.in', 'config.sub', 'configure', 'configure.in',
  611.                   'install-sh', 'runConfigure', 'Makefile.in', 'Makefile.incl', 'Makefile') {
  612.         psystem("cp -f $XERCESCROOT/samples/$iii $targetdir/samples");
  613.     }
  614.     psystem("cp -Rf $XERCESCROOT/samples/data/* $targetdir/samples/data");
  615.     psystem("cp -Rf $XERCESCROOT/samples/SAXCount/* $targetdir/samples/SAXCount");
  616.     psystem("rm -f $targetdir/samples/SAXCount/Makefile");
  617.     psystem("cp -Rf $XERCESCROOT/samples/SAX2Count/* $targetdir/samples/SAX2Count");
  618.     psystem("rm -f $targetdir/samples/SAX2Count/Makefile");
  619.     psystem("cp -Rf $XERCESCROOT/samples/SAXPrint/* $targetdir/samples/SAXPrint");
  620.     psystem("rm -f $targetdir/samples/SAXPrint/Makefile");
  621.     psystem("cp -Rf $XERCESCROOT/samples/SAX2Print/* $targetdir/samples/SAX2Print");
  622.     psystem("rm -f $targetdir/samples/SAX2Print/Makefile");
  623.     psystem("cp -Rf $XERCESCROOT/samples/DOMCount/* $targetdir/samples/DOMCount");
  624.     psystem("rm -f $targetdir/samples/DOMCount/Makefile");
  625.     psystem("cp -Rf $XERCESCROOT/samples/DOMPrint/* $targetdir/samples/DOMPrint");
  626.     psystem("rm -f $targetdir/samples/DOMPrint/Makefile");
  627.     psystem("cp -Rf $XERCESCROOT/samples/IDOMCount/* $targetdir/samples/IDOMCount");
  628.     psystem("rm -f $targetdir/samples/IDOMCount/Makefile");
  629.     psystem("cp -Rf $XERCESCROOT/samples/IDOMPrint/* $targetdir/samples/IDOMPrint");
  630.     psystem("rm -f $targetdir/samples/IDOMPrint/Makefile");
  631.     psystem("cp -Rf $XERCESCROOT/samples/Redirect/* $targetdir/samples/Redirect");
  632.     psystem("rm -f $targetdir/samples/Redirect/Makefile");
  633.     psystem("cp -Rf $XERCESCROOT/samples/MemParse/* $targetdir/samples/MemParse");
  634.     psystem("rm -f $targetdir/samples/MemParse/Makefile");
  635.     psystem("cp -Rf $XERCESCROOT/samples/PParse/* $targetdir/samples/PParse");
  636.     psystem("rm -f $targetdir/samples/PParse/Makefile");
  637.     psystem("cp -Rf $XERCESCROOT/samples/StdInParse/* $targetdir/samples/StdInParse");
  638.     psystem("rm -f $targetdir/samples/StdInParse/Makefile");
  639.     psystem("cp -Rf $XERCESCROOT/samples/EnumVal/* $targetdir/samples/EnumVal");
  640.     psystem("rm -f $targetdir/samples/EnumVal/Makefile");
  641.     psystem("cp -Rf $XERCESCROOT/samples/SEnumVal/* $targetdir/samples/SEnumVal");
  642.     psystem("rm -f $targetdir/samples/SEnumVal/Makefile");
  643.     psystem("cp -Rf $XERCESCROOT/samples/CreateDOMDocument/* $targetdir/samples/CreateDOMDocument");
  644.     psystem("rm -f $targetdir/samples/CreateDOMDocument/Makefile");
  645.     psystem("rm -f $targetdir/samples/Makefile");
  646.     # Populate the docs directory
  647.     print ("nnCopying documentation ...n");
  648.     psystem("cp -Rf $XERCESCROOT/doc/* $targetdir/doc");
  649.     psystem("cp $XERCESCROOT/Readme.html $targetdir");
  650.     psystem("cp $XERCESCROOT/credits.txt $targetdir");
  651.     psystem("cp $XERCESCROOT/LICENSE.txt $targetdir");
  652.     if (length($ICUROOT) > 0) {
  653.         psystem("cp $XERCESCROOT/license.html $targetdir");
  654.         psystem("cp $XERCESCROOT/XLicense.html $targetdir");
  655.     }
  656.     psystem("rm -f $targetdir/doc/Doxyfile");
  657.     psystem("rm -rf $targetdir/doc/dtd");
  658.     psystem("rm -f $targetdir/doc/*.xml");
  659.     psystem("rm -f $targetdir/doc/*.ent");
  660.     psystem("rm -f $targetdir/doc/*.gif");
  661.     # Change the directory permissions
  662.     psystem ("chmod 644 `find $targetdir -type f`");
  663.     psystem ("chmod 755 $targetdir/bin/* $targetdir/lib/*");
  664.     psystem ("chmod +x $targetdir/samples/runConfigure $targetdir/samples/configure $targetdir/samples/install-sh");
  665.     psystem ("chmod +x $targetdir/samples/config.sub $targetdir/samples/config.guess $targetdir/samples/config.status");
  666.     psystem ("chmod 755 `find $targetdir -type d`");
  667.     # Now package it all up using tar
  668.     print ("nnTARing up all files ...n");
  669.     pchdir ("$targetdir/..");
  670.     $zipname = $targetdir . ".tar";
  671.     $platformzipname = $zipname;
  672.     psystem ("tar -cvf $platformzipname $zipfiles");
  673.     # Finally compress the files
  674.     print ("Compressing $platformzipname ...n");
  675.     psystem ("gzip $platformzipname");
  676. }
  677. #
  678. #  psystem subroutine both prints and executes a system command.
  679. #
  680. sub psystem() {
  681.     print("$_[0]n");
  682.     system($_[0]);
  683.     }
  684. #
  685. #  chdir subroutine both prints and executes a chdir
  686. #
  687. sub pchdir() {
  688.     print("chdir $_[0]n");
  689.     chdir $_[0];
  690.     }
  691. sub change_windows_project_for_ICU() {
  692.     my ($thefile) = @_;
  693.     print "nConverting Windows Xerces library project ($thefile) for ICU usage...";
  694.     my $thefiledotbak = $thefile . ".bak";
  695.     rename ($thefile, $thefiledotbak);
  696.     open (FIZZLE, $thefiledotbak);
  697.     open (FIZZLEOUT, ">$thefile");
  698.     while ($line = <FIZZLE>) {
  699.         if ($line =~ /Win32 Debug/) {
  700.             $icuuc = "icuucd";
  701.             }
  702.         if ($line =~ /Win32 Release/) {
  703.             $icuuc = "icuuc";
  704.             }
  705.         $line =~ s[/D "PROJ_XMLPARSER"][/I "$ICUROOT\include" /D "PROJ_XMLPARSER"];
  706.         $line =~ s[Debug/xerces-c_1D.lib"][Debug/xerces-c_1D.lib" /libpath:"$ICUROOT\lib" /libpath:"$ICUROOT\source\data"];
  707.         $line =~ s[Release/xerces-c_1.lib"][Release/xerces-c_1.lib" /libpath:"$ICUROOT\lib" /libpath:"$ICUROOT\source\data"];
  708.         $line =~ s/XML_USE_WIN32_TRANSCODER/XML_USE_ICU_TRANSCODER/g;
  709.         $line =~ s/user32.lib/user32.lib $icuuc.lib icudata.lib/g;
  710.         $line =~ s/Transcoders\Win32\Win32TransService.cpp/Transcoders\ICU\ICUTransService.cpp/g;
  711.         $line =~ s/Transcoders\Win32\Win32TransService.hpp/Transcoders\ICU\ICUTransService.hpp/g;
  712.         print FIZZLEOUT $line;
  713.     }
  714.     close (FIZZLEOUT);
  715.     close (FIZZLE);
  716.     unlink ($thefiledotbak);
  717. }
  718. #
  719. # This subroutine is used to munge the XercesLib project file to remove all
  720. # traces of WinSock based NetAccessor. Once no NetAccessor is specified, the
  721. # project file is configured for using the 'FileOnly' NetAccessor.
  722. #
  723. # For this function to work the assumption is that project file in CMVC is
  724. # preconfigured to already use the WinSock based NetAccessor. So, the changes
  725. # that need to be done are:
  726. #   - to remove references to any #defines
  727. #   - to remove references to wsock32.lib
  728. #   - to remove references to the source files for the WinSock based NetAccessor.
  729. #
  730. sub changeWindowsProjectForFileOnlyNA() {
  731.     my ($thefile) = @_;
  732.     print "nConfiguring Xerces library project ($thefile) for FileOnly NetAccessor...";
  733.     my $thefiledotbak = $thefile . ".bak";
  734.     rename ($thefile, $thefiledotbak);
  735.     open (PROJFILEIN, $thefiledotbak);
  736.     open (PROJFILEOUT, ">$thefile");
  737.     while ($aline = <PROJFILEIN>) {
  738.         # By skipping over lines between the NetAccessors group
  739.         # we can references to the WinSock based NetAccessor files.
  740.         if ($aline =~ m/^# Begin Group "NetAccessors"/g) {
  741.             # ...found it. Write out the line as a place holder. Also...
  742.             print PROJFILEOUT $aline;
  743.             # ...preserve the next two lines.
  744.             $aline = <PROJFILEIN>;
  745.             print PROJFILEOUT $aline;
  746.             $aline = <PROJFILEIN>;
  747.             print PROJFILEOUT $aline;
  748.             # Skip over the lines till you hit the WinSock NetAccessor 'End Group'.
  749.             while ($aline = <PROJFILEIN>) { # read the next line
  750.                 last if ($aline =~ m/^# End Group/g);
  751.             }
  752.             # We need to preserve the 'End Group' line. The last statement of the
  753.             # enclosing while loop prints it out.
  754.         }
  755.         # From the remaining lines, remove any references to the #defines and
  756.         # the WinSock library.
  757.         $aline =~ s//D "XML_USE_NETACCESSOR_WINSOCK" //g;  # "
  758.         $aline =~ s/wsock32.lib //g;
  759.         print PROJFILEOUT $aline;
  760.     }
  761.     close (PROJFILEOUT);
  762.     close (PROJFILEIN);
  763.     unlink ($thefiledotbak);
  764. }