blob: a166f321a83397bd64bca2f897687b137ca33541 [file] [log] [blame]
#!/usr/bin/perl
#
# The Apache Software License, Version 1.1
#
# Copyright (c) 1999-2003 The Apache Software Foundation. All rights
# reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. The end-user documentation included with the redistribution,
# if any, must include the following acknowledgment:
# "This product includes software developed by the
# Apache Software Foundation (http://www.apache.org/)."
# Alternately, this acknowledgment may appear in the software itself,
# if and wherever such third-party acknowledgments normally appear.
#
# 4. The names "Xerces" and "Apache Software Foundation" must
# not be used to endorse or promote products derived from this
# software without prior written permission. For written
# permission, please contact apache\@apache.org.
#
# 5. Products derived from this software may not be called "Apache",
# nor may "Apache" appear in their name, without prior written
# permission of the Apache Software Foundation.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# ====================================================================
#
# This software consists of voluntary contributions made by many
# individuals on behalf of the Apache Software Foundation, and was
# originally based on software copyright (c) 1999, International
# Business Machines, Inc., http://www.ibm.com . For more information
# on the Apache Software Foundation, please see
# <http://www.apache.org/>.
#
# =============================================================================
# Author: Mike Pawlowski
# -----------------------------------------------------------------------------
# Packages XML4C source
# Requires Doxygen to be installed
# Requires Graphviz to be installed
# Requires X-windows to be running (on UNIX)
# If running on windows, make sure cygwin utilities bin overrides windows
# utilities bin in PATH
# This script will not work with the perl provided by cygwin
# -> use the ActiveState version of perl
# =============================================================================
# $Log$
# Revision 1.49 2003/10/06 19:45:51 peiyongz
# Rewrite from Mike Pawlowski.
#
# $Id$
# Includes ////////////////////////////////////////////////////////////////////
use strict;
use DirHandle;
use Getopt::Std;
use Cwd;
# Global Variables ////////////////////////////////////////////////////////////
my $xercescroot = undef;
my $above_dir = undef;
my $packages = undef;
my $old_root = undef;
my $fs = undef;
my $doc_cmd = undef;
my $sub1 = undef;
my $sub2 = undef;
my $find_delim = undef;
my $lbl1 = undef;
my $lbl2 = undef;
$| = 1;
# Functions ///////////////////////////////////////////////////////////////////
# =============================================================================
# Function [main]:
# =============================================================================
# =============================================================================
sub main {
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
get_parameters();
determine_opts();
sanity_check();
package_sources();
exit( 0 );
}
# ==================================================================
# Function [get_parameters]:
# ==================================================================
# ==================================================================
sub get_parameters {
#----------------------------------------------------------------
#----------------------------------------------------------------
my %opts = ();
my $help = undef;
getopt('xhp', \%opts);
$old_root = $opts{'x'};
$packages = $opts{'p'};
$help = $opts{'h'};
if ( defined( $help ) ||
!defined( $packages ) ||
!defined( $old_root ) ) {
print "\nperl packageSources.pl -x <xercescroot> -p <package names> [-h <help>]\n\n" .
"-x : the root of Xerces-C\n" .
"-p : the name of the source packages\n" .
"-h : this help screen\n\n";
exit( 1 );
}
return 1;
}
# ==================================================================
# Function [determine_opts]:
# ==================================================================
# ==================================================================
sub determine_opts {
#----------------------------------------------------------------
#----------------------------------------------------------------
if ( $^O =~ /win/i ) {
$fs = "\\";
$doc_cmd = 'createDocs.bat';
$sub1 = "\r\n";
$lbl1 = '\r\n';
$sub2 = "\n";
$lbl2 = '\n';
$find_delim = ';';
} else {
$ENV{DISPLAY} = ':0';
$fs = '/';
$doc_cmd = 'sh createDocs.sh';
$sub1 = "\n";
$lbl1 = '\n';
$sub2 = "\r\n";
$lbl2 = '\r\n';
$find_delim = '\;';
}
return 1;
}
# ==================================================================
# Function [sanity_check]:
# ==================================================================
# ==================================================================
sub sanity_check {
#----------------------------------------------------------------
#----------------------------------------------------------------
my $zip_file = $old_root . $fs . '..' . $fs . $packages . '.zip';
my $tar_file = $old_root . $fs . '..' . $fs . $packages . '.tar';
my $gz_file = $old_root . $fs . '..' . $fs . $packages . '.tar.gz';
if ( ! -e $old_root ) {
die "ERROR: $old_root does not exist";
} elsif ( -e $zip_file ) {
die "ERROR: $zip_file already exists";
} elsif ( -e $tar_file ) {
die "ERROR: $tar_file already exists";
} elsif ( -e $gz_file ) {
die "ERROR: $gz_file already exists";
}
return 1;
}
# ==================================================================
# Function [rename_root]:
# ==================================================================
# ==================================================================
sub rename_root {
#----------------------------------------------------------------
#----------------------------------------------------------------
# Retrive directory above Xerces-C root
pchdir( $old_root . $fs . '..' );
$above_dir = cwd();
# For some reason, cygwin on windows returns / instead of \ in the cwd
# -> get rid of them
if ( $^O =~ /win/i ) {
$above_dir =~ s/\//\\/g;
}
# Rename Xerces-C root
$xercescroot = $above_dir . $fs . $packages;
rename( $old_root, $xercescroot );
return 1;
}
# ==================================================================
# Function [pchdir]:
# ==================================================================
# ==================================================================
sub pchdir {
#----------------------------------------------------------------
my $dir = shift;
#----------------------------------------------------------------
my $status = 0;
print "\nChange Directory: $dir\n";
$status = chdir( $dir );
print "\n -> Status: [$status]\n";
return 1;
}
# ==================================================================
# Function [psystem]:
# ==================================================================
# ==================================================================
sub psystem {
#----------------------------------------------------------------
my $command = shift;
#----------------------------------------------------------------
my $status = 0;
print "\nSystem Command: $command\n";
$status = system( $command );
print "\n -> Status: [$status]\n";
return 1;
}
# ==================================================================
# Function [pmkdir]:
# ==================================================================
# ==================================================================
sub pmkdir {
#----------------------------------------------------------------
my $dir = shift;
#----------------------------------------------------------------
my $status = 0;
print "\nMaking Directory: $dir\n";
$status = mkdir( $dir, 0755 );
print "\n -> Status: [$status]\n";
return 1;
}
# ==================================================================
# Function [convert]:
# ==================================================================
# ==================================================================
sub convert {
#----------------------------------------------------------------
#----------------------------------------------------------------
my $file = undef;
my $cmd = 'find . -name "*" -exec file {} ' . $find_delim . ' | grep "text"';
my $line = undef;
my $rest = undef;
my $pid = undef;
$pid = open( README, "$cmd |");
while ( $line = <README> ) {
( $file, $rest ) = split( /:/, $line );
do_sub( $file );
}
close( README );
}
# ==================================================================
# Function [do_sub]:
# ==================================================================
# ==================================================================
sub do_sub {
#----------------------------------------------------------------
my $file = shift;
#----------------------------------------------------------------
my $bak = undef;
my $line = undef;
print "Substituting $lbl1 with $lbl2: $file\n";
$bak = $file . '.bak';
rename ( $file, $bak );
open ( IN, "<$bak" );
open ( OUT, ">$file" );
while ( $line = <IN> ) {
$line =~ s/$sub1/$sub2/g;
print OUT $line;
}
close ( OUT );
close ( IN );
unlink ( $bak );
return 1;
}
# ==================================================================
# Function [remove_exports]:
# ==================================================================
# ==================================================================
sub remove_exports {
#----------------------------------------------------------------
my $dir = shift;
#----------------------------------------------------------------
my $dh = undef;
my $file = undef;
my $bak = undef;
my $line = undef;
$dh = DirHandle->new( $dir );
while ( defined ( $file = $dh->read() ) ) {
if ( $file =~ /\.html$/ ) {
print "Removing export clauses: $file\n";
$file = $dir . $fs . $file;
$bak = $file . '.bak';
rename ( $file, $bak );
open ( IN, "<$bak" );
open ( OUT, ">$file" );
while ( $line = <IN> ) {
$line =~ s/SAX_EXPORT//g;
$line =~ s/SAX2_EXPORT//g;
$line =~ s/CDOM_EXPORT//g;
$line =~ s/XMLPARSER_EXPORT//g;
$line =~ s/PARSERS_EXPORT//g;
$line =~ s/XMLUTIL_EXPORT//g;
print OUT $line;
}
close ( OUT );
close ( IN );
unlink ( $bak );
}
}
return 1;
}
# ==================================================================
# Function [package_sources]:
# ==================================================================
# ==================================================================
sub package_sources {
#----------------------------------------------------------------
#----------------------------------------------------------------
print "\nPACKAGING SOURCES\n";
print "\nRENAMING ROOT\n\n";
rename_root();
print "\nEXECUTING DOXYGEN\n\n";
pchdir( $xercescroot . $fs . 'doc' );
psystem( 'doxygen' );
print "\nCREATING DOCS\n\n";
pchdir( $xercescroot );
psystem( $doc_cmd );
print "\nDELETING FILES\n\n";
pchdir( $xercescroot );
psystem( 'find . -depth -type "d" -name "CVS" -exec rm -fr {} ' . $find_delim );
psystem( 'rm -rf .' . $fs . 'samples' . $fs . 'Projects' . $fs . 'OS2' );
psystem( 'rm -rf .' . $fs . 'Projects' . $fs . 'OS2' );
psystem( 'rm -rf .' . $fs . 'Projects' . $fs . 'Win32' . $fs . 'BCB4' );
psystem( 'rm -rf .' . $fs . 'Projects' . $fs . 'Win32' . $fs . 'BCB5' );
psystem( 'rm -rf .' . $fs . 'Projects' . $fs . 'Win32' . $fs . 'Unsupported' );
psystem( 'rm -rf .' . $fs . 'Projects' . $fs . 'Win32' . $fs . 'VACPP40' );
print "\nCHANGING FILE PERMISSIONS\n\n";
pchdir( $xercescroot );
psystem( 'find . -type f -exec chmod 644 {} ' . $find_delim );
psystem( 'find . -type d -exec chmod 755 {} ' . $find_delim );
psystem( 'find . -name "con*" -exec chmod 755 {} ' . $find_delim );
psystem( 'find . -name "run*" -exec chmod 755 {} ' . $find_delim );
psystem( 'find . -name "install*" -exec chmod 755 {} ' . $find_delim );
print "\nREMOVING EXPORT CLAUSES\n\n";
remove_exports( $xercescroot . $fs . 'doc' . $fs . 'html' . $fs . 'apiDocs' );
print "\nREMOVING MYSELF\n\n";
pchdir( $xercescroot );
psystem( 'rm .' . $fs . 'scripts' . $fs . 'packageSources.pl' );
if ( $^O =~ /win/i ) {
print "\nCREATING WINDOWS PACKAGE\n\n";
pchdir( $xercescroot . $fs . '..' );
psystem ( "zip -qr ${packages}\.zip $packages" );
} else {
print "\nCREATING UNIX PACKAGE\n\n";
pchdir( $xercescroot . $fs . '..' );
psystem ( "tar -cf ${packages}\.tar $packages" );
psystem ( "gzip ${packages}\.tar" );
}
print "\nCONVERTING ASCII FILES\n\n";
pchdir( $xercescroot );
convert();
if ( $^O =~ /win/i ) {
print "\nCREATING UNIX PACKAGE\n\n";
pchdir( $xercescroot . $fs . '..' );
psystem ( "tar -cf ${packages}\.tar $packages" );
psystem ( "gzip ${packages}\.tar" );
} else {
print "\nCREATING WINDOWS PACKAGE\n\n";
pchdir( $xercescroot . $fs . '..' );
psystem ( "zip -qr ${packages}\.zip $packages" );
}
print "\nSOURCE PACKAGING COMPLETE\n\n";
return 1;
}
# Main Program /////////////////////////////////////////////////////////////
main();