Skip to content
Snippets Groups Projects
packageSources.pl 9.74 KiB
Newer Older
Ted Leung's avatar
Ted Leung committed
#!/usr/bin/perl

Rahul Jain's avatar
Rahul Jain committed
push(@INC, "/home/xerces-c/bin", "/home/xerces-c/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");
Ted Leung's avatar
Ted Leung committed
require "getopt.pl";

$|=1;   # Force a flush after every print

Rahul Jain's avatar
Rahul Jain committed
# Set up the environment variables for XERCES-C and ICU
$XERCESCROOT = $ENV{'XERCESCROOT'};
Ted Leung's avatar
Ted Leung committed
$ICUROOT = $ENV{'ICUROOT'};

# Check for the environment variables and exit if error
Rahul Jain's avatar
Rahul Jain committed
if (!length($XERCESCROOT)) {
        print "You must set an environment variable called XERCESCROOT to work with this script.\n";
Ted Leung's avatar
Ted Leung committed
        exit(-1);
}

&Getopt('o');
$OUTPUTDIR = $opt_o;

# Check for the environment variables and exit if error
Rahul Jain's avatar
Rahul Jain committed
if (!length($XERCESCROOT) || !length($OUTPUTDIR)) {
        print ("Usage is: packageSources -o<output_directory>\n");
        print ("Example: perl packageSources.pl -oc:\\xerces-c_1_1_1\n");
        print ("         perl packageSources.pl -o\$HOME/xerces-c_1_1_1\n");
Ted Leung's avatar
Ted Leung committed
        exit(-1);
}

# We need ICUROOT only if we intend to use ICU for transcoding or message loading
# As of Version 3, this is not mandatory any more.
if (length($ICUROOT) > 0) {
       print "Using $ICUROOT as the ICU root directory.\n";
}
Ted Leung's avatar
Ted Leung committed

#Fix the backslashes on the Windows platform
Rahul Jain's avatar
Rahul Jain committed
$XERCESCROOT =~ s/\\/\//g;
Ted Leung's avatar
Ted Leung committed
$ICUROOT =~ s/\\/\//g;

# Read the target version from the file $XERCESCROOT/src/util/XercesDefs.hpp
$versionfile = "$XERCESCROOT/src/util/XercesDefs.hpp";
Ted Leung's avatar
Ted Leung committed
$openresult = open (VERSIONFILE, "<$versionfile");

if ($openresult == 0) {
   print "Sorry, I could not find the file $versionfile to pick up the version. Aborting ...\n";
   exit(-1);
}

while ($fileline = <VERSIONFILE>) {
   if ($fileline =~ /gXML4CFullVersionStr = \"(.*)\"/) {
     $binarytargetdir = $1;  # We found the version string inside this file
   }
}
close(VERSIONFILE);

$binarytargetdir =~ s/\./_/g;    # Substitute the dots
$binarytargetdir =~ s/\s/_/g;    # Substitute the blanks
$binarytargetdir =~ s/\\/\//g;   # Fix the backslashes, if they exist, probably doesn't

# Now check if the target directory exists, exit if it does
if (-e $OUTPUTDIR) {
        print ("Error: The target directory \'$OUTPUTDIR\' already exists.\n");
        print ("       You must start with a clean directory to package your product.\n");
        exit(1);
}

#Construct the name of the zip file by extracting the last directory name
$srczipfiles = $OUTPUTDIR;
$srczipfiles =~ s/.*\/([\w|-]*)$/$1/g;
$srczipfiles = $srczipfiles . "/*";
Ted Leung's avatar
Ted Leung committed
$srctargetdir = $OUTPUTDIR;

# Find out the platform from 'uname -a'
open(PLATFORM, "uname -a|");
$platform = <PLATFORM>;
$platform =~ m/(^\w*\s)/;
$platform = $1;
close (PLATFORM);

Rahul Jain's avatar
Rahul Jain committed
print "\nPackaging XERCES-C sources in " . $srctargetdir . " on platform " . $platform . "...\n";
Ted Leung's avatar
Ted Leung committed

&package_sources();

