Newer
Older
# Copyright 1999-2004 The Apache Software Foundation.
#
# Licensed 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");
PeiYong Zhang
committed
#
# Setup global variables
#
&Getopt('sopcxmntb');
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);
PeiYong Zhang
committed
my $ICUResourceDir = "$XERCESCROOT/src/xercesc/util/MsgLoaders/ICU/resources";
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, 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 (" -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-src3_0");
print (" -o \$HOME/xerces-c3_0-linux -c gcc -x g++ -m inmem -n fileonly -t native\n\n");
print (" perl packageBinaries.pl -s \\xerces-c-src3_0");
print (" -o\\xerces-c3_0-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);
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);
PeiYong Zhang
committed
#
PeiYong Zhang
committed
#
open(PLATFORM, "uname -s|");
$platform = <PLATFORM>;
chomp($platform);
close (PLATFORM);
#Fix the backslashes on the Windows platform
PeiYong Zhang
committed
$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 . "/*";
PeiYong Zhang
committed
# 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
PeiYong Zhang
committed
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 )
PeiYong Zhang
committed
$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 )
PeiYong Zhang
committed
$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 )
PeiYong Zhang
committed
{
PeiYong Zhang
committed
$VCBuildDir = "VC6";
$PlatformName = "Win64";
$ProjectDir = "$XERCESCROOT/Projects/Win32/$VCBuildDir/xerces-all/all";
PeiYong Zhang
committed
else
{
print ("Error: Invalid compilers used \n");
print ("-x <C++ compiler name> VC6, VC7, VC7.1, VC8, ecl and icl \n");
PeiYong Zhang
committed
exit(1);
PeiYong Zhang
committed
$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) {
PeiYong Zhang
committed
$MsgLoader = 1;
PeiYong Zhang
committed
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");
PeiYong Zhang
committed
#
PeiYong Zhang
committed
# Preparation::Make the target directory and its main subdirectories
#
PeiYong Zhang
committed
createCommonDir();
PeiYong Zhang
committed
# windows specifics
psystem ("mkdir $targetdir/samples/Projects");
psystem ("mkdir $targetdir/samples/Projects/Win32");
PeiYong Zhang
committed
psystem ("mkdir $targetdir/samples/Projects/Win32/$VCBuildDir");
PeiYong Zhang
committed
#
# Preparation:: 'FileOnly' NetAccessor
# has been specified, then the project files have to be changed.
#
PeiYong Zhang
committed
if ($DevStudioVer eq "6.0") {
changeWindowsProjectForFileOnlyNA("$XERCESCROOT/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp");
} elsif ($DevStudioVer eq "7.0") {
changeWindowsProjectForFileOnlyNA_VC7_or_VC8("$XERCESCROOT/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj");
changeWindowsProjectForFileOnlyNA_VC7_or_VC8("$XERCESCROOT/Projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj");
} elsif ($DevStudioVer eq "8.0") {
changeWindowsProjectForFileOnlyNA_VC7_or_VC8("$XERCESCROOT/Projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj");
PeiYong Zhang
committed
#else: for now we do not build FO with ecl
PeiYong Zhang
committed
#
# Build Begin
#
# Build::ICU and/or Resource bundle library for ICUMsgLoader
#
PeiYong Zhang
committed
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");
PeiYong Zhang
committed
if ($PlatformName eq "Win64")
{
PeiYong Zhang
committed
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
{
PeiYong Zhang
committed
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");
}
PeiYong Zhang
committed
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("devenv.com allinone.sln /rebuild debug /out buildlog_debug.txt");
PeiYong Zhang
committed
} 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");
}
PeiYong Zhang
committed
} #$opt_j
PeiYong Zhang
committed
#
# 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 XercesMessages3_0_0.DLL XercesMessages3_0.DLL");
psystem("ren XercesMessages3_0_0.lib XercesMessages3_0.lib");
PeiYong Zhang
committed
#
# Adjust project file
#
if ($DevStudioVer eq "6.0") {
PeiYong Zhang
committed
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_or_VC8("$XERCESCROOT/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj", $Transcoder , $MsgLoader);
change_windows_project_for_ICU_VC7_or_VC8("$XERCESCROOT/Projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj", $Transcoder , $MsgLoader);
} elsif ($DevStudioVer eq "8.0") {
change_windows_project_for_ICU_VC7_or_VC8("$XERCESCROOT/Projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj", $Transcoder , $MsgLoader);
PeiYong Zhang
committed
} else { # "6.1"
change_windows_makefile_for_ICU("$XERCESCROOT/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak", $Transcoder, $MsgLoader);
}
PeiYong Zhang
committed
} #$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");
PeiYong Zhang
committed
#
# release debug
# ===========================================================================
PeiYong Zhang
committed
# 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
PeiYong Zhang
committed
#
pchdir ("$ProjectDir");
if ($DevStudioVer eq "6.0") {
PeiYong Zhang
committed
if ($PlatformName eq "Win64") { # /USEENV
psystem("msdev xerces-all.dsw /MAKE \"all - $PlatformName Release\" /USEENV /REBUILD /OUT buildlog_release.txt");
David Abram Cargill
committed
psystem("msdev xerces-all.dsw /MAKE \"XercesLib - $PlatformName Debug\" /USEENV /REBUILD /OUT buildlog_debug.txt");
}
PeiYong Zhang
committed
else {
psystem("msdev xerces-all.dsw /MAKE \"all - $PlatformName Release\" /REBUILD /OUT buildlog_release.txt");
David Abram Cargill
committed
psystem("msdev xerces-all.dsw /MAKE \"XercesLib - $PlatformName Debug\" /REBUILD /OUT buildlog_debug.txt");
}
} elsif ($DevStudioVer eq "7.0") {
PeiYong Zhang
committed
psystem("devenv /rebuild Release /out buildlog_release.txt /project all xerces-all.sln");
David Abram Cargill
committed
psystem("devenv /rebuild debug /out buildlog_debug.txt /project XercesLib xerces-all.sln");
} elsif ($DevStudioVer eq "7.1") {
psystem("devenv /rebuild Release /out buildlog_release.txt /project all xerces-all.sln");
David Abram Cargill
committed
psystem("devenv /rebuild debug /out buildlog_debug.txt /project XercesLib xerces-all.sln");
} elsif ($DevStudioVer eq "8.0") {
psystem("devenv /rebuild Release /out buildlog_release.txt /project all xerces-all.sln");
David Abram Cargill
committed
psystem("devenv /rebuild debug /out buildlog_debug.txt /project XercesLib xerces-all.sln");
PeiYong Zhang
committed
} else { # "6.1"
psystem( "nmake -f all.mak \"CFG=all - $PlatformName Release\" CPP=$opt_x.exe >buildlog_release.txt 2>&1");
PeiYong Zhang
committed
system("type buildlog_release.txt");
system("type buildlog_debug.txt");
PeiYong Zhang
committed
#
# Population Begin
#
# Population::include
#
pchdir ($targetdir);
PeiYong Zhang
committed
print "\nBuild is being copied from \'" . $ReleaseBuildDir . "\'";
PeiYong Zhang
committed
populateInclude();
PeiYong Zhang
committed
#
# Population::ICU and/or ICUMsgLoader
#
PeiYong Zhang
committed
print ("\n\nCopying icu outputs ...\n");
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");
PeiYong Zhang
committed
psystem("cp -Rfv $ICUROOT/include/* $targetdir/include");
# Copy the Resouce Bundle for ICUMsgLoader
PeiYong Zhang
committed
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");
PeiYong Zhang
committed
} #ICUIsPresent
PeiYong Zhang
committed
#
# 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");
PeiYong Zhang
committed
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");
PeiYong Zhang
committed
# 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 ...
#
PeiYong Zhang
committed
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
# 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
#
Tinny Ng
committed
# 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"';
}
$ENV{'LIBPATH'}="$ICUROOT/lib:$XERCESCROOT/lib:$ENV{'LIBPATH'}";
$ENV{'PATH'}="$ICUROOT/bin:$ENV{'PATH'}";
psystem ("echo LIBPATH=$ENV{'LIBPATH'}");
PeiYong Zhang
committed
# Mac OS X
if ($platform =~ m/Darwin/i) {
$platform = "macosx";
PeiYong Zhang
committed
# 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
PeiYong Zhang
committed
# 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"';
$ENV{'SHLIB_PATH'}="$ICUROOT/lib:$XERCESCROOT/lib:$ENV{'SHLIB_PATH'}";
$ENV{'PATH'}="$ICUROOT/bin:$ENV{'PATH'}";
psystem ("echo SHLIB_PATH=$ENV{'SHLIB_PATH'}");
PeiYong Zhang
committed
}# HP-UX
Tinny Ng
committed
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"';
Tinny Ng
committed
psystem ("echo LIBRARY_PATH=$ENV{'LIBRARY_PATH'}");
PeiYong Zhang
committed
}# 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"';
}
$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'}");
PeiYong Zhang
committed
} # Linux
if ($platform =~ m/SunOS/i) {
$platform = "solaris";
PeiYong Zhang
committed
if ($opXt_c eq "") {$opt_c = "cc";}
if ($opt_x eq "") {$opt_x = "CC";}
$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'}");
PeiYong Zhang
committed
} # SunOS
if ($platform =~ m/ptx/i) {
# Check if the patches have been applied or not
$platform = "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 (!(-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'};
PeiYong Zhang
committed
} #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.
PeiYong Zhang
committed
# 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);
}
PeiYong Zhang
committed
#
# Preparation::Make the target directory and its main subdirectories
#
createCommonDir();
#
# Build Begin
#
# Build::ICU and/or Resource bundle library for ICUMsgLoader
#
if ($ICUIsPresent ) {
PeiYong Zhang
committed
# 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");
}
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");
}
PeiYong Zhang
committed
} 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");
PeiYong Zhang
committed
}
else {
psystem ("CC=$opt_c CXX=$opt_x CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags sh ./configure --prefix=$ICUROOT");
PeiYong Zhang
committed
}
PeiYong Zhang
committed
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");
PeiYong Zhang
committed
} #$ICUIsPresent
# For ptx, ICUROOT must now be set to XMLINSTALL for further work.
if ($platform =~ m/ptx/i) {
$ENV{'ICUROOT'} = $ENV{'XMLINSTALL'};
}
PeiYong Zhang
committed
#
# Build::Make Xerces-C libraries, samples and tests
#
print("\n\nBuild the xerces-c library ...\n");
pchdir ("$XERCESCROOT");
psystem ("chmod +x configure config/install-sh config/pretty-make");
$cfg_icu = "";
$cfg_m = "";
if ($opt_m eq "inmem") {$cfg_m = "--enable-msgloader-inmemory"; }
if ($opt_m eq "icu") {$cfg_m = "--enable-msgloader-icu"; $cfg_icu="--with-icu=$ICUROOT"; }
if ($opt_m eq "iconv") {$cfg_m = "--enable-msgloader-iconv"; }
$cfg_n = "";
if ($opt_n eq "fileonly") {$cfg_n = "--disable-netaccessor-socket --disable-netaccessor-curl --disable-netaccessor-libwww --disable-netaccessor-cfurl"; }
if ($opt_n eq "socket") {$cfg_n = "--enable-netaccessor-socket"; }
$cfg_t = "";
if ($opt_t eq "icu") {$cfg_t = "--enable-transcoder-icu"; $cfg_icu="--with-icu=$ICUROOT"; }
if ($opt_t eq "native") {$cfg_t = "--disable-transcoder-icu"; }
psystem ("CC=$opt_c CXX=$opt_x CXXFLAGS=$icu_cxxflags CFLAGS=$icu_cflags ./configure $cfg_icu $cfg_m $cfg_n $cfg_t");
psystem ("$MAKE clean"); # May want to comment this line out to speed up
psystem ("$MAKE");
PeiYong Zhang
committed
#
# 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.
#
PeiYong Zhang
committed
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
PeiYong Zhang
committed
# build the tests
print("\n\nBuild the tests ...\n");
psystem ("$MAKE check");
pchdir ($targetdir);
PeiYong Zhang
committed
#
# Population Begin
#
# Population::include
#
populateInclude();
print "\nICU files are being copied from \'$ICUROOT\'";
psystem("cp -Rf $ICUROOT/include/* $targetdir/include");
PeiYong Zhang
committed
#
# 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/libXercesMessages30.0.so .");
psystem("find . -name 'libXercesMessages30.0.so' -exec ln -s {} libXercesMessages30.so \\;");
psystem("find . -name 'libXercesMessages30.so' -exec ln -s {} libXercesMessages.so \\;");
PeiYong Zhang
committed
psystem("cp -f $XERCESCROOT/lib/libXercesMessages.so.30.0 .");
psystem("find . -name 'libXercesMessages.so.30.0' -exec ln -s {} libXercesMessages.so.30 \\;");
psystem("find . -name 'libXercesMessages.so.30' -exec ln -s {} libXercesMessages.so \\;");
PeiYong Zhang
committed
psystem("cp -f $XERCESCROOT/lib/libXercesMessages.sl.30.0 .");
psystem("find . -name 'libXercesMessages.sl.30.0' -exec ln -s {} libXercesMessages.sl.30 \\;");
psystem("find . -name 'libXercesMessages.sl.30' -exec ln -s {} libXercesMessages.sl \\;");
PeiYong Zhang
committed
psystem("cp -f $XERCESCROOT/lib/libXercesMessages30.0.a .");
psystem("find . -name 'libXercesMessages30.0.a' -exec ln -s {} libXercesMessages30.a \\;");
psystem("find . -name 'libXercesMessages30.a' -exec ln -s {} libXercesMessages.a \\;");
PeiYong Zhang
committed
}
}
#
# Population::Xerces-c
#
Tinny Ng
committed
# Populate the library output directory
print ("\n\nCopying library outputs ...\n");
if ((-e "$XERCESCROOT/obj/.libs/libxerces-3.0.so" )) {
psystem("cp -f $XERCESCROOT/obj/.libs/libxerces-3.0.so .");
psystem("ln -s libxerces-3.0.so libxerces-3.so ");
psystem("ln -s libxerces-3.so libxerces.so ");
if ((-e "$XERCESCROOT/obj/.libs/libxerces-depdom-3.0.so" )) {
psystem("cp -f $XERCESCROOT/obj/.libs/libxerces-depdom-3.0.so .");
psystem("ln -s libxerces-depdom-3.0.so libxerces-depdom-3.so ");
psystem("ln -s libxerces-depdom-3.so libxerces-depdom.so ");
if ((-e "$XERCESCROOT/obj/.libs/libxerces-3.0.sl" )) {
psystem("cp -f $XERCESCROOT/obj/.libs/libxerces-3.0.sl .");
psystem("ln -s libxerces-3.0.sl libxerces-3.sl ");
psystem("ln -s libxerces-3.sl libxerces.sl ");
if ((-e "$XERCESCROOT/obj/.libs/libxerces-depdom-3.0.sl" )) {
psystem("cp -f $XERCESCROOT/obj/.libs/libxerces-depdom-3.0.sl .");
psystem("ln -s libxerces-depdom-3.0.sl libxerces-depdom-3.sl ");
psystem("ln -s libxerces-depdom-3.sl libxerces-depdom.sl ");
if ((-e "$XERCESCROOT/obj/.libs/libxerces.a" )) {
psystem("cp -f $XERCESCROOT/obj/.libs/libxerces.a . ");
if ((-e "$XERCESCROOT/obj/.libs/libxerces-depdom.a" )) {
psystem("cp -f $XERCESCROOT/obj/.libs/libxerces-depdom.a . ");
PeiYong Zhang
committed
}
# Mac OS X
if ((-e "$XERCESCROOT/obj/.libs/libxerces-3.0.dylib" )) {
psystem("cp -f $XERCESCROOT/obj/.libs/libxerces-3.0.dylib .");
psystem("ln -s libxerces-3.0.dylib libxerces-3.dylib ");
psystem("ln -s libxerces-3.dylib libxerces.dylib ");
PeiYong Zhang
committed
}
PeiYong Zhang
committed
# 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 .");
Tinny Ng
committed
}
# Populate the etc output directory like config.status and the map file
print ("\n\nCopying misc output to etc ...\n");
psystem("cp -Rf $XERCESCROOT/config.status $targetdir/etc");
# Populate the samples directory
PeiYong Zhang
committed
populateSamples();
# UNIX specifics
foreach $iii ('Makefile.in', 'Makefile.am', 'Makefile') {
psystem("cp -f $XERCESCROOT/samples/$iii $targetdir/samples");
PeiYong Zhang
committed
# Populate the scripts and docs directory
populateMisc();
# Change the directory permissions
psystem ("find $targetdir -type f -exec chmod 644 {} \\;");
psystem ("find $targetdir -type d -exec chmod 755 {} \\;");
PeiYong Zhang
committed
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
psystem ("chmod 755 $targetdir/bin/* $targetdir/lib/*");
# 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 =
David Abram Cargill
committed
qw'dom
PeiYong Zhang
committed
framework
framework/psvi
internal
parsers
sax
sax2