blob: 2c96136c4d3077178c9e54748c9621f1762ca822 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
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");
require "getopt.pl";
require 5.0;
$|=1; # Force a flush after every print
#
# Setup global variables
#
&Getopt('sopcxmntrb');
my $XERCESCROOT = $opt_s;
my $targetdir = $opt_o;
my $ICUROOT = $ENV{'ICUROOT'};
my $ICUIsPresent = (($opt_t =~ m/icu/i || $opt_m =~ m/icu/i) && length($ICUROOT) > 0);
my $ICUResourceDir = "$XERCESCROOT/src/xercesc/util/MsgLoaders/ICU/resources";
# Check for the environment variables and exit if error
if (!length($XERCESCROOT) || !length($targetdir) || (length($opt_h) > 0) ) {
print ("Usage is: packageBinaries <options>\n");
print (" where options are:\n");
print (" -s <source_directory>\n");
print (" -o <target_directory>\n");
print (" -c <C compiler name> (e.g. gcc, cc, xlc_r, VC6, VC7, VC7.1, VC8, ecl or icl)\n");
print (" -x <C++ compiler name> (e.g. g++, CC, aCC, c++, xlC_r, cl, ecl, ecc, icl, VC6, VC7, VC7.1 or VC8)\n");
print (" -m <message loader> can be 'inmem' \(default\), 'icu' or 'iconv'\n");
print (" -n <net accessor> can be 'fileonly' or 'socket' \(default\)\n");
print (" -t <transcoder> can be 'icu' or 'native' \(default\)\n");
print (" -r <thread option> can be 'pthread' \(default\)or 'dce' (only used on HP-11)\n");
print (" -b <bitsToBuild> (accepts '64', '32')\n");
print (" -j suppress building of ICU (speeds up builds when debugging)\n");
print (" -h to get help on these commands\n\n");
print ("Example: Under unix's\n");
print (" perl packageBinaries.pl -s \$HOME/xerces-c-src2_8");
print (" -o \$HOME/xerces-c2_8-linux -c gcc -x g++ -m inmem -n fileonly -t native\n\n");
print ("Example: Under Windows\n");
print (" perl packageBinaries.pl -s \\xerces-c-src2_8");
print (" -o\\xerces-c2_5-win32 [-n fileonly] [-t icu]\n\n");
print ("Note:\n");
print (" Under Windows, by default the XercesLib project files is\n");
print (" configured to use Win32 resource file based message loader,\n");
print (" WinSocket based net accessor and native Win32 based transcoder.\n");
print (" The two options mentioned in the example above are the only\n");
print (" options relevant under Windows on the command line for this script.\n");
exit(-1);
}
if (($opt_t =~ m/icu/i || $opt_m =~ m/icu/i) && (length($ICUROOT) == 0)) {
print "You have specified an ICU build but you have not defined your ICU install directory.\n";
print "To build with ICU, you must set an environment variable called ICUROOT\n";
print "Cannot proceed any further.\n";
exit(-1);
}
# Check if the source directory exists or not
if (!(-e $XERCESCROOT)) {
print ("The directory $XERCESCROOT does not exist. Cannot proceed any further.\n");
exit(-1);
}
# Check if the target directory exists, exit if it does
if (-e $targetdir) {
print ("Error: The target directory \'$targetdir\' already exists.\n");
print (" You must start with a clean directory to package your product.\n");
exit(1);
}
#
# Find out the platform from 'uname -s'
#
open(PLATFORM, "uname -s|");
$platform = <PLATFORM>;
chomp($platform);
close (PLATFORM);
#Fix the backslashes on the Windows platform
$XERCESCROOT =~ s/\\/\//g;
$ICUROOT =~ s/\\/\//g;
$targetdir =~ s/\\/\//g;
print "Packaging binaries for \`" . $platform . "\` in " . $targetdir . " ...\n"; # "
#Construct the name of the zip file by extracting the last directory name
$zipfiles = $targetdir;
$zipfiles =~ s/.*(\/|\\)([\w-\.]*)$/$2/g;
$zipfiles = $zipfiles . "/*";
#
# WINDOWS builds happen here, as long as they
# aren't using gcc...
#
# Tasks:
#
# Preparation
# Initialize Vars
# Make the target directory and its main subdirectories
# 'FileOnly' NetAccessor
#
# Build
# ICU and/or Resource bundle library for ICUMsgLoader
# Xerces-C libraries, samples and tests
#
# Population
# include
# ICU and/or ICUMsgLoader
# Xerces-C libraries, samples and tests
# Documentation
#
if ($platform =~ m/Windows/ || ($platform =~ m/CYGWIN/ && !($opt_c =~ m/gcc/))) {
#
# Preparation Begin
#
# Preparation::Initialize Vars
#
my $PlatformName = 'Win32';
my $DevStudioVer = "6.0";
my $VCBuildDir = "VC6";
my $Transcoder = 0;
my $MsgLoader = 0;
my $ReleaseBuildDir = undef;
my $DebugBuildDir = undef;
my $ProjectDir = undef;
if ($opt_b eq "64") {
$PlatformName = 'Win64';
}
if ($opt_x eq "" || $opt_x =~ m/VC6/i )
{
$DevStudioVer = "6.0";
$VCBuildDir = "VC6";
$ProjectDir = "$XERCESCROOT/Projects/Win32/$VCBuildDir/xerces-all";
}
elsif ($opt_x =~ m/VC7.1/i )
{
$DevStudioVer = "7.1";
$VCBuildDir = "VC7.1";
$ProjectDir = "$XERCESCROOT/Projects/Win32/$VCBuildDir/xerces-all";
}
elsif ($opt_x =~ m/VC7/i )
{
$DevStudioVer = "7.0";
$VCBuildDir = "VC7";
$ProjectDir = "$XERCESCROOT/Projects/Win32/$VCBuildDir/xerces-all";
}
elsif ($opt_x =~ m/VC8/i )
{
$DevStudioVer = "8.0";
$VCBuildDir = "VC8";
$ProjectDir = "$XERCESCROOT/Projects/Win32/$VCBuildDir/xerces-all";
}
elsif ($opt_x =~ m/ecl/i || $opt_x =~ m/icl/i )
{
$DevStudioVer = "6.1";
$VCBuildDir = "VC6";
$PlatformName = "Win64";
$ProjectDir = "$XERCESCROOT/Projects/Win32/$VCBuildDir/xerces-all/all";
}
else
{
print ("Error: Invalid compilers used \n");
print ("-x <C++ compiler name> VC6, VC7, VC7.1, VC8, ecl and icl \n");
exit(1);
}
$ReleaseBuildDir = "$XERCESCROOT/Build/$PlatformName/$VCBuildDir/Release";
$DebugBuildDir = "$XERCESCROOT/Build/$PlatformName/$VCBuildDir/Debug";
if ($opt_t =~ m/icu/i ) {
$Transcoder = 1;
}
if ($opt_m =~ m/icu/i) {
$MsgLoader = 1;
}
print "PlatformName =$PlatformName\n";
print "DevStudioVer =$DevStudioVer\n";
print "VCBuildDir =$VCBuildDir\n";
print "ReleaseBuildDir =$ReleaseBuildDir\n";
print "DebugBuildDir =$DebugBuildDir\n";
print "ProjectDir =$ProjectDir\n";
print "Transcoder =$Transcoder\n";
print "MsgLoader =$MsgLoader\n";
if (-e "$targetdir.zip") {
print ("Deleting old target file \'$targetdir.zip\' \n");
unlink("$targetdir.zip");
}
#
# Preparation::Make the target directory and its main subdirectories
#
createCommonDir();
# windows specifics
psystem ("mkdir $targetdir/samples/Projects");
psystem ("mkdir $targetdir/samples/Projects/Win32");
psystem ("mkdir $targetdir/samples/Projects/Win32/$VCBuildDir");
#
# Preparation:: 'FileOnly' NetAccessor
# has been specified, then the project files have to be changed.
#
if ($opt_n =~ m/fileonly/i) {
if ($DevStudioVer eq "6.0") {
changeWindowsProjectForFileOnlyNA("$XERCESCROOT/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp");
} elsif ($DevStudioVer eq "7.0") {
changeWindowsProjectForFileOnlyNA_VC7("$XERCESCROOT/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj");
} elsif ($DevStudioVer eq "7.1") {
changeWindowsProjectForFileOnlyNA_VC7("$XERCESCROOT/Projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj");
} elsif ($DevStudioVer eq "8.0") {
changeWindowsProjectForFileOnlyNA_VC7("$XERCESCROOT/Projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj");
}
#else: for now we do not build FO with ecl
}
#
# Build Begin
#
# Build::ICU and/or Resource bundle library for ICUMsgLoader
#
if ($ICUIsPresent) {
# Make the icu dlls
if (!(length($opt_j) > 0)) {
#Clean up all the dependency files, causes problems for nmake
print ("Building ICU from $ICUROOT ...\n");
pchdir ("$ICUROOT");
psystem ("del /s /f *.dep *.ncb *.plg *.opt");
# we ship both debug and release dlls
if ($DevStudioVer eq "6.0") {
pchdir ("$ICUROOT/source/allinone");
if ($PlatformName eq "Win64")
{
psystem("msdev allinone.dsw /MAKE \"all - $PlatformName Release\" /USEENV /REBUILD /OUT buildlog_release.txt");
psystem("msdev allinone.dsw /MAKE \"all - $PlatformName Debug\" /USEENV /REBUILD /OUT buildlog_debug.txt");
}
else
{
psystem("msdev allinone.dsw /MAKE \"all - $PlatformName Release\" /REBUILD /OUT buildlog_release.txt");
psystem("msdev allinone.dsw /MAKE \"all - $PlatformName Debug\" /REBUILD /OUT buildlog_debug.txt");
}
psystem("type buildlog_release.txt");
psystem("type buildlog_debug.txt");
} elsif ($DevStudioVer eq "7.0") {
pchdir ("$ICUROOT/source/allinone");
psystem("devenv /rebuild Release /out buildlog_release.txt /project all allinone.sln");
psystem("type buildlog_release.txt");
psystem("devenv /rebuild debug /out buildlog_debug.txt /project all allinone.sln");
psystem("type buildlog_debug.txt");
} elsif ($DevStudioVer eq "7.1") {
# ICU only has allinone.sln for VC7.0
# So the build with ICU on VC7.1 may fail until the VC7.1 version is available
pchdir ("$ICUROOT/source/allinone");
psystem("devenv.com allinone.sln /rebuild Release /out buildlog_release.txt");
psystem("type buildlog_release.txt");
psystem("devenv.com allinone.sln /rebuild debug /out buildlog_debug.txt");
psystem("type buildlog_debug.txt");
} elsif ($DevStudioVer eq "8.0") {
# ICU only has allinone.sln for VC7.0
# So the build with ICU on VC8.0 may fail until the VC8.0 version is available
pchdir ("$ICUROOT/source/allinone");
psystem("devenv.com allinone.sln /rebuild Release /out buildlog_release.txt");
psystem("type buildlog_release.txt");
psystem("devenv.com allinone.sln /rebuild debug /out buildlog_debug.txt");
psystem("type buildlog_debug.txt");
} else { #"6.1"
pchdir ("$ICUROOT/source/allinone/all");
#ship release dlls only
psystem("nmake -f all_win64_release.mak \"CFG=all - $PlatformName Release\" CPP=$opt_x.exe >buildlog_release.txt 2>&1");
psystem("type buildlog_release.txt");
#debug is disabled
#psystem("nmake -f all_win64_debug.mak \"CFG=all - $PlatformName Debug\" CPP=$opt_x.exe >buildlog_debug.txt 2>&1");
#psystem("type buildlog_debug.txt");
}
} #$opt_j
#
# Build resource bundle library for ICUMsgLoader
# this can only be built when ICUIsPresent
if ($opt_m =~ m/icu/i) {
pchdir ("$ICUResourceDir");
# clean up intermediate files to make it rebuildable
psystem ("del /s /f *.DLL *.dll *.res *.DAT *.lib *.obj");
psystem( "nmake /f resources.mak > buildlog.txt 2>&1 ");
system("type buildlog.txt");
# to follow 2 digits convention
psystem("ren XercesMessages2_8_0.DLL XercesMessages2_8.DLL");
psystem("ren XercesMessages2_8_0.lib XercesMessages2_8.lib");
}
#
# Adjust project file
#
if ($DevStudioVer eq "6.0") {
change_windows_project_for_ICU("$XERCESCROOT/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp", $Transcoder , $MsgLoader);
} elsif ($DevStudioVer eq "7.0") {
change_windows_project_for_ICU_VC7("$XERCESCROOT/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj", $Transcoder , $MsgLoader);
} elsif ($DevStudioVer eq "7.1") {
change_windows_project_for_ICU_VC7("$XERCESCROOT/Projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj", $Transcoder , $MsgLoader);
} elsif ($DevStudioVer eq "8.0") {
change_windows_project_for_ICU_VC7("$XERCESCROOT/Projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj", $Transcoder , $MsgLoader);
} else { # "6.1"
change_windows_makefile_for_ICU("$XERCESCROOT/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak", $Transcoder, $MsgLoader);
}
} #$ICUIsPresent
#
# Build::Make Xerces-C libraries, samples and tests
#
# Clean up all the dependency files, causes problems for nmake
# Also clean up all MSVC-generated project files that just cache the IDE state
pchdir ("$XERCESCROOT");
psystem ("del /s /f *.dep *.ncb *.plg *.opt");
#
# release debug
# ===========================================================================
# vc6 vc7 ecl vc6 vc7 ecl
# ===========================================================================
# xercesc yes yes yes yes yes no
# depdom yes yes yes yes yes no
# samples yes yes yes no no no
# tests yes yes yes no no no
#
pchdir ("$ProjectDir");
if ($DevStudioVer eq "6.0") {
if ($PlatformName eq "Win64") { # /USEENV
psystem("msdev xerces-all.dsw /MAKE \"all - $PlatformName Release\" /USEENV /REBUILD /OUT buildlog_release.txt");
psystem("msdev xerces-all.dsw /MAKE \"XercesLib - $PlatformName Debug\" /USEENV /REBUILD /OUT buildlog_debug.txt");
psystem("msdev xerces-all.dsw /MAKE \"XercesDeprecatedDOMLib - $PlatformName Debug\" /USEENV /REBUILD /OUT buildlog_depdom_debug.txt");
}
else {
psystem("msdev xerces-all.dsw /MAKE \"all - $PlatformName Release\" /REBUILD /OUT buildlog_release.txt");
psystem("msdev xerces-all.dsw /MAKE \"XercesLib - $PlatformName Debug\" /REBUILD /OUT buildlog_debug.txt");
psystem("msdev xerces-all.dsw /MAKE \"XercesDeprecatedDOMLib - $PlatformName Debug\" /REBUILD /OUT buildlog_depdom_debug.txt");
}
} elsif ($DevStudioVer eq "7.0") {
psystem("devenv /rebuild Release /out buildlog_release.txt /project all xerces-all.sln");
psystem("devenv /rebuild debug /out buildlog_debug.txt /project XercesLib xerces-all.sln");
psystem("devenv /rebuild debug /out buildlog_depdom_debug.txt /project XercesDeprecatedDOMLib xerces-all.sln");
} elsif ($DevStudioVer eq "7.1") {
psystem("devenv /rebuild Release /out buildlog_release.txt /project all xerces-all.sln");
psystem("devenv /rebuild debug /out buildlog_debug.txt /project XercesLib xerces-all.sln");
psystem("devenv /rebuild debug /out buildlog_depdom_debug.txt /project XercesDeprecatedDOMLib xerces-all.sln");
psystem("devenv /rebuild debug /out buildlog_depdom_debug.txt /project XercesDeprecatedDOMLib xerces-all.sln");
} elsif ($DevStudioVer eq "8.0") {
psystem("devenv /rebuild Release /out buildlog_release.txt /project all xerces-all.sln");
psystem("devenv /rebuild debug /out buildlog_debug.txt /project XercesLib xerces-all.sln");
psystem("devenv /rebuild debug /out buildlog_depdom_debug.txt /project XercesDeprecatedDOMLib xerces-all.sln");
} else { # "6.1"
psystem( "nmake -f all.mak \"CFG=all - $PlatformName Release\" CPP=$opt_x.exe >buildlog_release.txt 2>&1");
}
system("type buildlog_release.txt");
system("type buildlog_debug.txt");
system("type buildlog_depdom_debug.txt");
#
# Population Begin
#
# Population::include
#
pchdir ($targetdir);
print "\nBuild is being copied from \'" . $ReleaseBuildDir . "\'";
populateInclude();
#
# Population::ICU and/or ICUMsgLoader
#
if ($ICUIsPresent) {
print ("\n\nCopying icu outputs ...\n");
# Copy the ICU dlls and libs
psystem("cp -fv $ICUROOT/bin/icuuc32.dll $targetdir/bin");
psystem("cp -fv $ICUROOT/bin/icuuc32d.dll $targetdir/bin");
# it seems icudt32*.DLL is generated (upper case dll)
# but just case, try lower case .dll as well
psystem("cp -fv $ICUROOT/bin/icudt32*.DLL $targetdir/bin");
psystem("cp -fv $ICUROOT/bin/icudt32*.dll $targetdir/bin");
psystem("cp -fv $ICUROOT/lib/icuuc.lib $targetdir/lib");
psystem("cp -fv $ICUROOT/lib/icuucd.lib $targetdir/lib");
psystem("cp -Rfv $ICUROOT/include/* $targetdir/include");
# Copy the Resouce Bundle for ICUMsgLoader
if ( $opt_m =~ m/icu/i) {
pchdir ("$ICUResourceDir");
psystem("cp -fv XercesMessages*.DLL $ReleaseBuildDir");
psystem("cp -fv XercesMessages*.lib $ReleaseBuildDir");
psystem("cp -fv XercesMessages*.res $targetdir/msg");
psystem("cp -fv XercesMessages*.DLL $targetdir/bin");
psystem("cp -fv XercesMessages*.lib $targetdir/lib");
}
} #ICUIsPresent
#
# Population::Xerces-c
#
print ("\n\nCopying Xerces-c outputs ...\n");
psystem("cp -fv $ReleaseBuildDir/*.dll $targetdir/bin");
psystem("cp -fv $ReleaseBuildDir/*.exe $targetdir/bin");
psystem("cp -fv $ReleaseBuildDir/xerces-c_*.lib $targetdir/lib");
psystem("cp -fv $ReleaseBuildDir/xerces-depdom_*.lib $targetdir/lib");
psystem("cp -fv $DebugBuildDir/*.dll $targetdir/bin");
psystem("cp -fv $DebugBuildDir/xerces-c_*.lib $targetdir/lib");
psystem("cp -fv $DebugBuildDir/xerces-depdom_*.lib $targetdir/lib");
# Populate the etc output directory like config.status and the map file
print ("\n\nCopying misc output to etc ...\n");
psystem("cp -fv $XERCESCROOT/Build/Win32/$VCBuildDir/Release/obj/*.map $targetdir/etc");
# Populate the samples directory
populateSamples();
# windows specifics: sample projects
psystem("cp -Rfv $XERCESCROOT/samples/Projects/Win32/$VCBuildDir/* $targetdir/samples/Projects/Win32/$VCBuildDir");
# Populate the scripts and docs directory
populateMisc();
# Now package it all up using ZIP
pchdir ("$targetdir/..");
print ("\n\nZIPping up all files ...\n");
$zipname = $targetdir . ".zip";
psystem ("zip -r $zipname $zipfiles");
}
#
# End of Windows Builds.
#
# UNIX builds happen here ...
#
# Tasks:
#
# Preparation
# Initialize Vars
# Make the target directory and its main subdirectories
#
# Build
# ICU and/or Resource bundle library for ICUMsgLoader
# Xerces-C libraries, samples and tests
#
# Population
# include
# ICU and/or ICUMsgLoader
# Xerces-C libraries, samples and tests
# Documentation
#
if ( ($platform =~ m/AIX/i) ||
($platform =~ m/HP-UX/i) ||
($platform =~ m/BeOS/i) ||
($platform =~ m/SunOS/i) ||
($platform =~ m/Linux/i) ||
($platform =~ m/ptx/i) ||
($platform =~ m/Darwin/i) ||
($platform =~ m/CYGWIN/ && ($opt_c =~ m/gcc/))) {
#
# Preparation Begin
#
# Population::Initialize Vars
#
# Echo the current PATH to see what compiler it picks up
psystem ("echo PATH=$ENV{'PATH'}");
# Set defaults for platform-specific options.
if ($platform =~ m/AIX/i) {
$platform = "aix";
if ($opt_c eq "") {$opt_c = "xlc_r"; }
if ($opt_x eq "") {$opt_x = "xlC_r"; }
if ($opt_x eq "xlC_rv5compat") {
$icu_cxxflags = '"-w -O2 -qmaxmem=-1 -qnamemangling=v5"';
$icu_cflags = '"-w -O2 -qmaxmem=-1 -qnamemangling=v5"';
} else {
$icu_cxxflags = '"-w -O2 -qmaxmem=-1"';
$icu_cflags = '"-w -O2 -qmaxmem=-1"';
}
if ($opt_m =~ m/icu/i) {
$ENV{'LIBPATH'}="$ICUROOT/lib:$XERCESCROOT/lib:$ENV{'LIBPATH'}";
$ENV{'PATH'}="$ICUROOT/bin:$ENV{'PATH'}";
}
psystem ("echo LIBPATH=$ENV{'LIBPATH'}");
}
# Mac OS X
if ($platform =~ m/Darwin/i) {
$platform = "macosx";
# Set option defaults
if ($opt_c eq "") {$opt_c = 'cc'; }
if ($opt_x eq "") {$opt_x = 'g++'; }
if ($opt_n eq "") {$opt_n = 'native'; } # native net accessor
if ($opt_t eq "") {$opt_t = 'native'; } # native transcoder
# Code for mac os specific tools
if ($TAR eq "") {
$TAR = 'gnutar';
}
if ($MAKE eq "") {
$MAKE = 'make';
}
} # Mac OS
if ($platform eq 'HP-UX') {
# Find out the operating system version from 'uname -r'
open(OSVERSION, "uname -r|");
$osversion = <OSVERSION>;
chomp($osversion);
close (OSVERSION);
$platform = 'hp-11' if ($osversion =~ m/11\./);
$platform = 'hp-10' if ($osversion =~ m/10\./);
if ($opt_c eq "") {$opt_c = "cc"; }
if ($opt_x eq "") {
$opt_x = "CC";
if ($platform eq "hp-11") {
$opt_x = "aCC";
}
}
if ($opt_m eq "") {
$opt_m = "inmem";
}
$icu_cxxflags = '"-w +O2 +Ofltacc"';
$icu_cflags = '"-w +O2 +Ofltacc"';
if ($opt_m =~ m/icu/i) {
$ENV{'SHLIB_PATH'}="$ICUROOT/lib:$XERCESCROOT/lib:$ENV{'SHLIB_PATH'}";
$ENV{'PATH'}="$ICUROOT/bin:$ENV{'PATH'}";
}
psystem ("echo SHLIB_PATH=$ENV{'SHLIB_PATH'}");
}# HP-UX
if ($platform =~ m/BeOS/i) {
$platform = "beos";
if ($opt_c eq "") {$opt_c = "gcc";}
if ($opt_x eq "") {$opt_x = "g++";}
$icu_cxxflags = '"-w -O"';
$icu_cflags = '"-w -O"';
psystem ("echo LIBRARY_PATH=$ENV{'LIBRARY_PATH'}");
}# BeOS
if ($platform =~ m/Linux/i) {
$platform = "linux";
if ($opt_c eq "") {$opt_c = "gcc";}
if ($opt_x eq "") {$opt_x = "g++";}
if ($opt_x eq "icc"){
$icu_cxxflags = '"-w -O0"';
$icu_cflags = '"-w -O0"';
} else {
$icu_cxxflags = '"-w -O"';
$icu_cflags = '"-w -O"';
}
if ($opt_m =~ m/icu/i) {
$ENV{'LD_LIBRARY_PATH'}="$ICUROOT/lib:$XERCESCROOT/lib:$ENV{'LD_LIBRARY_PATH'}";
$ENV{'PATH'}="$ICUROOT/bin:$ENV{'PATH'}";
}
psystem ("echo LD_LIBRARY_PATH=$ENV{'LD_LIBRARY_PATH'}");
} # Linux
if ($platform =~ m/SunOS/i) {
$platform = "solaris";
if ($opXt_c eq "") {$opt_c = "cc";}
if ($opt_x eq "") {$opt_x = "CC";}
if ($opt_m =~ m/icu/i) {
$ENV{'LD_LIBRARY_PATH'}="$ICUROOT/lib:$XERCESCROOT/lib:$ENV{'LD_LIBRARY_PATH'}";
$ENV{'PATH'}="$ICUROOT/bin:$ENV{'PATH'}";
}
$icu_cxxflags = '"-w -O3"';
$icu_cflags = '"-w -xO3"';
psystem ("echo LD_LIBRARY_PATH=$ENV{'LD_LIBRARY_PATH'}");
} # SunOS
if ($platform =~ m/ptx/i) {
# Check if the patches have been applied or not
$platform = "ptx";
if (!(-d "$XERCESCROOT/src/xercesc/util/Platforms/PTX")) {
print ("Error: Could not locate PTX-specific XML4C directory.\n");
print (" The PTX-specific patches must be applied to both XML4C and ICU before a build can succeed.\n");
exit(-1);
}
# Generally speaking, ICU must be built, before XML4C can be built, for ptx.
# If this case causes problems, we can revisit it in the future. Right now,
# we fail only if ICUROOT is defined but mh-ptx is not present.
if ($ICUIsPresent) {
if (!(-e "$ICUROOT/source/config/mh-ptx")) {
print ("Error: Could not locate PTX-specific ICU files.\n");
print (" The PTX-specific patches must be applied to both XML4C and ICU before a build can succeed.\n");
exit(-1);
}
}
$icu_cxxflags = '"-w -0"';
$icu_cflags = '"-w -0"';
# XMLINSTALL is a ptx-port-specific variable used for manipulating where the files are installed.
if (!length($ENV{'XMLINSTALL'})) {
print ("XMLINSTALL has not been explicitly defined. Setting it to \'$targetdir\'.\n");
$ENV{'XMLINSTALL'} = $targetdir;
}
$XMLINSTALL = $ENV{'XMLINSTALL'};
} #ptx
if(($platform =~ m/CYGWIN/) && ($opt_c =~ m/gcc/)) {
$MAKE = "make";
$platform = "CYGWIN";
}
# Set defaults for platform-independent options.
if ($opt_m eq "") {$opt_m = "inmem"; } # In memory message loader.
if ($opt_n eq "") {$opt_n = "socket"; } # Socket based net accessor.
if ($opt_t eq "") {$opt_t = "native"; } # Native transcoding service.
if ($opt_b eq "") {$opt_b = "32"; } # bitstobuild.
# Set defaults for platform tools
if ($TAR eq "") {
$TAR = 'tar';
}
if ($MAKE eq "") {
$MAKE = 'gmake';
}
# Check if the target directories already exist or not
if (-e $targetdir.".tar") {
print ("Error: The target file \'$targetdir.tar\' already exists.\n");
print (" You must delete the file \'$targetdir.tar\' to package your product.\n");
exit(1);
}
if (-e $srctargetdir.".tar") {
print ("Error: The target file \'$srctargetdir.tar\' already exists.\n");
print (" You must delete the file \'$srctargetdir.tar\' to package your product.\n");
exit(1);
}
#
# Preparation::Make the target directory and its main subdirectories
#
createCommonDir();
#
# Build Begin
#
# Build::ICU and/or Resource bundle library for ICUMsgLoader
#
if ($ICUIsPresent ) {
# Make the icu dlls
if (!(length($opt_j) > 0)) {
print ("Building ICU from $ICUROOT ...\n");
# First make the ICU files executable
pchdir ("$ICUROOT/source");
psystem ("chmod +x configure config.*");
psystem ("chmod +x install-sh");
$ENV{'ICU_DATA'} = "$ICUROOT/data";
if ($platform =~ m/ptx/i) {
psystem ("chmod +x runConfigureICU");
psystem ("sh ./runConfigureICU PTX");
}
elsif ($platform eq 'hp-11') {
my $cXX = $opt_x;
if ($opt_x eq "aCC05") {
$cXX = "aCC";
}
if ($opt_b eq "32") {
psystem ("CC=$opt_c CXX=$cXX CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT --disable-64bit-libs");
}
else {
psystem ("CC=$opt_c CXX=$cXX CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT");
}
}elsif ($platform eq 'aix') {
my $cXX = $opt_x;
if ($opt_x eq "xlC_rv5compat") {
$cXX = "xlC_r";
}
if ($opt_b eq "32") {
psystem ("CC=$opt_c CXX=$cXX CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT --disable-64bit-libs");
}
else {
psystem ("CC=$opt_c CXX=$cXX CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT");
}
}elsif ($platform eq 'solaris') {
if ($opt_b eq "32") {
psystem ("CC=$opt_c CXX=$opt_x CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT --disable-64bit-libs");
}
else {
$icu_cxxflags = '"-w -O3 -xarch=v9"';
$icu_cflags = '"-w -xO3 -xarch=v9"';
psystem ("CC=$opt_c CXX=$opt_x CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT");
}
} else {
# set the 32 bit or 64 bit
if ($opt_b eq "32") {
psystem ("CC=$opt_c CXX=$opt_x CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT --disable-64bit-libs");
}
else {
psystem ("CC=$opt_c CXX=$opt_x CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT");
}
}
psystem ("$MAKE clean"); # Clean up the build, may want to comment this line out!
psystem ("rm -f $ICUROOT/data/*.o"); # make clean is not enough
psystem ("rm -f $ICUROOT/data/*.c"); # same for .c files
psystem ("$MAKE"); # This will take a long time!
psystem ("$MAKE install"); # Make this separate since this breaks on Solaris
} #opt_j
#
# resource bundle library for ICUMsgLoader is built by Makefile
# clean up intermediate files to make it rebuildable
#
if ($opt_m =~ m/icu/i) {
pchdir ("$ICUResourceDir");
psystem ("rm -f *.o *.res *.c *.lst *dll.mak");
}
} #$ICUIsPresent
# For ptx, ICUROOT must now be set to XMLINSTALL for further work.
if ($platform =~ m/ptx/i) {
$ENV{'ICUROOT'} = $ENV{'XMLINSTALL'};
}
#
# Build::Make Xerces-C libraries, samples and tests
#
print("\n\nBuild the xerces-c library ...\n");
pchdir ("$XERCESCROOT/src/xercesc");
psystem ("chmod +x run* con* install-sh");
if (length($opt_r) > 0) {
psystem ("./runConfigure -p$platform -c$opt_c -x$opt_x -m$opt_m -n$opt_n -t$opt_t -r$opt_r -b$opt_b");
} else {
psystem ("./runConfigure -p$platform -c$opt_c -x$opt_x -m$opt_m -n$opt_n -t$opt_t -b$opt_b");
}
psystem ("$MAKE clean"); # May want to comment this line out to speed up
psystem ("$MAKE");
#
# Move ICU libs into lib dir, so samples will link. This matches the structure of
# the eventual binary packaging, even though we are doing it in the build directory.
#
if ($ICUIsPresent) {
copyICUOnUNIX("$XERCESCROOT/lib");
# src/xercesc/util/MsgLoader/ICU/resources/Makefile has built and
# copied the message library to $XERCESCROOT/lib, we need copy over here.
}# $ICUIsPresent
# build the samples
print("\n\nBuild the samples ...\n");
pchdir ("$XERCESCROOT/samples");
psystem ("chmod +x run* con* install-sh");
psystem ("./runConfigure -p$platform -c$opt_c -x$opt_x -b$opt_b");
psystem ("$MAKE clean"); # May want to comment this line out to speed up
psystem ("$MAKE");
# build the tests
print("\n\nBuild the tests ...\n");
pchdir ("$XERCESCROOT/tests");
psystem ("chmod +x run* con* install-sh");
psystem ("./runConfigure -p$platform -c$opt_c -x$opt_x -b$opt_b");
psystem ("$MAKE clean"); # May want to comment this line out to speed up
psystem ("$MAKE");
pchdir ($targetdir);
#
# Population Begin
#
# Population::include
#
populateInclude();
if ($ICUIsPresent) {
print "\nICU files are being copied from \'$ICUROOT\'";
psystem("cp -Rf $ICUROOT/include/* $targetdir/include");
}
#
# Population::ICU and/or ICUMsgLoader
#
#
# Create symbolic link for those ICU libraries
#
if ($ICUIsPresent) {
# ICU
copyICUOnUNIX("$targetdir/lib");
# Copy the Resouce Bundle for ICUMsgLoader
if ( $opt_m =~ m/icu/i) {
print ("\n\nCopying ICU message bundles ...\n");
psystem("cp -f $XERCESCROOT/msg/XercesMessages*.res $targetdir/msg");
psystem("cp -f $XERCESCROOT/lib/libXercesMessages28.0.so .");
psystem("find . -name 'libXercesMessages28.0.so' -exec ln -s {} libXercesMessages28.so \\;");
psystem("find . -name 'libXercesMessages28.so' -exec ln -s {} libXercesMessages.so \\;");
psystem("cp -f $XERCESCROOT/lib/libXercesMessages.so.28.0 .");
psystem("find . -name 'libXercesMessages.so.28.0' -exec ln -s {} libXercesMessages.so.28 \\;");
psystem("find . -name 'libXercesMessages.so.28' -exec ln -s {} libXercesMessages.so \\;");
psystem("cp -f $XERCESCROOT/lib/libXercesMessages.sl.28.0 .");
psystem("find . -name 'libXercesMessages.sl.28.0' -exec ln -s {} libXercesMessages.sl.28 \\;");
psystem("find . -name 'libXercesMessages.sl.28' -exec ln -s {} libXercesMessages.sl \\;");
psystem("cp -f $XERCESCROOT/lib/libXercesMessages28.0.a .");
psystem("find . -name 'libXercesMessages28.0.a' -exec ln -s {} libXercesMessages28.a \\;");
psystem("find . -name 'libXercesMessages28.a' -exec ln -s {} libXercesMessages.a \\;");
}
}
#
# Population::Xerces-c
#
print ("\n\nCopying binary outputs ...\n");
psystem("cp -Rf $XERCESCROOT/bin/* $targetdir/bin");
psystem("rm -rf $targetdir/bin/obj");
# Populate the library output directory
print ("\n\nCopying library outputs ...\n");
pchdir ("$targetdir/lib");
psystem("rm -f libxerces-c* ");
if ((-e "$XERCESCROOT/lib/libxerces-c.so.28.0" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-c.so.28.0 .");
psystem("ln -s libxerces-c.so.28.0 libxerces-c.so.28 ");
psystem("ln -s libxerces-c.so.28 libxerces-c.so ");
}
if ((-e "$XERCESCROOT/lib/libxerces-depdom.so.28.0" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-depdom.so.28.0 .");
psystem("ln -s libxerces-depdom.so.28.0 libxerces-depdom.so.28 ");
psystem("ln -s libxerces-depdom.so.28 libxerces-depdom.so ");
}
if ((-e "$XERCESCROOT/lib/libxerces-c.sl.28.0" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-c.sl.28.0 .");
psystem("ln -s libxerces-c.sl.28.0 libxerces-c.sl.28 ");
psystem("ln -s libxerces-c.sl.28 libxerces-c.sl ");
}
if ((-e "$XERCESCROOT/lib/libxerces-depdom.sl.28.0" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-depdom.sl.28.0 .");
psystem("ln -s libxerces-depdom.sl.28.0 libxerces-depdom.sl.28 ");
psystem("ln -s libxerces-depdom.sl.28 libxerces-depdom.sl ");
}
if ((-e "$XERCESCROOT/lib/libxerces-c28.0.so" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-c28.0.so .");
psystem("ln -s libxerces-c28.0.so libxerces-c28.so ");
psystem("ln -s libxerces-c28.so libxerces-c.so ");
}
if ((-e "$XERCESCROOT/lib/libxerces-depdom28.0.so" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-depdom28.0.so .");
psystem("ln -s libxerces-depdom28.0.so libxerces-depdom28.so ");
psystem("ln -s libxerces-depdom28.so libxerces-depdom.so ");
}
if ((-e "$XERCESCROOT/lib/libxerces-c28.0.a" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-c28.0.a . ");
psystem("ln -s libxerces-c28.0.a libxerces-c28.a ");
psystem("ln -s libxerces-c28.a libxerces-c.a ");
}
if ((-e "$XERCESCROOT/lib/libxerces-depdom28.0.a" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-depdom28.0.a . ");
psystem("ln -s libxerces-depdom28.0.a libxerces-depdom28.a ");
psystem("ln -s libxerces-depdom28.a libxerces-depdom.a ");
}
# Mac OS X
if ((-e "$XERCESCROOT/lib/libxerces-c.28.0.dylib" )) {
psystem("cp -f $XERCESCROOT/lib/libxerces-c.28.0.dylib .");
psystem("ln -s libxerces-c.28.0.dylib libxerces-c.28.dylib ");
psystem("ln -s libxerces-c.28.dylib libxerces-c.dylib ");
}
# Populate the Message Catalog Files
if ( $opt_m =~ m/iconv/i ) {
print ("\n\nCopying Message Catalog Files ...\n");
pchdir ("$targetdir/msg");
psystem("rm -f XercesMessages* ");
psystem("cp -f $XERCESCROOT/msg/XercesMessages*.cat .");
}
# Populate the etc output directory like config.status and the map file
print ("\n\nCopying misc output to etc ...\n");
psystem("cp -Rf $XERCESCROOT/src/xercesc/config.status $targetdir/etc");
psystem("cp -Rf $XERCESCROOT/obj/*.map $targetdir/etc");
# Populate the samples directory
populateSamples();
# UNIX specifics
foreach $iii ('config.guess', 'config.h.in', 'config.sub', 'configure', 'configure.in',
'install-sh', 'runConfigure', 'Makefile.in', 'Makefile.incl', 'Makefile') {
psystem("cp -f $XERCESCROOT/samples/$iii $targetdir/samples");
}
# Populate the scripts and docs directory
populateMisc();
# Change the directory permissions
psystem ("chmod 644 `find $targetdir -type f`");
psystem ("chmod 755 $targetdir/bin/* $targetdir/lib/*");
psystem ("chmod +x $targetdir/samples/runConfigure $targetdir/samples/configure $targetdir/samples/install-sh");
psystem ("chmod +x $targetdir/samples/config.sub $targetdir/samples/config.guess $targetdir/samples/config.status");
psystem ("chmod 755 `find $targetdir -type d`");
# Now package it all up using tar
print ("\n\nTARing up all files ...\n");
pchdir ("$targetdir/..");
$zipname = $targetdir . ".tar";
$platformzipname = $zipname;
psystem ("$TAR -cvf $platformzipname $zipfiles");
# Finally compress the files
print ("Compressing $platformzipname ...\n");
psystem ("gzip $platformzipname");
} # end of UNIX build
sub createCommonDir() {
print ("\n\nCreating directories ...\n");
psystem ("mkdir $targetdir");
psystem ("mkdir $targetdir/bin");
psystem ("mkdir $targetdir/lib");
psystem ("mkdir $targetdir/msg");
psystem ("mkdir $targetdir/etc");
psystem ("mkdir $targetdir/include");
psystem ("mkdir $targetdir/include/xercesc");
psystem ("mkdir $targetdir/samples");
psystem ("mkdir $targetdir/samples/data");
psystem ("mkdir $targetdir/samples/SAXCount");
psystem ("mkdir $targetdir/samples/SAX2Count");
psystem ("mkdir $targetdir/samples/SAXPrint");
psystem ("mkdir $targetdir/samples/SAX2Print");
psystem ("mkdir $targetdir/samples/DOMCount");
psystem ("mkdir $targetdir/samples/DOMPrint");
psystem ("mkdir $targetdir/samples/Redirect");
psystem ("mkdir $targetdir/samples/MemParse");
psystem ("mkdir $targetdir/samples/PParse");
psystem ("mkdir $targetdir/samples/StdInParse");
psystem ("mkdir $targetdir/samples/EnumVal");
psystem ("mkdir $targetdir/samples/SEnumVal");
psystem ("mkdir $targetdir/samples/CreateDOMDocument");
psystem ("mkdir $targetdir/samples/PSVIWriter");
psystem ("mkdir $targetdir/samples/SCMPrint");
psystem ("mkdir $targetdir/scripts");
psystem ("mkdir $targetdir/doc");
psystem ("mkdir $targetdir/doc/html");
psystem ("mkdir $targetdir/doc/html/apiDocs");
}
sub populateInclude() {
print ("\n\nCopying headers files ...\n");
@headerDirectories =
qw'sax
sax2
framework
framework/psvi
dom
dom/deprecated
internal
parsers
util
util/Compilers
util/MsgLoaders
util/MsgLoaders/ICU
util/MsgLoaders/InMemory
util/MsgLoaders/MsgCatalog
util/MsgLoaders/Win32
util/Platforms
util/Platforms/AIX
util/Platforms/HPUX
util/Platforms/BeOS
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/regx
util/Transcoders
util/Transcoders/ICU
util/Transcoders/Iconv
util/Transcoders/Win32
validators
validators/common
validators/datatype
validators/DTD
validators/schema
validators/schema/identity';
foreach $dir (@headerDirectories) {
$inclDir = "include/xercesc/$dir";
if (! (-e $inclDir)) {
psystem("mkdir $inclDir");
}
$srcDir = "$XERCESCROOT/src/xercesc/$dir";
# Weed out directories that have no files to copy, to avoid a bunch of
# warnings from the cp command in the build output.
opendir(dir, $srcDir);
@allfiles = readdir(dir);
closedir(dir);
foreach $fileKind ("hpp", "c") {
$matches = grep(/\.$fileKind$/, @allfiles);
if ($matches > 0) {
psystem("cp -f $srcDir/*.$fileKind $inclDir/");
}
}
}
psystem("cp -Rf $XERCESCROOT/version.incl $targetdir");
#
# Remove internal implementation headers from the DOM include directory.
#
psystem ("rm -rf $targetdir/include/xercesc/dom/impl");
psystem ("rm -f $targetdir/include/xercesc/dom/deprecated/*Impl.hpp");
psystem ("rm -f $targetdir/include/xercesc/dom/deprecated/DS*.hpp");
}
sub populateSamples() {
print ("\n\nCopying sample files ...\n");
psystem("cp -Rf $XERCESCROOT/samples/SAXCount/* $targetdir/samples/SAXCount");
psystem("rm -f $targetdir/samples/SAXCount/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/SAX2Count/* $targetdir/samples/SAX2Count");
psystem("rm -f $targetdir/samples/SAX2Count/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/SAXPrint/* $targetdir/samples/SAXPrint");
psystem("rm -f $targetdir/samples/SAXPrint/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/SAX2Print/* $targetdir/samples/SAX2Print");
psystem("rm -f $targetdir/samples/SAX2Print/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/DOMCount/* $targetdir/samples/DOMCount");
psystem("rm -f $targetdir/samples/DOMCount/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/DOMPrint/* $targetdir/samples/DOMPrint");
psystem("rm -f $targetdir/samples/DOMPrint/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/Redirect/* $targetdir/samples/Redirect");
psystem("rm -f $targetdir/samples/Redirect/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/MemParse/* $targetdir/samples/MemParse");
psystem("rm -f $targetdir/samples/MemParse/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/PParse/* $targetdir/samples/PParse");
psystem("rm -f $targetdir/samples/PParse/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/StdInParse/* $targetdir/samples/StdInParse");
psystem("rm -f $targetdir/samples/StdInParse/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/EnumVal/* $targetdir/samples/EnumVal");
psystem("rm -f $targetdir/samples/EnumVal/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/SEnumVal/* $targetdir/samples/SEnumVal");
psystem("rm -f $targetdir/samples/SEnumVal/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/CreateDOMDocument/* $targetdir/samples/CreateDOMDocument");
psystem("rm -f $targetdir/samples/CreateDOMDocument/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/PSVIWriter/* $targetdir/samples/PSVIWriter");
psystem("rm -f $targetdir/samples/PSVIWriter/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/SCMPrint/* $targetdir/samples/SCMPrint");
psystem("rm -f $targetdir/samples/SCMPrint/Makefile");
psystem("cp -Rf $XERCESCROOT/samples/data/* $targetdir/samples/data");
}
sub populateMisc() {
# Populate the scripts directory
print ("\n\nCopying script files ...\n");
psystem("cp $XERCESCROOT/scripts/sanityTest* $targetdir/scripts");
# Populate the docs directory
print ("\n\nCopying documentation ...\n");
psystem("cp -Rf $XERCESCROOT/doc/* $targetdir/doc");
psystem("cp $XERCESCROOT/Readme.html $targetdir");
psystem("cp $XERCESCROOT/credits.txt $targetdir");
psystem("cp $XERCESCROOT/LICENSE $targetdir");
psystem("cp $XERCESCROOT/NOTICE $targetdir");
psystem("rm -f $targetdir/doc/Doxyfile");
psystem("rm -rf $targetdir/doc/style");
psystem("rm -f $targetdir/doc/*.xml");
psystem("rm -f $targetdir/doc/*.ent");
psystem("rm -f $targetdir/doc/*.gif");
}
#
# copy ICU file to the directory specified
#
sub copyICUOnUNIX() {
pchdir ("$_[0]");
#
# copy icudata dll
# For ICU 3.2:
# on AIX, it is called libicudata32.0.a
# on Solaris/Linux, it is called libicudata.so.32.0
# on HP, it is called libicudata.sl.32.0
#
psystem("rm -f libicudata*");
psystem("cp -f $ICUROOT/lib/libicudata32.0.so .");
psystem("cp -f $ICUROOT/lib/libicudata32.0.a .");
psystem("cp -f $ICUROOT/lib/libicudata.so.32.0 .");
psystem("cp -f $ICUROOT/lib/libicudata.sl.32.0 .");
psystem("find . -name 'libicudata32.0.so' -exec ln -s {} libicudata.so \\;");
psystem("find . -name 'libicudata32.0.so' -exec ln -s {} libicudata32.so \\;");
psystem("find . -name 'libicudata32.0.a' -exec ln -s {} libicudata.a \\;");
psystem("find . -name 'libicudata32.0.a' -exec ln -s {} libicudata32.a \\;");
psystem("find . -name 'libicudata.so.32.0' -exec ln -s {} libicudata.so \\;");
psystem("find . -name 'libicudata.so.32.0' -exec ln -s {} libicudata.so.32 \\;");
psystem("find . -name 'libicudata.sl.32.0' -exec ln -s {} libicudata.sl \\;");
psystem("find . -name 'libicudata.sl.32.0' -exec ln -s {} libicudata.sl.32 \\;");
#
# copy icuuc dll
# on AIX, it is called libicuuc32.0.a
# on Solaris/Linux, it is called libicuuc.so.32.0
# on HP, it is called libicuuc.sl.32.0
#
psystem("rm -f libicuuc*");
psystem("cp -f $ICUROOT/lib/libicuuc32.0.so .");
psystem("cp -f $ICUROOT/lib/libicuuc32.0.a .");
psystem("cp -f $ICUROOT/lib/libicuuc.so.32.0 .");
psystem("cp -f $ICUROOT/lib/libicuuc.sl.32.0 .");
psystem("find . -name 'libicuuc32.0.so' -exec ln -s {} libicuuc.so \\;");
psystem("find . -name 'libicuuc32.0.so' -exec ln -s {} libicuuc32.so \\;");
psystem("find . -name 'libicuuc32.0.a' -exec ln -s {} libicuuc.a \\;");
psystem("find . -name 'libicuuc32.0.a' -exec ln -s {} libicuuc32.a \\;");
psystem("find . -name 'libicuuc.so.32.0' -exec ln -s {} libicuuc.so \\;");
psystem("find . -name 'libicuuc.so.32.0' -exec ln -s {} libicuuc.so.32 \\;");
psystem("find . -name 'libicuuc.sl.32.0' -exec ln -s {} libicuuc.sl \\;");
psystem("find . -name 'libicuuc.sl.32.0' -exec ln -s {} libicuuc.sl.32 \\;");
}
sub change_windows_project_for_ICU() {
my ($thefile, $Transcoder, $MsgLoader) = @_;
print "\nConverting Windows Xerces library project ($thefile) for ICU usage...";
my $thefiledotbak = $thefile . ".bak";
rename ($thefile, $thefiledotbak);
open (FIZZLE, $thefiledotbak);
open (FIZZLEOUT, ">$thefile");
while ($line = <FIZZLE>) {
if ($line =~ /Win32 Debug/) {
$icuuc = "icuucd";
}
if ($line =~ /Win32 Release/) {
$icuuc = "icuuc";
}
$line =~ s[/D "PROJ_XMLPARSER"][/I "$ICUROOT\\include" /D "PROJ_XMLPARSER"];
$line =~ s[Debug/xerces-c_2D.lib"][Debug/xerces-c_2D.lib" /libpath:"$ICUROOT\\lib" /libpath:"$ICUROOT\\source\\data" /libpath:"$XERCESCROOT\\src\\xercesc\\util\\MsgLoaders\\ICU\\resources"];
$line =~ s[Release/xerces-c_2.lib"][Release/xerces-c_2.lib" /libpath:"$ICUROOT\\lib" /libpath:"$ICUROOT\\source\\data" /libpath:"$XERCESCROOT\\src\\xercesc\\util\\MsgLoaders\\ICU\\resources"];
if ($MsgLoader)
{
$line =~ s/user32.lib/user32.lib $icuuc.lib XercesMessages2_8.lib/g;
}
elsif ($Transcoder)
{
$line =~ s/user32.lib/user32.lib $icuuc.lib/g;
}
if ($Transcoder)
{
$line =~ s/XML_USE_WIN32_TRANSCODER/XML_USE_ICU_TRANSCODER/g;
$line =~ s/Transcoders\\Win32\\Win32TransService.cpp/Transcoders\\ICU\\ICUTransService.cpp/g;
$line =~ s/Transcoders\\Win32\\Win32TransService.hpp/Transcoders\\ICU\\ICUTransService.hpp/g;
}
if ($MsgLoader)
{
$line =~ s/XML_USE_WIN32_MSGLOADER/XML_USE_ICU_MESSAGELOADER/g;
$line =~ s/MsgLoaders\\Win32\\Win32MsgLoader.cpp/MsgLoaders\\ICU\\ICUMsgLoader.cpp/g;
$line =~ s/MsgLoaders\\Win32\\Win32MsgLoader.hpp/MsgLoaders\\ICU\\ICUMsgLoader.hpp/g;
}
print FIZZLEOUT $line;
}
close (FIZZLEOUT);
close (FIZZLE);
unlink ($thefiledotbak);
}
sub change_windows_makefile_for_ICU() {
my ($thefile, $Transcoder, $MsgLoader) = @_;
print "\nConverting Windows Xerces library makefile ($thefile) for ICU usage...";
my $thefiledotbak = $thefile . ".bak";
rename ($thefile, $thefiledotbak);
open (FIZZLE, $thefiledotbak);
open (FIZZLEOUT, ">$thefile");
while ($line = <FIZZLE>) {
if ($line =~ /Win64 Debug/ ){
$icuuc = "icuucd";
}
if ($line =~ /Win64 Release/ ) {
$icuuc = "icuuc";
}
$line =~ s[/D "PROJ_XMLPARSER"][/I "$ICUROOT\\include" /D "PROJ_XMLPARSER"];
$line =~ s[/machine:IA64][/libpath:"$ICUROOT\\lib" /libpath:"$ICUROOT\\source\\data" /libpath:"$XERCESCROOT\\src\\xercesc\\util\\MsgLoaders\\ICU\\resources" /machine:IA64];
if ($MsgLoader)
{
$line =~ s/user32.lib/user32.lib $icuuc.lib XercesMessages2_8.lib/g;
}
elsif ($Transcoder)
{
$line =~ s/user32.lib/user32.lib $icuuc.lib/g;
}
if ($Transcoder) {
$line =~ s/XML_USE_WIN32_TRANSCODER/XML_USE_ICU_TRANSCODER/g;
$line =~ s/Transcoders\\Win32\\Win32TransService/Transcoders\\ICU\\ICUTransService/g;
$line =~ s/Win32TransService/ICUTransService/g;
}
if ($MsgLoader)
{
$line =~ s/XML_USE_WIN32_MSGLOADER/XML_USE_ICU_MESSAGELOADER/g;
$line =~ s/MsgLoaders\\Win32\\Win32MsgLoader/MsgLoaders\\ICU\\ICUMsgLoader/g;
$line =~ s/Win32MsgLoader/ICUMsgLoader/g;
}
print FIZZLEOUT $line;
}
close (FIZZLEOUT);
close (FIZZLE);
unlink ($thefiledotbak);
}
sub change_windows_project_for_ICU_VC7() {
my ($thefile, $Transcoder, $MsgLoader) = @_;
print "\nConverting Windows Xerces library project ($thefile) for ICU usage...";
my $thefiledotbak = $thefile . ".bak";
rename ($thefile, $thefiledotbak);
open (FIZZLE, $thefiledotbak);
open (FIZZLEOUT, ">$thefile");
while ($line = <FIZZLE>) {
if ($line =~ /Release\|Win32/) {
$icuuc = "icuuc";
}
if ($line =~ /Debug\|Win32/) {
$icuuc = "icuucd";
}
$line =~ s/AdditionalIncludeDirectories=\"([^"]*)/AdditionalIncludeDirectories=\"$ICUROOT\\include;$1/;
$line =~ s/AdditionalLibraryDirectories=\"([^"]*)/AdditionalLibraryDirectories=\"$ICUROOT\\lib;$ICUROOT\\source\\data;$XERCESCROOT\\src\\xercesc\\util\\MsgLoaders\\ICU\\resources;$1/;
if ($MsgLoader)
{
$line =~ s/AdditionalDependencies=\"([^"]*)/AdditionalDependencies=\"$icuuc.lib XercesMessages2_8.lib $1/;
}
elsif ($Transcoder)
{
$line =~ s/AdditionalDependencies=\"([^"]*)/AdditionalDependencies=\"$icuuc.lib $1/;
}
if ($Transcoder) {
$line =~ s/XML_USE_WIN32_TRANSCODER/XML_USE_ICU_TRANSCODER/g;
$line =~ s/Transcoders\\Win32\\Win32TransService.cpp/Transcoders\\ICU\\ICUTransService.cpp/g;
$line =~ s/Transcoders\\Win32\\Win32TransService.hpp/Transcoders\\ICU\\ICUTransService.hpp/g;
}
if ($MsgLoader)
{
$line =~ s/XML_USE_WIN32_MSGLOADER/XML_USE_ICU_MESSAGELOADER/g;
$line =~ s/MsgLoaders\\Win32\\Win32MsgLoader/MsgLoaders\\ICU\\ICUMsgLoader/g;
$line =~ s/Win32MsgLoader/ICUMsgLoader/g;
}
print FIZZLEOUT $line;
}
close (FIZZLEOUT);
close (FIZZLE);
unlink ($thefiledotbak);
}
#
# This subroutine is used to munge the XercesLib project file to remove all
# traces of WinSock based NetAccessor. Once no NetAccessor is specified, the
# project file is configured for using the 'FileOnly' NetAccessor.
#
# For this function to work the assumption is that project file in CMVC is
# preconfigured to already use the WinSock based NetAccessor. So, the changes
# that need to be done are:
# - to remove references to any #defines
# - to remove references to wsock32.lib
# - to remove references to the source files for the WinSock based NetAccessor.
#
sub changeWindowsProjectForFileOnlyNA() {
my ($thefile) = @_;
print "\nConfiguring Xerces library project ($thefile) for FileOnly NetAccessor...";
my $thefiledotbak = $thefile . ".bak";
rename ($thefile, $thefiledotbak);
open (PROJFILEIN, $thefiledotbak);
open (PROJFILEOUT, ">$thefile");
while ($aline = <PROJFILEIN>) {
# By skipping over lines between the NetAccessors group
# we can references to the WinSock based NetAccessor files.
if ($aline =~ m/^# Begin Group \"NetAccessors\"/g) {
# ...found it. Write out the line as a place holder. Also...
print PROJFILEOUT $aline;
# ...preserve the next two lines.
$aline = <PROJFILEIN>;
print PROJFILEOUT $aline;
$aline = <PROJFILEIN>;
print PROJFILEOUT $aline;
# Skip over the lines till you hit the WinSock NetAccessor 'End Group'.
while ($aline = <PROJFILEIN>) { # read the next line
last if ($aline =~ m/^# End Group/g);
}
# We need to preserve the 'End Group' line. The last statement of the
# enclosing while loop prints it out.
}
# From the remaining lines, remove any references to the #defines and
# the WinSock library.
$aline =~ s/\/D \"XML_USE_NETACCESSOR_WINSOCK\" //g; # "
if ($aline =~ /( )+ws2_32.lib( )*\"/) { # end of line
$aline =~ s/( )+ws2_32.lib( )*\"/\"/g;
} else { # beginning or middle of line
$aline =~ s/ws2_32.lib( )*//g;
}
print PROJFILEOUT $aline;
}
close (PROJFILEOUT);
close (PROJFILEIN);
unlink ($thefiledotbak);
}
sub changeWindowsProjectForFileOnlyNA_VC7() {
my ($thefile) = @_;
print "\nConfiguring Xerces library project ($thefile) for FileOnly NetAccessor...\n";
my $thefiledotbak = $thefile . ".bak";
rename ($thefile, $thefiledotbak);
open (PROJFILEIN, $thefiledotbak);
open (PROJFILEOUT, ">$thefile");
while ($aline = <PROJFILEIN>) {
# By skipping over lines between the NetAccessors group
# we can references to the WinSock based NetAccessor files.
if ($aline =~ m/^# Begin Group \"NetAccessors\"/g) {
# ...found it. Write out the line as a place holder. Also...
print PROJFILEOUT $aline;
# ...preserve the next two lines.
$aline = <PROJFILEIN>;
print PROJFILEOUT $aline;
$aline = <PROJFILEIN>;
print PROJFILEOUT $aline;
# Skip over the lines till you hit the WinSock NetAccessor 'End Group'.
while ($aline = <PROJFILEIN>) { # read the next line
last if ($aline =~ m/^# End Group/g);
}
# We need to preserve the 'End Group' line. The last statement of the
# enclosing while loop prints it out.
}
# From the remaining lines, remove any references to the #defines and
# the WinSock library.
if ($aline =~ /\;XML_USE_NETACCESSOR_WINSOCK/) { # end or middle of line
$aline =~ s/\;XML_USE_NETACCESSOR_WINSOCK//g;
} else { # beginning of line
$aline =~ s/\XML_USE_NETACCESSOR_WINSOCK\;*//g;
}
if ($aline =~ /\s+ws2_32\.lib\s*\"/) { # end of line
$aline =~ s/\s+ws2_32\.lib\s*\"/\"/g;
} else { # beginning or middle of line
$aline =~ s/ws2_32\.lib\s*//g;
}
print PROJFILEOUT $aline;
}
close (PROJFILEOUT);
close (PROJFILEIN);
unlink ($thefiledotbak);
}
#
# psystem subroutine both prints and executes a system command.
#
sub psystem() {
print("$_[0]\n");
system($_[0]);
}
#
# chdir subroutine both prints and executes a chdir
#
sub pchdir() {
print("chdir $_[0]\n");
chdir $_[0];
}