Ted Leung's avatar
Ted Leung committed
sub package_sources {

   # Packaging of source files begins here
   # We just copy over the relevant files from the actual source tree into
   # a mirror location, and then zip (or tar) it up

   chdir ("$srctargetdir");

   # Now copy over the files directory-by-directory
   print ("\nCopying source tree ...\n");
   system ("mkdir $srctargetdir");
   print ("Targetdir is : " . $srctargetdir . "\n");
Rahul Jain's avatar
Rahul Jain committed
   system("cp -Rf $XERCESCROOT/* $srctargetdir");
Ted Leung's avatar
Ted Leung committed

   chdir ("$srctargetdir/doc");
   system ("doxygen");

   # Now create the User documentation from the XML sources
   if (length($ICUROOT) > 0) {
   	change_documentation_entities("$srctargetdir/doc/entities.ent");
   }
Rahul Jain's avatar
Rahul Jain committed

   system("java -classpath \"../tools/jars/stylebook-1.0-b2.jar;../tools/jars/xalan-0.19.2.jar;../tools/jars/xerces-1.0.1.jar\" org.apache.stylebook.StyleBook \"targetDirectory=$srctargetdir/doc/html\" xerces-c_book.xml ../tools/jars/style-apachexml.jar");
Ted Leung's avatar
Ted Leung committed
   if ($platform =~ m/Windows/) {
      $RM = "rm";
      system("$RM -rf *.obj");
      system("$RM -rf *.dep");
      system("$RM -rf *.mak");
      system("$RM -rf Makefile");
   }
   else {   # all UNIX flavors
      $RM = "\\rm";
      system("find $srctargetdir -name \"*.o\" -print -exec rm -f {} \\;");
      system("find $srctargetdir -name \"core\" -print -exec rm -f {} \\;");
      system("find $srctargetdir -name \"a.out\" -print -exec rm -f {} \\;");
      system("find $srctargetdir -name \"Makefile\" -print -exec rm -f {} \\;");
      system("find $srctargetdir -name \"*.dep\" -print -exec rm -f {} \\;");
      system("find $srctargetdir -name \"*.mak\" -print -exec rm -f {} \\;");

      print "Changing directory permissions of the following files ...\n";
Ted Leung's avatar
Ted Leung committed
      # Change the directory permissions
      system ("chmod 644 `find $srctargetdir -type f -print`");
      system ("chmod 755 `find $srctargetdir -type d -print`");

Ted Leung's avatar
Ted Leung committed
      # Change the script file permissions
      system ("chmod 755 `find $srctargetdir -name runConfigure -print`");
      system ("chmod 755 `find $srctargetdir -name configure -print`");
      system ("chmod 755 `find $srctargetdir -name install-sh -print`");

Ted Leung's avatar
Ted Leung committed
      # To make sure that configure script is updated, run autoconf
      # chdir ("$srctargetdir/src");
      # system("autoconf"); # Our configure script is special, it has OS390 and AS400 tweaks
      # chdir ("$srctargetdir/samples");
      # system("autoconf"); # Our configure script is special, it has OS390 and AS400 tweaks
Ted Leung's avatar
Ted Leung committed
   }
Ted Leung's avatar
Ted Leung committed
   # Delete the irrelevant parts before the packaging
   system("$RM -f $srctargetdir/CMVC.GON");
   system("$RM -rf $srctargetdir/*.\$??");
   system("$RM -rf $srctargetdir/*.o");
   system("$RM -rf $srctargetdir/Build");
   system("$RM -rf $srctargetdir/build");
   system("$RM -rf $srctargetdir/bin");
   system("$RM -rf $srctargetdir/obj/*.o");
   system("$RM -rf $srctargetdir/obj/Makefile");
   system("$RM -rf $srctargetdir/obj/*.obj");
   system("$RM -rf $srctargetdir/lib");
   system("$RM -rf $srctargetdir/include");
   system("$RM -rf $srctargetdir/doc/*.zip");

   system("$RM -rf $srctargetdir/Projects/Win32/Unsupported");
   system("$RM -rf $srctargetdir/Projects/Win32/BCB4");
Ted Leung's avatar
Ted Leung committed
   system("$RM $srctargetdir/scripts/packageSources.pl");

   chdir ($srctargetdir);
   system("$RM -rf *.opt");
   system("$RM -rf *.o");
   system("$RM -rf *.so");
   system("$RM -rf *.sl");
   system("$RM -rf *.a");
Ted Leung's avatar
Ted Leung committed
   system("$RM -rf *.ncb");
   system("$RM -rf *.plg");
Ted Leung's avatar
Ted Leung committed

   # Walk through the source directory structure and delete all CVS directories
   &deleteCVSdirs($srctargetdir);

   # remove the export clauses
   chdir ("$srctargetdir/doc/html/apiDocs");
   opendir (THISDIR, "$srctargetdir/doc/html/apiDocs");
Ted Leung's avatar
Ted Leung committed
   @allfiles = grep(!/^\.\.?$/, readdir(THISDIR));
   @allhtmlfiles = grep(/\.html/, @allfiles);
   closedir(THISDIR);
   foreach $htmlfile (@allhtmlfiles) {
       &remove_export_clauses ("$srctargetdir/doc/html/apiDocs/" . $htmlfile);
Ted Leung's avatar
Ted Leung committed
   }

   chdir ("$srctargetdir/..");
   if ($platform =~ m/Windows/) {

      # Now package it all up using ZIP
      print ("\n\nZIPping up all source files ...\n");
      $srczipname = $srctargetdir . ".zip";
      print ("zip -r $srczipname $srczipfiles");
      system ("zip -r $srczipname $srczipfiles");
   }
   else {
      # Now package it all up using TAR
      print ("\n\nTARing all source files ...\n");
      $srczipname = $srctargetdir . ".tar";
      print ("tar -cvf $srczipname $srczipfiles");
      system ("tar -cvf $srczipname $srczipfiles");

Unknown (abagchi)'s avatar
Unknown (abagchi) committed
      system ("gzip $srczipname");
Ted Leung's avatar
Ted Leung committed
   }
   print ("Done with packaging sources.\n");
}

sub remove_export_clauses()
{
        my ($thefile) = @_;
        print "\nRemoving export clauses in file $thefile";
        my $thefiledotbak = $thefile . ".bak";
        rename ($thefile, $thefiledotbak);

        open (FIZZLE, $thefiledotbak);
        open (FIZZLEOUT, ">$thefile");
        while ($line = <FIZZLE>) {
                $line =~ s/SAX_EXPORT//g;
                $line =~ s/CDOM_EXPORT//g;
                $line =~ s/XMLPARSER_EXPORT//g;
                $line =~ s/PARSERS_EXPORT//g;
                $line =~ s/XMLUTIL_EXPORT//g;
Ted Leung's avatar
Ted Leung committed
                print FIZZLEOUT $line;
        }
        close (FIZZLEOUT);
        close (FIZZLE);
        unlink ($thefiledotbak);
}

sub deleteCVSdirs {
	local($dir,$nlink) = @_;
	local($dev,$ino,$mode,$subcount);
Ted Leung's avatar
Ted Leung committed
	($dev,$ino,$mode,$nlink) = stat($dir) unless $nlink;
Ted Leung's avatar
Ted Leung committed
	opendir(DIR, $dir) || die "Cannot open $dir";
	local(@filenames) = readdir(DIR);
	closedir(DIR);
Ted Leung's avatar
Ted Leung committed
	if ($nlink == 2) {
		for (@filenames) {
			next if $_ eq '.';
			next if $_ eq '..';
			print "$dir/$_\n";
		}
	}
	else {
		$subcount = $nlink - 2;
		for (@filenames) {
			next if $_ eq '.';
			next if $_ eq '..';
			$name = "$dir/$_";
			# print $name, "\n";
			next if $subcount == 0;
Ted Leung's avatar
Ted Leung committed
			($dev,$ino,$mode,$nlink) = lstat($_);
			next unless -d _;
Ted Leung's avatar
Ted Leung committed
			if ($name =~ m/CVS/i) {
				print ("Removing $name ...\n");
				system("$RM -rf $name");
				next;
			}
			chdir $_ || die "Cannot cd to $name";
			&deleteCVSdirs($name,$nlink);
			chdir '..';
			--$subcount;
		}
	}
}

sub change_documentation_entities()
{
        my ($thefile) = @_;
        print "\nConverting documentation entities ($thefile) for ICU usage...";
        my $thefiledotbak = $thefile . ".bak";
        rename ($thefile, $thefiledotbak);

        open (FIZZLE, $thefiledotbak);
        open (FIZZLEOUT, ">$thefile");
        while ($line = <FIZZLE>) {
                $line =~ s/"Xerces C\+\+ Parser"/"XML for C\+\+ Parser"/g;
                $line =~ s/"Xerces-C"/"XML4C"/g;
                $line =~ s/"1\.1\.0"/"3\.1\.0"/g;
                $line =~ s/"Xerces"/"XML4C"/g;
                $line =~ s/"xerces-c-1_1_0"/"xml4c-3_1_0"/g;
                $line =~ s/"xerces-c-src-1_1_0"/"xml4c-src-3_1_0"/g;
                $line =~ s/"xerces-c_1"/"xerces-c_1"/g;
                $line =~ s/xerces-c-dev\@xml\.apache\.org/xml4c\@us\.ibm\.com/g;
                $line =~ s/xml\.apache\.org\/dist/www\.alphaworks\.ibm\.com\/tech\/xml4c/g;
                print FIZZLEOUT $line;
        }
        close (FIZZLEOUT);
        close (FIZZLE);
        unlink ($thefiledotbak);
}