diff options
Diffstat (limited to 'ACE/bin')
382 files changed, 28271 insertions, 0 deletions
diff --git a/ACE/bin/ACE-casts-convert b/ACE/bin/ACE-casts-convert new file mode 100755 index 00000000000..0b158ea1afa --- /dev/null +++ b/ACE/bin/ACE-casts-convert @@ -0,0 +1,50 @@ +#! /bin/sh + +# ============================================================================= +# +# @file ACE-casts-convert +# +# $Id$ +# +# Script to convert all ACE cast macro calls (e.g. +# ACE_static_cast (foo, bar)) to their standard C++ counterparts (e.g. +# static_cast<foo> (bar)). +# +# Use this script at your own risk. It appears to work correctly for +# most cases, but verify the results "just in case". +# +# @note Wildcards may be supplied as the "FILE" arguments to this +# script since the shell should expand the wildcards before +# executing the script. +# +# @bug The sed program used in this script may loop indefinitely on +# ACE casts with arguments split across multiple lines +# containing patterns it doesn't recognize. +# +# @author Ossama Othman +# +# ============================================================================= + + +if test "$#" -eq 0; then + echo "Usage: $0 FILE [FILE2] ..." + echo "" + exit 1 +fi + +echo "" +echo "Converting ACE cast macro calls to standard C++ syntax in:" + +while test "$#" -gt 0 +do + arg="$1" + shift + + if grep "ACE_\(static\|dynamic\|const\|reinterpret\)_cast" $arg > /dev/null 2>&1; then + echo " $arg" + sed -e :a -e 's/ACE_\(const\|static\|reinterpret\|dynamic\)_cast[ \t]*([ \t]*\([^,]*\)[ \t]*,[ \t]*\([^ \t].*\)/\1_cast<\2> (\3/g; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast[ \t]*([ \t]*\([^,]*\)[ \t]*,[ \t]*$/{N;s/\n//;ba;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast[ \t]*([ \t]*$/{N;s/\n//;ba;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast[ \t]*$/{N;s/\n//;ba;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast[ \t]*(/ba' \ + -e :aa -e 's/ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ref[ \t]*([ \t]*\([^,]*\)[ \t]*,\(.*\),[ \t]*\([^,]*\)/\1_cast<\2<\3> \&> (\4/g; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ref[ \t]*([ \t]*\([^,]*\)[ \t]*,[ \t]*$/{N;s/\n//;baa;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ref[ \t]*([ \t]*$/{N;s/\n//;baa;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ref[ \t]*$/{N;s/\n//;baa;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ref[ \t]*(/baa' \ + -e :aaa -e 's/ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ptr[ \t]*([ \t]*\([^,]*\)[ \t]*,\(.*\),[ \t]*\([^,]*\)/\1_cast<\2<\3> \*> (\4/g; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ptr[ \t]*([ \t]*\([^,]*\)[ \t]*,[ \t]*$/{N;s/\n//;baaa;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ptr[ \t]*([ \t]*$/{N;s/\n//;baaa;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ptr[ \t]*$/{N;s/\n//;baaa;}; /ACE_\(const\|static\|reinterpret\|dynamic\)_cast_[1-5]_ptr[ \t]*(/baaa' $arg > ${arg}.new + mv ${arg}.new $arg + fi +done diff --git a/ACE/bin/ACEutils.pm b/ACE/bin/ACEutils.pm new file mode 100644 index 00000000000..b7e5a24217c --- /dev/null +++ b/ACE/bin/ACEutils.pm @@ -0,0 +1,117 @@ +# $Id$ + +require Process; +$EXEPREFIX = ".".$DIR_SEPARATOR; +$TARGETHOSTNAME = "localhost"; + +package ACE; + +sub CheckForExeDir +{ + for($i = 0; $i <= $#ARGV; $i++) { + if ($ARGV[$i] eq '-ExeSubDir') { + if (defined $ARGV[$i + 1]) { + $::EXEPREFIX = $ARGV[$i + 1].$::DIR_SEPARATOR; + } + else { + print STDERR "You must pass a directory with ExeSubDir\n"; + exit(1); + } + splice(@ARGV, $i, 2); + } + } +} + + +### Check and remove, but don't actually use +sub CheckForConfig +{ + for($i = 0; $i <= $#ARGV;) { + if ($ARGV[$i] eq '-Config') { + if (!defined $ARGV[$i + 1]) { + print STDERR "You must pass a configuration with Config\n"; + exit(1); + } + splice(@ARGV, $i, 2); + } else { + $i++; + } + } +} + +sub checkForTarget +{ + my($cwd) = shift; + + for($i = 0; $i <= $#ARGV; $i++) { + if ($ARGV[$i] eq '-chorus') { + if (defined $ARGV[$i + 1]) { + $::TARGETHOSTNAME = $ARGV[$i + 1]; + $::EXEPREFIX = "rsh $::TARGETHOSTNAME arun $cwd$::DIR_SEPARATOR"; + } + else { + print STDERR "The -chorus option requires " . + "the hostname of the target\n"; + exit(1); + } + splice(@ARGV, $i, 2); + # Don't break from the loop just in case there + # is an accidental duplication of the -chorus option + } + } +} + + +# Returns a unique id, uid for unix, last digit of IP for NT +sub uniqueid +{ + if ($^O eq "MSWin32") + { + my $uid = 1; + + open (IPNUM, "ipconfig|") || die "Can't run ipconfig: $!\n"; + + while (<IPNUM>) + { + if (/Address/) + { + $uid = (split (/: (\d+)\.(\d+)\.(\d+)\.(\d+)/))[4]; + } + } + + close IPNUM; + + return $uid; + } + else + { + return getpwnam (getlogin ()); + } +} + +# Waits until a file exists +sub waitforfile +{ + local($file) = @_; + sleep 1 while (!(-e $file && -s $file)); +} + +sub waitforfile_timed +{ + my $file = shift; + my $maxtime = shift; + while ($maxtime-- != 0) { + if (-e $file && -s $file) { + return 0; + } + sleep 1; + } + return -1; +} + +$sleeptime = 5; + +CheckForExeDir (); +CheckForConfig (); + +1; diff --git a/ACE/bin/ADDIDL.DSM b/ACE/bin/ADDIDL.DSM new file mode 100644 index 00000000000..b53ea3eb636 --- /dev/null +++ b/ACE/bin/ADDIDL.DSM @@ -0,0 +1,150 @@ +' +'********************************************************************** +' $Header$ +' $NoKeywords: $ +' +' @doc AddIDL +' +' Macros for Microsoft Visual Studio. +' +' @comm To install this file go to Tools->Customize->Macro Files->Browse... +' +'********************************************************************** +' + + +'@bsub Add an IDL file into all build projects in the current workspace. +'@comm This routine also sets up the custom build options require for the TAO +'CORBA implementation. The use can select to create a new file or just add a reference +'to the project (e.g. if a file already exists).If a new file is created, then a +'basic outline for an OMG module or interface declaration is inserted. Note that the inline +'file extension is defined by INLINE_EXTENSION. +' +Sub AddIDLFile() +'DESCRIPTION: Add new IDL File with TAO custom build entries to all build projects in the workspace. + + On Error Resume Next + + 'Define the extension used for inline files here + INLINE_EXTENSION = "inl" + + WkSpaceDir = Application.CurrentDirectory + ModuleName = InputBox("module (namespace or extensionless IDL filename):") + FileName = ModuleName + WkSpaceDir=InputBox("Directory for IDL file: ","Output Directory",WkSpaceDir) + + if WkSpaceDir="" then + Exit Sub + end if + + if Right(WkSpaceDir,1) <> "\" then + WkSpaceDir=WkSpaceDir+"\" + end if + + IDLFile = WkSpaceDir+FileName +".idl" + + 'Try to a file with this path/name + Documents.Open IDLFile + + 'If such a file already exists then it should now be the active doc + if ActiveDocument.Fullname = IDLFile then + + if msgbox("Overwrite the existing file ?",vbYesNo) = vbNo then + NewFile = 0 + else + 'Close the file before we modify it + ActiveDocument.Close + NewFile = 1 + end if + else + NewFile =1 + end if + + 'If NewFile is set to 1 then create the outline for a OMG IDL module + if NewFile = 1 then + InterfaceName = InputBox("interface:") + + if msgbox("Include a module ("+ ModuleName+") declaration",vbYesNo) = vbYes then + Descr = vbLF + vbLF + "#if !defined (_" + UCase(ModuleName) + "_IDL)" + vbLF + _ + "#define _" + UCase(ModuleName) + "_IDL" + vbLF +vbLF + _ + "//"+vbLF+"//" +vbLF + "module " + ModuleName + " {" +vbLF + _ + " //" + vbLF + _ + " interface " + InterfaceName + "{"+vbLF + _ + " //Definitions"+ vbLF + vbLF+ vbLF + _ + " //Operations"+ vbLF + vbLF+ vbLF + _ + " //Properties"+ vbLF+ vbLF + _ + " };"+vbLF + "};"+vbLF +vbLF + _ + "#endif /* _"+ UCase(ModuleName) +"_IDL */"+vbLF + else + Descr = vbLF + vbLF + "#if !defined (_" + UCase(ModuleName) + "_IDL)" + vbLF + _ + "#define _" + UCase(ModuleName) + "_IDL" + vbLF +vbLF + _ + " //" + vbLF + _ + " //" + vbLF + _ + " interface " + InterfaceName + "{"+vbLF + _ + " //Definitions"+ vbLF + vbLF+ vbLF + _ + " //Operations"+ vbLF + vbLF+ vbLF + _ + " //Properties"+ vbLF+ vbLF + _ + " };"+vbLF +vbLF + _ + "#endif /* _"+ UCase(ModuleName) +"_IDL */"+vbLF + end if + + CreateCppFile IDLFile, Descr + end if + + Dim proj + ' Add the files to each project + 'Note that the inline files do not need to be added + for each proj in Projects + if msgbox("Add "+ IDLFile +" and the IDL compiler output files to "+ proj +" ?",vbYesNo) = vbYes then + ProjectPath= Left(proj.FullName,InStrRev(proj.FullName,"\")-1) + + proj.AddFile IDLFile + proj.AddFile WkSpaceDir+ModuleName + "C.cpp" + proj.AddFile WkSpaceDir+ModuleName + "C.h" + proj.AddFile WkSpaceDir+ModuleName + "S.cpp" + proj.AddFile WkSpaceDir+ModuleName + "S.h" + proj.AddFile WkSpaceDir+ModuleName + "S_T.cpp" + proj.AddFile WkSpaceDir+ModuleName + "S_T.h" + + Dim cfg + ' Add the custom build for each configuration in each project + If proj.Type = "Build" Then + Commands="%ACE_ROOT%\bin\tao_idl.exe -ci C."+ INLINE_EXTENSION +" -si S.inl -st S_T."+ INLINE_EXTENSION +" " + IDLFile + Output = "$(InputName)C.cpp" + vbLF + _ + "$(InputName)C.h" + vbLF + _ + "$(InputName)C."+ INLINE_EXTENSION +"" + vbLF + _ + "$(InputName)S.cpp" + vbLF + _ + "$(InputName)S.h" + vbLF + _ + "$(InputName)S."+ INLINE_EXTENSION +"" + vbLF + _ + "$(InputName)S_T.cpp" + vbLF + _ + "$(InputName)S_T.h" + vbLF + _ + "$(InputName)S_T."+ INLINE_EXTENSION +"" + + for each cfg in proj.Configurations + cfg.AddCustomBuildStepToFile IDLFile, Commands, Output, "Running the TAO IDL Compiler on $(InputPath)..." + next + End If + end if + next +End Sub + + + + + +'@bsub Creates a C/C++ file. +'@comm This routine will create a C or C++ source file f, with content c. +'The new file will become the active doc. +' +Function CreateCppFile(byval f, byval c) +'DESCRIPTION: Creates a .cpp file. + + On Error Resume Next + Documents.Add "Text" + ActiveDocument.Language = "C/C++" + ActiveDocument.Selection = c + ActiveDocument.Selection.NewLine + ActiveDocument.Save f + +End Function + diff --git a/ACE/bin/Array.pl b/ACE/bin/Array.pl new file mode 100755 index 00000000000..7f9bf393e15 --- /dev/null +++ b/ACE/bin/Array.pl @@ -0,0 +1,31 @@ +#!/bin/sh -- # -*- perl -*- +eval 'exec perl -pi.Array.$$ -S $0 ${1+"$@"}' + if 0; + +# $Id$ + +# +# After the 4.6.10 release the template instantiations for ACE_Array +# have changed, the class is implemented in terms of ACE_Array_Base; +# this script fixes the template instantiations if needed. +# +# It changes instantiations of: +# +# ACE_Array<T> +# +# into: +# +# ACE_Array<T> +# ACE_Array_Base<T> +# + +# Notice the use of the -pi options: the while(<>) loop is implicit, +# printing the current line is also implicit as well as fixing the +# file in place. + +if (m/template class\s+ACE_Array\s*<(.*)>\s*;\s*/) { + print "template class ACE_Array_Base<", $1, ">;\n"; +} elsif (m/#pragma instantiate\s+ACE_Array\s*<(.*)>\s*$/) { + print "#pragma instantiate ACE_Array_Base<", $1, ">\n"; +} + diff --git a/ACE/bin/Array_Helper b/ACE/bin/Array_Helper new file mode 100755 index 00000000000..6ffce3b799e --- /dev/null +++ b/ACE/bin/Array_Helper @@ -0,0 +1,16 @@ +#! /bin/sh +# +# $Id$ +# + +# Finds all files that instantiate ACE_Array and runs the Array.pl +# perl script on them, please check $ACE_ROOT/bin/Array.pl for more +# details. + +find $* -type f -a \( -name '*.h' \ + -o -name '*.i' \ + -o -name '*.cpp' \) | + xargs egrep -l 'template[ \t]*class[ \t]*ACE_Array[ \t]*\<' | + xargs perl -pi $ACE_ROOT/bin/Hash_Map_Manager.pl + + diff --git a/ACE/bin/ChangeLogEditor/CVSFileLocator.pm b/ACE/bin/ChangeLogEditor/CVSFileLocator.pm new file mode 100644 index 00000000000..d5cc9ff5cbe --- /dev/null +++ b/ACE/bin/ChangeLogEditor/CVSFileLocator.pm @@ -0,0 +1,117 @@ +package CVSFileLocator; + +# ************************************************************ +# Description : Use CVS to determine the list of modified files. +# Author : Chad Elliott +# Create Date : 11/29/2005 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use FileHandle; + +use FileLocator; + +use vars qw(@ISA); +@ISA = qw(FileLocator); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub locate { + my($self) = shift; + my(@dirs) = @_; + my($fh) = new FileHandle(); + my(@modified) = (); + my(@removed) = (); + my(@conflicts) = (); + my(@unknown) = (); + my($cvsroot) = $self->obtainCVSROOT(); + my($nul) = ($^O eq 'MSWin32' ? 'nul' : '/dev/null'); + + if (open($fh, 'cvs -q ' . (defined $cvsroot ? "-d $cvsroot " : '') . + "-n update @dirs 2> $nul |")) { + while(<$fh>) { + my($line) = $_; + if ($line =~ /^[AM]\s+(.*)/) { + push(@modified, $1); + } + elsif ($line =~ /^[R]\s+(.*)/) { + push(@removed, $1); + } + elsif ($line =~ /^[C]\s+(.*)/) { + push(@conflicts, $1); + } + elsif ($line =~ /^[\?]\s+(.*)/) { + push(@unknown, $1); + } + } + close($fh); + } + return \@modified, \@removed, \@conflicts, \@unknown; +} + + +sub obtainCVSROOT { + my($self) = shift; + my($fh) = new FileHandle(); + my($croot) = undef; + + if (open($fh, 'CVS/Root')) { + while(<$fh>) { + my($line) = $_; + $line =~ s/\s+$//; + if ($line =~ /^:pserver/ || $line =~ /^:ext/) { + if (defined $ENV{CVSROOT} && $line eq $ENV{CVSROOT}) { + last; + } + else { + my($check) = $line; + $check =~ s/:\w+\@/:\@/; + $check =~ s/\.\w+\.\w+:/:/; + my($clen) = length($check); + foreach my $key (keys %ENV) { + my($echeck) = $ENV{$key}; + $echeck =~ s/:\w+\@/:\@/; + $echeck =~ s/\.\w+\.\w+:/:/; + if ($check eq $echeck) { + $croot = $ENV{$key}; + last; + } + else { + my($len) = length($echeck); + if ($len > 0 && + substr($check, $clen - $len, $len) eq $echeck) { + $croot = $ENV{$key}; + last; + } + } + } + if (defined $croot) { + last; + } + } + if (!defined $croot) { + $croot = $line; + } + } + else { + $croot = $line; + last; + } + } + close($fh); + } + else { + $croot = $ENV{CVSROOT}; + } + + return $croot; +} + + +1; diff --git a/ACE/bin/ChangeLogEditor/ChangeLogEdit.pm b/ACE/bin/ChangeLogEditor/ChangeLogEdit.pm new file mode 100644 index 00000000000..b7831ae2e5b --- /dev/null +++ b/ACE/bin/ChangeLogEditor/ChangeLogEdit.pm @@ -0,0 +1,121 @@ +package ChangeLogEdit; + +# ************************************************************ +# Description : Edit the existing ChangeLog. +# Author : Chad Elliott +# Create Date : 9/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use FileHandle; +use File::Copy; + +use ChangeLogEntry; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + my($class) = shift; + my($name) = shift; + my($email) = shift; + my($self) = bless {'name' => $name, + 'email' => $email, + }, $class; + return $self; +} + + +sub edit { + my($self) = shift; + my($ofile) = shift; + my(@dirs) = @_; + my($tfile) = "$ofile.$<.$$"; + my($status) = 0; + my($error) = ''; + my($rh) = new FileHandle(); + my($unknown) = undef; + + if (open($rh, $ofile)) { + my($creator) = new ChangeLogEntry($self->{'name'}, + $self->{'email'}); + my($entry) = ''; + ($entry, $unknown) = $creator->create(@dirs); + if (defined $entry) { + if ($entry =~ /^ERROR:/) { + $error = $entry; + } + else { + my($oh) = new FileHandle(); + if (open($oh, ">$tfile")) { + $status = print $oh $entry; + if ($status) { + while(<$rh>) { + my($line) = $_; + $line =~ s/\s+$//; + if ($line =~ /\t/) { + $line = $self->convertTabs($line); + } + $status = print $oh "$line\n"; + if ($status == 0) { + $error = "Unable to copy $ofile"; + last; + } + } + } + else { + $error = 'Unable to print the first entry'; + } + close($oh); + } + else { + $error = "Unable to open $tfile for writing"; + } + close($rh); + + if ($status) { + $status = 0; + if (unlink($ofile)) { + if (rename($tfile, $ofile)) { + $status = 1; + } + else { + $error = "Unable to rename $tfile to $ofile"; + } + } + else { + $error = "Unable to remove $ofile"; + } + } + } + } + else { + $error = "Either there are no modified/removed files files or " . + "there is a revision\ncontrol system problem."; + } + } + else { + $error = "Unable to open $ofile for reading"; + } + + return $status, $error, $unknown; +} + + +sub convertTabs { + my($self) = shift; + my($line) = shift; + while($line =~ /\t/) { + my($spaces) = 8 - (index($line, "\t") % 8); + $line =~ s/\t/sprintf("%${spaces}s", ' ')/e; + } + return $line; +} + + +1; diff --git a/ACE/bin/ChangeLogEditor/ChangeLogEntry.pm b/ACE/bin/ChangeLogEditor/ChangeLogEntry.pm new file mode 100644 index 00000000000..2028dec1874 --- /dev/null +++ b/ACE/bin/ChangeLogEditor/ChangeLogEntry.pm @@ -0,0 +1,144 @@ +package ChangeLogEntry; + +# ************************************************************ +# Description : Create a ChangeLog entry based on modified files. +# Author : Chad Elliott +# Create Date : 6/18/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use File::Basename; + +use FileLocatorFactory; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + my($class) = shift; + my($name) = shift; + my($email) = shift; + my($self) = bless {'name' => $name, + 'email' => $email, + }, $class; + return $self; +} + + +sub escape_regex_special { + my($self) = shift; + my($name) = shift; + + $name =~ s/([\+\-\\\$\[\]\(\)\.])/\\$1/g; + return $name; +} + + +sub sortFileList { + my($self) = shift; + return sort { + if ($a =~ /\.h$/) { + my($base) = $a; + $base =~ s/\.h//; + $base = $self->escape_regex_special($base); + if ($b =~ /^$base\./) { + return -1; + } + else { + return $a cmp $b; + } + } + elsif ($a =~ /\.i(nl)?$/) { + my($base) = $a; + $base =~ s/\.i(nl)?$//; + $base = $self->escape_regex_special($base); + if ($b =~ /^$base\.cpp/) { + return -1; + } + else { + return $a cmp $b; + } + } + elsif ($a =~ /\.cpp?$/) { + my($base) = $a; + $base =~ s/\.cpp?$//; + $base = $self->escape_regex_special($base); + if ($b =~ /^$base\./) { + return 1; + } + else { + return $a cmp $b; + } + } + return $a cmp $b; + } @_; +} + + +sub create { + my($self) = shift; + my(@dirs) = @_; + my($fl) = FileLocatorFactory::create(); + my($modif, + $remov, + $confl, + $unknown) = $fl->locate(@dirs); + my($entry) = scalar(gmtime()); + + if (defined $$confl[0]) { + $entry = "ERROR: The following files have conflicts:\n"; + foreach my $file (@$confl) { + $entry .= "$file\n"; + } + } + else { + my($prefix) = ' * '; + + ## Correct the timezone (if there is any) + my($tz) = 'UTC'; + $entry =~ s/(:\d\d\s+)(.*)(\d\d\d\d)$/$1$tz $3/; + + ## Add the name and email address + $entry .= " $self->{'name'} <$self->{'email'}>\n\n"; + + my($previous) = undef; + foreach my $file ($self->sortFileList(@$modif)) { + my($directory) = dirname($file); + if (defined $previous && $previous ne $directory) { + $entry .= "\n"; + } + $entry .= "$prefix$file:\n"; + $previous = $directory; + } + $previous = ''; + my($removed) = 0; + foreach my $file ($self->sortFileList(@$remov)) { + my($directory) = dirname($file); + if (defined $previous && $previous ne $directory) { + $entry .= "\n"; + } + $entry .= "$prefix$file:\n"; + $previous = $directory; + $removed++; + } + if ($removed) { + $entry .= "\n Removed " . + ($removed > 1 ? 'these files' : 'this file') . ".\n"; + } + $entry .= "\n"; + } + + if (!defined $$modif[0] && !defined $$remov[0]) { + $entry = undef; + } + + return $entry, $unknown; +} + + +1; diff --git a/ACE/bin/ChangeLogEditor/EmailTranslator.pm b/ACE/bin/ChangeLogEditor/EmailTranslator.pm new file mode 100644 index 00000000000..eacbff22497 --- /dev/null +++ b/ACE/bin/ChangeLogEditor/EmailTranslator.pm @@ -0,0 +1,52 @@ +package EmailTranslator; + +# ************************************************************ +# Description : Translate the given user name and domain into +# an email address. +# Author : Chad Elliott +# Create Date : 6/18/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use FileHandle; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + my($class) = shift; + my($domain) = shift; + my($self) = bless {'domain' => "\@$domain", + }, $class; + return $self; +} + + +sub translate { + my($self) = shift; + my($name) = shift; + my($domain) = $self->{'domain'}; + my($email) = "$name$domain"; + my(%special) = (); + + if (defined $ENV{REPLYTO}) { + $email = $ENV{REPLYTO}; + } + elsif (defined $special{$name}) { + $email = $special{$name} . $domain; + } + elsif ($name =~ /([^\s]+)\s+([^\s]+)/) { + ## Last name underscore first initial + $email = lc($2 . '_' . substr($1, 0, 1)) . $domain; + } + + return $email; +} + + +1; diff --git a/ACE/bin/ChangeLogEditor/FileLocator.pm b/ACE/bin/ChangeLogEditor/FileLocator.pm new file mode 100644 index 00000000000..7b768863a22 --- /dev/null +++ b/ACE/bin/ChangeLogEditor/FileLocator.pm @@ -0,0 +1,39 @@ +package FileLocator; + +# ************************************************************ +# Description : Base class for file locators. +# Author : Chad Elliott +# Create Date : 6/18/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use FileHandle; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + my($class) = shift; + my($self) = bless { + }, $class; + return $self; +} + + +sub locate { + my($self) = shift; + my(@dirs) = @_; + my(@modified) = (); + my(@removed) = (); + my(@conflicts) = (); + my(@unknown) = (); + return \@modified, \@removed, \@conflicts, \@unknown; +} + + +1; diff --git a/ACE/bin/ChangeLogEditor/FileLocatorFactory.pm b/ACE/bin/ChangeLogEditor/FileLocatorFactory.pm new file mode 100644 index 00000000000..7b9ba382ebd --- /dev/null +++ b/ACE/bin/ChangeLogEditor/FileLocatorFactory.pm @@ -0,0 +1,34 @@ +package FileLocatorFactory; + +# ************************************************************ +# Description : Create FileLocator objects. +# Author : Chad Elliott +# Create Date : 11/29/2005 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +use CVSFileLocator; +use SVNFileLocator; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub create { + switch: { + -d 'CVS' && do { return new CVSFileLocator(); }; + ((defined $ENV{SVN_ASP_DOT_NET_HACK} && -d '_svn') || -d '.svn') + && do { return new SVNFileLocator(); }; + print STDERR "WARNING: Unsupported revision control protocol\n"; + } + + return new FileLocator(); +} + + +1; diff --git a/ACE/bin/ChangeLogEditor/SVNFileLocator.pm b/ACE/bin/ChangeLogEditor/SVNFileLocator.pm new file mode 100644 index 00000000000..246b9dc9c7f --- /dev/null +++ b/ACE/bin/ChangeLogEditor/SVNFileLocator.pm @@ -0,0 +1,53 @@ +package SVNFileLocator; + +# ************************************************************ +# Description : Use SVN to determine the list of modified files. +# Author : Chad Elliott +# Create Date : 11/29/2005 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use FileHandle; + +use FileLocator; + +use vars qw(@ISA); +@ISA = qw(FileLocator); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub locate { + my($self) = shift; + my(@dirs) = @_; + my($fh) = new FileHandle(); + my(@modified) = (); + my(@removed) = (); + my(@conflicts) = (); + my(@unknown) = (); + my($nul) = ($^O eq 'MSWin32' ? 'nul' : '/dev/null'); + + if (open($fh, "svn diff @dirs 2> $nul |")) { + while(<$fh>) { + my($line) = $_; + if ($line =~ /^Index:\s+(.*)/) { + if (-r $1) { + push(@modified, $1); + } + else { + push(@removed, $1); + } + } + } + close($fh); + } + return \@modified, \@removed, \@conflicts, \@unknown; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/DependencyEditor.pm b/ACE/bin/DependencyGenerator/DependencyEditor.pm new file mode 100644 index 00000000000..646ae2ae574 --- /dev/null +++ b/ACE/bin/DependencyGenerator/DependencyEditor.pm @@ -0,0 +1,118 @@ +package DependencyEditor; + +# ************************************************************ +# Description : Edits existing dependencies. +# Author : Chad Elliott +# Create Date : 2/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use FileHandle; + +use DependencyGenerator; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + return bless { + }, $_[0]; +} + + +sub process { + my($self) = shift; + my($output) = shift; + my($type) = shift; + my($noinline) = shift; + my($macros) = shift; + my($ipaths) = shift; + my($replace) = shift; + my($exclude) = shift; + my($files) = shift; + + ## Back up the original file and receive the contents + my($contents) = undef; + if (-s $output) { + $contents = []; + if (!$self->backup($output, $contents)) { + print STDERR "ERROR: Unable to backup $output\n"; + return 1; + } + } + + ## Write out the new file + my($fh) = new FileHandle(); + if (open($fh, ">$output")) { + if (defined $contents) { + foreach my $line (@$contents) { + print $fh $line; + } + } + + print $fh "# DO NOT DELETE THIS LINE -- depgen.pl uses it.\n", + "# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.\n\n"; + + my($dep) = new DependencyGenerator($macros, $ipaths, $replace, + $type, $noinline, $exclude); + ## Sort the files so the dependencies are reproducible + foreach my $file (sort @$files) { + print $fh $dep->process($file), "\n"; + } + + print $fh "# IF YOU PUT ANYTHING HERE IT WILL GO AWAY\n"; + close($fh); + } + else { + print STDERR "ERROR: Unable to open $output for output\n"; + return 1; + } + + return 0; +} + + +sub backup { + my($self) = shift; + my($source) = shift; + my($contents) = shift; + my($status) = 0; + my($fh) = new FileHandle(); + my($backup) = "$source.bak"; + + if (open($fh, $source)) { + my($oh) = new FileHandle(); + if (open($oh, ">$backup")) { + my($record) = 1; + $status = 1; + while(<$fh>) { + print $oh $_; + if ($record) { + if (index($_, 'DO NOT DELETE') >= 0) { + $record = undef; + } + else { + push(@$contents, $_); + } + } + } + close($oh); + + ## Set file permission + my(@buf) = stat($source); + if (defined $buf[8] && defined $buf[9]) { + utime($buf[8], $buf[9], $backup); + } + } + close($fh); + } + return $status; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/DependencyGenerator.pm b/ACE/bin/DependencyGenerator/DependencyGenerator.pm new file mode 100644 index 00000000000..58caa43b53e --- /dev/null +++ b/ACE/bin/DependencyGenerator/DependencyGenerator.pm @@ -0,0 +1,77 @@ +package DependencyGenerator; + +# ************************************************************ +# Description : Runs the correct dependency generator on the file. +# Author : Chad Elliott +# Create Date : 2/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +use Preprocessor; +use DependencyWriterFactory; +use ObjectGeneratorFactory; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + my($class) = shift; + my($macros) = shift; + my($ipaths) = shift; + my($replace) = shift; + my($type) = shift; + my($noinline) = shift; + my($exclude) = shift; + my($self) = bless {'pre' => new Preprocessor($macros, + $ipaths, $exclude), + 'replace' => $replace, + 'dwrite' => DependencyWriterFactory::create($type), + 'objgen' => ObjectGeneratorFactory::create($type), + 'noinline' => $noinline, + }, $class; + + ## Set the current working directory, but + ## escape regular expression special characters + $self->{'cwd'} = Cwd::getcwd() . '/'; + $self->{'cwd'} =~ s/([\+\-\\\$\[\]\(\)\.])/\\$1/g; + + ## Sort the replace keys to get the longest key first. This way + ## when we are replacing portions of the file path, we replace the + ## most we can. + my(@repkeys) = sort { length($b) <=> length($a) } keys %$replace; + $self->{'repkeys'} = \@repkeys; + + return $self; +} + + +sub process { + my($self) = shift; + my($file) = shift; + + ## Generate the dependency string + my($depstr) = $self->{'dwrite'}->process( + $self->{'objgen'}->process($file), + $self->{'pre'}->process($file, $self->{'noinline'})); + + ## Perform the replacements on the dependency string + if ($depstr =~ s/$self->{'cwd'}//go) { + } + else { + my($replace) = $self->{'replace'}; + foreach my $rep (@{$self->{'repkeys'}}) { + $depstr =~ s/$rep/$$replace{$rep}/g; + } + } + + return $depstr; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/DependencyWriter.pm b/ACE/bin/DependencyGenerator/DependencyWriter.pm new file mode 100644 index 00000000000..c0c8243004f --- /dev/null +++ b/ACE/bin/DependencyGenerator/DependencyWriter.pm @@ -0,0 +1,33 @@ +package DependencyWriter; + +# ************************************************************ +# Description : Base class for all Dependency Writers. +# Author : Chad Elliott +# Create Date : 2/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + return bless { + }, $_[0]; +} + + +sub process { + #my($self) = shift; + #my($objects) = shift; + #my($files) = shift; + return ''; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/DependencyWriterFactory.pm b/ACE/bin/DependencyGenerator/DependencyWriterFactory.pm new file mode 100644 index 00000000000..74fdbe2d871 --- /dev/null +++ b/ACE/bin/DependencyGenerator/DependencyWriterFactory.pm @@ -0,0 +1,35 @@ +package DependencyWriterFactory; + +# ************************************************************ +# Description : Create DependencyWriter objects. +# Author : Chad Elliott +# Create Date : 5/23/2003 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +use GNUDependencyWriter; +use NMakeDependencyWriter; +use MakeDependencyWriter; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub create { + switch: { + $_[0] eq 'gnu' && do { return new GNUDependencyWriter(); }; + $_[0] eq 'nmake' && do { return new NMakeDependencyWriter(); }; + $_[0] eq 'make' && do { return new MakeDependencyWriter(); }; + print STDERR "WARNING: Invalid dependency writer type: $_[0]\n"; + } + + return new DependencyWriter(); +} + + +1; diff --git a/ACE/bin/DependencyGenerator/GNUDependencyWriter.pm b/ACE/bin/DependencyGenerator/GNUDependencyWriter.pm new file mode 100644 index 00000000000..dd59ce6b803 --- /dev/null +++ b/ACE/bin/DependencyGenerator/GNUDependencyWriter.pm @@ -0,0 +1,33 @@ +package GNUDependencyWriter; + +# ************************************************************ +# Description : Generates GNU Makefile dependencies. +# Author : Chad Elliott +# Create Date : 2/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use DependencyWriter; + +use vars qw(@ISA); +@ISA = qw(DependencyWriter); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub process { + my($objects) = $_[1]; + my($files) = $_[2]; + + ## Sort the dependencies to make them reproducible + return '$(sort ' . join(' ', @$objects). "): \\\n " + . join(" \\\n ", sort @$files) . "\n"; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/GNUObjectGenerator.pm b/ACE/bin/DependencyGenerator/GNUObjectGenerator.pm new file mode 100644 index 00000000000..e94ebc929fc --- /dev/null +++ b/ACE/bin/DependencyGenerator/GNUObjectGenerator.pm @@ -0,0 +1,34 @@ +package GNUObjectGenerator; + +# ************************************************************ +# Description : Generates object files for GNU Makefiles. +# Author : Chad Elliott +# Create Date : 5/23/2003 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use ObjectGenerator; + +use vars qw(@ISA); +@ISA = qw(ObjectGenerator); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub process { + my($noext) = $_[1]; + $noext =~ s/\.[^\.]+$//o; + return ["\$(VDIR)$noext.\$(SOEXT)", + "\$(VDIR)$noext.\$(OBJEXT)", + "\$(VSHDIR)$noext.\$(SOEXT)", + "\$(VSHDIR)$noext.\$(OBJEXT)", + ]; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/MakeDependencyWriter.pm b/ACE/bin/DependencyGenerator/MakeDependencyWriter.pm new file mode 100644 index 00000000000..ee9d0db4a89 --- /dev/null +++ b/ACE/bin/DependencyGenerator/MakeDependencyWriter.pm @@ -0,0 +1,32 @@ +package MakeDependencyWriter; + +# ************************************************************ +# Description : Generates generic Makefile dependencies. +# Author : Chad Elliott +# Create Date : 2/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use DependencyWriter; + +use vars qw(@ISA); +@ISA = qw(DependencyWriter); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub process { + my($objects) = $_[1]; + my($files) = $_[2]; + + ## Sort the dependencies to make them reproducible + return "@$objects: \\\n " . join(" \\\n ", sort @$files) . "\n"; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/MakeObjectGenerator.pm b/ACE/bin/DependencyGenerator/MakeObjectGenerator.pm new file mode 100644 index 00000000000..67e5cf174b8 --- /dev/null +++ b/ACE/bin/DependencyGenerator/MakeObjectGenerator.pm @@ -0,0 +1,47 @@ +package MakeObjectGenerator; + +# ************************************************************ +# Description : Generates object files for generic Makefiles. +# Author : Chad Elliott +# Create Date : 5/23/2003 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use ObjectGenerator; + +use vars qw(@ISA); +@ISA = qw(ObjectGenerator); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub process { + my($noext) = $_[1]; + my(@objects) = (); + my(@exts) = ('o'); + my(@dirs) = (defined $ENV{VDIR} ? $ENV{VDIR} : ''); + $noext =~ s/\.[^\.]+$//o; + + if (defined $ENV{SOEXT}) { + push(@exts, $ENV{SOEXT}); + } + if (defined $ENV{VSHDIR}) { + push(@dirs, $ENV{VSHDIR}); + } + + foreach my $dirs (@dirs) { + foreach my $ext (@exts) { + push(@objects, "$dirs$noext.$ext"); + } + } + + return \@objects; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/NMakeDependencyWriter.pm b/ACE/bin/DependencyGenerator/NMakeDependencyWriter.pm new file mode 100644 index 00000000000..903406562ac --- /dev/null +++ b/ACE/bin/DependencyGenerator/NMakeDependencyWriter.pm @@ -0,0 +1,53 @@ +package NMakeDependencyWriter; + +# ************************************************************ +# Description : Generates NMake dependencies. +# Author : Chad Elliott +# Create Date : 2/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use DependencyWriter; + +use vars qw(@ISA); +@ISA = qw(DependencyWriter); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub process { + my($sources) = $_[1]; + my($files) = $_[2]; + my($total) = 0; + + $$sources[0] =~ s/\//\\/g; + $$sources[0] =~ s/\\\\/\\/g; + my($dep) = "$$sources[0] :\\\n"; + + ## Sort the dependencies to make them reproducible + foreach my $file (sort @$files) { + $file =~ s/\//\\/g; + $file =~ s/\\\\/\\/g; + if ($file ne $$sources[0]) { + $dep .= "\t\"$file\"\\\n"; + ++$total; + } + } + + if ($total == 0) { + $dep = ''; + } + else { + $dep .= "\n\n"; + } + + return $dep; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/NMakeObjectGenerator.pm b/ACE/bin/DependencyGenerator/NMakeObjectGenerator.pm new file mode 100644 index 00000000000..ac4f11fa902 --- /dev/null +++ b/ACE/bin/DependencyGenerator/NMakeObjectGenerator.pm @@ -0,0 +1,28 @@ +package NMakeObjectGenerator; + +# ************************************************************ +# Description : Generates object files for NMake Makefiles. +# Author : Chad Elliott +# Create Date : 5/23/2003 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use ObjectGenerator; + +use vars qw(@ISA); +@ISA = qw(ObjectGenerator); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub process { + return [ $_[1] ]; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/ObjectGenerator.pm b/ACE/bin/DependencyGenerator/ObjectGenerator.pm new file mode 100644 index 00000000000..d7e92070642 --- /dev/null +++ b/ACE/bin/DependencyGenerator/ObjectGenerator.pm @@ -0,0 +1,32 @@ +package ObjectGenerator; + +# ************************************************************ +# Description : Base class for all Object Generators. +# Author : Chad Elliott +# Create Date : 5/23/2003 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + return bless { + }, $_[0]; +} + + +sub process { + #my($self) = shift; + #my($file) = shift; + return []; +} + + +1; diff --git a/ACE/bin/DependencyGenerator/ObjectGeneratorFactory.pm b/ACE/bin/DependencyGenerator/ObjectGeneratorFactory.pm new file mode 100644 index 00000000000..e161db948ab --- /dev/null +++ b/ACE/bin/DependencyGenerator/ObjectGeneratorFactory.pm @@ -0,0 +1,35 @@ +package ObjectGeneratorFactory; + +# ************************************************************ +# Description : Create ObjectGenerator objects. +# Author : Chad Elliott +# Create Date : 5/23/2003 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +use GNUObjectGenerator; +use NMakeObjectGenerator; +use MakeObjectGenerator; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub create { + switch: { + $_[0] eq 'gnu' && do { return new GNUObjectGenerator(); }; + $_[0] eq 'nmake' && do { return new NMakeObjectGenerator(); }; + $_[0] eq 'make' && do { return new MakeObjectGenerator(); }; + print STDERR "WARNING: Invalid object generator type: $_[0]\n"; + } + + return new ObjectGenerator(); +} + + +1; diff --git a/ACE/bin/DependencyGenerator/Preprocessor.pm b/ACE/bin/DependencyGenerator/Preprocessor.pm new file mode 100644 index 00000000000..66e5d206b66 --- /dev/null +++ b/ACE/bin/DependencyGenerator/Preprocessor.pm @@ -0,0 +1,147 @@ +package Preprocessor; + +# ************************************************************ +# Description : Preprocesses the supplied file. +# Author : Chad Elliott +# Create Date : 2/10/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use FileHandle; +use File::Basename; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub new { + my($class) = shift; + my($macros) = shift; + my($ipaths) = shift; + my($exclude) = shift; + return bless {'macros' => $macros, + 'ipaths' => $ipaths, + 'exclude' => $exclude, + 'files' => {}, + 'ifound' => {}, + 'recurse' => 0, + }, $class; +} + + +sub process { + my($self) = shift; + my($file) = shift; + my($noinline) = shift; + my($noincs) = shift; + my($fh) = new FileHandle(); + + if (open($fh, $file)) { + my($ifcount) = 0; + my(@zero) = (); + my($files) = $self->{'files'}; + my($recurse) = ++$self->{'recurse'}; + my($dir) = dirname($file); + + $$files{$file} = []; + while(<$fh>) { + ## As an optimization, use a very simple regular expression on the + ## outside that all of the inner regular expressions have in + ## common. That way we go down the path of if elsif only if it is + ## even possible due to the outside regular expression. + ## index() is faster than a regular expression, so use index first. + next if (index($_, '#') == -1 || not /^\s*#/); + + ## Remove same line c comments (no need to worry about c++ + ## comments due to the regular expressions) inside this if statement. + ## This saves about 5% off of processing the ace directory + ## and we only need to strip comments if we are actually + ## going to look at the string. + $_ =~ s/\/\*.*\*\///o; + + if (/^\s*#\s*endif/) { + --$ifcount; + if (defined $zero[0] && $ifcount == $zero[$#zero]) { + pop(@zero); + } + } + elsif (/^\s*#\s*if\s+0/) { + push(@zero, $ifcount); + ++$ifcount; + } + elsif (/^\s*#\s*if/) { + ++$ifcount; + } + elsif (!defined $zero[0] && + /^\s*#\s*include\s+[<"]([^">]+)[">]/o) { + ## Locate the include file + my($inc) = undef; + if (exists $self->{'ifound'}->{$1}) { + $inc = $self->{'ifound'}->{$1}; + } + else { + foreach my $dirp (@{$self->{'ipaths'}}) { + if (-r "$dirp/$1") { + $inc = "$dirp/$1"; + last; + } + } + + if (!defined $inc) { + ## If the file we're currently looking at contains a + ## directory name then, we need to look for include + ## files in that directory. + if (-r "$dir/$1") { + $inc = "$dir/$1"; + } + } + $self->{'ifound'}->{$1} = $inc; + } + + ## If we've found the include file, then process it too. + next if (not defined $inc); + + $inc =~ s/\\/\//go; + if (!$noinline || + ($recurse == 1 || $inc !~ /\.i(nl)?$/o)) { + push(@{$$files{$file}}, $inc); + if (!defined $$files{$inc}) { + ## Process this file, but do not return the include files + if (!defined $self->{'exclude'}->{substr($inc, rindex($inc, '/') + 1)}) { + $self->process($inc, $noinline, 1); + } + } + } + } + } + close($fh); + + --$self->{'recurse'}; + } + + ## This has to be outside the if (open(... + ## If the last file to be processed isn't accessable then + ## we still need to return the array reference of includes. + if (!$noincs) { + my(@files) = ($file); + my(%ifiles) = (); + + foreach my $processed (@files) { + foreach my $inc (@{$self->{'files'}->{$processed}}) { + if (!defined $ifiles{$inc}) { + $ifiles{$inc} = 1; + push(@files, $inc); + } + } + } + shift(@files); + return \@files; + } +} + + +1; diff --git a/ACE/bin/FOCUS/ChangeLog b/ACE/bin/FOCUS/ChangeLog new file mode 100644 index 00000000000..b5323e5e749 --- /dev/null +++ b/ACE/bin/FOCUS/ChangeLog @@ -0,0 +1,250 @@ +Fri Nov 18 17:05:49 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * specializations/Reactor_Family/Select_Reactor_ST.spl: + * specializations/Reactor_Family/Select_Reactor_MT.spl: + + Reverted the include file in ace/Select_Reactor_T.inl as g++ 4.0 + seems to balk when this is not there. This does not seem to + happen with g++ 3.2 or later versions + +Thu Oct 27 09:47:32 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * specializations/iiop.spl: + + Updated specializations file based on changes made to ACE+TAO + +Thu Sep 29 15:57:36 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * FOCUS.pl: + Changed the script to use $ACE_ROOT enviornment variable to + compute the paths to the specialization files. + + * Parser/Parser.pm: + Modified the parser comments and return values. + + * NEWS: Added news file that discusses the current and planned + features. + + * README: Readme file + * INSTALL: Removed install file and moved contents to README + + * docs/FOCUS.html: Documenting the different features of FOCUS and + usage. + +Thu Sep 29 11:15:52 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * specializations/Protocol_Family/IIOP/iiop.spl: + * specializations/Context-Specific-Optimizations/Request-Creation-Optimizations.spl: + Changes required to the rules based on code level changes. + +Wed Sep 7 09:20:30 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * VERSION: + * specializations/Wait_Strategy/Wait_On_Read.spl: + * specializations/Protocol_Family/iiop.spl: + * specializations/Messaging_Strategy/GIOP.spl: + * Parser/Parser.pm: + + Added version file for the first internal release of + FOCUS. Updated the specializations based on recent updates. + +Tue Sep 6 09:07:04 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * specializations/Protocol_Family/iiop.spl: + + Added specialization rules for specializing the pluggable + protocols implementation in TAO with the IIOP protocol + implementation. + +Mon Aug 29 11:55:32 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * specializations/Reactor_Family/Select_Reactor_ST.spl: + * specializations/Reactor_Family/Select_Reactor_MT.spl: + * specializations/Reactor_Family/TP_Reactor.spl: + + Updated the specializations rules for the Reactor specialization + after the commit by Steve Huston. These have been tested and + validated with the code in ACE+TAO. + +Mon Aug 22 13:28:39 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * FOCUS.pl: + * Parser/Parser.pm: + * specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimitzation.spl: + + Added the specialization that resolves the request processor + only once and uses the cached request processor to service + requests on a specific connection for all other requests. + +Wed Aug 17 14:59:44 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * FOCUS.pl: + + Added new option for specializing the wait strategy at the + client side in ACE+TAO + + * Parser/Parser.pm: + + Added support of <copy-from-source> tag that copies source code + from a source file and inserts it into the destination file + at a particular hook location. + + * specializations/Reactor_Family/Select_Reactor_MT.spl: + * specializations/Reactor_Family/Select_Reactor_ST.spl: + * specializations/Wait_Strategy/Wait_On_Read.spl: + * specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl: + + Updated the Reactor specializations, after eliminating the + Reactor_Timer_Interface from the Reactor implementation. Added + two specializations for the Wait strategy and the + Leader_Follower_Flushing strategies. Updated the Messaging + specialization based on hooks left in the source code. + +Mon Aug 15 14:59:28 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * Parser/Parser.pm: + + Updated the parser to include the attribute match-line in a + substitute tag. This matches the entire line as opposed to a + word which substitutes default behavior is. + + * specializations/Reactor_Family/Select_Reactor_MT.spl: + * specializations/Reactor_Family/Select_Reactor_ST.spl: + + Updated the rules to include the match-line attribute to match + the entire line as opposed to the a single word. + +Mon Aug 15 09:07:54 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * specializations/Select_Reactor_ST.spl: + * specializations/Select_Reactor_MT.spl: + * specializations/TP_Reactor.spl: + + Updated the specialization rules. In particular, the + specialization rules have been updated as two separate ST rules + and MT rules for select reactor ST and select reactor MT. + + * FOCUS.pl: + + Updated the main script to work with these two rules. + +Thu Aug 11 16:33:47 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * FOCUS.pl: + * Parser/Parser.pm: + + Added option to specify the output path where the specialization + file should be put. + + * specializations/Reactor_Family/TP_Reactor.spl: + Updated the thread-pool reactor specialization file tags based + on the generated code. + +Thu Aug 11 10:54:06 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * FOCUS.pl: + + Updated specialization entry for Thread Pool reactor. + + * Parser/Parser.pm: + + Updated the Visit_Substitute method with the requirement that it + match whole words and not parts of a word. For example, this + problem manifests when one is trying to substitute + Msg_WFMO_Reactor and WFM_Reactor. Both the strings match for + WFMO_Reactor, when only the latter should be matching. Corrected + this issue. + + * specializations/Select_Reactor.spl: + * specializations/TP_Reactor.spl: + + Updated the tags to be consistent and corrected several typos + and made sure that the rules in the specializations are actually + executed. + + * PROBLEM-REPORT-FORM: + + Most important thing added :-) + +Wed Aug 10 15:38:17 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * FOCUS.pl: + Moved the perl script from the Parser module to the top level + directory for convenience. + + * specializations/Reactor_Family/TP_Reactor.spl: + + Added a specialization file for specializing TP_Reactor + implementation. + + * specializations/Reactor_Family/Select_Reactor.spl: + + Updated the specialization file to be in sync with the code + level comment hooks in the ACE+TAO implementation. + +Sun Aug 7 16:15:29 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * Parser/Parser.pm: + + Added Visit_Comment visitor to parse and execute <comment> + tags. Each comment tag contains a start-hook and an end-hook + which can be used to comment blocks of region within the source + code. + + * specializations/Protocol_Family/Pluggable_Messaging.spl: + + A specialization file that completely removes the Pluggable + messaging interface and replaces that with the concrete type + used. + +Thu Aug 4 14:33:42 2005 Arvind Krishna <arvindkr@arvindkr.qualcomm.com> + + * Parser/Parser.pm: + + Added diagnostic messages and updated FOCUS perl script to use + Getopt command line parsing perl module. + +Thu Aug 4 10:57:08 2005 Arvind Krishna <arvindkr@arvindkr.qualcomm.com> + + * Parser/Parser.pm: + * Parser/FOCUS.pl: + Updated the parser module to include a <module> tag, this is + necessary when the specializations have to work across different + directories such as ACE and TAO. + +Wed Jul 27 15:54:02 PDT 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * specializations/Reactor_Family/Select_Reactor.spl: + Added a couple of specialization tags for reactor specialization. + + * Parser/xml-spl-parser.pm: + Parser now capable of executing search, replace, add and comment + functionality for specializations. + +Tue Jul 26 12:38:00 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * specializations/README: + + Added a evolving README file that describes the rules for + integrating different specializations into FOCUS. + +Tue Jul 26 11:23:51 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * Parser/Parser.pm: + * specializations/Reactor_Family/Select_Reactor.spl: + + A simple perl based parser to parse the XML specializations + defined within the various specialization + files. Select_Reactor.spl defines the specialization rules for + effecting the transformations for specializing the Reactor + framework within ACE. + +Tue Jul 26 11:21:44 2005 Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + + * FOCUS: + Birth of "Feature Oriented Customization of Systems" is a + research project that aims at customizing semi complete + applications or frameworks based on features (e.g., type of + protocol, type of reactor) used in an application. FOCUS was + born out of research efforts described in the following paper: + http://www.cs.wustl.edu/~schmidt/PDF/MW-Spl.pdf diff --git a/ACE/bin/FOCUS/FOCUS.pl b/ACE/bin/FOCUS/FOCUS.pl new file mode 100755 index 00000000000..e82acfe63cc --- /dev/null +++ b/ACE/bin/FOCUS/FOCUS.pl @@ -0,0 +1,203 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; +######################################################################### +# FOCUS: A Feature Oriented Customization tool for ACE+TAO. +# +# Usage: +# ====== +# --prefix-path - gives the prefix to the place where ACE+TAO is installed +# --reactor-spl - provide the component that needs to be specialized +# --protocol-spl - provide the concrete protocol to specialize +# --output-prefix-path - +# (Optional) if specified, copies all the files to the +# output prefix. The directory structure is maintained. +# That is if foo/bar.h file was specialized. Then the +# output will be <prefix_output>/foo/bar.h +# +# Adding New Specializations +# =========================== +# (1) Add a new command line option if the specialization belongs to a +# new family of components. For example, Concurrency strategy +# (1.b) If not, then enhance exisiting option with a new value +# (2) Associate a specialization file for the concrete component being +# specialized. +# (3) Update the specializations directory appropriately to add the +# specializations file. +# +# @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> +# +# $Id$ +# +######################################################################## +use Getopt::Long; + +# This script can be invoked from anywhere. We need to add this to the +# path +use lib "$ENV{ACE_ROOT}/bin"; + +use FOCUS::Parser::FOCUSParser; + +sub usage +{ + + # How to use FOCUS + # Currently FOCUS supports the specialization of reactor and protocol + # families + my $usage = "usage: \n ./FOCUS " + . " \n --prefix-path=<path to module root>" + . " [\n --reactor-spl=<select-mt, select-st, tp-reactor>" + . " \n --protocol-spl=<iiop>" + . " \n --wait-strategy-spl=<rw>" + . " \n --output-prefix=<output path>" + . " \n --messaging-spl=<giop>" + . " \n --context-specific-optimizations=<dispatch>" + . " \n ]" + . "\n"; + print "$usage \n"; +} + +# Global Table that maps the specialization name to the file +# select => "../specializations/Reactor_Family/Select_Reactor.spl +# For each component that one needs to specialize add an entry in +# this simple global table to execute the specializations. + +# Get the ACE_ROOT ENV variable. Then the specializations +# can be accessed via $ACE_ROOT/bin/FOCUS/..... +my $spl_prefix_path = ""; +if (defined $ENV{"ACE_ROOT"}) +{ + $spl_prefix_path = $ENV{"ACE_ROOT"}; + + # Check if the prefix path ends with a / or not + # if it does not then manually add the / to it + my $last = substr ($spl_prefix_path, -1); + if ($last ne "/") + { + $spl_prefix_path = $spl_prefix_path . "/"; + } + + # Add the bin/FOCUS directory to the prefix path + $spl_prefix_path = $spl_prefix_path . "bin/FOCUS/"; + +} +else +{ + print "FOCUS: ACE_ROOT environment variable not defined. Exiting... \n"; + exit 1; +} + +my %specialization_table = ( + "select-mt", $spl_prefix_path . "specializations/Reactor_Family/Select_Reactor_MT.spl", + "select-st", $spl_prefix_path . "specializations/Reactor_Family/Select_Reactor_ST.spl", + "tp-reactor",$spl_prefix_path . "specializations/Reactor_Family/TP_Reactor.spl", + "giop", $spl_prefix_path . "specializations/Messaging_Strategy/GIOP.spl", + "iiop", $spl_prefix_path . "specializations/Protocol_Family/IIOP/iiop.spl", + "rw", $spl_prefix_path . "specializations/Wait_Strategy/Wait_On_Read.spl", + "dispatch", $spl_prefix_path . "specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl"); + +# Get the command line options +my $ret = GetOptions ("prefix-path=s" => \$prefix_path, + "reactor-spl=s" => \$reactor_type, + "protocol-spl=s" => \$protocol_type, + "messaging-spl=s" => \$messaging_type, + "wait-strategy-spl=s" => \$wait_strat_type, + "output-prefix:s" => \$output_prefix, + "context-specific-optimizations=s" => \$context_opt); + +# Check if the prefix path is specified +if (!$prefix_path) +{ + usage; + exit 1; +} + +# +# Check if the optional outputpath is specified +# if it not specified then the output_prefix will +# be same as the prefix_path. +# So if the prefix is something like: +# /build/arvindk/ACE_wrappers, then the output_prefix +# will be the same. +# +# Upshot: The source files will be directly replaced. +# +if (! $output_prefix) +{ + $output_prefix = $prefix_path; +} + +# Check if the type of each component specialized is valid! +if ($reactor_type) +{ + my $spl_file = $specialization_table {$reactor_type}; + if (! length ($spl_file)) + { + print "Invalid reactor type specified \n"; + usage; + exit 1; + } + + # specialize the Reactor component + FOCUSParser::Specialize_Components ($prefix_path, $spl_file, $output_prefix); +} + +# protocol specialization +if ($protocol_type) +{ + my $spl_file = $specialization_table {$protocol_type}; + if (! spl_file) + { + print "Invalid reactor type specified \n"; + usage; + exit 1; + } + + # specialize the Protocol component + FOCUSParser::Specialize_Components ($prefix_path, $spl_file, $output_prefix); +} + +# Wait Strategy specialization +if ($wait_strat_type) +{ + my $spl_file = $specialization_table {$wait_strat_type}; + if (! spl_file) + { + print "Invalid specialization for the Wait strategy \n"; + usage; + exit 1; + } + + # specialize the wait strategy + FOCUSParser::Specialize_Components ($prefix_path, $spl_file, $output_prefix); +} + +#Messaging specialization +if ($messaging_type) +{ + my $spl_file = $specialization_table {$messaging_type}; + if (! spl_file) + { + print "Invalid specialization for Messaging strategy \n"; + usage; + exit 1; + } + + # specialize the wait strategy + FOCUSParser::Specialize_Components ($prefix_path, $spl_file, $output_prefix); +} + +# Context specific optimizations present +if ($context_opt) +{ + my $spl_file = $specialization_table {$context_opt}; + if (! spl_file) + { + print "Invalid Context specialization optimization specified\n"; + usage; + exit 1; + } + + # specialize the wait strategy + FOCUSParser::Specialize_Components ($prefix_path, $spl_file, $output_prefix); +} diff --git a/ACE/bin/FOCUS/NEWS b/ACE/bin/FOCUS/NEWS new file mode 100644 index 00000000000..29dd15e6a3d --- /dev/null +++ b/ACE/bin/FOCUS/NEWS @@ -0,0 +1,35 @@ +USER VISIBLE CHANGES AND CAPABILITIES ADDED TO FOCUS: +===================================================== + +. Support for specialization of ACE Reactor Framework + -- Specialization of ACE_Select_Reactor both st and mt + -- Specialization of ACE_TP_Reactor + +. Support for specialization of Pluggable Messaging in TAO + -- Specialization of Pluggable Messaging Interface based on GIOP + +. Support for specializing the Pluggable Protocol framework in TAO + -- Specialization for IIOP protocol implementation in TAO + +FUTURE CAPABILITIES and PLANNED CHANGES +======================================== +ACE+TAO component specialization related capabilities +----------------------------------------------------- +. Support for specialization of the Messaging Framework based on GIOP_Lite +. Support for specialization of Wait Strategy including Leader_Follower wait strategy +. Support for specialization of Flushing Strategy components + +FOCUS Specialization Language Enhancements +------------------------------------------ +. Support for multi line search and replace capabilities +. Support for ensuring source files are not corrupted when multiple + specializations are grouped together when the specializations are + added. + +FOCUS Transformation Related Enhancements +---------------------------------------- +. Support for undo feature for the transformations. This is going to be + really hard. I am not sure if this is doable +. Specifying dependencies between the different specializations. If one + is incompatible with the other, then this needs to be detected before + the specializations are executed. diff --git a/ACE/bin/FOCUS/PROBLEM-REPORT-FORM b/ACE/bin/FOCUS/PROBLEM-REPORT-FORM new file mode 100644 index 00000000000..9538e1d58df --- /dev/null +++ b/ACE/bin/FOCUS/PROBLEM-REPORT-FORM @@ -0,0 +1,45 @@ +To: arvindk@dre.vanderbilt.edu +Subject: [area]: [synopsis] + + TAO VERSION: + ACE VERSION: + + HOST MACHINE and OPERATING SYSTEM: + + + TARGET MACHINE and OPERATING SYSTEM, if different from HOST: + COMPILER NAME AND VERSION (AND PATCHLEVEL): + + FOCUS COMMAND LINE OPTION + [What command line option did you use for FOCUS?] + + AREA/CLASS/EXAMPLE AFFECTED: +[What example failed? What module failed to compile?] + + DOES THE PROBLEM AFFECT: + COMPILATION? + [ What compiler are you using? Please cut n paste the + compilation error.] + + LINKING? + [ On Unix systems, did you run make realclean first?] + EXECUTION? + OTHER (please specify)? + +[Please indicate whether ACE/TAO, your application, or both are affected.] + + SYNOPSIS: +[Brief description of the problem] + + DESCRIPTION: +[Detailed description of problem. Don't just say "<blah> +doesn't work, here's a fix," explain what your program does +to get to the <blah> state. ] + + SAMPLE FIX/WORKAROUND: +[If available ] + + ACE+TAO INSTRUMENTED FILES: + Please if possible attach the ACE+TAO instrumented files (source + files) that affected your application. (Please use a compression + utility for sending the attachments) diff --git a/ACE/bin/FOCUS/Parser/FOCUSParser.pm b/ACE/bin/FOCUS/Parser/FOCUSParser.pm new file mode 100644 index 00000000000..b2061a660a4 --- /dev/null +++ b/ACE/bin/FOCUS/Parser/FOCUSParser.pm @@ -0,0 +1,726 @@ +######################################################################### +# A Simple Parser for automating the specializations crated in FOCUS. +# +# @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> +# +# $Id$ +# +# This parser, parses the specialization file given as an input argument +# and *individually* visits the tags in a pre-determined order to weave +# in the specializations. +# NOTE: This parser will make N passes over the file, where N equals +# to the number of tags defined in the specialization file. This +# approach is intentional as it servers current needs. Future versions +# may enhance this parser and Visit methods to be more intelligent. +########################################################################### +package FOCUSParser; + +# for MY own preferences! +use strict; + +# XML related operations +use XML::DOM; + +# Generic file operations +use FileHandle; + +# Creating files and renaming them +use File::Copy; + +# Creating directories +use File::Path; + +############################################ +# GLOBAL CONSTANTS +########################################### +my $FOCUS_PREPEND_TAG = "\/\/@@ "; + +#################################################################### +# banner: A function that returns the FOCUS banner transformation +# for just clarity purpose only. +################################################################### +sub FOCUS_banner_start +{ + my $banner_str = "// Code woven by FOCUS:\n"; + return $banner_str; +} + +sub FOCUS_banner_end +{ + my $banner_str = "// END Code woven by FOCUS\n"; + return $banner_str; +} + +######################################################################### +# Visit_ADD: Visit a add element defined in the transform. +# In particular look for the hook defined: search it in the source file +# and add the data in the <data> tags into the file starting from the +# hook, but not including the hook. +########################################################################## +sub Visit_Add +{ + my ($add, $copy_file_name) = @_; + + # Open the copy and transform it + open (IN, "+<". $copy_file_name) || + die "cannot open file: " . $copy_file_name; + + # To update a file in place, we use the temporary + # file idiom. Perl says this is the best way to + # do this! + my $copy_file_tmp = $copy_file_name . "tmp"; + open (OUT, ">". $copy_file_tmp) || + die "cannot open temporary file for modying file:" . $copy_file_name; + + # get the hook element defined in the add element + my $hook = $add->getElementsByTagName ('hook'); + + # ensure length of hook == 1; + if ($hook->getLength != 1) + { + print "Assertion Error: An <add> element can have only \ + one <hook> definition"; + + # clean up + close (IN); + close (OUT); + + # Diagnostic comment + print " [failure]... Reverting changes \n"; + + unlink ($copy_file_name); + unlink ($copy_file_name . "tmp"); + exit (1); + } + + # Check if the hook is present in the file at all + my $hook_str = $hook->item(0)->getFirstChild->getNodeValue; + chomp ($hook_str); + + #//@@ For now, due to problem with the hook string + my $search_str = $hook_str; + + while (<IN>) + { + if (/$search_str/) + { + # Do not remove the hook! It needs to be present + print OUT $_; + + # FOCUS banner start + print OUT FOCUS_banner_start; + + # parse <data> ... </data> elements for this add tag + my @data_list = $add->getElementsByTagName ('data'); + foreach my $data (@data_list) + { + my $data_item = $data->getFirstChild->getNodeValue; + chomp ($data_item); + + # Insert the item + print OUT "$data_item \n"; + } + + # FOCUS banner end + print OUT FOCUS_banner_end; + } + else + { print OUT $_; } + } + + # Everything went well! + close (IN); + close (OUT); + + # replace in place the old file with the new one + rename ($copy_file_tmp, $copy_file_name); +} + +########################################################################### +# Visit_Remove: Visit a <remove> element defined in the transform. +# In particular look for the hook defined: search it in the source file +# and remove the element's value from the source file being searched. +############################################################################ +sub Visit_Remove +{ + my ($remove, $copy_file_name) = @_; + + # obtain the data to be removed + my $search = $remove->getFirstChild->getNodeValue; + chomp ($search); + + # Open the copy and transform it + open (IN, "+<" . $copy_file_name) || + die "cannot open file: " . $copy_file_name; + + # Update the file in place + my $copy_file_name_tmp = $copy_file_name . "tmp"; + open (OUT, ">". $copy_file_name_tmp) || + die "cannot open temporary file for modying file:" . $copy_file_name;; + + # Removing something is same as search and replace. Replace with "" + my $replace = ""; + + foreach my $line (<IN>) + { + if ($line =~/$search/) + { + # We do not print the banner information + # as we have removed something and + # print the banner will be redundant! + + # replace <search> with <replace> + $line =~ s/$search/$replace/; + + print OUT $line; + } + else { print OUT $line; } + } + + # Everything went well! + close (IN); + close (OUT); + + # replace in place the old file with the new one + rename ($copy_file_name_tmp, $copy_file_name); +} + +######################################################################### +# Visit_Substitute: Visit a <substitute> element defined in the transform. +# In particular look for the <search> element and replace it with the +# <replace> element. +######################################################################### +sub Visit_Substitute +{ + my ($substitute, $copy_file_name) = @_; + + # Open the copy and transform it + open (IN, "+<". $copy_file_name) || + die "cannot open file: " . $copy_file_name; + + # To update a file in place, we use the temporary + # file idiom. Perl says this is the best way to + # do this! + my $copy_file_name_tmp = $copy_file_name . "tmp"; + open (OUT, ">". $copy_file_name . "tmp") || + die "cannot open temporary file for modying file:" . $copy_file_name;; + + # check if the match-line keyword is set or not + my $match_line = $substitute->getAttribute('match-line'); + + # <search> .... </search> + my $search_list = $substitute->getElementsByTagName ('search'); + + # ensure length of search == 1; + if ($search_list->getLength != 1 || + $search_list->getLength == 0) + { + print "Assertion Error: A <substitute> element can have only \ + one <search> element"; + close (IN); + close (OUT); + + # Dianostic comment + print " [failure] reverting changes \n"; + + unlink ($copy_file_name); + unlink ($copy_file_name_tmp); + exit (1); + } + + # <replace> .... </replace> + my $replace_list = $substitute->getElementsByTagName ('replace'); + if ($replace_list->getLength != 1 || + $replace_list->getLength == 0) + { + print "Assertion Error: A <substitute> element can have only \ + one <replace> element"; + close (IN); + close (OUT); + unlink ($copy_file_name); + unlink ($copy_file_name_tmp); + exit (1); + } + + # <search> and <replace> element values + my $search = $search_list->item(0)->getFirstChild->getNodeValue; + my $replace = $replace_list->item(0)->getFirstChild->getNodeValue; + + # remove spaces + chomp ($search); + chomp ($replace); + + # Search and replace string in the file + foreach my $line (<IN>) + { + # Check if the match line attribute is set. If so then + # ignore word boundaries. If not, honor word boundaries. + my $line_matched = 0; + if (! $match_line) + { + if ($line =~/\b$search\b/) + { + $line_matched = 1; + } + } + else + { + if ($line =~ /$search/) + { + $line_matched = 1; + } + } + + # Check if the line matched + if ($line_matched) + { + # FOCUS banner start + print OUT FOCUS_banner_start; + + # replace <search> with <replace> + # Caveat: What if <search> occures multiple + # times in the line? Here is how we handle + # it + $line =~ s/$search/$replace/g; + + print OUT $line; + + # FOCUS banner end + print OUT FOCUS_banner_end; + } + else { print OUT $line; } + } + + # everything went well! + close (IN); + close (OUT); + + # replace in place the old file with the new one + rename ($copy_file_name_tmp, $copy_file_name); +} + +######################################################################### +# Visit_Comment: Visit the comment-region hooks defined in the +# source code and comment out all code between start and finish of that +# region +######################################################################### +sub Visit_Comment +{ + my ($comment, $copy_file_name) = @_; + + # check for the comment region tags and + # comment out the region + my $start_hook_tag = $comment->getElementsByTagName ('start-hook'); + my $end_hook_tag = $comment->getElementsByTagName ('end-hook'); + + if ($start_hook_tag->getLength != 1 || + $end_hook_tag->getLength != 1) + { + print "Assertion Error: A <comment> element can have only \ + one pair of <start-hook> and <end-hook> tags"; + unlink ($copy_file_name); + exit (1); + } + + my $start = $start_hook_tag->item(0)->getFirstChild->getNodeValue; + my $end = $end_hook_tag->item(0)->getFirstChild->getNodeValue; + + # What are we looking for: + # We need to start from "//" . FOCUS_PREPEND_TAG . $hook + # i.e. //[[@ <blah blah> + # This will be the format for both start and end + # //@@ Problems with the hook string + my $start_hook = $FOCUS_PREPEND_TAG . $start; + my $end_hook = $FOCUS_PREPEND_TAG . $end; + + # Open the copy and transform it + open (IN, "+<". $copy_file_name) || + die "cannot open file: " . $copy_file_name; + + my $copy_file_name_tmp = $copy_file_name . "tmp"; + open (OUT, ">". $copy_file_name_tmp) || + die "cannot open temporary file for modying file:" . $copy_file_name; + + my $start_commenting = 0; + while (<IN>) + { + if (! /$start_hook/ && + ! /$end_hook/) + { + if ($start_commenting) + { print OUT "// " . $_; } + else + { print OUT $_; } + } + else + { + if (/$start_hook/) + { + $start_commenting = 1; + print OUT $_; # print start hook! + } + else + { + $start_commenting = 0; + print OUT $_; # print end hook! + } + } + } + + # everything went well! + close (IN); + close (OUT); + + rename ($copy_file_name_tmp, $copy_file_name); +} + +############################################################### +# Visit_Copy: visit the <copy> tags and weave the code into the +# source file. In particular, open the source file specified +# in the file-source tag. Search for the start hook and +# copy until the end hook is reached. +############################################################### +sub Visit_Copy +{ + my ($copy_tag, $copy_file_name, $default_module_name, $prefix_path) = @_; + + # Check if a file name has been specified + my $dest_file_tag = $copy_tag->getElementsByTagName ('source'); + + if (! $dest_file_tag) + { + print "Error: <copy-from-source> does not have the <file> tag.."; + print "aborting \n"; + exit 1; + } + + if ($dest_file_tag->getLength != 1) + { + print "Assertion Error: A <copy-from-source> element can have only \ + one <source> tag from which to copy elements"; + exit (1); + } + + my $dest_file_name = $dest_file_tag->item(0)->getFirstChild->getNodeValue; + + #Check if the file exists and one is able to access it + $dest_file_name = $prefix_path . "/" . $default_module_name . "/" . $dest_file_name; + + open (DEST, "<". $dest_file_name) || + die "cannot open $dest_file_name \n Wrong <file> tag within <copy-from-source> exiting" ; + + # check for the start and end tags within the target file where + # one needs to start copying from + my $start_tag = $copy_tag->getElementsByTagName ('copy-hook-start'); + my $end_tag = $copy_tag->getElementsByTagName ('copy-hook-end'); + + if (! $start_tag || ! $end_tag) + { + print "Assertion Error: A <copy> element should have a \ + <copy-hook-start> tag and <copy-hook-end> tag \n"; + exit (1); + } + + # Get the <dest-hook> tag that indicates the destination where the + # code between the start and end tags will be placed. + my $dest_hook_tag = $copy_tag->getElementsByTagName ('dest-hook'); + if (! $dest_hook_tag) + { + print "Assertion Error: <copy-from-source> should have a <dest-hook> \ + tag that dictates where in the source file the code should be \ + placed. \n"; + exit (1); + } + + # Remove any starting and trailing white spaces + chomp ($dest_hook_tag); + + # We have everything we need! Do the copy + my $start_tag_name = $start_tag->item(0)->getFirstChild->getNodeValue; + my $end_tag_name = $end_tag->item(0)->getFirstChild->getNodeValue; + my $dest_tag_name = $dest_hook_tag->item(0)->getFirstChild->getNodeValue; + + # First we add the FOCUS prepend tags + $start_tag_name = $FOCUS_PREPEND_TAG . $start_tag_name; + $end_tag_name = $FOCUS_PREPEND_TAG . $end_tag_name; + $dest_tag_name = $FOCUS_PREPEND_TAG . $dest_tag_name; + + # Step 1: Iterate over the target file till the + # dest-hook is found in that file + my $copy_file_name_tmp = $copy_file_name . "tmp"; + open (OUT, ">". $copy_file_name_tmp) || + die "cannot open temporary file for modying file:" . $copy_file_name; + open (IN, "<" . $copy_file_name) || + die "cannot open file $copy_file_name specified in the <file> tag \n"; + + my $dest_tag_found = 0; #check if tag matched + foreach my $line (<IN>) + { + if ($line =~ /$dest_tag_name/) + { $dest_tag_found = 1; print OUT $line; last; } + + print OUT $line; + } + close (IN); + + # If we reached the end of file before finding the tag! + if (! $dest_tag_found) + { + print "\n Error: <dest-hook> tag missing in file .. aborting \n"; + close (DEST); + close (IN); + close (OUT); + unlink ($copy_file_name_tmp); + exit (1); + } + + # Step 2: Now look in the destination file and look for the hooks + # where one needs to copy. There could be multiple places where the + # hook can be present. E.g. + # ....... + # //@@ COPY_START_HOOK + # .... + # .... + # //@@ COPY_END_HOOK + # .... + # .... + # //@@ COPY_START_HOOK + # .... + # .... + # //@@ COPY_END_HOOK + # Handle this case + + my $line_matched = 0; + my $start_copying = 0; # initially do not copy + foreach my $line (<DEST>) + { + # Check if the line matches the start tag + if ($line =~/$start_tag_name/) + { + $line_matched += 1; + $start_copying = 1; + } + else + { + # Check if the line matches the end tag + if ($line =~/$end_tag_name/) + { + # check if the start tag matched! + if (! $line_matched) + { + print "Assertion error: <copy-hook-end> tag misplaced with \ + the <copy-hoook-source> \n"; + close (DEST); + close (IN); + close (OUT); + unlink ($copy_file_name_tmp); + exit (1); + } + + # decrement the count for nested tags + $line_matched -= 1; + if (! $line_matched ) + { $start_copying = 0; } + } + else + { + # Print out the line + if ($start_copying) + { print OUT $line; } + } + } + } + + # At the end of this loop line_matched should be 0 + if ($line_matched) + { + print "Error: in $dest_file_name, number of <copy-hook-source> tags \ + did not match the number of <copy-hook-end> tags. Reverting \ + changes. \n"; + close (DEST); + close (IN); + close (OUT); + unlink ($copy_file_name_tmp); + exit (1); + } + + # Step 3: Now copy data after the tag in the original file onto the destination + # file. + open (IN, "<" . $copy_file_name) || + die "cannot open file $copy_file_name specified in the <file> tag \n"; + $dest_tag_found = 0; #used as a flag + foreach my $line (<IN>) + { + if ($dest_tag_found) + { print OUT $line; } + + # If the hook is found, then don't write the hook onto OUT + # as it would have been written earlier + if (! $dest_tag_found && + $line =~ /$dest_tag_name/) + { $dest_tag_found = 1; } + } + + # Normal exit path + close (IN); + close (OUT); + close (DEST); + + # Rename the tmp file to the file modified + rename ($copy_file_name_tmp, $copy_file_name); +} + +################################################################# +# commit_files: A procedure to commit all the copy files that +# were specialized back to the orginal files. +################################################################# +sub commit_files +{ + my ($path_name, $output_path_name, @files) = @_; + + # iterate over the file_name_list + foreach my $file (@files) + { + # <file name="...."> + my $file_name = $file->getAttribute('name'); + + # output_path == input_path then do an in place + # substitution. + if ($output_path_name eq $path_name) + { + rename ($path_name . "/" . $file_name . "copy", + $path_name . "/" . $file_name); + } + else + { + # Check if the path_name exists. The path name + # corresponds to a directory. So create it if it does + # not exist. + if (! -d $output_path_name) + { + #@@? Need to revert the *copy files? + mkpath ($output_path_name, 0, 0744) || + die "cannot create $output_path_name: commit files failed! \n"; + } + + # move the specialized file to the output directory + rename ($path_name . "/" . $file_name . "copy", + $output_path_name . "/" . $file_name); + } + } +} + +#### Main ######################################################## +# Specialize_Component +# procedure to execute the transformations specified in the +# specialization file +################################################################## +sub Specialize_Components +{ + # Get the command line arguments + my ($prefix_path, $spl_file, $output_prefix) = @_; + + my $parser = XML::DOM::Parser->new(); + my $doc = $parser->parsefile($spl_file); + + # Check if the prefix path ends with a / or not + # if it does not then manually add the / to it + my $last = substr ($prefix_path, -1); + if ($last ne "/") + { $prefix_path = $prefix_path . "/"; } + + # Entry Point: <transform> element + foreach my $transform ($doc->getElementsByTagName('transform')) + { + # <module tags> + foreach my $module ($transform->getElementsByTagName('module')) + { + # Complete path name to the module + my $module_name = $module->getAttribute('name'); + my $path_name = $prefix_path . $module_name; + + # <file tags> + my @files = $module->getElementsByTagName('file'); + foreach my $file (@files) + { + # <file name="...."> + my $file_name = $file->getAttribute('name'); + + # Rather than modifying the files directly, make a local + # copy of the files and then transform them and commit + # if there is a file called foo we make a file foo_copy + my $file_path_copy = $path_name . "/" . $file_name . "copy"; + my $file_path_name = $path_name . "/" . $file_name; + + copy ($file_path_name, $file_path_copy); + + # Diagnostic comment + print "Instrumenting $file_name .........."; + + # <comment> ... </comment> + my @comment_list = $file->getElementsByTagName ('comment'); + foreach my $comment (@comment_list) + { Visit_Comment ($comment, $file_path_copy); } + + # <copy-from-source> ... </copy-from-source> + my @copy_from_source_files = + $file->getElementsByTagName ('copy-from-source'); + foreach my $copy_from_source (@copy_from_source_files) + { + Visit_Copy ($copy_from_source, + $file_path_copy, + $module_name, + $prefix_path); + } + + # <remove> ... </remove> + my @remove_list = $file->getElementsByTagName ('remove'); + foreach my $remove (@remove_list) + { Visit_Remove ($remove, $file_path_copy); } + + # <substitute ... </substitute> + my @substitute_list = $file->getElementsByTagName ('substitute'); + foreach my $substitute (@substitute_list) + { Visit_Substitute ($substitute, $file_path_copy); } + + # <add> <hook> ...... </hook> <add> + my @add_list = $file->getElementsByTagName ('add'); + foreach my $add (@add_list) + { Visit_Add ($add, $file_path_copy); } + + # Everything went well.. Print success + print " [done] \n"; + } + } + + # At this point all the specializations in all the modules have + # succeeded. It is at this point that we need to commit the + # specializations in each of the modules. That is move the temporary + # file that we created to the main file that was specialized. + # This also means that we need another loop and do the same thing + # as above.... + # <module tags> + foreach my $module ($transform->getElementsByTagName('module')) + { + # Complete path name to the module + my $module_name = $module->getAttribute('name'); + my $path_name = $prefix_path . $module_name; + + # Output path name: append output_prefix to the + # current module name. Append "/" to create a + # directory like /foo/bar/baz/ + my $output_path = $output_prefix . "/" . $module_name; + + # <file tags> + my @files = $module->getElementsByTagName('file'); + + # commit the files + commit_files ($path_name, $output_path, @files); + } + } +} + +#### +# Requiured for a module +#### +1; diff --git a/ACE/bin/FOCUS/README b/ACE/bin/FOCUS/README new file mode 100644 index 00000000000..14f3c804dc9 --- /dev/null +++ b/ACE/bin/FOCUS/README @@ -0,0 +1,76 @@ + + FOCUS README + ============ + +Motivation: +---------- +Middleware is often developed as a set of frameworks that can be +extended and configured with alternative implementations of key +components, such as different types of transport protocols e.g., +TCP/IP, VME, or shared memory), event demultiplexing mechanisms +e.g., reactive-, proactive-, or thread-based), request +demultiplexing strategies (e.g., dynamic hashing, perfect +hashing, or active demuxing), and concurrency models (e.g., +thread-per-connection, thread pool, or thread-pre-request). A +particular DRE application, however, may only use a small subset +of the potential framework alternatives. As a result, general-purpose +middleware may be overly extensible, i.e., contain +unnecessary overhead for indirection and dynamic dispatching that is +not needed for use cases in a particular context. +A challenge is to develop middleware specialization +techniques that can eliminate unnecessary overhead associated with +overly extensible middleware framework implementations for certain +product variants or application-specific contexts. + +Example and Approach: +-------------------- +The reactor framework in ACE allows plug and play of different +reactors such as Select, TP, Devpoll etc. The TAO middleware +implementation and applications that run atop TAO typically use +one particular implementation of the Reactor. For example, a +single-threaded application might use select_* reactors. The +Reactor framework uses the bridge pattern to transparently +invoke operations on the right reactors. When the concrete +Reactor is known, it should be possible to specialize the +framework to use the concrete reactor directly rather than use +the bridge. + +As a part of the Feature Oriented Customizer (FOCUS) tool being +,we are trying to specialize frameworks +when the concrete implementation type is known a priori. FOCUS +provides an XML based transformation engine, where the +specialization transformations are captured in XML file and a +weaver specializes the code. + +To help in this transformation process, FOCUS applies markers +within the source code. These markers are added as special +comments. For example, //@@ REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK +represents a hook where forward declarations and include files are +added by the weaver. As these markers are comments therefore should not +affect normal applications in *any* manner. Additionally, applications +that use multiple reactor implementations not be affected/do not need any +change. Currently, these specializations are targeted for TAO middleware, +where applications know the target reactor a priori and want to +leverage the specialization to improve performance. + +FOCUS Installation +------------------ +. FOCUS is written using Perl and does not require any compilation. Additionally + FOCUS does not depend on any external tools. + +Requirements +------------ +. FOCUS has been tested on Perl version 5.8.0 and uses the following Perl + packages: + -- XML::DOM package --> Perl package for processing XML DTDs + +Sample Usage: +------------- +FOCUS can be invoked from the command line in the following manner: +cmd>$ACE_ROOT/bin/FOCUS/FOCUS.pl --reactor-spl=select-st + --prefix-path=/build/arvindk/ACE_wrappers + --output-prefix=/build/arvindk/spl-files + +More Information: +----------------- +More information about FOCUS should be available from the docs directory. diff --git a/ACE/bin/FOCUS/VERSION b/ACE/bin/FOCUS/VERSION new file mode 100644 index 00000000000..b41df4e4c7b --- /dev/null +++ b/ACE/bin/FOCUS/VERSION @@ -0,0 +1 @@ +This is FOCUS version 0.0.1 alpha diff --git a/ACE/bin/FOCUS/docs/FOCUS.html b/ACE/bin/FOCUS/docs/FOCUS.html new file mode 100644 index 00000000000..6b00dfb020d --- /dev/null +++ b/ACE/bin/FOCUS/docs/FOCUS.html @@ -0,0 +1,165 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<!-- $Id$ --> + <title>FOCUS</title> +</head> +<body bgcolor="#ffffff" link="#000fff" vlink="#ff0f0f" text="#000000"> +<hr> +<p></p> +<h2 align="center">Feature Oriented Customizer for Middleware (FOCUS)</h2> +<h3>Table of Contents</h3> +<ul> + <li><a href="#MOT">Introduction</a> </li> + <li><a href="#FCS-OVR">FOCUS Options overview</a> </li> + <li><a href="#FCS-USAGE">FOCUS Sample Usage</a> </li> + <li><a href="#FCS-ORG">FOCUS Structure & Organization</a> </li> + <li><a href="#FCS-ORG">Extending FOCUS</a> </li> +</ul> + +<hr> +<h3><b><a name="MOT">Introduction</a></b></h3> +TAO is a highly flexible ORB that contains a wide range of ORB +configuration options. One or more of these options can be combined +to meet various application requirements, such as low-latency, +predictable real-time behavior, or small memory footprint. TAO's ORB +configuration options are managed by an object-oriented framework +within the ORB Core. TAO ORB internally uses several objects called +<b>Resources</b>, such +as a <em>reactor</em> framework that demultiplexes new connection and +data requests from a client or <em>pluggable protocol</em> framework +to seamlessly work across different protocols. <b>Strategies</b>, are +objects that use the <b>Resource</b> entities to perform various ORB tasks, +such as connection management, concurrency, and demultiplexing. +The <b>Service Configurator</b> is a framework that can be used +to statically and dynamically configure components into middleware and +applications. + +Most often, applications that run on top of TAO use only one concrete type +of each resource. For example, predominantly TAO applications use the IIOP +protocol for communication. In this case, the underlying framework that +realizes the feature can be specialized to remove dynamic dispatching +overheads. The Feature Oriented Customizer (FOCUS) tool provides a +generic approach to enable middleware developers to specialize middleware +Frameworks when the concrete resource type is known a priori. +FOCUS provides an XML based transformation engine, where the +specialization transformations are captured in XML file and a +weaver specializes the code. Some important points to note about FOCUS +and specialization: +<ul> + <li>It does not modify an interface. So no application level changes are + necessary. + </li> + <li>Once a framework has been customized using FOCUS for a concrete component, + other components do not work. For example, specializing the protocol + framework with IIOP, precludes the ability to plug-in other protocol + implementations. + </li> + <li>It provides a source-to-source transformations that require re-compiling + the source. + </li> +</ul> + +<hr> +<h3><b><a name="FCS-OVR">FOCUS Options Usage</a></b></h3> +<table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td>--prefix-path</td> + <td>prefix-path to the ACE+TAO source distribution location. For example, + in most situations this path is same as the ACE_ROOT environment + variable. + </td> + </tr> + <tr> + <td>--reactor-spl <em>select-st</em>, <em>select-mt</em>, <em>tp</em></td> + <td>Option to specialize the reactor framework with the + concrete reactor type. + <p>select-st: select reactor which no locking. Single threaded case.</p> + <p>select-mt: select reactor with locking enabled, multi-threaded case. + </p> + <p>tp-reactor: Thread-pool reactor</p> + </td> + </tr> + <tr> + <td>--protocol-spl <em>iiop</em></td> + <td>Option to specialize the pluggable protocol framework in TAO for the + IIOP protocol. + </tr> + <tr> + <td>--messaging-spl <em>giop</em></td> + <td>Option to specialize the messaging strategy in TAO with GIOP + messaging protocol. + </td> + </tr> + <tr> + <td>--wait-strategy <em>rw</em></td> + <td>Specialize the Wait Strategy with the concrete Wait Strategy in TAO. + This specialization corresponds to the <em>-ORBWaitStrategy</em> + option in TAO. + </td> + </tr> + <td>--output-prefix</td> + <td>Option to copy over the specialized files to an output directory. This + option works only when a single specialization is chose. If multiple + specializations are chosen, then this copies the files corresponding + to the last specialization. + </td> + </tbody> +</table> + +<hr> +<h3><b><a name="FCS-USAGE">FOCUS Sample Usage</a></b></h3> +cmd>$ACE_ROOT/bin/FOCUS/FOCUS.pl --reactor-spl=select-st \ + --prefix-path=/build/arvindk/ACE_wrappers + --output-prefix=/build/arvindk/spl-files + +<hr> +<h3><b><a name="FCS-ORG">FOCUS Tool Organization</a></b></h3> +FOCUS tool structure is organized as follows: +<ul> + <li>Parser directory has all parser related modules</li> + <li>specializations: Rules data base that has the XML files required for + performing the individual specialization transformations. For each + specialization we have the following sub directories: + <ul> + <li>Reactor_Family: Specializations for ACE_Reactor family</li> + <li>Protocol_Family: Specializations for TAO's protocol family</li> + <li>Messaging_Strategy: Specializations for TAO's Messaging Strategy</li> + <li>Wait_Strategy: Specializations for TAO's Wait strategies</li> + </ul> + </li> +</ul> + +A detailed overview of the FOCUS specialization language, that specifies the +different types for specialization transformations supported in FOCUS is +discussed here: {To be updated shortly!} + +<hr> +<h3><b><a name="FCS-ORG">Extending FOCUS</a></b></h3> +To add a new specializations, to FOCUS, one needs to do the following: +<ol> + <li>Use the FOCUS specification language to model the different specialization + Transformations required. Add this to the repository under + FOCUS/specializations. Current convention is to use a directory for each + family or specific type of specialization and add specialization files + for each type in the family. + </li> + <li>Annotate the middleware source code where ever applicable to perform the + transformations. + </li> + <li>Modify the FOCUS.pl script to add a specific option similar to --reactor-spl + option for executing the specializations. Also update the specialization + table that maps the command-line option to the appropriate specialization + file within the repository. + </li> +</ol> + +<hr> + +</body> +</html> diff --git a/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl b/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl new file mode 100644 index 00000000000..c56543cf54f --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl @@ -0,0 +1,172 @@ +<?xml version="1.0"?> + +<!-- Dispatch Resolution Optimization + * ================================ + * This optimization should be applied with the requests + * from a client are delivered to the same operation in + * an IDL interface. In general this optimization applies + * to IDL interfaces that have a single operation defined + * on them + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<module name="TAO/tao"> + +<file name="Connection_Handler.h"> + +<!-- Include file to be added for this specialization --> +<add> + <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> + class TAO_Servant_Base; + #include "tao/Abstract_Servant_Base.h" + </data> +</add> + +<!-- Add get and set operations to hold operation signature --> +<add> + <hook>CONNECTION_HANDLER_SPL_PRIVATE_DATA_ADD_HOOK</hook> + <data> +TAO_Skeleton op_signature_; +TAO_Servant_Base *servant_; + </data> +</add> + +<!-- Add get and set public operations for the data --> +<add> + <hook>CONNECTION_HANDLER_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> +void set_op_signature (TAO_Skeleton &skeleton, + TAO_Servant_Base *&servant); +void get_op_signature (TAO_Skeleton &operation_ptr, + TAO_Servant_Base *&servant); + </data> +</add> + +</file> + +<file name="Connection_Handler.inl"> + +<!-- Add operations to get and set the operation signature --> +<add> + <hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</hook> + <data> + ACE_INLINE void + TAO_Connection_Handler::set_op_signature (TAO_Skeleton &skeleton, + TAO_Servant_Base *&servant) +{ + this->op_signature_ = skeleton; + this->servant_ = servant; +} + +ACE_INLINE void +TAO_Connection_Handler::get_op_signature (TAO_Skeleton &operation_ptr, + TAO_Servant_Base *&servant) +{ + operation_ptr = this->op_signature_; + servant = this->servant_; +} + + </data> +</add> +</file> + +<file name="GIOP_Message_Base.h"> + +<add> +<hook>GIOP_MESSAGE_BASE_DATA_MEMBER_ADD_HOOK</hook> +<data>bool once__;</data> +</add> +</file> + +<file name="GIOP_Message_Base.cpp"> + +<add> + <hook>GIOP_MESSAGE_BASE_INCLUDE_ADD_HOOK</hook> + <data>#include "tao/Connection_Handler.h"</data> +</add> + +<!-- Add a once__ data member to the class that will + only resolve the dispatch once --> +<substitute match-line="yes"> + <search>TAO_DEF_GIOP_MINOR\)</search> + <replace>TAO_DEF_GIOP_MINOR) + , once__ (1) + </replace> +</substitute> + +<!-- Comment code that resolves dispatch normally --> +<comment> + <start-hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add the optimized path code --> +<add> + <hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_END</hook> + <data> + if (once__) + { + once__ = false; + + // Normal path the first time + this->orb_core_->request_dispatcher ()->dispatch ( + this->orb_core_, + request, + forward_to + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + else + { + // Dispatch directly to the skeleton + TAO_Connection_Handler *handler = + transport->connection_handler (); + TAO_Skeleton skel; + TAO_Servant_Base *skeleton_ptr; + handler->get_op_signature (skel, skeleton_ptr); + + // Convert references to void * + void *upcall_ptr = 0; + skel (request, + upcall_ptr, + (void *)skeleton_ptr + ACE_ENV_ARG_PARAMETER); + if (response_required) + request.tao_send_reply (); + } + </data> +</add> +</file> +</module> + +<module name="TAO/tao/PortableServer"> +<file name="Servant_Base.cpp"> + +<!-- Add necessary include files --> +<add> + <hook>TAO_SERVANT_BASE_INCLUDE_ADD_HOOK</hook> + <data>#include "tao/Transport.h"</data> + <data>#include "tao/Connection_Handler.h"</data> +</add> + +<!-- After processing the first request, set the operation signature on + the connection handler for subsequent request processing --> +<add> + <hook>TAO_DISPATCH_RESOLUTION_OPT_ADD_HOOK</hook> + <data> + TAO_Connection_Handler *handler = + req.transport ()->connection_handler (); + handler->set_op_signature (skel, + static_cast<TAO_Servant_Base *> (derived_this)); + </data> +</add> +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl b/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl new file mode 100644 index 00000000000..a33b90ba255 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl @@ -0,0 +1,211 @@ +<?xml version="1.0"?> + +<!-- Leader Follower Flushing Strategy Specializations + * ================================================= + * Details all the specialization transformations necessary + * to specialize the Flushing Strategy with the concrete + * Leader_Follower flushing strategy. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<module name="TAO/tao"> + +<!-- Transformations to L/F Flushing Strategy --> +<file name="Leader_Follower_Flushing_Strategy.h"> + +<!-- Comment out Flushing_Strategy include --> +<remove>#include "Flushing_Strategy.h"</remove> + +<!-- Add the forward declarations --> +<add> + <hook>FLUSHING_STRATEGY_SPL_INCLUDE_ADD_HOOK</hook> + <data> +class TAO_Transport; +class TAO_Queued_Message; +class ACE_Time_Value; + +#include "TAO_Export.h" + </data> +</add> + +<!-- Remove all virtual key words --> +<remove>virtual</remove> + +<!-- Remove inheritance from Flushing strategy --> +<remove>: public TAO_Flushing_Strategy</remove> + +</file> + +<!-- Do not build other Flushing Strategies --> +<file name="tao.mpc"> + + <substitute> + <search>Flushing_Strategy.h</search> + <replace>// Flushing_Strategy.h</replace> + </substitute> + <substitute> + <search>Flushing_Strategy.cpp</search> + <replace>// Flushing_Strategy.cpp</replace> + </substitute> + + <substitute> + <search>Block_Flushing_Strategy.h</search> + <replace>// Block_Flushing_Strategy.h</replace> + </substitute> + <substitute> + <search>Block_Flushing_Strategy.cpp</search> + <replace>// Block_Flushing_Strategy.cpp</replace> + </substitute> + + <substitute> + <search>Reactive_Flushing_Strategy.h</search> + <replace>// Reactive_Flushing_Strategy.h</replace> + </substitute> + <substitute> + <search>Reactive_Flushing_Strategy.cpp</search> + <replace>// Reactive_Flushing_Strategy.cpp</replace> + </substitute> + +</file> + +<file name="default_resource.cpp"> + +<substitute match-line="yes"> + <search>#include "tao/Reactive_Flushing_Strategy.h"</search> + <replace> // #include "tao/Reactive_Flushing_Strategy.h"</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "tao/Block_Flushing_Strategy.h"</search> + <replace>// #include "tao/Block_Flushing_Strategy.h"</replace> +</substitute> + +<!-- Replace all occurences of Flushing_Strategy with + L/F Flushing Strategy --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +<!-- Comment out region specified by comment hooks --> +<comment> + <start-hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add the L/F specialization after the hook --> +<add> + <hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_END</end-hook> + <data>this->flushing_strategy_type_ = TAO_LEADER_FOLLOWER_FLUSHING; + </data> +</add> + +<!-- Comment out creation of all other flushing strategies --> +<comment> + <start-hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_START</start-hook> + <end-hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_END</end-hook> +</comment> + +<!-- Create the L/F flushing strategy directly --> +<add> + <hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_END</hook> + <data>ACE_NEW_RETURN (strategy, + TAO_Leader_Follower_Flushing_Strategy, + 0); + </data> +</add> + +</file> + +<file name="default_resource.h"> + +<!-- Replace all occurences of Flushing_Strategy with L/F strategy --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +<file name="ORB_Core.h"> + +<!-- Replace all occurences of base strategy with most + derived strategy --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +<file name="ORB_Core.cpp"> + +<!-- Replace the Flushing Strategy inclue with L/F + flushing include --> +<substitute match-line="yes"> + <search>#include "Flushing_Strategy.h"</search> + <replace>#include "Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +<file name="ORB_Core.i"> + +<!-- Replace all occurences of base strategy with most + derived strategy --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +<file name="Transport.h"> + +<!-- Remove the friend declaration of Reactive_Flushing --> +<substitute match-line="yes"> + <search>friend class TAO_Reactive_Flushing_Strategy;</search> + <replace>// friend class TAO_Reactive_Flushing_Strategy;</replace> +</substitute> + +<!-- Remove friend declaration of Block Flushing --> +<substitute match-line="yes"> + <search>friend class TAO_Block_Flushing_Strategy;</search> + <replace>// friend class TAO_Block_Flushing_Strategy;</replace> +</substitute> + +</file> + +<file name="Transport.cpp"> + +<substitute match-line="yes"> + <search>#include "Flushing_Strategy.h"</search> + <replace>#include "Leader_Follower_Flushing_Strategy.h</replace> +</substitute> + +<!-- Replace all occurences of TAO_Flushing_Strategy with + TAO_Leader_Follower_Flushing --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_strategy</replace> +</substitute> + +</file> + +<file name="Resource_Factor.h"> + +<!-- Replace TAO_Flushing_Strategy with L/F version --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl b/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl new file mode 100644 index 00000000000..76e27509848 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl @@ -0,0 +1,246 @@ +<?xml version="1.0"?> + +<!-- Pluggable Messaging Specializations: + * When the concrete pluggable messaging is selected, + * this specialization removes the need for the Pluggable + * messaging interface completely from within TAO. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<!-- Define the module where there are multiple files --> +<module name="TAO/tao"> + +<file name="tao.mpc"> + +<!-- Remove Pluggable messaging include altogether --> +<substitute> + <search>GIOP_Message_Lite.cpp</search> + <replace>// GIOP_Message_Lite.cpp </replace> +</substitute> +<substitute> + <search>GIOP_Message_Lite.h</search> + <replace>// GIOP_Message_Lite.h</replace> +</substitute> +<substitute> + <search>Pluggable_Messaging.h</search> + <replace>// Pluggable_Messaging.h</replace> +</substitute> +<substitute> + <search>Pluggable_Messaging.cpp</search> + <replace>// Pluggable_Messaging.cpp</replace> +</substitute> + +</file> + +<file name="GIOP_Message_Base.h"> + +<!-- Remove Pluggable Messaging include directive --> +<remove>#include "tao/Pluggable_Messaging.h"</remove> + +<!-- Remove all occurences of virtual keyword --> +<remove>virtual</remove> + +<!-- Remove inheritance from Pluggable Messaging replace with + concrete class +--> +<remove>: public TAO_Pluggable_Messaging</remove> + +<!-- Typedef the concrete type, GIOP_Message_Base as the + underlying pluggable messaging type + --> +<add> + <hook>MESSAGING_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_GIOP_Message_Base TAO_Pluggable_Messaging;</data> +</add> + +<!-- The method is_ready_for_bi_directional_giop is procted, this + should be made public --> +<substitute match-line="yes"> + <!-- Operation signature --> + <search>int is_ready_for_bidirectional \(TAO_OutputCDR &msg\);</search> + <replace> + +public: + int is_ready_for_bidirectional (TAO_OutputCDR &msg); + +protected: + </replace> +</substitute> + +</file> + +<file name="IIOP_Connection_Handler.h"> + +<!-- remove forward decls --> +<remove>class TAO_Pluggable_Messaging;</remove> + +</file> + +<file name="IIOP_Transport.h"> + +<!-- remove forward decls --> +<remove>class TAO_Pluggable_Messaging;</remove> + +</file> + +<file name="TAO_Server_Request.h"> + +<!-- Remove Pluggable messaging include altogether --> +<substitute match-line="yes"> + <search>class TAO_Pluggable_Messaging;</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> +</substitute> + +</file> + +<file name="TAO_Server_Request.cpp"> + +<!-- Remove Pluggable messaging include altogether --> +<remove>#include "Pluggable_Messaging.h"</remove> + +</file> + +<file name="Transport.h"> +<!-- Remove Pluggable messaging include altogether --> +<substitute match-line="yes"> + <search>class TAO_Pluggable_Messaging;</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> +</substitute> +</file> + +<file name="Transport.cpp"> + <remove>#include "Pluggable_Messaging.h"</remove> +</file> + +</module> + +<!-- Transformations to the Messaging Directory --> +<module name="TAO/tao/Messaging"> + +<file name="AMH_Response_Handler.h"> + +<substitute match-line="yes"> + <search>class TAO_Pluggable_Messaging;</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> +</substitute> + +</file> + +<file name="AMH_Response_Handler.cpp"> + <remove>#include "tao/Pluggable_Messaging.h"</remove> +</file> + +<file name="AMH_Response_Handler.cpp"> +<substitute match-line="yes"> + <search>#include "tao/Pluggable_Messaging.h"</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> +</substitute> +</file> + +<file name="Asynch_Invocation.cpp"> + <remove>#include "tao/Pluggable_Messaging.h"</remove> +</file> + +</module> + +<module name="TAO/tao/Strategies"> + +<file name="DIOP_Connection_Handler.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="DIOP_Transport.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="DIOP_Transport.cpp"> + + <!-- Replace GIOP_Lite with GIOP --> +<comment> + <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<add> + <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (this->messaging_object_, + TAO_GIOP_Message_Base (orb_core, + ACE_MAX_DGRAM_SIZE)); + </data> +</add> + + <remove>#include "tao/GIOP_Message_Lite.h"</remove> + +</file> + +<file name="SHMIOP_Transport.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="SHMIOP_Transport.cpp"> + <remove>#include "tao/GIOP_Message_Lite.h"</remove> + + <!-- Replace GIOP_Lite with GIOP --> +<comment> + <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<add> + <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (this->messaging_object_, + TAO_GIOP_Message_Base (orb_core, + ACE_MAX_DGRAM_SIZE)); + </data> +</add> + +</file> + +<file name="UIOP_Connection_Handler.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="UIOP_Connection_Handler.cpp"> + <remove>#include "tao/GIOP_Message_Lite.h"</remove> +</file> + +<file name="UIOP_Transport.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="UIOP_Transport.cpp"> + + <!-- Replace GIOP_Lite with GIOP --> +<comment> + <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<add> + <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (this->messaging_object_, + TAO_GIOP_Message_Base (orb_core, + ACE_MAX_DGRAM_SIZE)); + </data> +</add> + <remove>#include "tao/GIOP_Message_Lite.h"</remove> +</file> +</module> + +<module name="TAO/tao/DynamicInterface"> + <file name="DII_Invocation_Adapter.cpp"> + <substitute match-line="yes"> + <search>#include "tao/Pluggable_Messaging.h"</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> + </substitute> + </file> +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl b/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl new file mode 100644 index 00000000000..d0da22a42f9 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl @@ -0,0 +1,995 @@ +<?xml version="1.0"?> + +<!-- IIOP Pluggable Protocol specialization + * ====================================== + * This specializes the pluggable protocol framework within + * TAO for the IIOP concrete protocol implementation. This + * specialization encompasses specializations, such as + * specializations for the Transport, Profile, end-point, + * Acceptor and Connector implementations within ACE+TAO. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> +<transform> + +<module name="TAO/tao"> + +<!-- Transformations to Transport implementation in TAO --> +<file name="Transport.h"> + +<!-- Search for TAO_Connection_Handler --> +<substitute match-line="yes"> + <search>class TAO_Connection_Handler;</search> + <replace>#include "tao/Connection_Handler.h"</replace> +</substitute> + +<!-- Add forward declarations and includes specific to + IIOP --> +<add> + <hook>TAO_TRANSPORT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +namespace IIOP +{ + class ListenPointList; +} + +class TAO_Acceptor; +class TAO_Adapter; + </data> +</add> + +<!-- Remove all virtual and pure virtual methods in this + class --> +<remove>virtual</remove> + +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +<!-- Replace the base class constructor with the derive + classes's constructor --> +<substitute match-line="yes"> + <search>TAO_Transport \(CORBA::ULong tag,</search> + <replace>TAO_Transport (TAO_IIOP_Connection_Handler *, CORBA::ULong tag, + </replace> +</substitute> + +<!-- Add public methods defined in IIOP_Transport --> +<add> + <hook>TAO_TRANSPORT_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> + + /// Bridge method to call a similar method on the connection handler + void update_protocol_properties (int send_buffer_size, + int recv_buffer_size, + int no_delay, + int enable_network_priority); + + /// Generate the request header + int generate_request_header (TAO_Operation_Details &opd, + TAO_Target_Specification &spec, + TAO_OutputCDR &msg); + </data> +</add> + +<!-- Add private methods from IIOP_Transport --> +<add> + <hook>TAO_TRANSPORT_SPL_PRIVATE_METHODS_ADD_HOOK</hook> + <data> + void set_bidir_context_info (TAO_Operation_Details &opdetails); + int get_listen_point (IIOP::ListenPointList &listen_point_list, + TAO_Acceptor *acceptor); + </data> +</add> + +<!-- Add private data from IIOP_Transport --> +<add> + <hook>TAO_TRANSPORT_SPL_DATA_MEMBERS_ADD_HOOK</hook> + <data> + /// The connection service handler used for accessing lower layer + /// communication protocols. + TAO_IIOP_Connection_Handler *connection_handler_; + + /// Our messaging object. + TAO_Pluggable_Messaging *messaging_object_; + </data> +</add> + +<!-- Typedef the TAO_Transport as IIOP_Transport --> +<add> + <hook>TAO_TRANSPORT_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Transport TAO_IIOP_Transport;</data> +</add> + +<!-- This method is overridden in the derived class --> +<substitute> + <search>generate_request_header</search> + <replace>generate_request_header_base__</replace> +</substitute> + +</file> + +<file name="Transport.cpp"> + +<!-- Add necessary includes --> +<add> + <hook>TAO_TRANSPORT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "Transport_Acceptor.h" +#include "IIOPC.h" +#include "Acceptor_Registry.h" +#include "operation_details.h" +#include "GIOP_Message_Base.h" +#include "Protocols_Hooks.h" + </data> +</add> + +<!-- Modify the TAO constructor adding the IIOP Transport's data --> +<substitute match-line="yes"> + <search>TAO_Transport::TAO_Transport \(CORBA::ULong tag,</search> + <replace>TAO_Transport::TAO_Transport (TAO_IIOP_Connection_Handler *handler, + CORBA::ULong tag, + </replace> +</substitute> + +<substitute match-line="yes"> + <search>, partial_message_ \(0\)</search> + <replace> , partial_message_ (0) + , connection_handler_ (handler) + , messaging_object_ (0) + </replace> +</substitute> + +<!-- Within the constructor create/initialize the messaging object --> +<add> + <hook>TAO_TRANSPORT_SPL_CONSTRUCTOR_ADD_HOOK</hook> + <data> + // Use the normal GIOP object + ACE_NEW (this->messaging_object_, + TAO_GIOP_Message_Base (orb_core)); + </data> +</add> + +<add> + <hook>TAO_TRANSPORT_SPL_DESTRUCTOR_ADD_HOOK</hook> + <data>delete this->messaging_object_;</data> +</add> + +<!-- comment out unimplemented base class methods --> +<comment> + <start-hook>TAO_TRANSPORT_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_TRANSPORT_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add the concrete methods from IIOP_Transport implementation --> +<copy-from-source> + <source>IIOP_Transport.cpp</source> + + <copy-hook-start>TAO_TRANSPORT_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_TRANSPORT_SPL_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_TRANSPORT_SPL_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- The derived class calls this method. Override this --> +<substitute> + <search>TAO_Transport::generate_request_header</search> + <replace>TAO_Transport::generate_request_header_base__</replace> +</substitute> + +</file> + +<!-- Transformations to specialize Connection_Handler class --> +<file name="Connection_Handler.h"> + +<!-- Remove the default constructor, NOTE: we use regular expressions + to match the constructor but not the destructor --> +<remove>\s+TAO_Connection_Handler\s*\(void\);</remove> + +<!-- Make sure that Connection_Handler inherits from SVC_HANDLER --> +<substitute match-line="yes"> + <search>: public TAO_LF_CH_Event</search> + <replace>: public TAO_IIOP_SVC_HANDLER, + public TAO_LF_CH_Event + </replace> +</substitute> + +<!-- Forward declarations --> +<add> + <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "ace/Svc_Handler.h" +#include "ace/SOCK_Stream.h" + +typedef ACE_Svc_Handler < ACE_SOCK_STREAM, ACE_NULL_SYNCH > + TAO_IIOP_SVC_HANDLER; + +namespace IIOP +{ + class ListenPointList; +} + </data> +</add> + +<!-- Public methods from IIOP_Connection_Handler class --> +<add> + <hook>CONNECTION_HANDLER_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> + int open (void *); + int close (u_long = 0); + + int resume_handler (void); + int handle_output (ACE_HANDLE); + int handle_close (ACE_HANDLE, ACE_Reactor_Mask); + int handle_timeout (const ACE_Time_Value &current_time, + const void *act = 0); + + /// Add ourselves to Cache. + int add_transport_to_cache (void); + + /// Process the @a listen_list + int process_listen_point_list (IIOP::ListenPointList &listen_list); + + /// Check if network priority needs to be enabled + int enable_network_priority (void); + + TAO_Connection_Handler (ACE_Thread_Manager * = 0); + + /// Constructor. + TAO_Connection_Handler (TAO_ORB_Core *orb_core, + CORBA::Boolean flag); + </data> +</add> + +<!-- Private data members --> +<add> + <hook>CONNECTION_HANDLER_SPL_PRIVATE_DATA_ADD_HOOK</hook> + <data>int dscp_codepoint_;</data> +</add> + +<!-- Typedef the class --> +<add> + <hook>CONNECTION_HANDLER_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Connection_Handler TAO_IIOP_Connection_Handler;</data> +</add> + +<!-- Remove all virtuals and =0; from the code --> +<remove>virtual</remove> + +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +</file> + +<file name="Connection_Handler.cpp"> + +<!-- Add the include hook --> +<add> + <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "IIOPC.h" +#include "Thread_Lane_Resources.h" +#include "Base_Transport_Property.h" +#include "Protocols_Hooks.h" +#include "Wait_Strategy.h" + +#include "ace/os_include/netinet/os_tcp.h" +#include "ace/os_include/os_netdb.h" + </data> +</add> + +<!-- IIOP_Connection_Handler constructors added --> +<add> + <hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</hook> + <data> +TAO_Connection_Handler::TAO_Connection_Handler (ACE_Thread_Manager *t) + : TAO_IIOP_SVC_HANDLER (t, 0 , 0), + orb_core_ (0), + dscp_codepoint_ (IPDSFIELD_DSCP_DEFAULT << 2) +{ + ACE_ASSERT (0); +} + +TAO_Connection_Handler::TAO_Connection_Handler ( + TAO_ORB_Core *orb_core, + CORBA::Boolean flag) + : TAO_IIOP_SVC_HANDLER (orb_core->thr_mgr (), 0, 0), + orb_core_ (orb_core), + transport_ (0), + dscp_codepoint_ (IPDSFIELD_DSCP_DEFAULT << 2) +{ + TAO_IIOP_Transport* specific_transport = 0; + ACE_NEW (specific_transport, + TAO_IIOP_Transport (this, IOP::TAG_INTERNET_IOP, orb_core)); + + // store this pointer (indirectly increment ref count) + this->transport (specific_transport); + + // @@todo: We need to have a distinct option/ method in the resource + // factory for this and TAO_Transport. + this->lock_ = + this->orb_core_->resource_factory ()->create_cached_connection_lock (); + + // Put ourselves in the connection wait state as soon as we get + // created + this->state_changed (TAO_LF_Event::LFS_CONNECTION_WAIT, + this->orb_core_->leader_follower ()); +} + </data> +</add> + +<!-- Replace all occurances of IIOP_Connection_Handler with that + of TAO_Connection_Handler --> +<substitute> + <search>TAO_IIOP_Connection_Handler</search> + <replace>TAO_Connection_Handler</replace> +</substitute> + +<!-- Comment out base class methods that are over-ridden in the + derived class --> +<comment> + <start-hook>CONNECTION_HANDLER_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>CONNECTION_HANDLER_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Copy operations from IIOP_Connection_Handler class and put them + in the Connection_Handler class --> + +<copy-from-source> + + <source>IIOP_Connection_Handler.cpp</source> + <copy-hook-start>CONNECTION_HANDLER_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>CONNECTION_HANDLER_SPL_COPY_HOOK_END</copy-hook-end> + <dest-hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</dest-hook> + +</copy-from-source> + +<add> + <hook>CONNECTION_HANDLER_DESTRUCTOR_ADD_HOOK</hook> + <data>delete this->transport ();</data> +</add> + +</file> + +<!-- Modifications to Acceptor and Connector Components in TAO --> +<file name="Transport_Acceptor.h"> + +<!-- Forward declaration --> +<add> + <hook>TAO_ACCEPTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "tao/Connection_Handler.h" +#include "tao/Acceptor_Impl.h" +#include "tao/GIOP_Message_Version.h" +#include "ace/Acceptor.h" +#include "ace/SOCK_Acceptor.h" + </data> +</add> + +<!-- Methods from IIOP_Acceptor components --> +<copy-from-source> + <source>IIOP_Acceptor.h</source> + <copy-hook-start>TAO_ACCEPTOR_SPL_CONCRETE_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ACCEPTOR_SPL_CONCRETE_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_ACCEPTOR_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Typedef hook --> +<add> + <hook>TAO_ACCEPTOR_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Acceptor TAO_IIOP_Acceptor; + #if defined(__ACE_INLINE__) + #include "tao/IIOP_Acceptor.i" + #endif /* __ACE_INLINE__ */ + </data> +</add> + +<!-- Private data memeber --> +<copy-from-source> + <source>IIOP_Acceptor.h</source> + + <copy-hook-start>TAO_ACCEPTOR_SPL_DATA_MEMBERS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ACCEPTOR_SPL_DATA_MEMBERS_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_ACCEPTOR_SPL_DATA_MEMBERS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Eliminate the virtual functions --> +<remove>virtual</remove> +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +<!-- Remove destructor --> +<remove>~TAO_IIOP_Acceptor \(void\);</remove> + +<substitute> + <search>TAO_IIOP_Acceptor</search> + <replace>TAO_Acceptor</replace> +</substitute> + +</file> + +<!-- Transformations to Transport_Acceptor.cpp --> +<file name="Transport_Acceptor.cpp"> + +<copy-from-source> + <source>IIOP_Acceptor.cpp</source> + + <copy-hook-start>TAO_ACCEPTOR_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ACCEPTOR_SPL_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_ACCEPTOR_SPL_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Modify the constructor --> +<substitute match-line="yes"> + <search>: TAO_Acceptor \(IOP::TAG_INTERNET_IOP\),</search> + <replace>: tag_ (IOP::TAG_INTERNET_IOP), + </replace> +</substitute> + +<!-- Add mthods to the destructor --> +<add> + <hook>TAO_ACCEPTOR_DESTRUCTOR_ADD_HOOK</hook> + <data> + this->close (); + delete this->creation_strategy_; + delete this->concurrency_strategy_; + delete this->accept_strategy_; + + delete [] this->addrs_; + + for (CORBA::ULong i = 0; i < this->endpoint_count_; ++i) + CORBA::string_free (this->hosts_[i]); + + delete [] this->hosts_; + </data> +</add> + +<!-- Trasnform IIOP_Acceptor to TAO_Acceptor --> +<substitute match-line="yes"> + <search>#include "tao/IIOP_Acceptor.h"</search> + <replace> </replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "tao/IIOP_Profile.h"</search> + <replace>#include "tao/Profile.h"</replace> +</substitute> + +<substitute> + <search>TAO_IIOP_Acceptor::TAO_IIOP_Acceptor</search> + <replace>TAO_Acceptor::TAO_Acceptor</replace> +</substitute> + +</file> + +<file name="tao.mpc"> + +<!-- Do not build all IIOP_* files as the specializations + are moved to the base classes --> + +<substitute> + <search>IIOP_Transport.cpp</search> + <replace>// IIOP_Transport.cpp </replace> +</substitute> + +<substitute> + <search>IIOP_Transport.h</search> + <replace>// IIOP_Transport.h</replace> +</substitute> + +<substitute> + <search>IIOP_Connection_Handler.cpp</search> + <replace>// IIOP_Connection_Handler.cpp</replace> +</substitute> +<substitute> + <search>IIOP_Connection_Handler.h</search> + <replace>// IIOP_Connection_Handler.h</replace> +</substitute> + +<substitute> + <search>IIOP_Acceptor.cpp</search> + <replace>// IIOP_Acceptor.cpp</replace> +</substitute> +<substitute> + <search>IIOP_Acceptor.h</search> + <replace>// IIOP_Acceptor.h</replace> +</substitute> + +<substitute> + <search>IIOP_Connector.cpp</search> + <replace>// IIOP_Connector.cpp</replace> +</substitute> + +<substitute> + <search>IIOP_Endpoint.cpp</search> + <replace>// IIOP_Endpoint.cpp</replace> +</substitute> + +<substitute> + <search>IIOP_Connector.h</search> + <replace>// IIOP_Connector.h</replace> +</substitute> + +<substitute> + <search>IIOP_Endpoint.h</search> + <replace>// IIOP_Endpoint.h</replace> +</substitute> + +<substitute> + <search>IIOP_Profile.cpp</search> + <replace>// IIOP_Profile.cpp</replace> +</substitute> +<substitute> + <search>IIOP_Profile.h</search> + <replace>// IIOP_Profile.h</replace> +</substitute> + +</file> + +<file name="Endpoint.h"> + +<!-- Include and forward declation add hook --> +<add> + <hook>TAO_ENDPOINT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "tao/IIOP_EndpointsC.h" +#include "ace/INET_Addr.h" + </data> +</add> + +<!-- Copy the private member declarations from IIOP_Endpoint + implementation --> + +<copy-from-source> + <source>IIOP_Endpoint.h</source> + + <copy-hook-start>TAO_ENDPOINT_SPL_PRIVATE_DATA_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ENDPOINT_SPL_PRIVATE_DATA_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_ENDPOINT_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook> +</copy-from-source> + +<copy-from-source> + <source>IIOP_Endpoint.h</source> + <copy-hook-start>TAO_ENDPOINT_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ENDPOINT_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_ENDPOINT_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Remove the unimplemented copy constructor of the base class --> +<remove>ACE_UNIMPLEMENTED_FUNC \(TAO_Endpoint \(const TAO_Endpoint&\)\)</remove> + +<substitute> + <search>TAO_IIOP_Endpoint</search> + <replace>TAO_Endpoint</replace> +</substitute> + +<substitute> + <search>TAO_IIOP_Profile</search> + <replace>TAO_Profile</replace> +</substitute> + +<add> + <hook>TAO_ENDPOINT_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Endpoint TAO_IIOP_Endpoint; + #if defined (__ACE_INLINE__) + # include "tao/IIOP_Endpoint.i" + #endif /* __ACE_INLINE__ */ + </data> +</add> + +<!-- Eliminate the virtual functions --> +<remove>virtual</remove> +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +</file> + +<file name="Endpoint.cpp"> + + <copy-from-source> + <source>IIOP_Endpoint.cpp</source> + <copy-hook-start>TAO_ENDPOINT_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ENDPOINT_SPL_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_ENDPOINT_SPL_METHODS_ADD_HOOK</dest-hook> + </copy-from-source> + + <!-- In the constructors copied from the derived class, there is a + invocation of the base class constructor. Expand it --> + <substitute match-line="yes"> + <search>: TAO_Endpoint \(IOP::TAG_INTERNET_IOP\)</search> + <replace>: addr_lookup_lock_ () + , hash_val_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , priority_ (TAO_INVALID_PRIORITY) + </replace> + </substitute> + + <substitute match-line="yes"> + <search>: TAO_Endpoint \(IOP::TAG_INTERNET_IOP, priority\)</search> + <replace>: addr_lookup_lock_ () + , hash_val_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , priority_ (priority) + </replace> + </substitute> + + <substitute match-line="yes"> + <search>: TAO_Endpoint \(rhs.tag_, rhs.priority_\)</search> + <replace>: addr_lookup_lock_ () + , hash_val_ (0) + , tag_ (rhs.tag_) + , priority_ (rhs.priority_) + </replace> + </substitute> + +<substitute> + <search>TAO_IIOP_Endpoint</search> + <replace>TAO_Endpoint</replace> +</substitute> + +<remove>#include "IIOP_Endpoint.h"</remove> + +</file> + +<file name="Transport_Connector.h"> + +<add> + <hook>TAO_CONNECTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "ace/SOCK_Connector.h" +#include "ace/Connector.h" +#include "tao/Connector_Impl.h" +#include "tao/Connection_Handler.h" + </data> +</add> + +<copy-from-source> + <source>IIOP_Connector.h</source> + <copy-hook-start>TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_CONNECTOR_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- IIOP_Connector's constructor --> +<add> + <hook>TAO_CONNECTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> TAO_Connector (CORBA::Boolean flag = 0);</data> +</add> + +<copy-from-source> + <source>IIOP_Connector.h</source> + <copy-hook-start>TAO_CONNECTOR_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_CONNECTOR_SPL_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_CONNECTOR_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook> +</copy-from-source> + +<add> + <hook>TAO_CONNECTOR_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Connector TAO_IIOP_Connector;</data> +</add> + +<!-- eliminate all virtual methods --> +<remove>virtual</remove> + +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +<substitute match-line="yes"> + <search>class TAO_Endpoint;</search> + <replace>#include "tao/Endpoint.h"</replace> +</substitute> + +</file> + +<file name="Transport_Connector.cpp"> + +<add> + <hook>TAO_CONNECTOR_SPL_INCLUDE_ADD_HOOK</hook> + <data> +#include "ace/OS_NS_strings.h" + </data> +</add> + +<!-- Instrument the constructor --> +<substitute match-line="yes"> + <search>: TAO_Connector \(IOP::TAG_INTERNET_IOP\)</search> + <replace>: active_connect_strategy_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , orb_core_ (0) + </replace> +</substitute> + +<copy-from-source> + <source>IIOP_Connector.cpp</source> + + <copy-hook-start>TAO_CONNECTOR_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_CONNECTOR_SPL_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_CONNECTOR_SPL_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- replace all IIOP_Connector with TAO_Connector --> +<substitute> + <search>TAO_IIOP_Connector</search> + <replace>TAO_Connector</replace> +</substitute> + +</file> + +<file name="IIOP_Factory.cpp"> + +<substitute match-line="yes"> + <search>#include "IIOP_Acceptor.h"</search> + <replace>#include "Transport_Acceptor.h"</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "IIOP_Connector.h"</search> + <replace>#include "Transport_Connector.h"</replace> +</substitute> +</file> + +<file name="IIOP_Lite_Factory.cpp"> + +<substitute match-line="yes"> + <search>#include "IIOP_Acceptor.h"</search> + <replace>#include "Transport_Acceptor.h"</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "IIOP_Connector.h"</search> + <replace>#include "Transport_Connector.h"</replace> +</substitute> +</file> + +<!-- Transformations to Profile class to make it tailored for IIOP + Profile --> +<file name="Profile.h"> + +<!-- include and forward declarations --> +<substitute match-line="yes"> + <search>class TAO_Endpoint;</search> + <replace>#include "tao/Endpoint.h"</replace> +</substitute> + +<!-- Remove all virtual methods --> +<remove>virtual</remove> +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +<!-- Copy all public methods from IIOP_Profile.h --> +<copy-from-source> + <source>IIOP_Profile.h</source> + <copy-hook-start>TAO_PROFILE_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_PROFILE_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_PROFILE_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Add proteccted data from IIOP_Profile class --> +<copy-from-source> + <source>IIOP_Profile.h</source> + <copy-hook-start>TAO_PROFILE_SPL_PROTECTED_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_PROFILE_SPL_PROTECTED_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_PROFILE_SPL_PROTECTED_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Add all the private data methods --> +<copy-from-source> + <source>IIOP_Profile.h</source> + <copy-hook-start>TAO_PROFILE_SPL_PRIVATE_DATA_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_PROFILE_SPL_PRIVATE_DATA_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_PROFILE_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Typedef the Profile class as IIOP_Profile --> +<add> + <hook>TAO_PROFILE_SPL_EXTERN_ADD_HOOK</hook> + <data> +typedef TAO_Profile TAO_IIOP_Profile; + </data> +</add> + +<substitute> + <search>TAO_IIOP_Profile</search> + <replace>TAO_Profile</replace> +</substitute> + + +</file> + +<!-- Transformations to Profile.cpp file specialized with the + IIOP_Profile implementation --> +<file name="Profile.cpp"> + +<!-- comment out virtual methods in the base class that do nothing + but have implementations due to compiler issues --> +<comment> + <start-hook>TAO_PROFILE_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_PROFILE_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<copy-from-source> + <source>IIOP_Profile.cpp</source> + + <copy-hook-start>TAO_PROFILE_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_PROFILE_SPL_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_PROFILE_SPL_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Add methods to the constructor of the Profile --> +<!-- Constructors are the exceptional case, we need to add + them specifically --> + +<add> + <hook>TAO_PROFILE_SPL_METHODS_ADD_HOOK</hook> + <data> +TAO_Profile::TAO_Profile (const ACE_INET_Addr &addr, + const TAO::ObjectKey &object_key, + const TAO_GIOP_Message_Version &version, + TAO_ORB_Core *orb_core) + : version_ (version) + , are_policies_parsed_ (false) + , addressing_mode_ (0) + , tagged_profile_ (0) + , ref_object_key_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , orb_core_ (orb_core) + , forward_to_ (0) + , refcount_lock_ (0) + , refcount_ (1) + , endpoint_ (addr, + orb_core->orb_params ()->use_dotted_decimal_addresses ()) + , count_ (1) +{ + // @@ NOTE: Need to probably use a different type of lock. + this->refcount_lock_ = + this->orb_core_->client_factory ()->create_profile_lock (); + + (void) this->orb_core_->object_key_table ().bind (object_key, + this->ref_object_key_); +} + +TAO_Profile::TAO_Profile (const char* host, + CORBA::UShort port, + const TAO::ObjectKey &object_key, + const ACE_INET_Addr &addr, + const TAO_GIOP_Message_Version &version, + TAO_ORB_Core *orb_core) + : version_ (version) + , are_policies_parsed_ (false) + , addressing_mode_ (0) + , tagged_profile_ (0) + , ref_object_key_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , orb_core_ (orb_core) + , forward_to_ (0) + , refcount_lock_ (0) + , refcount_ (1) + , endpoint_ (host, port, addr) + , count_ (1) +{ + // @@ NOTE: Need to probably use a different type of lock. + this->refcount_lock_ = + this->orb_core_->client_factory ()->create_profile_lock (); + (void) this->orb_core_->object_key_table ().bind (object_key, + this->ref_object_key_); +} + +TAO_Profile::TAO_Profile (TAO_ORB_Core *orb_core) + : version_ (TAO_GIOP_Message_Version (TAO_DEF_GIOP_MAJOR, + TAO_DEF_GIOP_MINOR)) + , are_policies_parsed_ (false) + , addressing_mode_ (0) + , tagged_profile_ (0) + , ref_object_key_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , orb_core_ (orb_core) + , forward_to_ (0) + , refcount_lock_ (0) + , refcount_ (1) + , endpoint_ () + , count_ (1) +{ + this->refcount_lock_ = + this->orb_core_->client_factory ()->create_profile_lock (); +} +</data> +</add> + +<add> + <hook>TAO_PROFILE_SPL_DESTRUCTOR_ADD_HOOK</hook> + <data> +TAO_Endpoint *tmp = 0; +for (TAO_Endpoint *next = this->endpoint ()->next (); + next != 0; + next = tmp) +{ + tmp = next->next (); + delete next; +} + </data> +</add> + +<!-- Replace all occurances of IIOP_Profile + with TAO_Profile --> +<substitute> + <search>TAO_IIOP_Profile</search> + <replace>TAO_Profile</replace> +</substitute> + +<!-- remove the dynamic casts, as now there is no + inheritance hiearchy --> +<substitute> + <search>dynamic_cast</search> + <replace>static_cast</replace> +</substitute> + +</file> + +<file name="Invocation_Endpoint_Selectors.cpp"> + +<substitute match-line="yes"> + <search>#include "tao/IIOP_Endpoint.h"</search> + <replace>#include "tao/Endpoint.h"</replace> +</substitute> +</file> + +<file name="orbconf.h"> + +<substitute match-line="yes"> + <search>TAO_HAS_UIOP 1</search> + <replace>TAO_HAS_UIOP 0</replace> +</substitute> + +<substitute match-line="yes"> + <search>TAO_HAS_SHMIOP 1</search> + <replace>TAO_HAS_SHMIOP 0</replace> +</substitute> + +<substitute match-line="yes"> + <search>TAO_HAS_MIOP 1</search> + <replace>TAO_HAS_MIOP 0</replace> +</substitute> + +<substitute match-line="yes"> + <search>TAO_HAS_DIOP 1</search> + <replace>TAO_HAS_DIOP 0</replace> +</substitute> +</file> +</module> + +<module name="/TAO/tao/RTPortableServer"> + +<file name="RT_Servant_Dispatcher.cpp"> + +<substitute> + <search>IIOP_Transport.h</search> + <replace>Transport.h</replace> +</substitute> + +<substitute> + <search>IIOP_Connection_Handler.h</search> + <replace>Connection_Handler.h</replace> +</substitute> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/README b/ACE/bin/FOCUS/specializations/README new file mode 100644 index 00000000000..e2126bf6566 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/README @@ -0,0 +1,16 @@ +@file README +============ + +This file describes certain common conventions regarding how the +specializations rules are integrated/added to this specialization +database. This directory will serve as a repository that will host all +the specialization rules for the different families/components. At the +moment, all the specialization transformations are specific to the +ACE+TAO middleware. + +For each component framework, the following are the rules for adding +the specializations: + +. Create a directory with the name of the component family, e.g., Reactor_Family +. Within this directory, create the <<Specific_Component>>.spl file that has the + individual transformations defined. diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl new file mode 100644 index 00000000000..6d4ecf6609b --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl @@ -0,0 +1,452 @@ +<?xml version="1.0"?> + +<!-- Select Reactor Specializations: + * =============================== + * Details all the specialization transformations necessary + * to specialize the Reactor framework when the target reactor + * is a select reactor. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<!-- Define the module where there are multiple files --> +<module name="ace"> + +<!-- File where the transformations happen --> +<file name="Select_Reactor_Base.h"> + +<!-- Add the following lines based on a hook --> +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>class ACE_Sig_Handler;</data> + <data>class ACE_Sig_Action;</data> + <data>class ACE_Sig_Set;</data> +</add> + +<add> + <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> +//--- How can we devirtualize these methods? +virtual ~ACE_Select_Reactor_Impl () {} + +virtual int notify (ACE_Event_Handler *event_handler = 0, + ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK, + ACE_Time_Value * = 0) =0; + +virtual int remove_handler (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; + +virtual int register_handler (ACE_HANDLE handle, + ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; + </data> +</add> + +<!-- Remove what ever is present in the tag from the file --> +<remove>virtual</remove> +<remove>: public ACE_Reactor_Impl</remove> +<remove>#include "ace/Reactor_Impl.h"</remove> + +<!-- Replace a with b --> +<substitute> + <search>public ACE_Reactor_Notify</search> + <replace>public ACE_Event_Handler</replace> +</substitute> + +<!-- Replace the generic versions with the Select specialized versions --> +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<!-- After the specialization, the following functions are still virtual --> +<substitute> + <search>void renew</search> + <replace>virtual void renew</replace> +</substitute> +<substitute> + <search>int is_suspended_i</search> + <replace>virtual int is_suspended_i</replace> +</substitute> +<substitute> + <search>void clear_dispatch_mask</search> + <replace>virtual void clear_dispatch_mask</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.cpp"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> + +<!-- Transformations to Reactor_Token_T.h --> +<file name="Reactor_Token_T.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "ace/Reactor_Impl.h"</search> + <replace>#include "ace/Select_Reactor_Base.h"</replace> +</substitute> + +</file> + +<file name="Reactor_Token_T.cpp"> + +<!-- Search for ACE_Reactor_Impl and replace it with + ACE_Select_Reactor_Impl --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Select_Reactor_T.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>class ACE_Sig_Handler;</data> +<data>class ACE_Sig_Action;</data> +<data>class ACE_Sig_Set;</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<remove>virtual</remove> + +</file> + +<file name="Select_Reactor_T.cpp"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>#include "ace/Countdown_Time.h"</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +</file> + +<!-- +<file name="Select_Reactor_T.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> +--> + +<file name="Reactor.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>#include "ace/Select_Reactor.h"</data> +</add> + +<remove>class ACE_Reactor_Impl;</remove> +<remove>virtual</remove> + +<substitute> +<search>ACE_Reactor_Impl</search> +<replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Remove the Reactor_Timer interface include --> +<remove>: public ACE_Reactor_Timer_Interface</remove> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<file name="Event_Handler.h"> + +<!-- remove the ACE_Event_Handler forware declaration --> +<remove>class ACE_Reactor_Timer_Interface;</remove> + +<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor --> +<substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> +</substitute> +</file> + +<file name="Event_Handler.cpp"> + <substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> + </substitute> +</file> + +<file name="Timer_Queue_T.cpp"> + +<!-- Remove the Reactor_Timer_Interface include --> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + + +<file name="Reactor.cpp"> + +<!-- Comment the conditional includes in the file --> +<comment> + <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook> + <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook> +</comment> + +<!-- Comment out conditional includes files in the Reactor's + constructor +--> +<comment> + <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook> + <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Within the constructor now create the right Reactor --> +<add> + <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (impl, + ACE_Select_Reactor); + </data> +</add> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<file name="Reactor.inl"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +// Check if this is necessary +#include "ace/Select_Reactor.h" + </data> +</add> + +</file> + +<!-- Do not build the other reactors than the Select Reactor! --> +<file name="ace.mpc"> + +<!-- Here is where regular expressions can come handy. Such + a capability is not currently provided + --> +<substitute> + <search>TP_Reactor.h</search> + <replace>// TP_Reactor.h </replace> +</substitute> +<substitute> + <search>TP_Reactor.cpp</search> + <replace>// TP_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Msg_WFMO_Reactor --> +<substitute> + <search>Msg_WFMO_Reactor.cpp</search> + <replace>// Msg_WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the WFMO Reactor --> +<substitute> + <search>WFMO_Reactor.cpp</search> + <replace>// WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor Impl --> +<substitute> + <search>Reactor_Impl.cpp</search> + <replace>// Reactor_Impl.cpp</replace> +</substitute> +<substitute> + <search>Reactor_Impl.h</search> + <replace>// Reactor_Impl.h</replace> +</substitute> + +<!-- Do not build the Dev Poll Reactor --> +<substitute> + <search>Dev_Poll_Reactor.cpp</search> + <replace>// Dev_Poll_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the priority Reactor --> +<substitute> + <search>Priority_Reactor.cpp</search> + <replace>// Priority_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor_Timer_Interface --> +<substitute> + <search>Reactor_Timer_Interface.h</search> + <replace>// Reactor_Timer_Interface.h</replace> +</substitute> +<substitute> + <search>Reactor_Timer_Interface.cpp</search> + <replace>// Reactor_Timer_Interface.cpp </replace> +</substitute> + +</file> + +</module> + +<!-- transformations required in TAO to work with a select reactor --> +<module name="TAO/tao"> + +<!-- Changes to default_resource.h --> +<file name="default_resource.h"> + +<!-- Remove the forward declaration of ACE_Reactor_Impl --> +<substitute match-line="yes"> +<search>class ACE_Reactor_Impl;</search> +<replace>#include "ace/Reactor.h"</replace> +</substitute> + +<!-- Replace all occurences of ACE_Reactor_Impl with + ACE_Select_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<!-- Changes to default_resource.cpp --> +<file name="default_resource.cpp"> + +<!-- Remove the occurence of TP_Reactor --> +<remove>#include "ace/TP_Reactor.h"</remove> + +<!-- Replace all occurences of ACE_Reactor_Impl with + ACE_Select_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Comment out the code that creates TP_Reactor --> +<comment> + <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add hook to add code that creates the select reactor + component --> +<add> + <!-- We use the same hook that signifies where the comment code + ended to add the concrete Reactor type --> + <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + TAO_REACTOR ((ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + 0, + (ACE_Select_Reactor_Notify*)0, + this->reactor_mask_signals_), + 0); + </data> +</add> +</file> + +<!-- changes to tao.mpc --> +<file name="tao.mpc"> + <substitute> + <search>GUIResource_Factory.cpp</search> + <replace>// GUIResource_Factory.cpp</replace> + </substitute> + <substitute> + <search>GUIResource_Factory.h</search> + <replace>// GUIResource_Factory.h</replace> + </substitute> +</file> + +</module> + +<module name="TAO/tao/Strategies"> + +<file name="advanced_resource.h"> + +<!-- Replace all occurances of ACE_Reactor_Impl with + Select_Reactor + --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<file name="advanced_resource.cpp"> + +<!-- Comment out all other reactor includes --> +<remove>#include "ace/FlReactor.h"</remove> +<remove>#include "ace/TkReactor.h"</remove> +<remove>#include "ace/WFMO_Reactor.h"</remove> +<remove>#include "ace/TP_Reactor.h"</remove> +<remove>#include "ace/Msg_WFMO_Reactor.h"</remove> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Replace Select_Reactor.h with Reactor.h --> +<substitute> + <search>ace/Select_Reactor.h</search> + <replace>ace/Reactor.h</replace> +</substitute> + +<!-- Comment out creation code for all other reactors --> +<comment> + <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Use the end hook to insert code that will create right reactor --> +<add> + <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + TAO_REACTOR ((ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + 0, + (ACE_Select_Reactor_Notify*)0, + this->reactor_mask_signals_), + 0); + </data> +</add> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl new file mode 100644 index 00000000000..145136455a2 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl @@ -0,0 +1,468 @@ +<?xml version="1.0"?> + +<!-- Select Reactor Specializations: + * =============================== + * Details all the specialization transformations necessary + * to specialize the Reactor framework when the target reactor + * is a select reactor. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<!-- Define the module where there are multiple files --> +<module name="ace"> + +<!-- File where the transformations happen --> +<file name="Select_Reactor_Base.h"> + +<!-- Add the following lines based on a hook --> +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>class ACE_Sig_Handler;</data> + <data>class ACE_Sig_Action;</data> + <data>class ACE_Sig_Set;</data> +</add> + +<add> + <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> +//These methods needs to be virtual as they are used by +//Select_Reactor_Notify classes which use the base class +virtual ~ACE_Select_Reactor_Impl () {} + +virtual int notify (ACE_Event_Handler *event_handler = 0, + ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK, + ACE_Time_Value * = 0) =0; + +virtual int remove_handler (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; + +virtual int register_handler (ACE_HANDLE handle, + ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; + </data> +</add> + +<!-- Remove what ever is present in the tag from the file --> +<remove>virtual</remove> +<remove>: public ACE_Reactor_Impl</remove> +<remove>#include "ace/Reactor_Impl.h"</remove> + +<!-- Replace a with b --> +<substitute> + <search>public ACE_Reactor_Notify</search> + <replace>public ACE_Event_Handler</replace> +</substitute> + +<!-- Replace the generic versions with the Select specialized versions --> +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<!-- After the specialization, the following functions are still virtual --> +<substitute> + <search>void renew</search> + <replace>virtual void renew</replace> +</substitute> +<substitute> + <search>int is_suspended_i</search> + <replace>virtual int is_suspended_i</replace> +</substitute> +<substitute> + <search>void clear_dispatch_mask</search> + <replace>virtual void clear_dispatch_mask</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.cpp"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> + +<file name="Select_Reactor_T.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>class ACE_Sig_Handler;</data> +<data>class ACE_Sig_Action;</data> +<data>class ACE_Sig_Set;</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<remove>virtual</remove> + +</file> + +<file name="Select_Reactor_T.cpp"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>#include "ace/Countdown_Time.h"</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +</file> + +<!-- +<file name="Select_Reactor_T.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> +--> + +<!-- Transformations to Reactor_Token_T.h --> +<file name="Reactor_Token_T.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "ace/Reactor_Impl.h"</search> + <replace>#include "ace/Select_Reactor_Base.h"</replace> +</substitute> + +</file> + +<file name="Reactor_Token_T.cpp"> + +<!-- Search for ACE_Reactor_Impl and replace it with + ACE_Select_Reactor_Impl --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Reactor.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>#include "ace/Select_Reactor.h"</data> +</add> + +<remove>class ACE_Reactor_Impl;</remove> +<remove>virtual</remove> + +<substitute> +<search>ACE_Reactor_Impl</search> +<replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Remove the Reactor_Timer interface include --> +<remove>: public ACE_Reactor_Timer_Interface</remove> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<file name="Event_Handler.h"> + +<!-- remove the ACE_Event_Handler forware declaration --> +<remove>class ACE_Reactor_Timer_Interface;</remove> + +<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor --> +<substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> +</substitute> +</file> + +<file name="Event_Handler.cpp"> + <substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> + </substitute> +</file> + +<file name="Timer_Queue_T.cpp"> + +<!-- Remove the Reactor_Timer_Interface include --> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<file name="Reactor.cpp"> + +<!-- Comment the conditional includes in the file --> +<comment> + <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook> + <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook> +</comment> + +<!-- Comment out conditional includes files in the Reactor's + constructor +--> +<comment> + <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook> + <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Within the constructor now create the right Reactor --> +<add> + <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (impl, + ACE_Select_Reactor); + </data> +</add> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<file name="Reactor.inl"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +// Check if this is necessary +#include "ace/Select_Reactor.h" + </data> +</add> + +</file> + +<file name="Select_Reactor.h"> + +<!-- comment out the lock based select reactor, which is a select_mt --> +<comment> + <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<add> + <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + typedef ACE_Select_Reactor_T <ACE_Reactor_Token_T < ACE_Noop_Token > > ACE_Select_Reactor; + </data> +</add> +</file> + +<!-- Do not build the other reactors than the Select Reactor! --> +<file name="ace.mpc"> + +<!-- Here is where regular expressions can come handy. Such + a capability is not currently provided + --> +<substitute> + <search>TP_Reactor.h</search> + <replace>// TP_Reactor.h </replace> +</substitute> +<substitute> + <search>TP_Reactor.cpp</search> + <replace>// TP_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Msg_WFMO_Reactor --> +<substitute> + <search>Msg_WFMO_Reactor.cpp</search> + <replace>// Msg_WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the WFMO Reactor --> +<substitute> + <search>WFMO_Reactor.cpp</search> + <replace>// WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor Impl --> +<substitute> + <search>Reactor_Impl.cpp</search> + <replace>// Reactor_Impl.cpp</replace> +</substitute> +<substitute> + <search>Reactor_Impl.h</search> + <replace>// Reactor_Impl.h</replace> +</substitute> + +<!-- Do not build the Dev Poll Reactor --> +<substitute> + <search>Dev_Poll_Reactor.cpp</search> + <replace>// Dev_Poll_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the priority Reactor --> +<substitute> + <search>Priority_Reactor.cpp</search> + <replace>// Priority_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor_Timer_Interface --> +<substitute> + <search>Reactor_Timer_Interface.h</search> + <replace>// Reactor_Timer_Interface.h</replace> +</substitute> +<substitute> + <search>Reactor_Timer_Interface.cpp</search> + <replace>// Reactor_Timer_Interface.cpp </replace> +</substitute> + +</file> + +</module> + +<!-- transformations required in TAO to work with a select reactor --> +<module name="TAO/tao"> + +<!-- Changes to default_resource.h --> +<file name="default_resource.h"> + +<!-- Remove the forward declaration of ACE_Reactor_Impl --> +<substitute match-line="yes"> +<search>class ACE_Reactor_Impl;</search> +<replace>#include "ace/Reactor.h"</replace> +</substitute> + +<!-- Replace all occurences of ACE_Reactor_Impl with + ACE_Select_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<!-- Changes to default_resource.cpp --> +<file name="default_resource.cpp"> + +<!-- Remove the occurence of TP_Reactor --> +<remove>#include "ace/TP_Reactor.h"</remove> + +<!-- Replace all occurences of ACE_Reactor_Impl with + ACE_Select_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Comment out the code that creates TP_Reactor --> +<comment> + <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add hook to add code that creates the select reactor + component --> +<add> + <!-- We use the same hook that signifies where the comment code + ended to add the concrete Reactor type --> + <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + TAO_NULL_LOCK_REACTOR ((ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + 0, + (ACE_Select_Reactor_Notify*)0, + this->reactor_mask_signals_), + 0); + </data> +</add> +</file> + +<!-- changes to tao.mpc --> +<file name="tao.mpc"> + <substitute> + <search>GUIResource_Factory.cpp</search> + <replace>// GUIResource_Factory.cpp</replace> + </substitute> + <substitute> + <search>GUIResource_Factory.h</search> + <replace>// GUIResource_Factory.h</replace> + </substitute> +</file> + +</module> + +<module name="TAO/tao/Strategies"> + +<file name="advanced_resource.h"> + +<!-- Replace all occurances of ACE_Reactor_Impl with + Select_Reactor + --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<file name="advanced_resource.cpp"> + +<!-- Comment out all other reactor includes --> +<remove>#include "ace/FlReactor.h"</remove> +<remove>#include "ace/TkReactor.h"</remove> +<remove>#include "ace/WFMO_Reactor.h"</remove> +<remove>#include "ace/TP_Reactor.h"</remove> +<remove>#include "ace/Msg_WFMO_Reactor.h"</remove> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Replace Select_Reactor.h with Reactor.h --> +<substitute> + <search>ace/Select_Reactor.h</search> + <replace>ace/Reactor.h</replace> +</substitute> + +<!-- Comment out creation code for all other reactors --> +<comment> + <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Use the end hook to insert code that will create right reactor --> +<add> + <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + TAO_NULL_LOCK_REACTOR ((ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + 0, + (ACE_Select_Reactor_Notify*)0, + this->reactor_mask_signals_), + 0); + </data> +</add> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl new file mode 100644 index 00000000000..f25c5fe5416 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl @@ -0,0 +1,439 @@ +<?xml version="1.0"?> + +<!-- Thread Pool Reactor Specializations: + * ====================================== + * Thread Pool reactor is a variation of the Select Reactor. + * This specialization includes all of the specializations + * that are present in Select_Reactor.spl + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<module name="ace"> + +<!-- File where the transformations happen --> +<file name="Select_Reactor_Base.h"> + +<!-- Add the following lines based on a hook --> +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>class ACE_Sig_Handler;</data> + <data>class ACE_Sig_Action;</data> + <data>class ACE_Sig_Set;</data> +</add> + +<!-- Remove what ever is present in the tag from the file --> +<remove>#include "ace/Reactor_Impl.h"</remove> +<remove>virtual</remove> +<remove>: public ACE_Reactor_Impl</remove> + +<!-- Replace a with b --> +<substitute> + <search>public ACE_Reactor_Notify</search> + <replace>public ACE_Event_Handler</replace> +</substitute> + +<add> + <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> +//--- How can we devirtualize these methods? +virtual ~ACE_Select_Reactor_Impl () {} + +virtual int notify (ACE_Event_Handler *event_handler = 0, + ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK, + ACE_Time_Value * = 0) = 0; + +virtual int remove_handler (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) = 0; + +virtual int register_handler (ACE_HANDLE handle, + ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; +//-------------------------------------------- + </data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<!-- After the specialization, the following functions are still virtual --> +<substitute> + <search>void renew</search> + <replace>virtual void renew</replace> +</substitute> +<substitute> + <search>int is_suspended_i</search> + <replace>virtual int is_suspended_i</replace> +</substitute> +<substitute> + <search>void clear_dispatch_mask</search> + <replace>virtual void clear_dispatch_mask</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.cpp"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> + +<file name="Select_Reactor_T.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>class ACE_Sig_Handler;</data> +<data>class ACE_Sig_Action;</data> +<data>class ACE_Sig_Set;</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> +</file> + +<file name="Select_Reactor_T.cpp"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>#include "ace/Countdown_Time.h"</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +</file> + +<!-- Transformations to Reactor_Token_T.h --> +<file name="Reactor_Token_T.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "ace/Reactor_Impl.h"</search> + <replace>#include "ace/Select_Reactor_Base.h"</replace> +</substitute> + +</file> + +<file name="Reactor_Token_T.cpp"> + +<!-- Search for ACE_Reactor_Impl and replace it with + ACE_Select_Reactor_Impl --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<!-- Starting below is the specialization for TP_Reactor --> + +<!-- Transformations to Reactor.h --> +<file name="Reactor.h"> + +<!-- Replace all occurences of ACE_Reactor_Impl with TP_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +<!-- Remove all occurences of the word virtual --> +<remove>virtual</remove> + +<!-- Remove the Reactor_Timer interface include --> +<remove>: public ACE_Reactor_Timer_Interface</remove> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<file name="Event_Handler.h"> + +<!-- remove the ACE_Event_Handler forware declaration --> +<remove>class ACE_Reactor_Timer_Interface;</remove> + +<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor --> +<substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> +</substitute> +</file> + +<file name="Event_Handler.cpp"> + <substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> + </substitute> +</file> + +<file name="Timer_Queue_T.cpp"> + +<!-- Remove the Reactor_Timer_Interface include --> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<!-- Transformations to Reactor.inl --> +<file name="Reactor.inl"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +// Check if this is necessary +#include "ace/Select_Reactor.h" + </data> +</add> + +</file> + +<file name="Reactor.cpp"> + +<!-- Replace ACE_Reactor_Impl with ACE_TP_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +<!-- Comment the conditional includes in the file --> +<comment> + <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook> + <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook> +</comment> + +<!-- Comment out conditional includes files in the Reactor's + constructor +--> +<comment> + <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook> + <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add the TP_Reactor include file --> +<add> + <hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</hook> + <data>#include "ace/TP_Reactor.h"</data> +</add> + +<!-- Within the constructor now create the right Reactor --> +<add> + <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (impl, + ACE_TP_Reactor); + </data> +</add> + +</file> + +<!-- Transformations to TP_Reactor.h --> +<file name="TP_Reactor.h"> + +<!-- Remove all occurances of virtual --> +<remove>virtual</remove> + +</file> + +<!-- Transformations to TP_Reactor.cpp --> +<file name="TP_Reactor.cpp"> + +<!-- Comment hook --> +<comment> + <start-hook>REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add this function to the --> +<add> + <hook>REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> +int +ACE_TP_Reactor::register_handler (int signum, + ACE_Event_Handler *new_sh, + ACE_Sig_Action *new_disp, + ACE_Event_Handler **old_sh, + ACE_Sig_Action *old_disp) +{ + return ACE_Select_Reactor::register_handler (signum, + new_sh, + new_disp, + old_sh, + old_disp); +} + </data> +</add> + +</file> + +<!-- Transformations to Asynch_Pseudo_Task.h --> +<file name="Asynch_Pseudo_Task.h"> + +<!-- Remove the Select_Reacto.h include --> +<remove>#include "ace/Select_Reactor.h"</remove> + +<substitute> + <search>ACE_Select_Reactor</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +<!-- Add the TP_Reactor which is the concrete reactor --> +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>#include "ace/TP_Reactor.h"</data> +</add> + +</file> + +<file name="ace.mpc"> + +<!-- Do not build the WFMO Reactor --> +<substitute> + <search>WFMO_Reactor.cpp</search> + <replace>// WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor Impl --> +<substitute> + <search>Reactor_Impl.cpp</search> + <replace>// Reactor_Impl.cpp</replace> +</substitute> +<substitute> + <search>Reactor_Impl.h</search> + <replace>// Reactor_Impl.h</replace> +</substitute> + +<!-- Do not build the Dev Poll Reactor --> +<substitute> + <search>Dev_Poll_Reactor.cpp</search> + <replace>// Dev_Poll_Reactor.cpp</replace> +</substitute> + + +<!-- Do not build the Msg_WFMO_Reactor --> +<substitute> + <search>Msg_WFMO_Reactor.cpp</search> + <replace>// Msg_WFMO_Reactor.cpp</replace> +</substitute> + + +<!-- Do not build the priority Reactor --> +<substitute> + <search>Priority_Reactor.cpp</search> + <replace>// Priority_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor_Timer_Interface --> +<substitute> + <search>Reactor_Timer_Interface.h</search> + <replace>// Reactor_Timer_Interface.h</replace> +</substitute> +<substitute> + <search>Reactor_Timer_Interface.cpp</search> + <replace>// Reactor_Timer_Interface.cpp </replace> +</substitute> + +</file> + +</module> +<!-- end of Changes to ace --> + +<!-- Transformations to TAO module --> +<module name="TAO/tao"> + +<file name="default_resource.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +</file> + +<file name="default_resource.cpp"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +</file> + +</module> + +<module name="TAO/tao/Strategies"> + +<file name="advanced_resource.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +</file> + +<file name="advanced_resource.cpp"> + +<!-- Comment out all other reactor includes --> + +<remove>#include "ace/FlReactor.h"</remove> +<remove>#include "ace/TkReactor.h"</remove> +<remove>#include "ace/WFMO_Reactor.h"</remove> +<!-- <remove>#include "ace/Select_Reactor.h"</remove> --> +<remove>#include "ace/Msg_WFMO_Reactor.h"</remove> + +<!-- Substitute ACE_Reactor_Impl with ACE_TP_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +<!-- Comment out creation code for all other reactors --> +<comment> + <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Use the end hook to insert code that will create right reactor --> +<add> + <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + ACE_TP_Reactor (ACE::max_handles (), + 1, + (ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + this->reactor_mask_signals_, + ACE_Select_Reactor_Token::LIFO), + 0); + </data> +</add> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl b/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl new file mode 100644 index 00000000000..ab76b9c8eef --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl @@ -0,0 +1,105 @@ +<?xml version="1.0"?> + +<!-- Wait Strategy Specialization + * =============================== + * Details all the specialization transformations necessary + * to specialize the Wait_Strategy with the Wait_On_Read strategy + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<module name="TAO/tao"> + +<file name="Wait_Strategy.cpp"> + +<!-- Copy specialized code from the Wait_On_Read strategy + to this file --> + +<copy-from-source> + + <!-- Name of the source file from which to copy. In this case, this is + the Wait_On_Read source file --> + <source>Wait_On_Read.cpp</source> + + <!-- Copy data between the following hooks defined in the aforementioned + file --> + <copy-hook-start>WAIT_STRATEGY_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>WAIT_STRATEGY_SPL_COPY_HOOK_END</copy-hook-end> + + <!-- Destination hook in the Wait_Strategy.h file where the code + should be placed --> + <dest-hook>TAO_WAIT_STRATEGY_SPL_ADD_HOOK</dest-hook> + +</copy-from-source> + +<!-- Copy include files to the hook to get the necessary include files --> +<add> + <hook>WAIT_STRATEGY_SPL_COPY_HOOK_START</hook> + <data> +#include "Wait_On_Read.h" +#include "Transport.h" +#include "Resume_Handle.h" +#include "Synch_Reply_Dispatcher.h" +#include "Client_Strategy_Factory.h" +#include "ORB_Core.h" +#include "ace/Reactor.h" +#include "ace/Countdown_Time.h" + </data> +</add> + +<!-- Once this is done, replace all occurences of TAO_Wait_On_Read with + TAO_Wait_Strategy --> +<substitute> + <search>TAO_Wait_On_Read</search> + <replace>TAO_Wait_Strategy</replace> +</substitute> + +</file> + +<file name="tao.mpc"> + +<!-- Do not build the other Wait strategy classes --> +<substitute> + <search>Wait_On_Read.h</search> + <replace>// Wait_On_Read.cpp</replace> +</substitute> +<substitute> + <search>Wait_On_Read.cpp</search> + <replace>// Wait_On_Read.cpp</replace> +</substitute> + +<substitute> + <search>Wait_On_Reactor.h</search> + <replace>// Wait_On_Reactor.cpp</replace> +</substitute> +<substitute> + <search>Wait_On_Reactor.cpp</search> + <replace>// Wait_On_Reactor.cpp</replace> +</substitute> + +<substitute> + <search>Wait_On_Leader_Follower.h</search> + <replace>// Wait_On_Leader_Follower.cpp</replace> +</substitute> +<substitute> + <search>Wait_On_Leader_Follower.cpp</search> + <replace>// Wait_On_Leader_Follower.cpp</replace> +</substitute> + +<substitute> + <search>Wait_On_LF_No_Upcall.h</search> + <replace>// Wait_On_LF_No_Upcall.cpp</replace> +</substitute> +<substitute> + <search>Wait_On_LF_No_Upcall.cpp</search> + <replace>// Wait_On_LF_No_Upcall.cpp</replace> +</substitute> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/Hash_Map_Manager.pl b/ACE/bin/Hash_Map_Manager.pl new file mode 100755 index 00000000000..cf37f69b6a4 --- /dev/null +++ b/ACE/bin/Hash_Map_Manager.pl @@ -0,0 +1,146 @@ +eval '(exit $?0)' && eval 'exec perl -pi -S $0 ${1+"$@"}' + & eval 'exec perl -pi -S $0 $argv:q' + if 0; + +# $Id$ + +# +# This script is used by Hash_Map_Manager_Helper. +# + +# +# This script helps in fixing the template instantiations changes +# required by the new design of ACE_Hash_Map_Manager. +# +# Note that this script is not a 100% fool proof: +# +# (a) It uses commas to delimit the types in ACE_Hash_Map_Manager<X, +# Y, Z>. If X, Y, or Z are complicated types containing commas (e.g., +# T<a, b>), this script will not work. Also, all template parameters +# are assumed to be on the same line. +# +# In the case where this script will not work, here are the cookbook, +# do-it-yourself instructions: +# +# ACE_Hash_Map_Entry<X, Y> +# +# changes to: +# +# ACE_Hash_Map_Entry<X, Y> +# ACE_Hash<X> +# ACE_Equal_To<X> +# +# +# ACE_Hash_Map_Iterator_Base<X, Y, Z> +# +# changes to: +# +# ACE_Hash_Map_Iterator_Base_Ex<X, Y, ACE_Hash<X>, ACE_Equal_To<X>, Z> +# +# +# ACE_Hash_Map_Manager<X, Y, Z> +# +# changes to: +# +# ACE_Hash_Map_Manager<X, Y, Z> +# ACE_Hash_Map_Manager_Ex<X, Y, ACE_Hash<X>, ACE_Equal_To<X>, Z> +# +# +# ACE_Hash_Map_Iterator<X, Y, Z> +# +# changes to: +# +# ACE_Hash_Map_Iterator<X, Y, Z> +# ACE_Hash_Map_Iterator_Ex<X, Y, ACE_Hash<X>, ACE_Equal_To<X>, Z> +# +# +# ACE_Hash_Map_Reverse_Iterator<X, Y, Z> +# +# changes to: +# +# ACE_Hash_Map_Reverse_Iterator<X, Y, Z> +# ACE_Hash_Map_Reverse_Iterator_Ex<X, Y, ACE_Hash<X>, ACE_Equal_To<X>, Z> + + +# (b) The second problem is for g++ users (version lower than +# 2.8). g++ is broken such that if you explicitly instantiate +# templates, it will ignore template specialization. Therefore if you +# are using the template instantiation provided in ACE for ACE_Hash +# and ACE_Equal_To, don't instantiate those templates. + +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +$template_instantiation = "template class"; +$end_of_template_instantiation = ";"; + +$pragma_instantiation = "#pragma instantiate"; +$end_of_pragma_instantiation = ""; + +while ($line = <>) +{ + find_match ("ACE_Hash_Map_Entry"); + if ($match) + { + $template_parameters =~ /(.*),\s*(.*)/; + $X = $1; + $Y = $2; + + print "$instantiation ACE_Hash_Map_Entry<$template_parameters>$end_of_instantiation\n"; + print "$instantiation ACE_Hash<$X>$end_of_instantiation\n"; + print "$instantiation ACE_Equal_To<$X>$end_of_instantiation\n"; + next; + } + + add_ex ("ACE_Hash_Map_Manager", 1); + add_ex ("ACE_Hash_Map_Iterator", 1); + add_ex ("ACE_Hash_Map_Reverse_Iterator", 1); + add_ex ("ACE_Hash_Map_Iterator_Base", 0); + + print $line; +} + +sub find_match +{ + $key = $_[0].'\s*<\s*(.*)>\s*'; + if ($line =~ /$template_instantiation \s*$key$end_of_template_instantiation$/) + { + $match = 1; + $template_parameters = $1; + $instantiation = $template_instantiation; + $end_of_instantiation = $end_of_template_instantiation; + } + elsif ($line =~ /$pragma_instantiation \s*$key$end_of_pragma_instantiation$/) + { + $match = 1; + $template_parameters = $1; + $instantiation = $pragma_instantiation; + $end_of_instantiation = $end_of_pragma_instantiation; + } + else + { + $match = 0; + } +} + +sub add_ex +{ + $add_original_line = $_[1]; + find_match ($_[0]); + if ($match) + { + $template_parameters =~ /(.*),\s*(.*),\s*(.*)/; + $X = $1; + $Y = $2; + $Z = $3; + + if ($add_original_line) + { + print "$instantiation $_[0]<$template_parameters>$end_of_instantiation\n"; + } + + print "$instantiation $_[0]_Ex<$X, $Y, ACE_Hash<$X>, ACE_Equal_To<$X>, $Z>$end_of_instantiation\n"; + next; + } +} diff --git a/ACE/bin/Hash_Map_Manager_Helper b/ACE/bin/Hash_Map_Manager_Helper new file mode 100755 index 00000000000..f65cd584684 --- /dev/null +++ b/ACE/bin/Hash_Map_Manager_Helper @@ -0,0 +1,76 @@ +#! /bin/sh + +# +# $Id$ +# + +# +# This script uses Hash_Map_Manager.pl. +# + +# +# This script helps in fixing the template instantiations changes +# required by the new design of ACE_Hash_Map_Manager. +# +# Note that this script is not a 100% fool proof: +# +# (a) It uses commas to delimit the types in ACE_Hash_Map_Manager<X, +# Y, Z>. If X, Y, or Z are complicated types containing commas (e.g., +# T<a, b>), this script will not work. Also, all template parameters +# are assumed to be on the same line. +# +# In the case where this script will not work, here are the cookbook, +# do-it-yourself instructions: +# +# ACE_Hash_Map_Entry<X, Y> +# +# changes to: +# +# ACE_Hash_Map_Entry<X, Y> +# ACE_Hash<X> +# ACE_Equal_To<X> +# +# +# ACE_Hash_Map_Iterator_Base<X, Y, Z> +# +# changes to: +# +# ACE_Hash_Map_Iterator_Base_Ex<X, Y, ACE_Hash<X>, ACE_Equal_To<X>, Z> +# +# +# ACE_Hash_Map_Manager<X, Y, Z> +# +# changes to: +# +# ACE_Hash_Map_Manager<X, Y, Z> +# ACE_Hash_Map_Manager_Ex<X, Y, ACE_Hash<X>, ACE_Equal_To<X>, Z> +# +# +# ACE_Hash_Map_Iterator<X, Y, Z> +# +# changes to: +# +# ACE_Hash_Map_Iterator<X, Y, Z> +# ACE_Hash_Map_Iterator_Ex<X, Y, ACE_Hash<X>, ACE_Equal_To<X>, Z> +# +# +# ACE_Hash_Map_Reverse_Iterator<X, Y, Z> +# +# changes to: +# +# ACE_Hash_Map_Reverse_Iterator<X, Y, Z> +# ACE_Hash_Map_Reverse_Iterator_Ex<X, Y, ACE_Hash<X>, ACE_Equal_To<X>, Z> + + +# (b) The second problem is for g++ users (version lower than +# 2.8). g++ is broken such that if you explicitly instantiate +# templates, it will ignore template specialization. Therefore if you +# are using the template instantiation provided in ACE for ACE_Hash +# and ACE_Equal_To, don't instantiate those templates. + +for file in `find . -type f \( -name "*.i" -o -name "*.h" -o -name "*.cpp" \) -print | xargs egrep -l "template[ \t]*class[ \t]*ACE_Hash_Map_Manager"` +do + echo Fixing template instantiations in $file + perl $ACE_ROOT/bin/Hash_Map_Manager.pl $file > $file.new + mv $file.new $file +done diff --git a/ACE/bin/MakeProjectCreator/README b/ACE/bin/MakeProjectCreator/README new file mode 100644 index 00000000000..0b5da7554f3 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/README @@ -0,0 +1,43 @@ +This directory contains ACE- and TAO-specific extensions of MPC. All +the base projects in the config directory are ACE- and TAO-specific, +along with the perl modules for the gnuace and borland types and the +templates that go along with those implementations. + +The default workspace and project type for ACE_wrappers/bin/mwc.pl and +ACE_wrappers/bin/mpc.pl is gnuace. This differs from the default for +mwc.pl and mpc.pl located in the MPC directory. + +GNUACE-specific aspects of project keywords +------------------------------------------- + +requires Specifies which features should be enabled in order to + generate the project file. Under the GNUACE type, it also + specifies which tao macros should be set to build the + target. + +avoids Specifies which features should be disabled in order to + generate the project file. Under the GNUACE type, it also + specifies which tao macros should not be set to build the + target. + +The following keywords are GNUACE only: + +tagname Specifies the make macro to check before building the target +tagchecks Specifies the values for tagname to check + +NOTE: Within the GNUACE project type, setting sharedname to empty and +setting staticname to the static library name will result in a project +that will generate only static libraries. + +The default generation mode for the GNUACE project type is named targets. +The environment variable MPC_GNUACE_DIRECTORY_DEPS can be set to get the +directory based build that was used up until April of 2006. + +For more information about MPC, see the README and USAGE files in the +MPC directory. + +You can get MPC using cvs. If you have access to the DOC Group CVS +repository, you can check-out the 'MPC' module. You can also +anonymously check-out MPC from OCI's anonymous CVS server. + +cvs -d :pserver:anonymous@anoncvs.ociweb.com:/cvs co MPC diff --git a/ACE/bin/MakeProjectCreator/config/ace_athena.mpb b/ACE/bin/MakeProjectCreator/config/ace_athena.mpb new file mode 100644 index 00000000000..c9dad81dc77 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_athena.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project: ace_xt { + requires += athena + lit_libs += Xaw +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_fl.mpb b/ACE/bin/MakeProjectCreator/config/ace_fl.mpb new file mode 100644 index 00000000000..315e3f9499e --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_fl.mpb @@ -0,0 +1,29 @@ +// -*- MPC -*- +// $Id$ + +project : ace_x11, ace_gl { + requires += fl + + // Depends on configuration from include/makeinclude/platform_*.GNU + verbatim(gnuace,local) { + CPPFLAGS += $(PLATFORM_FL_CPPFLAGS) + CPPFLAGS += $(PLATFORM_GL_CPPFLAGS) $(PLATFORM_X11_CPPFLAGS) + LIBS += $(PLATFORM_FL_LIBS) $(PLATFORM_GL_LIBS) $(PLATFORM_X11_LIBS) + LDFLAGS += $(PLATFORM_FL_LDFLAGS) $(PLATFORM_GL_LDFLAGS) + LDFLAGS += $(PLATFORM_GL_LDFLAGS) + } + specific(vc8,vc71,vc7,vc6) { + libs += fltkdll + } + + specific(automake) { + // ACE_FLTK_* macros contain X11 settings + compile_flags -= $(ACE_X11_CPPFLAGS) + linkflags -= $(ACE_X11_LDFLAGS) + pure_libs -= $(ACE_X11_LIBS) + + compile_flags += $(ACE_FLTK_CPPFLAGS) + linkflags += $(ACE_FLTK_LDFLAGS) + pure_libs += $(ACE_FLTK_LIBS) + } +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_flreactor.mpb b/ACE/bin/MakeProjectCreator/config/ace_flreactor.mpb new file mode 100644 index 00000000000..63289cbac3a --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_flreactor.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : acelib, ace_fl { + requires += ace_flreactor + after += ACE_FlReactor + libs += ACE_FlReactor +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_for_tao.mpb b/ACE/bin/MakeProjectCreator/config/ace_for_tao.mpb new file mode 100644 index 00000000000..809140c3fae --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_for_tao.mpb @@ -0,0 +1,11 @@ +// -*- MPC -*- +// +// $Id$ + +feature(ace_for_tao) { + macros += ACE_LACKS_ACE_TOKEN + + after += ACE_FOR_TAO + libs += ACE_FOR_TAO + +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_gl.mpb b/ACE/bin/MakeProjectCreator/config/ace_gl.mpb new file mode 100644 index 00000000000..69bccb163af --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_gl.mpb @@ -0,0 +1,16 @@ +// -*- MPC -*- +// $Id$ + +project : ace_x11 { + requires += gl + + // Depends on configration from include/makeinclude/platform_*.GNU + verbatim(gnuace,local) { + CPPFLAGS += $(PLATFORM_GL_CPPFLAGS) $(PLATFORM_X11_CPPFLAGS) + LIBS += $(PLATFORM_GL_LIBS) $(PLATFORM_X11_LIBS) + LDFLAGS += $(PLATFORM_GL_LDFLAGS) $(PLATFORM_GL_LDFLAGS) + } + specific(vc6,vc7,vc71,vc8) { + lit_libs += OpenGL32 + } +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_gtk.mpb b/ACE/bin/MakeProjectCreator/config/ace_gtk.mpb new file mode 100644 index 00000000000..c1235d4633f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_gtk.mpb @@ -0,0 +1,13 @@ +// -*- MPC -*- +// $Id$ + +project { + macros += ACE_HAS_GTK + + // Depends on configration from include/makeinclude/platform_*.GNU + verbatim(gnuace,local) { + CPPFLAGS += $(PLATFORM_GTK_CPPFLAGS) + LIBS += $(PLATFORM_GTK_LIBS) + LDFLAGS += $(PLATFORM_GTK_LDFLAGS) + } +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_mfc.mpb b/ACE/bin/MakeProjectCreator/config/ace_mfc.mpb new file mode 100644 index 00000000000..3339a9220eb --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_mfc.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project: mfc { + macros += ACE_HAS_MFC=1 +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_motif.mpb b/ACE/bin/MakeProjectCreator/config/ace_motif.mpb new file mode 100644 index 00000000000..350291b8e52 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_motif.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project: ace_xt { + requires += motif + lit_libs += Xm +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_openssl.mpb b/ACE/bin/MakeProjectCreator/config/ace_openssl.mpb new file mode 100644 index 00000000000..f94fdd21f8b --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_openssl.mpb @@ -0,0 +1,20 @@ +// -*- MPC -*- +// $Id$ + +project : openssl { + + // The ACE/TAO configure scripts set ace_TLS_CFLAGS and ace_TLS_LIBS + // instead of $(SSL_ROOT)/include and $(SSL_ROOT)/lib as set by MPC's + // openssl.mpb. + + specific (automake) { + lit_libs -= ssl crypto + includes -= $(SSL_ROOT)/include + includes -= /usr/kerberos/include + libpaths -= $(SSL_ROOT)/lib + + compile_flags += @ACE_TLS_CPPFLAGS@ + linkflags += @ACE_TLS_LDFLAGS@ + pure_libs += @ACE_TLS_LIBS@ + } +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_qt.mpb b/ACE/bin/MakeProjectCreator/config/ace_qt.mpb new file mode 100644 index 00000000000..5b66aa7f68f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_qt.mpb @@ -0,0 +1,28 @@ +// -*- MPC -*- +// $Id$ + + +project: qt { + // Depends on configration from include/makeinclude/platform_*.GNU + verbatim(gnuace,local) { + CPPFLAGS += $(PLATFORM_QT_CPPFLAGS) + LIBS += $(PLATFORM_QT_LIBS) + LDFLAGS += $(PLATFORM_QT_LDFLAGS) + } + + specific(automake) { + includes -= $(QTDIR)/include + libpaths -= $(QTDIR)/lib + macros -= QT_THREAD_SUPPORT + lit_libs -= qt-mt$(QT_VERSION) + + compile_flags += $(ACE_QT_CPPFLAGS) + linkflags += $(ACE_QT_LDFLAGS) + pure_libs += $(ACE_QT_LIBS) + } + + specific(vc6, vc7, vc71, vc8, nmake) { + lit_libs -= qt-mt$(QT_VERSION) + pure_libs += $(PLATFORM_QT_LIBS) + } +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_qtreactor.mpb b/ACE/bin/MakeProjectCreator/config/ace_qtreactor.mpb new file mode 100644 index 00000000000..5aafe14fdb7 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_qtreactor.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : acelib, ace_qt { + requires += ace_qtreactor + after += ACE_QtReactor + libs += ACE_QtReactor +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_tk.mpb b/ACE/bin/MakeProjectCreator/config/ace_tk.mpb new file mode 100644 index 00000000000..10493bbf4ea --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_tk.mpb @@ -0,0 +1,19 @@ +// -*- MPC -*- +// $Id$ + +project { + requires += tk + // Depends on configration from include/makeinclude/platform_*.GNU + + verbatim(gnuace,local) { + CPPFLAGS += $(PLATFORM_TCL_CPPFLAGS) $(PLATFORM_TK_CPPFLAGS) + LIBS += $(PLATFORM_TCL_LIBS) $(PLATFORM_TK_LIBS) + LDFLAGS += $(PLATFORM_TCL_LDFLAGS) $(PLATFORM_TK_LDFLAGS) + } + + specific(automake) { + compile_flags += $(ACE_TK_CPPFLAGS) $(ACE_TCL_CPPFLAGS) + linkflags += $(ACE_TK_LDFLAGS) $(ACE_TCL_LDFLAGS) + pure_libs += $(ACE_TK_LIBS) $(ACE_TCL_LIBS) + } +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_tkreactor.mpb b/ACE/bin/MakeProjectCreator/config/ace_tkreactor.mpb new file mode 100644 index 00000000000..1694ea6fc98 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_tkreactor.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : acelib, ace_tk { + requires += ace_tkreactor + after += ACE_TkReactor + libs += ACE_TkReactor +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_x11.mpb b/ACE/bin/MakeProjectCreator/config/ace_x11.mpb new file mode 100644 index 00000000000..0b2f478acc2 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_x11.mpb @@ -0,0 +1,22 @@ +// -*- MPC -*- +// $Id$ + +project { + specific(vc6,vc7,vc71,vc8) { + } else { + requires += x11 + } + + // Depends on configration from include/makeinclude/platform_*.GNU + verbatim(gnuace,local) { + CPPFLAGS += $(PLATFORM_X11_CPPFLAGS) + LIBS += $(PLATFORM_X11_LIBS) + LDFLAGS += $(PLATFORM_X11_LDFLAGS) + } + + specific(automake) { + compile_flags += $(ACE_X11_CPPFLAGS) + linkflags += $(ACE_X11_LDFLAGS) + pure_libs += $(ACE_X11_LIBS) + } +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_xt.mpb b/ACE/bin/MakeProjectCreator/config/ace_xt.mpb new file mode 100644 index 00000000000..78152e14cc1 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_xt.mpb @@ -0,0 +1,20 @@ +// -*- MPC -*- +// $Id$ + +project: ace_x11 { + // this feature by default is set to 1 as projects dependent on Xt has their own features + requires += xt + + // Depends on configration from include/makeinclude/platform_*.GNU + verbatim(gnuace,local) { + CPPFLAGS += $(PLATFORM_XT_CPPFLAGS) $(PLATFORM_X11_CPPFLAGS) + LIBS += $(PLATFORM_XT_LIBS) $(PLATFORM_X11_LIBS) + LDFLAGS += $(PLATFORM_XT_LDFLAGS) $(PLATFORM_X11_LDFLAGS) + } + + specific(automake) { + compile_flags += $(ACE_XT_CPPFLAGS) + linkflags += $(ACE_XT_LDFLAGS) + pure_libs += $(ACE_XT_LIBS) + } +} diff --git a/ACE/bin/MakeProjectCreator/config/ace_xtreactor.mpb b/ACE/bin/MakeProjectCreator/config/ace_xtreactor.mpb new file mode 100644 index 00000000000..148d4c55556 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ace_xtreactor.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : acelib, ace_xt { + requires += ace_xtreactor + after += ACE_XtReactor + libs += ACE_XtReactor +} diff --git a/ACE/bin/MakeProjectCreator/config/acedefaults.mpb b/ACE/bin/MakeProjectCreator/config/acedefaults.mpb new file mode 100644 index 00000000000..59f8ca9657f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/acedefaults.mpb @@ -0,0 +1,25 @@ +// -*- MPC -*- +// $Id$ + +project: zlib, zzip, ipv6 { + staticflags += ACE_AS_STATIC_LIBS + includes += $(ACE_ROOT) + libpaths += $(ACE_ROOT)/lib + + // Support the alternative Borland Make project type + specific(bmake) { + unicode_flags += -DACE_USES_WCHAR + macros += ACE_LD_DECORATOR_STR=ACE_LIB_TEXT(\\"$(ILIBMODIFIER)\\") + debug_macros += ACE_NO_INLINE=1 + } + + specific(automake) { + am_release = @ACE_VERSION_NAME@ + includes += $(ACE_BUILDDIR) + } + + specific(vc8) { + // Enable structured exception handling + ExceptionHandling = 2 + } +} diff --git a/ACE/bin/MakeProjectCreator/config/aceexe.mpb b/ACE/bin/MakeProjectCreator/config/aceexe.mpb new file mode 100644 index 00000000000..cfd59d40b8d --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/aceexe.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project: acedefaults, acenosubsets, ace_for_tao, versioned_namespace { + +} diff --git a/ACE/bin/MakeProjectCreator/config/acelib.mpb b/ACE/bin/MakeProjectCreator/config/acelib.mpb new file mode 100644 index 00000000000..c1be0ca8fc3 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/acelib.mpb @@ -0,0 +1,11 @@ +// -*- MPC -*- +// $Id$ + +project: acedefaults, acenosubsets, ace_for_tao, versioned_namespace, pkgconfig { + libout = $(ACE_ROOT)/lib + + specific(automake) { + libout -= $(ACE_ROOT)/lib + libout += $(top_builddir)/lib + } +} diff --git a/ACE/bin/MakeProjectCreator/config/acenosubsets.mpb b/ACE/bin/MakeProjectCreator/config/acenosubsets.mpb new file mode 100644 index 00000000000..8ca2ce57d2e --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/acenosubsets.mpb @@ -0,0 +1,10 @@ +// -*- MPC -*- +// +// $Id$ + +feature(!ace_for_tao) { + + after += ACE + libs += ACE + +} diff --git a/ACE/bin/MakeProjectCreator/config/acexml.mpb b/ACE/bin/MakeProjectCreator/config/acexml.mpb new file mode 100644 index 00000000000..7097de92b92 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/acexml.mpb @@ -0,0 +1,10 @@ +// -*- MPC -*- +// $Id$ + +project { + avoids += ace_for_tao + after += ACEXML_Parser ACEXML + libs += ACEXML_Parser ACEXML + includes += $(ACE_ROOT)/ACEXML/common + requires += acexml +} diff --git a/ACE/bin/MakeProjectCreator/config/amh.mpb b/ACE/bin/MakeProjectCreator/config/amh.mpb new file mode 100644 index 00000000000..56648343ec1 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/amh.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project: taoidldefaults, messaging { + idlflags += -GH +} diff --git a/ACE/bin/MakeProjectCreator/config/ami.mpb b/ACE/bin/MakeProjectCreator/config/ami.mpb new file mode 100644 index 00000000000..9735a3b293d --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ami.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taoidldefaults, messaging { + requires += ami + idlflags += -GC +} diff --git a/ACE/bin/MakeProjectCreator/config/anytypecode.mpb b/ACE/bin/MakeProjectCreator/config/anytypecode.mpb new file mode 100644 index 00000000000..4207be85db8 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/anytypecode.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, taoidldefaults { + after += AnyTypeCode + libs += TAO_AnyTypeCode + + idlflags -= -Sa -St +} diff --git a/ACE/bin/MakeProjectCreator/config/automake.features b/ACE/bin/MakeProjectCreator/config/automake.features new file mode 100644 index 00000000000..d78fdef842f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/automake.features @@ -0,0 +1,32 @@ +// $Id$ + +// Ideally this file should enable all features, and the configure script +// would enable or disable the cooresponding automake conditionals. More +// work is required to make this a reality. + +automake=1 +ssl=1 +qos=0 + +gl=1 +x11=1 +athena=1 +motif=1 + +fl=1 +ace_flreactor=1 +tao_flresource=1 + +qt=1 +ace_qtreactor=1 +tao_qtresource=1 + +tk=1 +ace_tkreactor=1 +tao_tkresource=1 + +xt=1 +ace_xtreactor=1 +tao_xtresource=1 + +wxWindows=1 diff --git a/ACE/bin/MakeProjectCreator/config/avstreams.mpb b/ACE/bin/MakeProjectCreator/config/avstreams.mpb new file mode 100644 index 00000000000..b48daeacc30 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/avstreams.mpb @@ -0,0 +1,10 @@ +// -*- MPC -*- +// $Id$ + +project: property_serv, naming, qos { + avoids += ace_for_tao + after += AV + libs += TAO_AV + tagchecks += AV +} + diff --git a/ACE/bin/MakeProjectCreator/config/avstreamsexe.mpb b/ACE/bin/MakeProjectCreator/config/avstreamsexe.mpb new file mode 100644 index 00000000000..80ab5507cbf --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/avstreamsexe.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project: namingexe, avstreams { +} + diff --git a/ACE/bin/MakeProjectCreator/config/bidir_giop.mpb b/ACE/bin/MakeProjectCreator/config/bidir_giop.mpb new file mode 100644 index 00000000000..55b448e4f6a --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/bidir_giop.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, pi { + after += BiDir_GIOP + libs += TAO_BiDirGIOP +} diff --git a/ACE/bin/MakeProjectCreator/config/bmake.features b/ACE/bin/MakeProjectCreator/config/bmake.features new file mode 100644 index 00000000000..16181dc6293 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/bmake.features @@ -0,0 +1,7 @@ +// $Id$ + +ssl=0 +qos=1 +cidl=0 +rwho=0 +sctp=0 diff --git a/ACE/bin/MakeProjectCreator/config/borland.features b/ACE/bin/MakeProjectCreator/config/borland.features new file mode 100644 index 00000000000..16181dc6293 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/borland.features @@ -0,0 +1,7 @@ +// $Id$ + +ssl=0 +qos=1 +cidl=0 +rwho=0 +sctp=0 diff --git a/ACE/bin/MakeProjectCreator/config/ciao_client_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_client_dnc.mpb new file mode 100644 index 00000000000..409875f644d --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_client_dnc.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : security, ifr_client, valuetype, pi, codecfactory { + after += CIAO_DnC_Client + includes += $(CIAO_ROOT) $(CIAO_ROOT)/ciao $(CIAO_ROOT)/DAnCE + idlflags += -I$(CIAO_ROOT) -I$(CIAO_ROOT)/ciao -I$(CIAO_ROOT)/DAnCE -Sc + libs += CIAO_DnC_Client +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_component_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_component_dnc.mpb new file mode 100644 index 00000000000..9cabf46cf83 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_component_dnc.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : portableserver, ciao_server_dnc, ciao_events_dnc { + after += CIAO_DnC_Container + libs += CIAO_DnC_Container +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_config_handlers.mpb b/ACE/bin/MakeProjectCreator/config/ciao_config_handlers.mpb new file mode 100644 index 00000000000..7618262794c --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_config_handlers.mpb @@ -0,0 +1,23 @@ +// -*- MPC -*- +// $Id$ + +project : ciao_config_handlers_base, dynamicany, typecodefactory { + verbatim(gnuace, macros) { + override no_hidden_visibility = 1 + } + after += XSC_DynAny_Handler \ + XSC_Config_Handlers \ + XSC_XML_Handlers \ + RT_CCM_Config_Handlers \ + CIAO_Events_Handlers \ + Package_Config_Handlers \ + XSC_Config_Handlers_Common + + libs += XSC_Config_Handlers \ + RT_CCM_Config_Handlers \ + CIAO_Events_Handlers \ + Package_Config_Handlers \ + XSC_XML_Handlers \ + XSC_Config_Handlers_Common \ + XSC_DynAny_Handler +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_config_handlers_base.mpb b/ACE/bin/MakeProjectCreator/config/ciao_config_handlers_base.mpb new file mode 100644 index 00000000000..9d36eda836b --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_config_handlers_base.mpb @@ -0,0 +1,13 @@ +// $Id$ + +project : ciao_xml_utils, dynamicany, typecodefactory, exceptions { + after += XSC_XML_Handlers + libs += XSC_XML_Handlers + macros += XML_USE_PTHREADS + includes += $(CIAO_ROOT)/tools/Config_Handlers + + verbatim(gnuace, macros) { + override no_hidden_visibility = 1 + } + +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_container_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_container_dnc.mpb new file mode 100644 index 00000000000..7875cd5d088 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_container_dnc.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : portableserver, ciao_client_dnc { + after += CIAO_DnC_Container + libs += CIAO_DnC_Container +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_deployment_stub.mpb b/ACE/bin/MakeProjectCreator/config/ciao_deployment_stub.mpb new file mode 100644 index 00000000000..9b2102955d8 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_deployment_stub.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : ciao_client_dnc, ciao_events_base_dnc { + after += Deployment_stub + libs += CIAO_Deployment_stub + includes += $(CIAO_ROOT)/DAnCE + idlflags += -I$(CIAO_ROOT)/DAnCE -Sc +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb b/ACE/bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb new file mode 100644 index 00000000000..0ea0c5e2275 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : ciao_deployment_stub, portableserver, ciao_events_dnc { + after += Deployment_svnt + libs += CIAO_Deployment_svnt + includes += $(CIAO_ROOT)/DAnCE/ciao + idlflags += -I$(CIAO_ROOT)/DAnCE -Sc +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb new file mode 100644 index 00000000000..31731a84d5d --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : ciao_deployment_svnt { + includes += $(CIAO_ROOT)/DomainApplicationManager + libs += DomainApplicationManager + after += DomainApplicationManager +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb new file mode 100644 index 00000000000..de2c8d5a7b9 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, ciao_container_dnc, ciao_client_dnc { + libs += CIAO_DnC_Events_Base + after += CIAO_DnC_Events_Base +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_events_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_events_dnc.mpb new file mode 100644 index 00000000000..d7abd936f0c --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_events_dnc.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : security, ifr_client, valuetype, pi, codecfactory, ciao_container_dnc, ciao_client_dnc, ciao_rtevent_dnc { + includes += $(CIAO_ROOT)/ciaosvcs/Events + idlflags += -I$(CIAO_ROOT)/ciaosvcs/Events -Sc + libs += CIAO_DnC_Events + after += CIAO_DnC_Events +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb new file mode 100644 index 00000000000..baf9252d0c2 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : rtevent_serv, ciao_events_base_dnc { + includes += $(CIAO_ROOT)/ciaosvcs/Events + idlflags += -I$(CIAO_ROOT)/ciaosvcs/Events -Sc + libs += CIAO_RTEvent + after += CIAO_RTEvent +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_servant_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_servant_dnc.mpb new file mode 100644 index 00000000000..6bc5c8d52a0 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_servant_dnc.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : ciao_component_dnc, ciao_deployment_svnt, ciao_events_dnc, ciaocidldefaults, utils, naming { + after += CIAO_DnC_Server + libs += CIAO_DnC_Server +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_server_dnc.mpb b/ACE/bin/MakeProjectCreator/config/ciao_server_dnc.mpb new file mode 100644 index 00000000000..380c9d22c90 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_server_dnc.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : ciao_client_dnc, ciao_deployment_svnt, utils, naming, ciao_events_dnc { + after += CIAO_DnC_Server + libs += CIAO_DnC_Server +} diff --git a/ACE/bin/MakeProjectCreator/config/ciao_xml_utils.mpb b/ACE/bin/MakeProjectCreator/config/ciao_xml_utils.mpb new file mode 100644 index 00000000000..1167281994f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciao_xml_utils.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : xerces, exceptions { + includes += $(CIAO_ROOT)/tools + after += CIAO_XML_Utils + libs += CIAO_XML_Utils +} diff --git a/ACE/bin/MakeProjectCreator/config/ciaocidldefaults.mpb b/ACE/bin/MakeProjectCreator/config/ciaocidldefaults.mpb new file mode 100644 index 00000000000..59521cbb44b --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ciaocidldefaults.mpb @@ -0,0 +1,24 @@ +// -*- MPC -*- +// $Id$ + +project { + // Set the cidl compiler and flags as template values + specific { + cidlc = $(CIAO_ROOT)/bin/cidlc + cidlc_dep = $(CIAO_ROOT)/bin/cidlc + cidlc_flags = -I $(CIAO_ROOT) -I$(CIAO_ROOT)/DAnCE -I$(CIAO_ROOT)/ciao -I$(TAO_ROOT) -I$(TAO_ROOT)/tao -I$(TAO_ROOT)/orbsvcs -- + } + + Define_Custom(CIDL) { + automatic = 0 + dependent = $(CIDLC_DEP) + command = $(CIDLC) + commandflags = $(CIDLC_FLAGS) + inputext = .cidl + source_outputext = _svnt.cpp + header_outputext = _svnt.h + generic_outputext = E.idl + keyword cidlflags = commandflags + } + +} diff --git a/ACE/bin/MakeProjectCreator/config/cidlc.mpb b/ACE/bin/MakeProjectCreator/config/cidlc.mpb new file mode 100644 index 00000000000..38fa6d65e0d --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/cidlc.mpb @@ -0,0 +1,15 @@ +// $Id$ + +project: boost_filesystem, boost_regex, exceptions { + requires += cidl + includes += $(CIAO_ROOT) $(CIAO_ROOT)/CCF $(ACE_ROOT)/contrib/utility + libpaths += $(CIAO_ROOT)/CCF/CCF $(ACE_ROOT)/lib + + specific(nmake, vc71, vc8) { + compile_flags += /wd4290 /wd4800 /wd4250 /wd4355 + } + + verbatim(gnuace, top) { + include $(CIAO_ROOT)/CCF/Config.rules + } +} diff --git a/ACE/bin/MakeProjectCreator/config/codecfactory.mpb b/ACE/bin/MakeProjectCreator/config/codecfactory.mpb new file mode 100644 index 00000000000..3d2a4cbdf68 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/codecfactory.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, anytypecode { + after += CodecFactory + libs += TAO_CodecFactory +} diff --git a/ACE/bin/MakeProjectCreator/config/codeset.mpb b/ACE/bin/MakeProjectCreator/config/codeset.mpb new file mode 100644 index 00000000000..5ed18925513 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/codeset.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project { + after += Codeset + libs += TAO_Codeset +} diff --git a/ACE/bin/MakeProjectCreator/config/concurrency.mpb b/ACE/bin/MakeProjectCreator/config/concurrency.mpb new file mode 100644 index 00000000000..7f93021e1a1 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/concurrency.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib { + after += CosConcurrency + libs += TAO_CosConcurrency + tagchecks += Concurrency +} diff --git a/ACE/bin/MakeProjectCreator/config/concurrency_serv.mpb b/ACE/bin/MakeProjectCreator/config/concurrency_serv.mpb new file mode 100644 index 00000000000..0d1a4092e57 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/concurrency_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, concurrency_skel { + after += CosConcurrency_Serv + libs += TAO_CosConcurrency_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/concurrency_skel.mpb b/ACE/bin/MakeProjectCreator/config/concurrency_skel.mpb new file mode 100644 index 00000000000..0806aa30cbb --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/concurrency_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, concurrency, portableserver { + after += CosConcurrency_Skel + libs += TAO_CosConcurrency_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/conv_lib.mpb b/ACE/bin/MakeProjectCreator/config/conv_lib.mpb new file mode 100644 index 00000000000..e20d7f88f9e --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/conv_lib.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project { + specific(!automake) { + install_this_target = 1 + } +} diff --git a/ACE/bin/MakeProjectCreator/config/corba_e_compact.mpb b/ACE/bin/MakeProjectCreator/config/corba_e_compact.mpb new file mode 100644 index 00000000000..7e7627a4878 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/corba_e_compact.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +feature (corba_e_compact) : taoidldefaults { + macros += CORBA_E_COMPACT + idlflags += -DCORBA_E_COMPACT +} diff --git a/ACE/bin/MakeProjectCreator/config/corba_e_micro.mpb b/ACE/bin/MakeProjectCreator/config/corba_e_micro.mpb new file mode 100644 index 00000000000..5f14ae228b9 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/corba_e_micro.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +feature (corba_e_micro) : taoidldefaults { + macros += CORBA_E_MICRO + idlflags += -DCORBA_E_MICRO +} diff --git a/ACE/bin/MakeProjectCreator/config/corba_messaging.mpb b/ACE/bin/MakeProjectCreator/config/corba_messaging.mpb new file mode 100644 index 00000000000..e2b65dbade4 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/corba_messaging.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project { + requires += corba_messaging +} diff --git a/ACE/bin/MakeProjectCreator/config/core.mpb b/ACE/bin/MakeProjectCreator/config/core.mpb new file mode 100644 index 00000000000..020ea646f80 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/core.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : install { +} diff --git a/ACE/bin/MakeProjectCreator/config/core_anytypecode.mpb b/ACE/bin/MakeProjectCreator/config/core_anytypecode.mpb new file mode 100755 index 00000000000..dfa65b169aa --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/core_anytypecode.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ +// N.B. This project is only intended for use within ORB core mpc files. +// Use anytypecode.mpb in all other circumstances. + +project { + after += AnyTypeCode + libs += TAO_AnyTypeCode +} diff --git a/ACE/bin/MakeProjectCreator/config/core_minimum_corba.mpb b/ACE/bin/MakeProjectCreator/config/core_minimum_corba.mpb new file mode 100644 index 00000000000..dd8dc2f75a4 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/core_minimum_corba.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +feature(minimum_corba) : taoidldefaults { + idlflags += -DTAO_HAS_MINIMUM_POA + macros += TAO_HAS_MINIMUM_CORBA=1 +} diff --git a/ACE/bin/MakeProjectCreator/config/crosscompile.mpb b/ACE/bin/MakeProjectCreator/config/crosscompile.mpb new file mode 100644 index 00000000000..ff7a21a96ba --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/crosscompile.mpb @@ -0,0 +1,14 @@ +// -*- MPC -*- +// $Id$ + +project { + verbatim(gnuace, circuit) { + ifneq ($(CROSS-COMPILE),) + all clean realclean idl_stubs depend lib_warning require_warning avoid_warning: + " @echo This project will not build on CROSS-COMPILE platforms." + else + } + verbatim(gnuace, bottom) { + endif # CROSS-COMPILE + } +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_framework.mpb b/ACE/bin/MakeProjectCreator/config/csd_framework.mpb new file mode 100644 index 00000000000..27dd3f56694 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_framework.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +//$Id$ + +project : taolib, portableserver, pi, codecfactory { + after += CSD_Framework + libs += TAO_CSD_Framework +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_pt_test_exe.mpb b/ACE/bin/MakeProjectCreator/config/csd_pt_test_exe.mpb new file mode 100644 index 00000000000..5641add5436 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_pt_test_exe.mpb @@ -0,0 +1,4 @@ +// -*- MPC -*- +//$Id$ +project : csd_pt_testinf_lib, csd_pt_testservant_lib, taoexe, pi { +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_pt_testinf_lib.mpb b/ACE/bin/MakeProjectCreator/config/csd_pt_testinf_lib.mpb new file mode 100644 index 00000000000..0c9a8dffa27 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_pt_testinf_lib.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +//$Id$ + +project : csd_threadpool, taolib_with_idl { + after += csd_pt_testinf + includes += $(TAO_ROOT)/performance-tests/CSD_Strategy + libs += CSD_PT_TestInf + idlflags += -I$(TAO_ROOT)/performance-tests/CSD_Strategy +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_pt_testservant_lib.mpb b/ACE/bin/MakeProjectCreator/config/csd_pt_testservant_lib.mpb new file mode 100644 index 00000000000..1eba36eae83 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_pt_testservant_lib.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +//$Id$ + +project : csd_pt_testinf_lib { + after += csd_pt_testservant + libs += CSD_PT_TestServant +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_threadpool.mpb b/ACE/bin/MakeProjectCreator/config/csd_threadpool.mpb new file mode 100644 index 00000000000..1c36cc71893 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_threadpool.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +//$Id$ + +project : csd_framework { + after += CSD_ThreadPool + libs += TAO_CSD_ThreadPool +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_tp_foo_a_lib.mpb b/ACE/bin/MakeProjectCreator/config/csd_tp_foo_a_lib.mpb new file mode 100644 index 00000000000..e9d3edd980e --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_tp_foo_a_lib.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +//$Id$ + +project : csd_tp_test_lib { + after += csd_tp_foo_a_lib + includes += $(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Foo_A + libs += CSD_TP_Foo_A + libpaths += $(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Foo_A +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_tp_foo_b_lib.mpb b/ACE/bin/MakeProjectCreator/config/csd_tp_foo_b_lib.mpb new file mode 100644 index 00000000000..298cd700ece --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_tp_foo_b_lib.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +//$Id$ + +project : csd_tp_test_lib { + after += csd_tp_foo_b_lib + includes += $(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Foo_B + libs += CSD_TP_Foo_B + libpaths += $(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Foo_B +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_tp_foo_c_lib.mpb b/ACE/bin/MakeProjectCreator/config/csd_tp_foo_c_lib.mpb new file mode 100644 index 00000000000..4c51d30d318 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_tp_foo_c_lib.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +//$Id$ + +project : csd_tp_test_lib { + after += csd_tp_foo_c_lib + includes += $(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Foo_C + libs += CSD_TP_Foo_C + libpaths += $(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Foo_C +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_a.mpb b/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_a.mpb new file mode 100644 index 00000000000..7e1cfa624a8 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_a.mpb @@ -0,0 +1,4 @@ +// -*- MPC -*- +//$Id$ +project : csd_tp_foo_a_lib, taoexe { +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_b.mpb b/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_b.mpb new file mode 100644 index 00000000000..c7209d22fc2 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_b.mpb @@ -0,0 +1,4 @@ +// -*- MPC -*- +//$Id$ +project : csd_tp_foo_b_lib, taoexe { +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_c.mpb b/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_c.mpb new file mode 100644 index 00000000000..efe525aff98 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_tp_test_exe_c.mpb @@ -0,0 +1,4 @@ +// -*- MPC -*- +//$Id$ +project : csd_tp_foo_c_lib, taoexe { +} diff --git a/ACE/bin/MakeProjectCreator/config/csd_tp_test_lib.mpb b/ACE/bin/MakeProjectCreator/config/csd_tp_test_lib.mpb new file mode 100644 index 00000000000..f5227147178 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/csd_tp_test_lib.mpb @@ -0,0 +1,10 @@ +// -*- MPC -*- +//$Id$ + +project : taolib_with_idl, csd_threadpool, pi { + after += CSD_TP_Test_Lib + includes += $(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Common + libs += CSD_TP_Test + libpaths += $(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Common + idlflags += -I$(TAO_ROOT)/tests/CSD_Strategy_Tests/TP_Common +} diff --git a/ACE/bin/MakeProjectCreator/config/dance_extension_stub.mpb b/ACE/bin/MakeProjectCreator/config/dance_extension_stub.mpb new file mode 100644 index 00000000000..4f5353b87bb --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dance_extension_stub.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project : ciao_deployment_stub { + includes += $(CIAO_ROOT)/DAnCE/Interfaces +} diff --git a/ACE/bin/MakeProjectCreator/config/default.rel b/ACE/bin/MakeProjectCreator/config/default.rel new file mode 100644 index 00000000000..6e61b7555f6 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/default.rel @@ -0,0 +1,8 @@ +// This is the default relative definitions. Wildcards are acceptable. +// +// The first column is the name for which we create a relative definition. +// The second (optional) column is the value to build up if it isn't defined +// as an environmenment variable. +*_ROOT +TAO_ROOT, $ACE_ROOT/TAO +CIAO_ROOT, $TAO_ROOT/CIAO diff --git a/ACE/bin/MakeProjectCreator/config/dseventlogadmin.mpb b/ACE/bin/MakeProjectCreator/config/dseventlogadmin.mpb new file mode 100644 index 00000000000..72855e6ced4 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dseventlogadmin.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dslogadmin, event { + after += DsEventLogAdmin + libs += TAO_DsEventLogAdmin + tagchecks += EventLog +} diff --git a/ACE/bin/MakeProjectCreator/config/dseventlogadmin_serv.mpb b/ACE/bin/MakeProjectCreator/config/dseventlogadmin_serv.mpb new file mode 100644 index 00000000000..b8eb9882ad3 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dseventlogadmin_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dseventlogadmin_skel, dslogadmin_serv, event_serv { + after += DsEventLogAdmin_Serv + libs += TAO_DsEventLogAdmin_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/dseventlogadmin_skel.mpb b/ACE/bin/MakeProjectCreator/config/dseventlogadmin_skel.mpb new file mode 100644 index 00000000000..5b39b780f82 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dseventlogadmin_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dseventlogadmin, dslogadmin_skel, event_skel, portableserver { + after += DsEventLogAdmin_Skel + libs += TAO_DsEventLogAdmin_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/dslogadmin.mpb b/ACE/bin/MakeProjectCreator/config/dslogadmin.mpb new file mode 100644 index 00000000000..0207a0450ff --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dslogadmin.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib { + after += DsLogAdmin + libs += TAO_DsLogAdmin + tagchecks += Log +} diff --git a/ACE/bin/MakeProjectCreator/config/dslogadmin_serv.mpb b/ACE/bin/MakeProjectCreator/config/dslogadmin_serv.mpb new file mode 100644 index 00000000000..da0d0c7dae7 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dslogadmin_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dslogadmin_skel, dynamicany, etcl, svc_utils, utils { + after += DsLogAdmin_Serv + libs += TAO_DsLogAdmin_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/dslogadmin_skel.mpb b/ACE/bin/MakeProjectCreator/config/dslogadmin_skel.mpb new file mode 100644 index 00000000000..7a235c2058c --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dslogadmin_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dslogadmin, portableserver { + after += DsLogAdmin_Skel + libs += TAO_DsLogAdmin_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin.mpb b/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin.mpb new file mode 100644 index 00000000000..fcd49678617 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dslogadmin, dseventlogadmin, event, notification { + after += DsNotifyLogAdmin + libs += TAO_DsNotifyLogAdmin +} diff --git a/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin_serv.mpb b/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin_serv.mpb new file mode 100644 index 00000000000..6ca347eb674 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dsnotifylogadmin_skel, dslogadmin_serv, notification_serv { + after += DsNotifyLogAdmin_Serv + libs += TAO_DsNotifyLogAdmin_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin_skel.mpb b/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin_skel.mpb new file mode 100644 index 00000000000..401b2ff3d75 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dsnotifylogadmin_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dsnotifylogadmin, dseventlogadmin_skel, dslogadmin_skel, event_skel, notification_skel, portableserver { + after += DsNotifyLogAdmin_Skel + libs += TAO_DsNotifyLogAdmin_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/dynamicany.mpb b/ACE/bin/MakeProjectCreator/config/dynamicany.mpb new file mode 100644 index 00000000000..06b22148a17 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dynamicany.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, anytypecode { + after += DynamicAny + libs += TAO_DynamicAny +} diff --git a/ACE/bin/MakeProjectCreator/config/dynamicinterface.mpb b/ACE/bin/MakeProjectCreator/config/dynamicinterface.mpb new file mode 100644 index 00000000000..b2ecd077abe --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/dynamicinterface.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : valuetype, messaging, portableserver { + after += DynamicInterface + libs += TAO_DynamicInterface +} diff --git a/ACE/bin/MakeProjectCreator/config/ec_use_typed_events.mpb b/ACE/bin/MakeProjectCreator/config/ec_use_typed_events.mpb new file mode 100644 index 00000000000..5d0d9adef6f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ec_use_typed_events.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +feature(ec_typed_events) { + macros += TAO_HAS_TYPED_EVENT_CHANNEL +} diff --git a/ACE/bin/MakeProjectCreator/config/ec_use_typed_events_serv.mpb b/ACE/bin/MakeProjectCreator/config/ec_use_typed_events_serv.mpb new file mode 100644 index 00000000000..fedf2d3f1ef --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ec_use_typed_events_serv.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +feature(ec_typed_events) : dynamicinterface, ifr_client { +} diff --git a/ACE/bin/MakeProjectCreator/config/em3.features b/ACE/bin/MakeProjectCreator/config/em3.features new file mode 100644 index 00000000000..16181dc6293 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/em3.features @@ -0,0 +1,7 @@ +// $Id$ + +ssl=0 +qos=1 +cidl=0 +rwho=0 +sctp=0 diff --git a/ACE/bin/MakeProjectCreator/config/endpointpolicy.mpb b/ACE/bin/MakeProjectCreator/config/endpointpolicy.mpb new file mode 100644 index 00000000000..740b240e816 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/endpointpolicy.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, core, portableserver, pi { + after += EndpointPolicy + libs += TAO_EndpointPolicy +} diff --git a/ACE/bin/MakeProjectCreator/config/etcl.mpb b/ACE/bin/MakeProjectCreator/config/etcl.mpb new file mode 100644 index 00000000000..95e84d4ee9a --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/etcl.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : taolib { + after += ETCL + libs += TAO_ETCL + tagchecks += Notify +} diff --git a/ACE/bin/MakeProjectCreator/config/event.mpb b/ACE/bin/MakeProjectCreator/config/event.mpb new file mode 100644 index 00000000000..36f868262fe --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/event.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, ec_use_typed_events, minimum_corba { + after += CosEvent + libs += TAO_CosEvent + tagchecks += CosEvent +} diff --git a/ACE/bin/MakeProjectCreator/config/event_serv.mpb b/ACE/bin/MakeProjectCreator/config/event_serv.mpb new file mode 100644 index 00000000000..1c536f434b5 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/event_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, event_skel, ec_use_typed_events_serv, messaging_optional, naming, svc_utils, minimum_corba { + after += CosEvent_Serv + libs += TAO_CosEvent_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/event_skel.mpb b/ACE/bin/MakeProjectCreator/config/event_skel.mpb new file mode 100644 index 00000000000..7b21eb7c9db --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/event_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, event, ec_use_typed_events, portableserver, minimum_corba { + after += CosEvent_Skel + libs += TAO_CosEvent_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/exceptions.mpb b/ACE/bin/MakeProjectCreator/config/exceptions.mpb new file mode 100644 index 00000000000..912530f5cfb --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/exceptions.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project { + requires += exceptions +} diff --git a/ACE/bin/MakeProjectCreator/config/fault_tolerance.mpb b/ACE/bin/MakeProjectCreator/config/fault_tolerance.mpb new file mode 100644 index 00000000000..35e964d4df6 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/fault_tolerance.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : naming, notification, portablegroup, messaging, ftorb, pi, pi_server { + after += FaultTolerance + libs += TAO_FaultTolerance + tagchecks += FaultTolerance +} diff --git a/ACE/bin/MakeProjectCreator/config/ftclientorb.mpb b/ACE/bin/MakeProjectCreator/config/ftclientorb.mpb new file mode 100644 index 00000000000..126330da041 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ftclientorb.mpb @@ -0,0 +1,10 @@ +// -*- MPC -*- +// $Id$ + +project : ftorbutils, pi, interceptors { + avoids += ace_for_tao // Requires ace/UUID + after += FT_ClientORB + libs += TAO_FT_ClientORB + requires += ace_uuid + tagchecks += FT_ClientORB +} diff --git a/ACE/bin/MakeProjectCreator/config/ftorb.mpb b/ACE/bin/MakeProjectCreator/config/ftorb.mpb new file mode 100644 index 00000000000..94bafab311a --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ftorb.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : ftclientorb, ftserverorb { +} diff --git a/ACE/bin/MakeProjectCreator/config/ftorbutils.mpb b/ACE/bin/MakeProjectCreator/config/ftorbutils.mpb new file mode 100644 index 00000000000..f06e082ba2f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ftorbutils.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : iormanip, portableserver, orbsvcslib, portablegroup, minimum_corba { + after += FTORB_Utils + libs += TAO_FTORB_Utils + tagchecks += FTORB_Utils +} diff --git a/ACE/bin/MakeProjectCreator/config/ftrtevent.mpb b/ACE/bin/MakeProjectCreator/config/ftrtevent.mpb new file mode 100644 index 00000000000..a165bf52c67 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ftrtevent.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : ftorbutils, rtevent_serv, naming, messaging, pi_server, minimum_corba { + after += FtRtEvent + libs += TAO_FtRtEvent + tagchecks += FtRtEvent +} diff --git a/ACE/bin/MakeProjectCreator/config/ftrteventchannel.mpb b/ACE/bin/MakeProjectCreator/config/ftrteventchannel.mpb new file mode 100644 index 00000000000..ca9cfdc46f7 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ftrteventchannel.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : ftrtevent, utils, corba_messaging, pi_server { + after += FTRT_EventChannel + libs += TAO_FTRT_EventChannel + includes += $(TAO_ROOT)/orbsvcs/FtRtEvent/EventChannel + tagchecks += FTRT_EventChannel +} diff --git a/ACE/bin/MakeProjectCreator/config/ftrteventclient.mpb b/ACE/bin/MakeProjectCreator/config/ftrteventclient.mpb new file mode 100644 index 00000000000..a25da42abaf --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ftrteventclient.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : ftclientorb, ftrtevent { + after += FTRT_ClientORB + libs += TAO_FTRT_ClientORB + tagchecks += FTRT_ClientORB +}
\ No newline at end of file diff --git a/ACE/bin/MakeProjectCreator/config/ftserverorb.mpb b/ACE/bin/MakeProjectCreator/config/ftserverorb.mpb new file mode 100644 index 00000000000..5d1b388707f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ftserverorb.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : ftorbutils, portablegroup, pi_server, interceptors { + after += FT_ServerORB + libs += TAO_FT_ServerORB + tagchecks += FT_ServerORB +} + diff --git a/ACE/bin/MakeProjectCreator/config/global.features b/ACE/bin/MakeProjectCreator/config/global.features new file mode 100644 index 00000000000..099d5403b20 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/global.features @@ -0,0 +1,110 @@ +// $Id$ +// The global features file contains the default feature settings. +// By default, if a feature isn't listed here then it is enabled. +// If it is listed, then the value assigned to the feature is interpreted +// as a boolean value. You really shouldn't have to edit this file except +// to change the defaults. If you want to override these values you can do +// one of two things. +// +// 1) Create a default.features in this directory with the features you +// want enabled or disabled. +// 2) Create a feature file anywhere you like with the features you want and +// use the -feature_file option to specify where it is located. +// +// Feature definitions from this file are always overwritten by -features +// command option of mwc.pl. +// +// This file is somewhat akin to the platform_macros.GNU file in that build +// settings can be set here. + +// Enable these by default. +acexml = 1 +ace_svcconf = 1 +ace_token = 1 + +// By default we disable these. +ace_for_tao = 0 +ssl = 0 +qos = 0 +rapi = 0 +repo = 0 +minimum_corba = 0 +java = 0 +zlib = 0 +zzip = 0 +ipv6 = 0 +mfc = 0 +rpc = 0 +sctp = 0 +dummy_label = 0 +cidl = 0 +boost = 0 +wince = 0 +uses_wchar = 0 +ziparchive = 0 +negotiate_codesets = 0 +versioned_namespace = 0 +vcl = 0 +stl = 0 + +// Features for various GUI libraries + +// Some of features are switched on because they are also controlled +// by higher level features eg. gl is 1 because it is necessary for fl, +// but if someone turns on fl, we may assume gl is available. This way makefile +// generation is simplified. Moreover all internal ACE features like ace_qtreactor +// and tao_qtresource are also turn on, because we want to build every component +// related with qt if qt is provided. It is proposed to not remove +// switched on features from global.features just because features are available +// by default. This file is also a kind of ACE capabilities documentation, hence +// it is better to enumerate here all features recognized by ACE. + +// 1 - wxWindows (wxWidgets) libraries are avalaible +wxWindows = 0 +// 1 - Motif (Lestif) libraries are avalaible +motif = 0 +// 1 - Athena widgets libraries are avalaible +athena = 0 +// 1 - X11 libraries are avalaible +x11 = 1 +// 1 - X Toolkit libraries are avalaible +xt = 0 +// 1 - Tk libraries are avalaible +tk = 0 +// 1 - Fast Light toolkit libraries are avalaible (assume lowercase h in header files) +fl = 0 +// 1 - Qt libraries are avalaible +qt = 0 +// 1 - OpenGL libraries are avalaible +gl = 1 + +// Features for ACE support for various GUI libraries +// Use QtReactor +ace_qtreactor = 1 +// Use XtReactor +ace_xtreactor = 1 +// Use TkReactor +ace_tkreactor = 1 +// Use FlReactor +ace_flreactor = 1 + +// Features for TAO support for various GUI libraries +// Use QtResources for TAO +tao_qtresource = 1 +// Use XtResources for TAO +tao_xtresource = 1 +// Use TkResources for TAO +tao_tkresource = 1 +// Use FlResources for TAO +tao_flresource = 1 + +//Use the ZIP_Wrapper feature for when using the ZIP wrapper classes +ZIP_Wrapper = 0 + +// Feature for CORBA subsets +corba_e_compact = 0 +corba_e_micro = 0 +minimum_corba = 0 + +// Option to disable iiop +tao_no_iiop = 0 diff --git a/ACE/bin/MakeProjectCreator/config/gnuace.features b/ACE/bin/MakeProjectCreator/config/gnuace.features new file mode 100644 index 00000000000..10726755895 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/gnuace.features @@ -0,0 +1,9 @@ +// $Id$ + +ssl=1 +qt=1 +fl=1 +tk=1 +xt=1 +cidl=1 +sctp=1 diff --git a/ACE/bin/MakeProjectCreator/config/htbp.mpb b/ACE/bin/MakeProjectCreator/config/htbp.mpb new file mode 100644 index 00000000000..60c9236de26 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/htbp.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : acelib { + avoids += ace_for_tao // Requires ACE_Configuration_Heap + after += HTBP + libs += ACE_HTBP + includes += $(ACE_ROOT)/protocols +} diff --git a/ACE/bin/MakeProjectCreator/config/htiop.mpb b/ACE/bin/MakeProjectCreator/config/htiop.mpb new file mode 100644 index 00000000000..cbeec43da74 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/htiop.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : htbp { + after += HTIOP + libs += TAO_HTIOP + tagchecks += HTIOP +} diff --git a/ACE/bin/MakeProjectCreator/config/ifr_client.mpb b/ACE/bin/MakeProjectCreator/config/ifr_client.mpb new file mode 100644 index 00000000000..89cee167fd2 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ifr_client.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, anytypecode { + libs += TAO_IFR_Client + after += IFR_Client +} diff --git a/ACE/bin/MakeProjectCreator/config/ifrservice.mpb b/ACE/bin/MakeProjectCreator/config/ifrservice.mpb new file mode 100644 index 00000000000..a580d2d0660 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ifrservice.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : iortable, svc_utils, typecodefactory, pi_server, minimum_corba { + avoids += ace_for_tao // Requires ace/Configuration + after += IFRService + libs += TAO_IFRService + tagchecks += IFRService +} diff --git a/ACE/bin/MakeProjectCreator/config/imr_activator.mpb b/ACE/bin/MakeProjectCreator/config/imr_activator.mpb new file mode 100644 index 00000000000..d3363a4ec1b --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/imr_activator.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : minimum_corba { + after += ImR_Activator + libs += TAO_ImR_Activator +} diff --git a/ACE/bin/MakeProjectCreator/config/imr_client.mpb b/ACE/bin/MakeProjectCreator/config/imr_client.mpb new file mode 100644 index 00000000000..41f5d7eb480 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/imr_client.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib { + libs += TAO_ImR_Client + after += ImR_Client +} diff --git a/ACE/bin/MakeProjectCreator/config/imr_locator.mpb b/ACE/bin/MakeProjectCreator/config/imr_locator.mpb new file mode 100644 index 00000000000..21068dfa9ca --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/imr_locator.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcsexe, minimum_corba { + after += ImR_Locator + libs += TAO_ImR_Locator +} diff --git a/ACE/bin/MakeProjectCreator/config/install.mpb b/ACE/bin/MakeProjectCreator/config/install.mpb new file mode 100644 index 00000000000..7dee217a245 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/install.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : install_bin, install_lib, install_headers { +} diff --git a/ACE/bin/MakeProjectCreator/config/install_bin.mpb b/ACE/bin/MakeProjectCreator/config/install_bin.mpb new file mode 100644 index 00000000000..3a5b9e934d5 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/install_bin.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project { + specific { + install_this_target = 1 + } +} diff --git a/ACE/bin/MakeProjectCreator/config/install_headers.mpb b/ACE/bin/MakeProjectCreator/config/install_headers.mpb new file mode 100644 index 00000000000..0c459166ab3 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/install_headers.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project { + specific { + install_headers = 1 + } +} diff --git a/ACE/bin/MakeProjectCreator/config/install_lib.mpb b/ACE/bin/MakeProjectCreator/config/install_lib.mpb new file mode 100644 index 00000000000..3a5b9e934d5 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/install_lib.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project { + specific { + install_this_target = 1 + } +} diff --git a/ACE/bin/MakeProjectCreator/config/interceptors.mpb b/ACE/bin/MakeProjectCreator/config/interceptors.mpb new file mode 100644 index 00000000000..eda8c6d1bc3 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/interceptors.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project { + requires += interceptors +} diff --git a/ACE/bin/MakeProjectCreator/config/iorinterceptor.mpb b/ACE/bin/MakeProjectCreator/config/iorinterceptor.mpb new file mode 100644 index 00000000000..d55e844d244 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/iorinterceptor.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, portableserver, pi, objreftemplate, valuetype { + after += IORInterceptor + libs += TAO_IORInterceptor +} diff --git a/ACE/bin/MakeProjectCreator/config/iormanip.mpb b/ACE/bin/MakeProjectCreator/config/iormanip.mpb new file mode 100644 index 00000000000..7fd064393ef --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/iormanip.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, anytypecode { + after += IORManipulation + libs += TAO_IORManip +} diff --git a/ACE/bin/MakeProjectCreator/config/iortable.mpb b/ACE/bin/MakeProjectCreator/config/iortable.mpb new file mode 100644 index 00000000000..c8795c0d2b9 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/iortable.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib { + after += IORTable + libs += TAO_IORTable +} diff --git a/ACE/bin/MakeProjectCreator/config/ipv6.mpb b/ACE/bin/MakeProjectCreator/config/ipv6.mpb new file mode 100755 index 00000000000..e8c1b083e56 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ipv6.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +feature(ipv6) { + specific(vc6, vc7, vc71, vc8, nmake, borland, bmake, cbx) { + lit_libs += iphlpapi + } + macros += ACE_HAS_IPV6 +} diff --git a/ACE/bin/MakeProjectCreator/config/kokyu.mpb b/ACE/bin/MakeProjectCreator/config/kokyu.mpb new file mode 100644 index 00000000000..af5719518dd --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/kokyu.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : acelib { + after += Kokyu + libs += Kokyu + includes += $(ACE_ROOT)/Kokyu +}
\ No newline at end of file diff --git a/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_client.mpb b/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_client.mpb new file mode 100644 index 00000000000..fdab6656196 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_client.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : taoclient, kokyu_dsrt_schedulers { +} diff --git a/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb b/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb new file mode 100644 index 00000000000..9277bc2c867 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project: taoserver, kokyu_dsrt_schedulers { +} diff --git a/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_schedulers.mpb b/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_schedulers.mpb new file mode 100644 index 00000000000..7974628140c --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/kokyu_dsrt_schedulers.mpb @@ -0,0 +1,12 @@ +// -*- MPC -*- +// $Id$ + +project: codecfactory, rtcorba, kokyu, rtscheduling { + after += Kokyu_DSRT_Schedulers + libs += Kokyu_DSRT_Schedulers + includes += $(TAO_ROOT)/examples/Kokyu_dsrt_schedulers + + specific(automake) { + includes += $(TAO_BUILDDIR)/examples/Kokyu_dsrt_schedulers + } +} diff --git a/ACE/bin/MakeProjectCreator/config/lifecycle.mpb b/ACE/bin/MakeProjectCreator/config/lifecycle.mpb new file mode 100644 index 00000000000..db47576564a --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/lifecycle.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : naming, portableserver { + libs += TAO_CosLifeCycle + after += CosLifeCycle + tagchecks += LifeCycle +} diff --git a/ACE/bin/MakeProjectCreator/config/loadbalancing.mpb b/ACE/bin/MakeProjectCreator/config/loadbalancing.mpb new file mode 100644 index 00000000000..edd897f4798 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/loadbalancing.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : messaging, naming, portablegroup, pi, pi_server, iorinterceptor { + libs += TAO_CosLoadBalancing + after += CosLoadBalancing + tagchecks += CosLoadBalancing + requires += ami +} diff --git a/ACE/bin/MakeProjectCreator/config/man.mpb b/ACE/bin/MakeProjectCreator/config/man.mpb new file mode 100644 index 00000000000..ee5b1be7be3 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/man.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project { + Define_Custom(Man) { + automatic = 1 + inputext = .1 .2 .3 .4 .5 .6 .7 .8 + } +} diff --git a/ACE/bin/MakeProjectCreator/config/messaging.mpb b/ACE/bin/MakeProjectCreator/config/messaging.mpb new file mode 100644 index 00000000000..2de4ac8046c --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/messaging.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project : valuetype, portableserver, pi, corba_messaging, messaging_optional { + after += Messaging +} diff --git a/ACE/bin/MakeProjectCreator/config/messaging_optional.mpb b/ACE/bin/MakeProjectCreator/config/messaging_optional.mpb new file mode 100644 index 00000000000..ee8637a4d1b --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/messaging_optional.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +feature(corba_messaging) : valuetype, portableserver, pi { + libs += TAO_Messaging + after += Messaging +} + diff --git a/ACE/bin/MakeProjectCreator/config/minimum_corba.mpb b/ACE/bin/MakeProjectCreator/config/minimum_corba.mpb new file mode 100644 index 00000000000..be960c02b54 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/minimum_corba.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +feature(minimum_corba) : taoidldefaults { + avoids += minimum_corba + idlflags += -DTAO_HAS_MINIMUM_POA + macros += TAO_HAS_MINIMUM_CORBA=1 +} diff --git a/ACE/bin/MakeProjectCreator/config/naming.mpb b/ACE/bin/MakeProjectCreator/config/naming.mpb new file mode 100644 index 00000000000..a1f4d3b6014 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/naming.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib { + after += CosNaming + libs += TAO_CosNaming + tagchecks += Naming +} diff --git a/ACE/bin/MakeProjectCreator/config/naming_serv.mpb b/ACE/bin/MakeProjectCreator/config/naming_serv.mpb new file mode 100644 index 00000000000..7b1e8caf783 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/naming_serv.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, naming_skel, iortable, messaging_optional, svc_utils { + avoids += ace_for_tao // Requires MMAP_Memory_Pool + after += CosNaming_Serv + libs += TAO_CosNaming_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/naming_skel.mpb b/ACE/bin/MakeProjectCreator/config/naming_skel.mpb new file mode 100644 index 00000000000..18e010ed2a0 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/naming_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, naming, portableserver { + after += CosNaming_Skel + libs += TAO_CosNaming_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/namingexe.mpb b/ACE/bin/MakeProjectCreator/config/namingexe.mpb new file mode 100644 index 00000000000..dd564b37aab --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/namingexe.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcsexe, naming { +} diff --git a/ACE/bin/MakeProjectCreator/config/negotiate_codesets.mpb b/ACE/bin/MakeProjectCreator/config/negotiate_codesets.mpb new file mode 100644 index 00000000000..52e80a81b22 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/negotiate_codesets.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +feature(negotiate_codesets) { + after += Codeset + libs += TAO_Codeset +} diff --git a/ACE/bin/MakeProjectCreator/config/nmake.features b/ACE/bin/MakeProjectCreator/config/nmake.features new file mode 100644 index 00000000000..16181dc6293 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/nmake.features @@ -0,0 +1,7 @@ +// $Id$ + +ssl=0 +qos=1 +cidl=0 +rwho=0 +sctp=0 diff --git a/ACE/bin/MakeProjectCreator/config/notification.mpb b/ACE/bin/MakeProjectCreator/config/notification.mpb new file mode 100644 index 00000000000..4893c915927 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/notification.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, event { + after += CosNotification + libs += TAO_CosNotification + tagchecks += Notify +} diff --git a/ACE/bin/MakeProjectCreator/config/notification_serv.mpb b/ACE/bin/MakeProjectCreator/config/notification_serv.mpb new file mode 100644 index 00000000000..08198cb5825 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/notification_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, svc_utils, notification_skel, etcl, dynamicany { + after += CosNotification_Serv + libs += TAO_CosNotification_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/notification_skel.mpb b/ACE/bin/MakeProjectCreator/config/notification_skel.mpb new file mode 100644 index 00000000000..bba3b2453ee --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/notification_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, notification, event_skel, portableserver { + after += CosNotification_Skel + libs += TAO_CosNotification_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/notify.mpb b/ACE/bin/MakeProjectCreator/config/notify.mpb new file mode 100644 index 00000000000..e9f226cf312 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/notify.mpb @@ -0,0 +1,4 @@ +// $Id$ + +project : notification { +} diff --git a/ACE/bin/MakeProjectCreator/config/notify_serv.mpb b/ACE/bin/MakeProjectCreator/config/notify_serv.mpb new file mode 100644 index 00000000000..e8360b407c5 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/notify_serv.mpb @@ -0,0 +1,10 @@ +// -*- MPC -*- +// $Id$ +// NOTE: this is for *users* of CosNotification_serv. Use +// Notification_serv.mpb to build CosNotification_serv. + +project : orbsvcslib, notification, event_serv, etcl, dynamicany { + after += CosNotification_Serv + libs += TAO_CosNotification_Serv + libs += TAO_CosNotification_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/notifytest.mpb b/ACE/bin/MakeProjectCreator/config/notifytest.mpb new file mode 100644 index 00000000000..be766db59e0 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/notifytest.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project: orbsvcsexe, notification, notification_skel, notification_serv, naming, svc_utils, event_serv, ifr_client, dynamicinterface, messaging, pi, codecfactory, valuetype { + after += NotifyTests_Lib + libs += TAO_NotifyTests + includes += $(TAO_ROOT)/orbsvcs/tests/Notify/lib +} diff --git a/ACE/bin/MakeProjectCreator/config/objreftemplate.mpb b/ACE/bin/MakeProjectCreator/config/objreftemplate.mpb new file mode 100644 index 00000000000..e887919b2c7 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/objreftemplate.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : portableserver, valuetype { + after += ObjRefTemplate + libs += TAO_ObjRefTemplate +} diff --git a/ACE/bin/MakeProjectCreator/config/orbsvcs_output.mpb b/ACE/bin/MakeProjectCreator/config/orbsvcs_output.mpb new file mode 100644 index 00000000000..95d1feb1d9c --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/orbsvcs_output.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project { + // We tested with all orbsvcs libs going to $(TAO_ROOT)/orbsvcs/lib, but + // decided that it was easier to deal with all libs in one place. + libout = $(ACE_ROOT)/lib +} diff --git a/ACE/bin/MakeProjectCreator/config/orbsvcsexe.mpb b/ACE/bin/MakeProjectCreator/config/orbsvcsexe.mpb new file mode 100644 index 00000000000..b4521e70641 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/orbsvcsexe.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : taoexe, negotiate_codesets, anytypecode { +} diff --git a/ACE/bin/MakeProjectCreator/config/orbsvcslib.mpb b/ACE/bin/MakeProjectCreator/config/orbsvcslib.mpb new file mode 100644 index 00000000000..80575b1d459 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/orbsvcslib.mpb @@ -0,0 +1,12 @@ +// -*- MPC -*- +// $Id$ + +project : taolib_with_idl, orbsvcs_output, anytypecode { + tagname = TAO_ORBSVCS + includes += $(TAO_ROOT)/orbsvcs + idlflags += -I$(TAO_ROOT)/orbsvcs -GT + + specific(automake) { + includes += $(TAO_BUILDDIR)/orbsvcs + } +} diff --git a/ACE/bin/MakeProjectCreator/config/pi.mpb b/ACE/bin/MakeProjectCreator/config/pi.mpb new file mode 100644 index 00000000000..ec5eee5f587 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/pi.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, codecfactory { + after += PI + libs += TAO_PI +} diff --git a/ACE/bin/MakeProjectCreator/config/pi_server.mpb b/ACE/bin/MakeProjectCreator/config/pi_server.mpb new file mode 100644 index 00000000000..fe48f397cfe --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/pi_server.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, pi, portableserver { + after += PI_Server + libs += TAO_PI_Server +} diff --git a/ACE/bin/MakeProjectCreator/config/pidl.mpb b/ACE/bin/MakeProjectCreator/config/pidl.mpb new file mode 100644 index 00000000000..d9c507e5249 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/pidl.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project { + Define_Custom(PIDL) { + automatic = 1 + inputext = .pidl + } +} diff --git a/ACE/bin/MakeProjectCreator/config/pkgconfig.mpb b/ACE/bin/MakeProjectCreator/config/pkgconfig.mpb new file mode 100644 index 00000000000..e48f56242b6 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/pkgconfig.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project { + Define_Custom(pkgconfig) { + automatic = 0 + inputext = .in + } +} diff --git a/ACE/bin/MakeProjectCreator/config/portablegroup.mpb b/ACE/bin/MakeProjectCreator/config/portablegroup.mpb new file mode 100644 index 00000000000..351cbcb67c1 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/portablegroup.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : naming, messaging, minimum_corba, iormanip { + libs += TAO_PortableGroup + after += PortableGroup + tagchecks += PortableGroup +} diff --git a/ACE/bin/MakeProjectCreator/config/portableserver.mpb b/ACE/bin/MakeProjectCreator/config/portableserver.mpb new file mode 100644 index 00000000000..2fc99e7a876 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/portableserver.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, anytypecode { + after += PortableServer + libs += TAO_PortableServer +} diff --git a/ACE/bin/MakeProjectCreator/config/property.mpb b/ACE/bin/MakeProjectCreator/config/property.mpb new file mode 100644 index 00000000000..a2e1c197764 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/property.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib { + after += CosProperty + libs += TAO_CosProperty + tagchecks += Property +} diff --git a/ACE/bin/MakeProjectCreator/config/property_serv.mpb b/ACE/bin/MakeProjectCreator/config/property_serv.mpb new file mode 100644 index 00000000000..95588edd33a --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/property_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, property_skel { + after += CosProperty_Serv + libs += TAO_CosProperty_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/property_skel.mpb b/ACE/bin/MakeProjectCreator/config/property_skel.mpb new file mode 100644 index 00000000000..6904c4f9cbc --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/property_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, property, portableserver { + after += CosProperty_Skel + libs += TAO_CosProperty_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/psdl.mpb b/ACE/bin/MakeProjectCreator/config/psdl.mpb new file mode 100644 index 00000000000..fcc0e4edaa2 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/psdl.mpb @@ -0,0 +1,19 @@ +// -*- MPC -*- +// $Id$ + +project { + after += PSDL_Parser PSDL PSDL_Datastore + libs += TAO_PSDL TAO_PSDL_Datastore + + Define_Custom(PSDL) { + dependent = $(TAO_ROOT)/orbsvcs/PSS/psdl_tao + command = $(TAO_ROOT)/orbsvcs/PSS/psdl_tao + libpath = $(ACE_ROOT)/lib + inputext = .psdl + source_outputext = .cpp + header_outputext = .h + inline_outputext = .i + // unlike idl, the psdl compiler doesn't seem to generate *S.* files. + pre_extension = C + } +}
\ No newline at end of file diff --git a/ACE/bin/MakeProjectCreator/config/qos.mpb b/ACE/bin/MakeProjectCreator/config/qos.mpb new file mode 100644 index 00000000000..5e938dd3e6f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/qos.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +feature(qos) { + after += QoS + libs += ACE_QoS + macros += ACE_HAS_QOS +} diff --git a/ACE/bin/MakeProjectCreator/config/rmcast.mpb b/ACE/bin/MakeProjectCreator/config/rmcast.mpb new file mode 100644 index 00000000000..ac9427c3d2a --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rmcast.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : acelib, threads { + avoids += ace_for_tao + after += RMCast + libs += ACE_RMCast + includes += $(ACE_ROOT)/protocols +} diff --git a/ACE/bin/MakeProjectCreator/config/rt_client.mpb b/ACE/bin/MakeProjectCreator/config/rt_client.mpb new file mode 100644 index 00000000000..5f8981e1035 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rt_client.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : taoexe, negotiate_codesets, rtcorba { +} diff --git a/ACE/bin/MakeProjectCreator/config/rt_server.mpb b/ACE/bin/MakeProjectCreator/config/rt_server.mpb new file mode 100644 index 00000000000..6449c3d7762 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rt_server.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : taoexe, negotiate_codesets, rtportableserver, rtcorba { +} diff --git a/ACE/bin/MakeProjectCreator/config/rtcorba.mpb b/ACE/bin/MakeProjectCreator/config/rtcorba.mpb new file mode 100644 index 00000000000..4068c3bcce9 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtcorba.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, pi { + after += RTCORBA + libs += TAO_RTCORBA + requires += rt_corba +} diff --git a/ACE/bin/MakeProjectCreator/config/rtcorbacommon.mpb b/ACE/bin/MakeProjectCreator/config/rtcorbacommon.mpb new file mode 100644 index 00000000000..12251e5c162 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtcorbacommon.mpb @@ -0,0 +1,13 @@ +// -*- MPC -*- +// $Id$ + +project : portableserver, minimum_corba { + after += RTCORBA_Common + libs += RTCORBA_Common + + specific (automake) { + includes += $(srcdir)/../Common + } + + includes += ../Common +} diff --git a/ACE/bin/MakeProjectCreator/config/rtcorbaevent.mpb b/ACE/bin/MakeProjectCreator/config/rtcorbaevent.mpb new file mode 100644 index 00000000000..f085b540b53 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtcorbaevent.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : rtportableserver, rtevent_serv, naming { + after += RTCORBAEvent + libs += TAO_RTCORBAEvent + tagchecks += RTCORBAEvent +} diff --git a/ACE/bin/MakeProjectCreator/config/rtcosscheduling.mpb b/ACE/bin/MakeProjectCreator/config/rtcosscheduling.mpb new file mode 100644 index 00000000000..fabb84f7dd8 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtcosscheduling.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project : rtportableserver, interceptors, codecfactory, orbsvcslib { + after += RTCosScheduling + libs += TAO_RTCosScheduling + tagchecks += RTCosScheduling + requires += dummy_label +} diff --git a/ACE/bin/MakeProjectCreator/config/rtevent.mpb b/ACE/bin/MakeProjectCreator/config/rtevent.mpb new file mode 100644 index 00000000000..7383523938a --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtevent.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : messaging, svc_utils { + after += RTEvent + libs += TAO_RTEvent + tagchecks += RTEvent +} diff --git a/ACE/bin/MakeProjectCreator/config/rtevent_serv.mpb b/ACE/bin/MakeProjectCreator/config/rtevent_serv.mpb new file mode 100644 index 00000000000..60a356c41cc --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtevent_serv.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, rtevent_skel { + avoids += ace_for_tao // Requires ACE_crc32 + after += RTEvent_Serv + libs += TAO_RTEvent_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/rtevent_skel.mpb b/ACE/bin/MakeProjectCreator/config/rtevent_skel.mpb new file mode 100644 index 00000000000..ba53e2ae8bc --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtevent_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, rtevent, portableserver { + after += RTEvent_Skel + libs += TAO_RTEvent_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/rteventexe.mpb b/ACE/bin/MakeProjectCreator/config/rteventexe.mpb new file mode 100644 index 00000000000..6f2dc9d6f02 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rteventexe.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project: orbsvcsexe, rtevent_skel { +} diff --git a/ACE/bin/MakeProjectCreator/config/rteventlogadmin.mpb b/ACE/bin/MakeProjectCreator/config/rteventlogadmin.mpb new file mode 100644 index 00000000000..4150b18e7e7 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rteventlogadmin.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, dslogadmin, rtevent { + after += RTEventLogAdmin + libs += TAO_RTEventLogAdmin + tagchecks += RTEventLog +} diff --git a/ACE/bin/MakeProjectCreator/config/rteventlogadmin_serv.mpb b/ACE/bin/MakeProjectCreator/config/rteventlogadmin_serv.mpb new file mode 100644 index 00000000000..dbc14cf067f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rteventlogadmin_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, rteventlogadmin_skel, dslogadmin_serv, rtevent_serv, rtsched { + after += RTEventLogAdmin_Serv + libs += TAO_RTEventLogAdmin_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/rteventlogadmin_skel.mpb b/ACE/bin/MakeProjectCreator/config/rteventlogadmin_skel.mpb new file mode 100644 index 00000000000..920e65f4ab6 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rteventlogadmin_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, rteventlogadmin, dslogadmin_skel, rtevent_skel, portableserver { + after += RTEventLogAdmin_Skel + libs += TAO_RTEventLogAdmin_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/rtkokyuevent.mpb b/ACE/bin/MakeProjectCreator/config/rtkokyuevent.mpb new file mode 100644 index 00000000000..a57c8b8017c --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtkokyuevent.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : rtevent, rtsched, kokyu { + after += RTKokyuEvent + libs += TAO_RTKokyuEvent + tagchecks += RTKokyuEvent +} diff --git a/ACE/bin/MakeProjectCreator/config/rtnotify.mpb b/ACE/bin/MakeProjectCreator/config/rtnotify.mpb new file mode 100644 index 00000000000..1a04eb83922 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtnotify.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : notification_serv, rtcorba { + after += RT_Notification + libs += TAO_RT_Notification + tagchecks += RT_Notify +} diff --git a/ACE/bin/MakeProjectCreator/config/rtportableserver.mpb b/ACE/bin/MakeProjectCreator/config/rtportableserver.mpb new file mode 100644 index 00000000000..ee3d17fe942 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtportableserver.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : pi, portableserver, rtcorba { + after += RTPortableServer + libs += TAO_RTPortableServer +} diff --git a/ACE/bin/MakeProjectCreator/config/rtsched.mpb b/ACE/bin/MakeProjectCreator/config/rtsched.mpb new file mode 100644 index 00000000000..bb435139cf7 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtsched.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : naming, svc_utils { + after += RTSched + libs += TAO_RTSched + tagchecks += Sched +} diff --git a/ACE/bin/MakeProjectCreator/config/rtschedevent.mpb b/ACE/bin/MakeProjectCreator/config/rtschedevent.mpb new file mode 100644 index 00000000000..9c03534d9e0 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtschedevent.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : rtsched, rtevent { + after += RTSchedEvent + libs += TAO_RTSchedEvent + tagchecks += RTSchedEvent +} diff --git a/ACE/bin/MakeProjectCreator/config/rtscheduling.mpb b/ACE/bin/MakeProjectCreator/config/rtscheduling.mpb new file mode 100644 index 00000000000..a746dc72693 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtscheduling.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : rtcorba, portableserver, pi, pi_server { + after += RTScheduler + libs += TAO_RTScheduler +} diff --git a/ACE/bin/MakeProjectCreator/config/rtscheduling_client.mpb b/ACE/bin/MakeProjectCreator/config/rtscheduling_client.mpb new file mode 100644 index 00000000000..c026daffbdc --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtscheduling_client.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : rt_client, rtscheduling { +} diff --git a/ACE/bin/MakeProjectCreator/config/rtscheduling_server.mpb b/ACE/bin/MakeProjectCreator/config/rtscheduling_server.mpb new file mode 100644 index 00000000000..06b97cea148 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/rtscheduling_server.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : rt_server, rtscheduling { +} diff --git a/ACE/bin/MakeProjectCreator/config/script.mpb b/ACE/bin/MakeProjectCreator/config/script.mpb new file mode 100644 index 00000000000..ea4def84cdd --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/script.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project { + Define_Custom(Script) { + automatic = 1 + inputext = .sh + } +} diff --git a/ACE/bin/MakeProjectCreator/config/security.mpb b/ACE/bin/MakeProjectCreator/config/security.mpb new file mode 100644 index 00000000000..8a192c2d077 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/security.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : interceptors, portableserver, valuetype, corba_messaging, orbsvcslib, pi { + after += Security + libs += TAO_Security + tagchecks += Security +} diff --git a/ACE/bin/MakeProjectCreator/config/smart_proxies.mpb b/ACE/bin/MakeProjectCreator/config/smart_proxies.mpb new file mode 100644 index 00000000000..b1fc95d4b6c --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/smart_proxies.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project: taolib_with_idl { + after += SmartProxies + libs += TAO_SmartProxies + idlflags += -Gsp +} diff --git a/ACE/bin/MakeProjectCreator/config/ssl.mpb b/ACE/bin/MakeProjectCreator/config/ssl.mpb new file mode 100644 index 00000000000..f0dfa798e7b --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ssl.mpb @@ -0,0 +1,13 @@ +// -*- MPC -*- +// $Id$ + +// In the future, other ssl libraries could be supported +// by creating a new xyzssl.mpb similar to openssl.mpb. +// You would then derive the following project from this base. +project : acelib, ace_openssl { + avoids += ace_for_tao // Requires ACE asynch streams + after += SSL + libs += ACE_SSL + requires += ssl + macros += ACE_HAS_SSL=1 +} diff --git a/ACE/bin/MakeProjectCreator/config/ssliop.mpb b/ACE/bin/MakeProjectCreator/config/ssliop.mpb new file mode 100644 index 00000000000..3ccf7b3e877 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/ssliop.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project: interceptors, security, portableserver, ssl, pi_server { + after += SSLIOP + libs += TAO_SSLIOP + tagchecks += SSLIOP +} diff --git a/ACE/bin/MakeProjectCreator/config/stl.mpb b/ACE/bin/MakeProjectCreator/config/stl.mpb new file mode 100644 index 00000000000..0036507dd28 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/stl.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project { + requires += stl +} diff --git a/ACE/bin/MakeProjectCreator/config/strategies.mpb b/ACE/bin/MakeProjectCreator/config/strategies.mpb new file mode 100644 index 00000000000..c087499d5fd --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/strategies.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ +project : taolib, anytypecode { + avoids += ace_for_tao // Requires Unix domain sockets and MEM stuff + after += Strategies + libs += TAO_Strategies +} diff --git a/ACE/bin/MakeProjectCreator/config/svc_utils.mpb b/ACE/bin/MakeProjectCreator/config/svc_utils.mpb new file mode 100644 index 00000000000..a38a4a962cc --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/svc_utils.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : portableserver, orbsvcslib { + after += Svc_Utils + libs += TAO_Svc_Utils +} diff --git a/ACE/bin/MakeProjectCreator/config/tao_flresource.mpb b/ACE/bin/MakeProjectCreator/config/tao_flresource.mpb new file mode 100644 index 00000000000..a3baaa8cb43 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/tao_flresource.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project: taolib, ace_flreactor { + requires += tao_flresource + after += TAO_FlResource + libs += TAO_FlResource +} diff --git a/ACE/bin/MakeProjectCreator/config/tao_no_iiop.mpb b/ACE/bin/MakeProjectCreator/config/tao_no_iiop.mpb new file mode 100644 index 00000000000..a6fc53b3881 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/tao_no_iiop.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +feature(tao_no_iiop) : taoidldefaults { + idlflags += -DTAO_LACKS_IIOP + macros += TAO_HAS_IIOP=0 +} diff --git a/ACE/bin/MakeProjectCreator/config/tao_output.mpb b/ACE/bin/MakeProjectCreator/config/tao_output.mpb new file mode 100644 index 00000000000..12124d9eb31 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/tao_output.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project { + // We tested with all tao libs going to $(TAO_ROOT)/lib, but + // decided that it was easier to deal with all libs in one place. + libout = $(ACE_ROOT)/lib +} + diff --git a/ACE/bin/MakeProjectCreator/config/tao_qtresource.mpb b/ACE/bin/MakeProjectCreator/config/tao_qtresource.mpb new file mode 100644 index 00000000000..43bd3fca0b6 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/tao_qtresource.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, ace_qtreactor { + requires += tao_qtresource + after += TAO_QtResource + libs += TAO_QtResource +} diff --git a/ACE/bin/MakeProjectCreator/config/tao_tkresource.mpb b/ACE/bin/MakeProjectCreator/config/tao_tkresource.mpb new file mode 100644 index 00000000000..150a42ab082 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/tao_tkresource.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project: acelib, ace_tkreactor { + requires += tao_tkresource + after += TAO_TkResource + libs += TAO_TkResource +} diff --git a/ACE/bin/MakeProjectCreator/config/tao_versioning_idl_defaults.mpb b/ACE/bin/MakeProjectCreator/config/tao_versioning_idl_defaults.mpb new file mode 100644 index 00000000000..0d0352fa5fa --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/tao_versioning_idl_defaults.mpb @@ -0,0 +1,14 @@ +// -*- MPC -*- +// +// $Id$ + +// This base project is only meant to be used by the core TAO +// libraries and the orbsvcs libraries. + +project : taoidldefaults { + + after += TAO_IDL_EXE + idlflags += -Wb,versioning_begin=TAO_BEGIN_VERSIONED_NAMESPACE_DECL \ + -Wb,versioning_end=TAO_END_VERSIONED_NAMESPACE_DECL + +} diff --git a/ACE/bin/MakeProjectCreator/config/tao_xtresource.mpb b/ACE/bin/MakeProjectCreator/config/tao_xtresource.mpb new file mode 100644 index 00000000000..1907319b457 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/tao_xtresource.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, ace_xtreactor { + requires += tao_xtresource + after += TAO_XtResource + libs += TAO_XtResource +} diff --git a/ACE/bin/MakeProjectCreator/config/taoclient.mpb b/ACE/bin/MakeProjectCreator/config/taoclient.mpb new file mode 100644 index 00000000000..fe00c22e960 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/taoclient.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project : taoexe, negotiate_codesets { + exename = client +} diff --git a/ACE/bin/MakeProjectCreator/config/taodefaults.mpb b/ACE/bin/MakeProjectCreator/config/taodefaults.mpb new file mode 100644 index 00000000000..6ad0a79c75d --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/taodefaults.mpb @@ -0,0 +1,19 @@ +// -*- MPC -*- +// $Id$ + +project { + staticflags += TAO_AS_STATIC_LIBS + includes += $(TAO_ROOT) + libpaths += $(ACE_ROOT)/lib + + specific(automake) { + am_version = @TAO_MAJOR@:@TAO_MINOR@:@TAO_BETA@ + includes += $(TAO_BUILDDIR) + } +} + +// If the corba_messaging feature is disabled, then we need +// to add the TAO_HAS_CORBA_MESSAGING=0 macro onto the command line. +feature(!corba_messaging) { + macros += TAO_HAS_CORBA_MESSAGING=0 +}
\ No newline at end of file diff --git a/ACE/bin/MakeProjectCreator/config/taoexe.mpb b/ACE/bin/MakeProjectCreator/config/taoexe.mpb new file mode 100644 index 00000000000..a026aaab695 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/taoexe.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : aceexe, taodefaults, taoidldefaults, core_minimum_corba, corba_e_compact, corba_e_micro { + after += TAO Codeset + libs += TAO +} diff --git a/ACE/bin/MakeProjectCreator/config/taoidl3toidl2defaults.mpb b/ACE/bin/MakeProjectCreator/config/taoidl3toidl2defaults.mpb new file mode 100644 index 00000000000..58e2fb2f896 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/taoidl3toidl2defaults.mpb @@ -0,0 +1,23 @@ +// -*- MPC -*- +// $Id$ + +project { + // Set the idl3_to_idl2 compiler and flags as template values + specific { + tao_idl3_to_idl2 = $(ACE_ROOT)/bin/tao_idl3_to_idl2 + tao_idl3_to_idl2_dep = $(ACE_ROOT)/bin/tao_idl3_to_idl2 + } + + Define_Custom(IDL3TOIDL2) { + automatic = 1 + dependent = $(TAO_IDL3_TO_IDL2_DEP) + command = $(TAO_IDL3_TO_IDL2) + commandflags = -I$(CIAO_ROOT)/ciao -I$(TAO_ROOT) -I$(TAO_ROOT)/orbsvcs + libpath = $(ACE_ROOT)/lib + inputext = .idl + generic_outputext = _IDL2.idl + keyword idl3toidl2flags = commandflags + } + + after += TAO_IDL3_TO_IDL2_EXE +} diff --git a/ACE/bin/MakeProjectCreator/config/taoidldefaults.mpb b/ACE/bin/MakeProjectCreator/config/taoidldefaults.mpb new file mode 100644 index 00000000000..a0813a1b362 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/taoidldefaults.mpb @@ -0,0 +1,65 @@ +// -*- MPC -*- +// $Id$ + +project { + // Set the idl compiler and flags as template values + specific { + tao_idl = $(ACE_ROOT)/bin/tao_idl + tao_idl_dep = $(ACE_ROOT)/bin/tao_idl + tao_idlflags = -Ge 1 -Wb,pre_include=ace/pre.h \ + -Wb,post_include=ace/post.h -I$(TAO_ROOT) + } + + Define_Custom(IDL) { + automatic = 1 + dependent = $(TAO_IDL_DEP) + command = $(TAO_IDL) + libpath = $(ACE_ROOT)/lib + inputext = .idl + source_pre_extension = C + header_pre_extension = C, S + source_outputext = .cpp, .cxx, .cc, .C + header_outputext = .h, .hpp, .hxx, .hh + keyword idlflags = commandflags + + // Inline related options + optional(inline_outputext) { + commandflags(!-SS && !-Ssi || !-Sci || -GT && !-SS && !-oS) += .inl, .i + } + optional(inline_pre_extension) { + commandflags(!-SS && !-Ssi && !-oS) += S + } + optional(inline_pre_extension) { + commandflags(!-Sci) += C + } + optional(inline_pre_extension) { + commandflags(-GT && !-SS && !-oS) += S_T + } + + // Source related options + optional(source_pre_extension) { + commandflags(!-SS && !-oS) += S + } + optional(source_pre_extension) { + commandflags(-GA && !-oA) += A + } + optional(header_outputext) { + commandflags(-SS && !-oS) += S + } + + // Other + optional(template_outputext) { + commandflags(-GT && !-SS && !-oS) += S_T.cpp, S_T.cxx, S_T.cc, S_T.C + } + optional(header_pre_extension) { + commandflags(-GT && !-SS && !-oS) += S_T + } + optional(header_pre_extension) { + commandflags(-GA && !-oA) += A + } + } + + after += TAO_IDL_EXE + idlflags += $(TAO_IDLFLAGS) + idlflags += -Sa -St +} diff --git a/ACE/bin/MakeProjectCreator/config/taolib.mpb b/ACE/bin/MakeProjectCreator/config/taolib.mpb new file mode 100644 index 00000000000..778075809be --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/taolib.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : acelib, ace_for_tao, tao_output, taodefaults, pidl, corba_e_micro, corba_e_compact, core_minimum_corba { + after += TAO Codeset + libs += TAO +} diff --git a/ACE/bin/MakeProjectCreator/config/taolib_with_idl.mpb b/ACE/bin/MakeProjectCreator/config/taolib_with_idl.mpb new file mode 100644 index 00000000000..cc36293c909 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/taolib_with_idl.mpb @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +project : taolib, taoidldefaults { +} diff --git a/ACE/bin/MakeProjectCreator/config/taoserver.mpb b/ACE/bin/MakeProjectCreator/config/taoserver.mpb new file mode 100644 index 00000000000..8c081dfb029 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/taoserver.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project : taoexe, negotiate_codesets, portableserver { + exename = server +} diff --git a/ACE/bin/MakeProjectCreator/config/threads.mpb b/ACE/bin/MakeProjectCreator/config/threads.mpb new file mode 100644 index 00000000000..8d3b8648ca5 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/threads.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project { + requires += threads +} diff --git a/ACE/bin/MakeProjectCreator/config/time.mpb b/ACE/bin/MakeProjectCreator/config/time.mpb new file mode 100644 index 00000000000..4e5fce894f0 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/time.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, svc_utils, portableserver { + after += CosTime + libs += TAO_CosTime + tagchecks += Time +} diff --git a/ACE/bin/MakeProjectCreator/config/tmcast.mpb b/ACE/bin/MakeProjectCreator/config/tmcast.mpb new file mode 100644 index 00000000000..4283f27902f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/tmcast.mpb @@ -0,0 +1,9 @@ +// -*- MPC -*- +// $Id$ + +project: acelib, exceptions, threads { + avoids += ace_for_tao + after += TMCast + libs += ACE_TMCast + includes += $(ACE_ROOT)/protocols +} diff --git a/ACE/bin/MakeProjectCreator/config/trading.mpb b/ACE/bin/MakeProjectCreator/config/trading.mpb new file mode 100644 index 00000000000..63db829c0cd --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/trading.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib { + after += CosTrading + libs += TAO_CosTrading + tagchecks += Trader +} diff --git a/ACE/bin/MakeProjectCreator/config/trading_serv.mpb b/ACE/bin/MakeProjectCreator/config/trading_serv.mpb new file mode 100644 index 00000000000..2b2f3988b3d --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/trading_serv.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, trading_skel, dynamicany, svc_utils, iortable { + after += CosTrading_Serv + libs += TAO_CosTrading_Serv +} diff --git a/ACE/bin/MakeProjectCreator/config/trading_skel.mpb b/ACE/bin/MakeProjectCreator/config/trading_skel.mpb new file mode 100644 index 00000000000..ee926a85d59 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/trading_skel.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : orbsvcslib, trading, portableserver { + after += CosTrading_Skel + libs += TAO_CosTrading_Skel +} diff --git a/ACE/bin/MakeProjectCreator/config/typecodefactory.mpb b/ACE/bin/MakeProjectCreator/config/typecodefactory.mpb new file mode 100644 index 00000000000..7eadcd76a75 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/typecodefactory.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : ifr_client { + libs += TAO_TypeCodeFactory + after += TypeCodeFactory +} diff --git a/ACE/bin/MakeProjectCreator/config/utils.mpb b/ACE/bin/MakeProjectCreator/config/utils.mpb new file mode 100644 index 00000000000..0c9d37b2dea --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/utils.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project : portableserver, pi { + after += Utils + libs += TAO_Utils +} diff --git a/ACE/bin/MakeProjectCreator/config/valuetype.mpb b/ACE/bin/MakeProjectCreator/config/valuetype.mpb new file mode 100644 index 00000000000..47edd4e94c4 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/valuetype.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project: taolib, anytypecode { + after += Valuetype + libs += TAO_Valuetype +} diff --git a/ACE/bin/MakeProjectCreator/config/vc71.features b/ACE/bin/MakeProjectCreator/config/vc71.features new file mode 100644 index 00000000000..16181dc6293 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/vc71.features @@ -0,0 +1,7 @@ +// $Id$ + +ssl=0 +qos=1 +cidl=0 +rwho=0 +sctp=0 diff --git a/ACE/bin/MakeProjectCreator/config/vc8.features b/ACE/bin/MakeProjectCreator/config/vc8.features new file mode 100644 index 00000000000..16181dc6293 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/vc8.features @@ -0,0 +1,7 @@ +// $Id$ + +ssl=0 +qos=1 +cidl=0 +rwho=0 +sctp=0 diff --git a/ACE/bin/MakeProjectCreator/config/vc8nmake.mpb b/ACE/bin/MakeProjectCreator/config/vc8nmake.mpb new file mode 100644 index 00000000000..562d73f7317 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/vc8nmake.mpb @@ -0,0 +1,10 @@ +// -*- MPC -*- +// $Id$ + +project { + specific(nmake) { + compile_flags -= /EHs + compile_flags += /EHa + } +} + diff --git a/ACE/bin/MakeProjectCreator/config/vcfullmacros.mpt b/ACE/bin/MakeProjectCreator/config/vcfullmacros.mpt new file mode 100644 index 00000000000..a3bb4b1bbd1 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/vcfullmacros.mpt @@ -0,0 +1,14 @@ +// -*- MPC -*- +// $Id$ + +// ACE specific macros for nmake, vc6, vc7 and em3 + +Static MFC Release { + defines += ACE_HAS_MFC=1 ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER +} + +Static MFC Debug { + defines += ACE_HAS_MFC=1 ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER +} + +conditional_include "vcpartialmacros" diff --git a/ACE/bin/MakeProjectCreator/config/vcl.mpb b/ACE/bin/MakeProjectCreator/config/vcl.mpb new file mode 100644 index 00000000000..4c523e673f0 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/vcl.mpb @@ -0,0 +1,16 @@ +// -*- MPC -*- +// $Id$ + +project { + requires += vcl + macros += ACE_HAS_VCL=1 + specific(bmake, borland, bds) { + use_vcl = 1 + lit_libs += rtl vcl + compile_flags += -tW -tWV + linkflags += -aa + } + verbatim(borland,macros) { + VCL=1 + } +} diff --git a/ACE/bin/MakeProjectCreator/config/vcpartialmacros.mpt b/ACE/bin/MakeProjectCreator/config/vcpartialmacros.mpt new file mode 100644 index 00000000000..1105c25cd39 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/vcpartialmacros.mpt @@ -0,0 +1,12 @@ +// -*- MPC -*- +// $Id$ + +// ACE specific macros for nmake, vc6, vc7 and em3 + +MFC Release { + defines += ACE_HAS_MFC=1 ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER +} + +MFC Debug { + defines += ACE_HAS_MFC=1 ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER +} diff --git a/ACE/bin/MakeProjectCreator/config/versioned_namespace.mpb b/ACE/bin/MakeProjectCreator/config/versioned_namespace.mpb new file mode 100644 index 00000000000..502c8139ceb --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/versioned_namespace.mpb @@ -0,0 +1,13 @@ +// -*- MPC -*- +// +// $Id$ + +feature(versioned_namespace) { + + macros += ACE_HAS_VERSIONED_NAMESPACE=1 + + // Users, define the ACE_VERSIONED_NAMESPACE_NAME preprocessor + // symbol in your ace/config.h to override the default versioned + // namespace name of the form ACE_5_4_7. + +} diff --git a/ACE/bin/MakeProjectCreator/config/wfmo.mpb b/ACE/bin/MakeProjectCreator/config/wfmo.mpb new file mode 100644 index 00000000000..788d9905583 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/wfmo.mpb @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +feature(wfmo) { + requires += wfmo +} diff --git a/ACE/bin/MakeProjectCreator/config/winregistry.mpb b/ACE/bin/MakeProjectCreator/config/winregistry.mpb new file mode 100644 index 00000000000..4ccdb55836f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/winregistry.mpb @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +feature(winregistry) { + avoids += ace_for_tao + requires += winregistry +} diff --git a/ACE/bin/MakeProjectCreator/config/wxwindows.mpb b/ACE/bin/MakeProjectCreator/config/wxwindows.mpb new file mode 100644 index 00000000000..8931ea36712 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/config/wxwindows.mpb @@ -0,0 +1,21 @@ +// -*- MPC -*- +// $Id$ + +project { + requires += wxWindows + verbatim(gnuace,local) { + # work based on the configuration of the wxWindows installation + # PLATFORM_WX_* defined in includes/makeincludes/*_macros.GNU + CPPFLAGS += $(PLATFORM_WX_CPPFLAGS) + LDFLAGS += $(PLATFORM_WX_LDFLAGS) + LDLIBS += $(PLATFORM_WX_LIBS) + } + + specific(automake) { + compile_flags += $(ACE_WX_CPPFLAGS) + linkflags += $(ACE_WX_LDFLAGS) + pure_libs += $(ACE_WX_LIBS) + } + + // TBD - support other platforms +} diff --git a/ACE/bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm b/ACE/bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm new file mode 100644 index 00000000000..57ce339f7a9 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm @@ -0,0 +1,145 @@ +package AutomakeWorkspaceHelper; + +# ************************************************************ +# Description : An Automake Workspace Helper +# Author : Chad Elliott +# Create Date : 9/01/2004 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use FileHandle; + +use WorkspaceHelper; + +use vars qw(@ISA); +@ISA = qw(WorkspaceHelper); + +# ************************************************************ +# Data Section +# ************************************************************ + +my(%vals) = ('ACE_ROOT' => '$(top_srcdir)', + 'TAO_ROOT' => '$(top_srcdir)', + 'CIAO_ROOT' => '$(top_srcdir)', + 'ACE_BUILDDIR' => '$(top_builddir)', + 'TAO_BUILDDIR' => '$(top_builddir)', + 'CIAO_BUILDDIR' => '$(top_builddir)', + 'TAO_IDL' => 'ACE_ROOT=$(ACE_ROOT) TAO_ROOT=$(TAO_ROOT) $(TAO_BUILDDIR)/TAO_IDL/tao_idl' . "\n" . + 'TAO_IDL_DEP = $(TAO_BUILDDIR)/TAO_IDL/tao_idl' . "\n" . + 'TAO_IDLFLAGS = -Ge 1 -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h -I$(TAO_ROOT) -I$(srcdir) -g $(ACE_BUILDDIR)/apps/gperf/src/gperf', + ); +my(%addon) = ('ACE_ROOT' => {'CIAO_ROOT' => '/../..', + 'TAO_ROOT' => '/..', + 'CIAO_BUILDDIR' => '/../..', + 'TAO_BUILDDIR' => '/..'}, + 'ACE_BUILDDIR' => {'CIAO_ROOT' => '/../..', + 'TAO_ROOT' => '/..', + 'CIAO_BUILDDIR' => '/../..', + 'TAO_BUILDDIR' => '/..'}, + 'TAO_ROOT' => {'CIAO_ROOT' => '/..', + 'CIAO_BUILDDIR' => '/..'}, + 'TAO_BUILDDIR' => {'CIAO_ROOT' => '/..', + 'CIAO_BUILDDIR' => '/..'}, + ); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub modify_value { + my($self) = shift; + my($name) = shift; + my($value) = shift; + + if ($name eq 'includedir') { + ## TAO/orbsvcs and TAO are like separate projects, so first + ## remove the TAO/orbsvcs part and if that doesn't work try + ## removing the TAO part. The ACE related values don't need + ## any modification. + if (!($value =~ s/^\/TAO\/orbsvcs//)) { + $value =~ s/^\/TAO//; + } + } + + return $value; +} + +sub modify_libpath { + my($self) = shift; + my($str) = shift; + my($reldir) = shift; + my($libname) = shift; + + if ($libname =~ /libace/i) { + $str =~ s!$libname!\$(ACE_BUILDDIR)/$reldir/$libname!; + return $str; + } + elsif ($libname =~ /libtao/i) { + $reldir =~ s!TAO/!!; + $str =~ s!$libname!\$(TAO_BUILDDIR)/$reldir/$libname!; + return $str; + } + elsif ($libname =~ /libciao/i) { + $reldir =~ s!TAO/CIAO/!!; + $str =~ s!$libname!\$(CIAO_BUILDDIR)/$reldir/$libname!; + return $str; + } + + return undef; +} + +sub write_settings { + my($self) = shift; + my($wsc) = shift; + my($fh) = shift; + my(@locals) = @_; + my($status) = 1; + my($error) = undef; + my($crlf) = $wsc->crlf(); + my($pfh) = new FileHandle(); + my(%seen) = (); + my($outdir) = $wsc->get_outdir(); + + foreach my $local (reverse @locals) { + if (open($pfh, "$outdir/$local")) { + while(<$pfh>) { + foreach my $key (keys %vals) { + if (/\$\($key\)/) { + $seen{$key} = $vals{$key}; + } + } + } + close($pfh); + } + else { + $status = 0; + $error = "Unable to open $local for reading."; + } + } + + foreach my $key (sort keys %seen) { + print $fh "$key = $seen{$key}"; + if (defined $addon{$key}) { + foreach my $add ( + sort { length($addon{$key}->{$b}) <=> + length($addon{$key}->{$a}) } keys %{$addon{$key}}) { + if ($seen{$add}) { + print $fh $addon{$key}->{$add}; + last; + } + } + } + print $fh $crlf; + } + + print $fh $crlf; + + return $status, $error; +} + + +1; diff --git a/ACE/bin/MakeProjectCreator/modules/BorlandProjectCreator.pm b/ACE/bin/MakeProjectCreator/modules/BorlandProjectCreator.pm new file mode 100644 index 00000000000..167c91ac295 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/modules/BorlandProjectCreator.pm @@ -0,0 +1,126 @@ +package BorlandProjectCreator; + +# ************************************************************ +# Description : A Borland Project Creator +# Author : Chad Elliott +# Create Date : 3/14/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +use ProjectCreator; +use WinProjectBase; +use File::Basename; + +use vars qw(@ISA); +@ISA = qw(WinProjectBase ProjectCreator); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub dollar_special { + #my($self) = shift; + return 1; +} + + +sub fill_value { + my($self) = shift; + my($name) = shift; + my($value) = undef; + my(%names) = ('cppdir' => 'source_files', + 'rcdir' => 'resource_files', + ); + + if (defined $names{$name}) { + my(%dirnames) = (); + foreach my $file ($self->get_component_list($names{$name}, 1)) { + my($dirname) = $self->mpc_dirname($file); + if ($dirname eq '') { + $dirname = '.'; + } + elsif ($self->convert_slashes()) { + $dirname = $self->slash_to_backslash($dirname); + } + $dirnames{$dirname} = 1; + } + + ## Sort the directories to ensure that '.' comes first + $value = join(';', sort keys %dirnames); + } + elsif ($name eq 'relwd') { + my($useenv) = $self->get_use_env(); + my($rel) = ($useenv ? \%ENV : $self->get_relative()); + $value = $self->getcwd(); + + foreach my $key (keys %$rel) { + ## Do not use PWD or CD if we are expanding environment variables. + ## They could conflict with the "real" values we're looking for. + if ($useenv && ($key eq 'PWD' || $key eq 'CD')) { + next; + } + + ## Get the relative replacement value and convert back-slashes + my($val) = $$rel{$key}; + $val =~ s/\\/\//g; + + ## We only need to check for reverse replacement if the length + ## of the string is less than or equal to the length of our + ## replacement value or the string has a slash at the position + ## of the length of the replacement value + my($vlen) = length($val); + if (length($value) <= $vlen || substr($value, $vlen, 1) eq '/') { + ## Cut the string down by the length of the replacement value + my($lval) = substr($value, 0, $vlen); + + ## Here we make an assumption that we + ## have a case-insensitive file system. + if (lc($lval) eq lc($val)) { + substr($value, 0, length($val) + 1) = ''; + last; + } + } + } + $value = $self->slash_to_backslash($value); + } + + return $value; +} + + +sub project_file_name { + my($self) = shift; + my($name) = shift; + + if (!defined $name) { + $name = $self->project_name(); + } + + return $self->get_modified_project_file_name($name, '.bor'); +} + + +sub get_dll_exe_template_input_file { + #my($self) = shift; + return 'borexe'; +} + + +sub get_dll_template_input_file { + #my($self) = shift; + return 'bordll'; +} + + +sub get_template { + #my($self) = shift; + return 'bor'; +} + + +1; diff --git a/ACE/bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm b/ACE/bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm new file mode 100644 index 00000000000..5b4eab604d1 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm @@ -0,0 +1,166 @@ +package BorlandWorkspaceCreator; + +# ************************************************************ +# Description : A Borland Workspace (Makefile.bor) creator +# Author : Chad Elliott +# Create Date : 7/02/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use File::Basename; + +use BorlandProjectCreator; +use WorkspaceCreator; + +use vars qw(@ISA); +@ISA = qw(WorkspaceCreator); + +# ************************************************************ +# Data Section +# ************************************************************ + +my($max_line_length) = 32767; ## Borland Make's maximum line length +my(@targets) = ('clean', 'realclean', 'install'); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub workspace_file_name { + my($self) = shift; + return $self->get_modified_workspace_name('Makefile', '.bor'); +} + + +sub workspace_per_project { + #my($self) = shift; + return 1; +} + + +sub pre_workspace { + my($self) = shift; + my($fh) = shift; + my($crlf) = $self->crlf(); + + print $fh '#----------------------------------------------------------------------------', $crlf, + '# Borland Workspace', $crlf, + '#', $crlf, + '# $Id$', $crlf, + '#', $crlf, + '# This file was generated by MPC. Any changes made directly to', $crlf, + '# this file will be lost the next time it is generated.', $crlf, + '#', $crlf, + '# MPC Command:', $crlf, + "# $0 @ARGV", $crlf, + '#----------------------------------------------------------------------------', $crlf, + $crlf; +} + + +sub write_project_targets { + my($self) = shift; + my($fh) = shift; + my($target) = shift; + my($list) = shift; + my($crlf) = $self->crlf(); + + foreach my $project (@$list) { + my($dir) = $self->mpc_dirname($project); + my($chdir) = 0; + my($back) = ''; + my($cwd) = $self->getcwd(); + + ## If the directory isn't '.' then we need + ## to figure out how to get back to our starting point + if ($dir ne '.') { + $chdir = 1; + my($count) = ($dir =~ tr/\///) + 1; + if ($dir =~ /^\.\.\//) { + ## Find out how many directories we went down + my($rel) = $dir; + while($rel =~ s/^\.\.\///) { + } + my($down) = ($rel =~ tr/\///) + 1; + + ## Get $count - $down parts of the base of the current directory + $rel = $cwd; + my($index) = length($rel); + for(my $i = $down; $i < $count; $i++) { + $index = rindex($rel, '/', $index - 1); + } + if ($index > -1) { + $rel = substr($rel, $index + 1); + } + $back = ('../' x $down) . $rel; + } + else { + $back = ('../' x $count); + } + } + + print $fh ($chdir ? "\t\@cd $dir$crlf" : '') . + "\t\$(MAKE) -\$(MAKEFLAGS) \$(MAKE_FLAGS) -f " . basename($project) . " $target$crlf" . + ($chdir ? "\t\@cd $back$crlf" : ''); + } +} + + +sub write_comps { + my($self) = shift; + my($fh) = shift; + my($projects) = $self->get_projects(); + my($pjs) = $self->get_project_info(); + my(%targnum) = (); + my(@list) = $self->number_target_deps($projects, $pjs, \%targnum, 0); + my($crlf) = $self->crlf(); + my(@ltargets) = @targets; + + print $fh "!include <\$(ACE_ROOT)\\include\\makeinclude\\make_flags.bor>$crlf"; + + ## Construct the "all" target + my($all) = $crlf . 'all:'; + foreach my $project (@list) { + $all .= " $$pjs{$project}->[0]"; + } + if (length($all) < $max_line_length) { + print $fh $all, $crlf; + } + else { + unshift(@ltargets, 'all'); + } + + ## Print out all other targets here + foreach my $target (@ltargets) { + print $fh $crlf . + "$target\:$crlf"; + $self->write_project_targets($fh, $target, \@list); + } + + ## Print out each target separately + foreach my $project (@list) { + print $fh $crlf . $$pjs{$project}->[0] . ':'; + if (defined $targnum{$project}) { + foreach my $number (@{$targnum{$project}}) { + print $fh " $$pjs{$list[$number]}->[0]"; + } + } + + print $fh $crlf; + $self->write_project_targets($fh, 'all', [ $project ]); + } + + ## Print out the project_name_list target + print $fh $crlf . "project_name_list:$crlf"; + foreach my $project (sort @list) { + print $fh "\t\@echo $$pjs{$project}->[0]$crlf"; + } +} + + + +1; diff --git a/ACE/bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm b/ACE/bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm new file mode 100644 index 00000000000..9d0ae9eb366 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm @@ -0,0 +1,95 @@ +package GNUACEProjectCreator; + +# ************************************************************ +# Description : A GNU Project Creator for ACE +# Author : Chad Elliott +# Create Date : 3/13/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use File::Basename; + +use MakeProjectBase; +use ProjectCreator; + +use vars qw(@ISA); +@ISA = qw(MakeProjectBase ProjectCreator); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub expand_variables_from_template_values { + #my($self) = shift; + return 0; +} + + +sub convert_slashes { + #my($self) = shift; + return 0; +} + + +sub fill_value { + my($self) = shift; + my($name) = shift; + + if ($name eq 'vpath') { + my(%vpath) = (); + foreach my $item ($self->get_component_list('source_files')) { + my($dname) = $self->relative($self->mpc_dirname($item)); + if ($dname ne '.') { + $vpath{$dname} = 1; + } + } + my($str) = join(':', keys %vpath); + if ($str ne '') { + return 'VPATH = .:' . $str . $self->crlf(); + } + } + elsif ($name eq 'tao') { + my($incs) = $self->get_assignment('includes'); + my($libs) = $self->get_assignment('libpaths'); + return ((defined $incs && $incs =~ /tao/i) || + (defined $libs && $libs =~ /tao/i)); + } + elsif ($name eq 'ciao') { + my($incs) = $self->get_assignment('includes'); + my($libs) = $self->get_assignment('libpaths'); + return ((defined $incs && $incs =~ /ciao/i) || + (defined $libs && $libs =~ /ciao/i)); + } + + return undef; +} + + +sub project_file_prefix { + #my($self) = shift; + return 'GNUmakefile.'; +} + + +sub get_dll_exe_template_input_file { + #my($self) = shift; + return 'gnuexe'; +} + + +sub get_dll_template_input_file { + #my($self) = shift; + return 'gnudll'; +} + + +sub get_template { + #my($self) = shift; + return 'gnu'; +} + +1; diff --git a/ACE/bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm b/ACE/bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm new file mode 100644 index 00000000000..4d645b2411d --- /dev/null +++ b/ACE/bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm @@ -0,0 +1,265 @@ +package GNUACEWorkspaceCreator; + +# ************************************************************ +# Description : A GNU Workspace (GNUmakefile) creator for ACE +# Author : Chad Elliott +# Create Date : 5/13/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +use GNUACEProjectCreator; +use WorkspaceCreator; + +use vars qw(@ISA); +@ISA = qw(WorkspaceCreator); + +# ************************************************************ +# Data Section +# ************************************************************ + +my($base) = 'GNUmakefile'; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub generate_implicit_project_dependencies { + #my($self) = shift; + return 1; +} + + +sub workspace_file_name { + my($self) = shift; + return $self->get_modified_workspace_name($base, ''); +} + + +sub workspace_per_project { + #my($self) = shift; + return 1; +} + + +sub pre_workspace { + my($self) = shift; + my($fh) = shift; + my($crlf) = $self->crlf(); + + print $fh '# -*- makefile -*-', $crlf, + '#-------------------------------------------------------------------------', $crlf, + '# GNU ACE Workspace', $crlf, + '#', $crlf, + '# $Id$', $crlf, + '#', $crlf, + '# This file was generated by MPC. Any changes made directly to', $crlf, + '# this file will be lost the next time it is generated.', $crlf, + '#', $crlf, + '# MPC Command:', $crlf, + "# $0 @ARGV", $crlf, + '#', $crlf, + '#-------------------------------------------------------------------------', $crlf, + 'MAKEFILE = ', $self->get_modified_workspace_name($base, '', 1), + $crlf; +} + + +sub write_comps { + my($self) = shift; + my($fh) = shift; + my($crlf) = $self->crlf(); + my(%targnum) = (); + my($pjs) = $self->get_project_info(); + my($named) = !defined $ENV{MPC_GNUACE_DIRECTORY_DEPS}; + my(@list) = $self->number_target_deps($self->get_projects(), + $pjs, \%targnum, + $named ? 0 : 1); + + ## Print out some preliminary information + print $fh $crlf, + "ifeq (\$(findstring k,\$(MAKEFLAGS)),k)$crlf", + " KEEP_GOING = -$crlf", + "endif$crlf$crlf", + "include \$(ACE_ROOT)/include/makeinclude/macros.GNU$crlf", + $crlf; + + if ($named) { + $self->write_named_targets($fh, $crlf, \%targnum, \@list); + } + else { + ## Determine the ordering of the sub-directories + my(@dirs) = (); + my(%found) = (); + foreach my $file (reverse @list) { + my($dir) = $self->get_first_level_directory($file); + if ($dir ne '.') { + if (!defined $found{$dir}) { + $found{$dir} = 1; + unshift(@dirs, $dir); + } + } + } + my($need_dirs) = ($#dirs > -1); + + ## Store the local projects in a separate list + my(@lprj) = (); + my(%dirprj) = (); + foreach my $project (@list) { + if ($project !~ /\//) { + push(@lprj, $project); + if ($need_dirs && defined $targnum{$project}) { + foreach my $number (@{$targnum{$project}}) { + if ($list[$number] =~ /\//) { + ## If any local project depends on a project that is not + ## in this directory, we can not rely on the directory + ## recursion to get the correct dependencies. We will do + ## all projects as local targets. + @lprj = (); + foreach my $prj (@list) { + push(@lprj, $prj); + if ($prj =~ /\//) { + $dirprj{$prj} = 1; + } + } + $need_dirs = 0; + last; + } + } + if (!$need_dirs) { + last; + } + } + } + } + + if ($#lprj >= 0) { + ## Print out the all target first. This will allow multiple projects + ## within the same directory to build in parallel. + print $fh 'all:'; + foreach my $project (@lprj) { + print $fh ' ', $$pjs{$project}->[0]; + } + print $fh $crlf; + if ($need_dirs) { + foreach my $dir (@dirs) { + print $fh "\t\$(KEEP_GOING)\@cd $dir && ", + "\$(MAKE) -f \$(MAKEFILE) \$(\@)$crlf"; + } + } + + ## Print out each target separately. Make can decide on which + ## targets can be built in parallel because we add the local + ## dependencies. + foreach my $project (@lprj) { + print $fh $crlf, '.PHONY: ', $$pjs{$project}->[0], + $crlf, $$pjs{$project}->[0], ':'; + if (defined $targnum{$project}) { + foreach my $number (@{$targnum{$project}}) { + print $fh ' ', $$pjs{$list[$number]}->[0]; + } + } + print $fh $crlf, + "\t\$(KEEP_GOING)\@"; + if (defined $dirprj{$project}) { + print $fh "cd ", $self->mpc_dirname($project), + " && \$(MAKE) -f ", $self->mpc_basename($project), + $crlf; + } + else { + print $fh "\$(MAKE) -f $project$crlf"; + } + } + print $fh $crlf, + 'REMAINING_TARGETS := ', + '$(subst all, , $(TARGETS_NESTED:.nested=)) $(CUSTOM_TARGETS)', + $crlf; + } + else { + print $fh 'REMAINING_TARGETS := $(TARGETS_NESTED:.nested=) ', + '$(CUSTOM_TARGETS)', $crlf; + } + + ## Print out the remaing targets. + ## They will be handled serially by make. + print $fh "\$(REMAINING_TARGETS):$crlf"; + foreach my $project (@lprj) { + print $fh "\t\$(KEEP_GOING)\@"; + if (defined $dirprj{$project}) { + print $fh "cd ", $self->mpc_dirname($project), + " && \$(MAKE) -f ", $self->mpc_basename($project), + " \$(\@)", $crlf; + } + else { + print $fh "\$(MAKE) -f $project \$(\@)$crlf"; + } + } + if ($need_dirs) { + foreach my $dir (@dirs) { + print $fh "\t\$(KEEP_GOING)\@cd $dir && ", + "\$(MAKE) -f \$(MAKEFILE) \$(\@)$crlf"; + } + } + print $fh $crlf; + } +} + +sub write_named_targets { + my($self) = shift; + my($fh) = shift; + my($crlf) = shift; + my($targnum) = shift; + my($list) = shift; + my($trans) = $self->project_target_translation(1); + + ## Print out the "all" target + print $fh 'all:'; + foreach my $project (@$list) { + print $fh " $$trans{$project}"; + } + + ## Print out all other targets here + print $fh $crlf, + 'REMAINING_TARGETS := ', + '$(subst all, , $(TARGETS_NESTED:.nested=)) $(CUSTOM_TARGETS)', + "$crlf$crlf\$(REMAINING_TARGETS):$crlf"; + foreach my $project (@$list) { + my($dname) = $self->mpc_dirname($project); + print $fh "\t\@", + ($dname ne '.' ? "cd $dname && " : ''), + "\$(MAKE) -f ", + ($dname eq '.' ? $project : $self->mpc_basename($project)), + " \$(\@)$crlf"; + } + + ## Print out each target separately + foreach my $project (@$list) { + my($dname) = $self->mpc_dirname($project); + print $fh $crlf, '.PHONY: ', $$trans{$project}, + $crlf, $$trans{$project}, ':'; + if (defined $$targnum{$project}) { + foreach my $number (@{$$targnum{$project}}) { + print $fh " $$trans{$$list[$number]}"; + } + } + + print $fh $crlf, + "\t\@", + ($dname ne '.' ? "cd $dname && " : ''), + "\$(MAKE) -f ", + ($dname eq '.' ? $project : $self->mpc_basename($project)), + ' all', $crlf; + } + + ## Print out the project_name_list target + print $fh $crlf, "project_name_list:$crlf"; + foreach my $project (sort @$list) { + print $fh "\t\@echo $$trans{$project}$crlf"; + } +} + +1; diff --git a/ACE/bin/MakeProjectCreator/templates/bor.mpd b/ACE/bin/MakeProjectCreator/templates/bor.mpd new file mode 100644 index 00000000000..1e3cef6caa8 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/templates/bor.mpd @@ -0,0 +1,219 @@ +# Makefile for building the <%if(exename)%><%exename%> exe<%endif%><%if(sharedname)%><%sharedname%> library<%else%><%if(staticname)%><%staticname%> library<%endif%><%endif%> with Borland C++ Make + +<%marker(top)%> +<%if(exename)%> +NAME = <%exename%> +<%else%> +<%if(sharedname || staticname)%> +NAME = <%if(sharedname)%><%sharedname%><%else%><%staticname%><%endif%> +<%endif%> +<%endif%> + +NO_FULL_PATH=1 +<%if(exename || sharedname || staticname)%> +<%if(source_files)%> + +OBJFILES = \ +<%foreach(source_files)%> + $(OBJDIR)\<%basenoextension(source_file)%>.$(OBJ_EXT)<%fornotlast(" \\")%> +<%endfor%> +<%endif%> +<%endif%> +<%if(libpaths)%> + +LFLAGS = \ +<%if(linkflags)%> + <%linkflags%> \ +<%endif%> +<%if(StackReserveSize)%> + /S:<%StackReserveSize%> \ +<%endif%> +<%if(StackCommitSize)%> + /Sc:<%StackCommitSize%> \ +<%endif%> +<%foreach(libpaths)%> + -L"<%libpath%>" \ + -j"<%libpath%>" <%fornotlast(" \\")%> +<%endfor%> +<%endif%> +<%if(libs || lit_libs || pure_libs)%> + +LIBFILES = \ +<%foreach(pure_libs)%> + <%pure_lib%> \ +<%endfor%> +<%foreach(lit_libs)%> + <%lit_lib%>.lib \ +<%endfor%> +<%foreach(reverse(libs))%> + <%lib%>$(LIB_DECORATOR).lib \ +<%endfor%> + $(DUMMY_VALUE_NOT_ENDING_IN_BACKSLASH) +<%endif%> +<%if(rcdir)%> + +RESDIR = <%rcdir%> +<%endif%> +<%if(resource_files)%> + +RESOURCE =<%foreach(resource_files)%> $(OBJDIR)\<%basenoextension(resource_file)%>.res<%endfor%> + +<%if(includes)%> +RC_FLAGS = \ +<%foreach(includes)%> + -i"<%include%>"<%fornotlast(" \\")%> +<%endfor%> +<%endif%> + +<%endif%> + +!ifdef STATIC +<%if(staticflags)%> +LIB_FLAGS = \ +<%foreach(staticflags)%> + -D<%staticflag%><%fornotlast(" \\")%> +<%endfor%> +<%endif%> +!else +<%if(dynamicflags)%> +DLL_FLAGS = \ +<%foreach(dynamicflags)%> + -D<%dynamicflag%><%fornotlast(" \\")%> +<%endfor%> +<%endif%> +!endif + +CFLAGS = \ +<%if(pch_header)%> +<%foreach(pch_defines)%> +# Borland precompiled headers choke on several tao header files. +# For example, any place that uses ACE_LIB_TEXT(). +# -D<%pch_define%> \ +<%endfor%> +<%endif%> +<%if(compile_flags)%> + <%compile_flags%> \ +<%endif%> +<%foreach(macros)%> + -D<%macro%> \ +<%endfor%> +<%foreach(includes)%> + -I"<%include%>" \ +<%endfor%> + $(LIB_FLAGS) \ + $(DLL_FLAGS) +<%if(pch_header)%> + +# Borland precompiled headers choke on several tao header files. +# For example, any place that uses ACE_LIB_TEXT(). +#PCH_HEADER=<%pch_header%> +<%endif%> +<%if(cppdir)%> + +CPPDIR = <%cppdir%> +CDIR = <%cppdir%> +<%endif%> +<%if(header_files || template_files || inline_files || idl_files)%> + +INCDIR_NAME = <%relwd%> +<%endif%> +<%foreach(custom_types)%> + +# +# <%custom_type%> rules +# + +<%if(cutom_type->libpath)%> +PATH := $(PATH);<%custom_type->libpath%> + +<%endif%> +<%foreach(custom_type->input_files)%> +<%if(custom_type->input_file->output_files)%> + +<%custom_type%>_<%forcount(custom_type->input_files)%>=<%foreach(custom_type->input_file->output_files)%> <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%><%endfor%> +$(<%custom_type%>_<%forcount(custom_type->input_files)%>): <%custom_type->input_file%> +<%if(flag_overrides(custom_type->input_file, gendir))%> + -if not exist <%flag_overrides(custom_type->input_file, gendir)%> mkdir <%flag_overrides(custom_type->input_file, gendir)%> 2> nul +<%endif%> + <%if(flag_overrides(custom_type->input_file, command))%><%flag_overrides(custom_type->input_file, command)%><%else%><%custom_type->command%><%endif%> <%if(flag_overrides(custom_type->input_file, commandflags))%><%flag_overrides(custom_type->input_file, commandflags)%><%else%><%custom_type->commandflags%><%endif%> <%custom_type->input_file%> <%if(custom_type->output_option)%><%custom_type->output_option%> $@<%endif%> +<%if(flag_overrides(custom_type->input_file, postcommand))%> +<%foreach(custom_type->input_file->output_files)%> + <%flag_overrides(custom_type->input_file, postcommand)%> +<%endfor%> +<%else%> +<%if(custom_type->postcommand)%> +<%foreach(custom_type->input_file->output_files)%> + <%custom_type->postcommand%> +<%endfor%> +<%endif%> +<%endif%> +<%if(pch_header)%> +<%if(custom_type->pch_postrule)%> +<%foreach(custom_type->input_file->source_output_files)%> + @echo #include "<%pch_header%>" > temporary.src + @type <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%> >> temporary.src + @move /y temporary.src <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>\<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%> +<%endfor%> +<%endif%> +<%endif%> + +all: $(<%custom_type%>_<%forcount(custom_type->input_files)%>) + +customclean_<%custom_type%>_<%forcount(custom_type->input_files)%>: + @del $(<%custom_type%>_<%forcount(custom_type->input_files)%>) 2>nul + +clean: customclean_<%custom_type%>_<%forcount(custom_type->input_files)%> + +realclean: customclean_<%custom_type%>_<%forcount(custom_type->input_files)%> + +<%endif%> +<%endfor%> +<%endfor%> + +# +# Override defaults in outputdir.bor +# +<%if(INSTALL_THIS_TARGET)%> +INSTALL_THIS_TARGET = 1 + +<%endif%> +<%marker(macros)%> +INCLUDES_INSTALL=1 +<%if(exename)%> + +<%if(install)%> +# We use BINDIR for install instead of BASE_BINDIR, because +# this is the location for all scripts too. +BINDIR = <%install%> +<%else%> +BASE_BINDIR = . +<%endif%> + +!include <$(ACE_ROOT)\include\makeinclude\build_exe.bor> +<%else%> +<%if(sharedname || staticname)%> +BINDIR = <%if(dllout)%><%dllout%><%else%><%libout%><%endif%> + +!include <$(ACE_ROOT)\include\makeinclude\build_library.bor> +<%else%> +INSTALL_TYPES = includes + +!include <$(ACE_ROOT)\include\makeinclude\install.bor> + +all: + @-rem +<%endif%> +<%endif%> +<%if(header_files || template_files || inline_files || idl_files || pidl_files)%> + +includes_install: $(INCLUDES) +<%foreach(header_files template_files inline_files idl_files pidl_files)%> + -@if not exist $(INSTALL_DIR)\include\$(INCDIR_NAME)\<%dirname(header_file)%> mkdir $(INSTALL_DIR)\include\$(INCDIR_NAME)\<%dirname(header_file)%> + -© /Y <%header_file%> $(INSTALL_DIR)\include\$(INCDIR_NAME)\<%header_file%> 1> NUL +<%endfor%> +<%else%> + +includes_install: + @echo Nothing to install. +<%endif%> +<%marker(bottom)%> diff --git a/ACE/bin/MakeProjectCreator/templates/bordll.mpt b/ACE/bin/MakeProjectCreator/templates/bordll.mpt new file mode 100644 index 00000000000..c6ff3fc925f --- /dev/null +++ b/ACE/bin/MakeProjectCreator/templates/bordll.mpt @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +conditional_include "common" + +type_is_binary = 1 +type_is_dynamic = 1 +common_defines = WIN32 diff --git a/ACE/bin/MakeProjectCreator/templates/borexe.mpt b/ACE/bin/MakeProjectCreator/templates/borexe.mpt new file mode 100644 index 00000000000..da49b919bc7 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/templates/borexe.mpt @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +conditional_include "common" + +type_is_binary = 1 +common_defines = WIN32 diff --git a/ACE/bin/MakeProjectCreator/templates/gnu.mpd b/ACE/bin/MakeProjectCreator/templates/gnu.mpd new file mode 100644 index 00000000000..d0bd4627816 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/templates/gnu.mpd @@ -0,0 +1,644 @@ +# -*- Makefile -*- +#---------------------------------------------------------------------------- +# GNU Makefile +# +# @file <%project_file%> +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- +<%marker(top)%> +MAKEFILE = <%project_file%> +DEPENDENCY_FILE = .depend.<%project_name%> +<%if(exename)%> +BIN_UNCHECKED = <%if(targetoutdir)%><%targetoutdir%><%endif%><%exename%> +<%endif%> +<%if(staticname)%> + +## LIB may be set to empty later on in this file +LIB_UNCHECKED = <%if(targetoutdir)%><%targetoutdir%><%endif%>lib<%libname_prefix%><%staticname%>.a +LIB = $(LIB_UNCHECKED) +LIB_NAME = <%if(targetoutdir)%><%targetoutdir%><%endif%>lib<%libname_prefix%><%staticname%> +<%if(!sharedname)%> +static_libs_only = 1 +<%endif%> +<%endif%> +<%if(sharedname)%> + +## SHLIB may be set to empty later on in this file +SHLIB_UNCHECKED = <%if(targetoutdir)%><%targetoutdir%><%endif%>lib<%libname_prefix%><%sharedname%>.$(SOEXT) +SHLIB = $(SHLIB_UNCHECKED) +<%endif%> +<%if(tao || ciao)%> + +TAO_ROOT ?= $(ACE_ROOT)/TAO +<%if(ciao)%> +CIAO_ROOT ?= $(TAO_ROOT)/CIAO +<%endif%> +<%endif%> + +<%if(grouped_source_files)%> +<%foreach(grouped_source_files)%> +<%grouped_source_file%> = \ +<%foreach(grouped_source_file->files)%> + <%grouped_source_file->file%><%fornotlast(" \\")%> +<%endfor%> + +<%endfor%> +FILES += \ +<%foreach(grouped_source_files)%> + $(<%grouped_source_file%>)<%fornotlast(" \\")%> +<%endfor%> + +<%else%> +FILES = \ +<%foreach(source_files)%> + <%source_file%><%fornotlast(" \\")%> +<%endfor%> + +<%endif%> +<%vpath%> +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +<%marker(macros)%> +<%if(xerceslib)%> +XERCESLIB ?= <%xerceslib%> +<%endif%> +<%if(exename)%> +LDLIBS =<%foreach(libs)%> -l<%libname_prefix%><%lib%><%endfor%><%foreach(lit_libs)%> -l<%lit_lib%><%endfor%><%foreach(pure_libs)%> <%pure_lib%><%endfor%> +<%else%> +<%if(sharedname)%> +ACE_SHLIBS =<%foreach(libs)%> -l<%libname_prefix%><%lib%><%endfor%><%foreach(lit_libs)%> -l<%lit_lib%><%endfor%><%foreach(pure_libs)%> <%pure_lib%><%endfor%> +<%endif%> +<%endif%> +<%if(tao_idl)%> +TAO_IDL = <%tao_idl%> +<%endif%> +<%if(tao_idl_dep)%> +TAO_IDL_DEP = <%tao_idl_dep%>$(EXEEXT) +<%endif%> +<%if(tao_idlflags)%> +TAO_IDLFLAGS = <%tao_idlflags%> +<%endif%> +<%if(cidlc)%> +CIDLC = <%cidlc%> +<%endif%> +<%if(cidlc_dep)%> +CIDLC_DEP = <%cidlc_dep%>$(EXEEXT) +<%endif%> +<%if(cidlc_flags)%> +CIDLC_FLAGS = <%cidlc_flags%> +<%endif%> +<%if(tao_idl3_to_idl2)%> +TAO_IDL3_TO_IDL2 = <%tao_idl3_to_idl2%> +<%endif%> +<%if(tao_idl3_to_idl2_dep)%> +TAO_IDL3_TO_IDL2_DEP = <%tao_idl3_to_idl2_dep%>$(EXEEXT) +<%endif%> + +<%if(exename)%> +PRJ_TYPE = rtp +<%else%> +PRJ_TYPE = library +<%endif%> + +<%if(exename)%> +<%if(install)%> +INSBIN ?= <%install%> +<%endif%> +ifeq ($(INSBIN),.) + ifeq ($(PWD),) + PWD=$(shell pwd) + endif + INSBIN = $(PWD) +endif +<%if(targetoutdir)%> +ifneq ($(INSBIN),) +OUTPUT_DIRECTORY = $(INSBIN)/<%targetoutdir%> +else +<%endif%> +OUTPUT_DIRECTORY = $(INSBIN) +<%if(targetoutdir)%> +endif +<%endif%> +<%else%> +<%if(dllout || libout)%> +INSLIB ?= <%if(dllout)%><%dllout%><%else%><%libout%><%endif%> +<%endif%> +ifeq ($(INSLIB),.) + ifeq ($(PWD),) + PWD=$(shell pwd) + endif + INSLIB = $(PWD) +endif +OUTPUT_DIRECTORY = $(INSLIB)<%if(targetoutdir)%>/<%targetoutdir%><%endif%> +<%endif%> + +<%if(targetoutdir)%> +VDIR = <%targetoutdir%>.obj/ +VSHDIR = <%targetoutdir%>.shobj/ + +<%endif%> +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +## We don't need the ACELIB setting from wrapper_macros.GNU +ACELIB = +<%if(tao)%> +tao_dont_use_idl_make_rule = 1 +include $(TAO_ROOT)/rules.tao.GNU +<%endif%> +<%if(ciao)%> +include $(CIAO_ROOT)/rules.ciao.GNU +<%endif%> +<%if(version)%> + +ifeq ($(versioned_so),1) +SOVERSION = .<%version%> +endif +<%endif%> + +<%if(resource_files)%> +ifneq (,$(RC)) +RESOURCES += \ +<%foreach(resource_files)%> + <%resource_file%><%fornotlast(" \\")%> +<%endfor%> +<%if(includes)%> + +RCFLAGS = \ +<%foreach(includes)%> + --include-dir=<%include%><%fornotlast(" \\")%> +<%endfor%> +<%endif%> +endif + +<%endif%> +# To build multiple targets in the same directory on AIX, it works +# best to have a template directory per project. +# The compiler/linker isn't too smart about instantiating templates... +ifdef TEMPINCDIR +TEMPINCDIR := $(TEMPINCDIR)/<%project_name%> +all: $(TEMPINCDIR) +endif + +ifneq ($(OUTPUT_DIRECTORY),) +all: $(OUTPUT_DIRECTORY) +$(OUTPUT_DIRECTORY): + -@$(MKDIR) "$(OUTPUT_DIRECTORY)" +endif + +<%if(sharedname || staticname || exename)%> +<%if(libs && libpaths)%> +# turn off libcheck if doing a dry run +ifeq ($(findstring n, $(MAKEFLAGS)),n) + LIBCHECK = 1 +else + # turn off libcheck if keep going was passed too + ifeq ($(findstring k, $(MAKEFLAGS)),k) + LIBCHECK = 1 + else + LIBCHECK ?= $(filter-out $(foreach lib,<%foreach(libs)%><%libname_prefix%><%lib%><%fornotlast(" ")%><%endfor%>,$(findstring $(lib),$(foreach libpath,<%libpaths%> /usr/lib $(INSLIB),$(wildcard $(libpath)/lib$(lib).* $(libpath)/$(lib).lib)))),<%foreach(libs)%><%libname_prefix%><%lib%><%fornotlast(" ")%><%endfor%>) + ifeq ($(LIBCHECK),) + LIBCHECK = 1 + endif + endif +endif +<%else%> +LIBCHECK = 1 +<%endif%> +<%else%> +LIBCHECK = 1 +<%endif%> +<%if(!exename)%> +<%foreach(requires)%> +ifeq ($(<%require%>),1) +<%endfor%> +<%foreach(avoids)%> +ifneq ($(<%avoid%>),1) +<%endfor%> +ifneq ($(LIBCHECK), 1) +<%if(staticname)%> + LIB = +<%endif%> +<%if(sharedname)%> + SHLIB = +<%endif%> + all: lib_warning +endif +<%foreach(avoids)%> +else +<%if(staticname)%> + LIB = +<%endif%> +<%if(sharedname)%> + SHLIB = +<%endif%> + all: avoid_warning +endif +<%endfor%> +<%foreach(requires)%> +else +<%if(staticname)%> + LIB = +<%endif%> +<%if(sharedname)%> + SHLIB = +<%endif%> + all: require_warning +endif +<%endfor%> + +<%if(tagname)%> +ifeq (,$(<%tagname%>)) +<%endif%> +<%foreach(requires)%> +ifeq ($(<%require%>),1) +<%endfor%> +<%foreach(avoids)%> +ifneq ($(<%avoid%>),1) +<%endfor%> +<%foreach(avoids)%> +else +<%if(staticname)%> + LIB = +<%endif%> +<%if(sharedname)%> + SHLIB = +<%endif%> + all: avoid_warning +endif +<%endfor%> +<%foreach(requires)%> +else +<%if(staticname)%> + LIB = +<%endif%> +<%if(sharedname)%> + SHLIB = +<%endif%> + all: require_warning +endif +<%endfor%> +<%if(tagname)%> +else +<%foreach(requires)%> +ifeq ($(<%require%>),1) +<%endfor%> +<%foreach(avoids)%> +ifneq ($(<%avoid%>),1) +<%endfor%> +<%foreach(tagchecks)%> + ifeq (<%tagcheck%>, $(findstring <%tagcheck%>, $(<%tagname%>))) +<%endfor%> +<%foreach(tagchecks)%> + else + LIB = + SHLIB = + endif +<%endfor%> +<%foreach(avoids)%> +else + LIB = + SHLIB = + all: avoid_warning +endif +<%endfor%> +<%foreach(requires)%> +else + LIB = + SHLIB = + all: require_warning +endif +<%endfor%> +endif +<%endif%> +<%endif%> +<%if(exename)%> +<%foreach(requires)%> +ifeq ($(<%require%>),1) +<%endfor%> +<%foreach(avoids)%> +ifneq ($(<%avoid%>),1) +<%endfor%> +ifeq ($(LIBCHECK), 1) +BIN = $(BIN_UNCHECKED)$(EXEEXT) +else + all: lib_warning +endif +<%foreach(avoids)%> +else + all: avoid_warning +endif +<%endfor%> +<%foreach(requires)%> +else + all: require_warning +endif +<%endfor%> + +# If it contains ../ at all use notdir. +OBJS = $(foreach var, $(addsuffix .$(OBJEXT), $(basename $(FILES)) $(RESOURCES)), $(if $(findstring ../,$(var)),$(notdir $(var)),$(var))) +SRC = $(FILES) +<%endif%> +<%if(sharedname || staticname)%> +LSRC = $(FILES) +<%endif%> + +<%marker(circuit)%> +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU +<%if(exename)%> + +ifneq ($(OUTPUT_DIRECTORY),) +ifneq ($(OUTPUT_DIRECTORY),.) + INSTALL = $(VBIN:%=$(INSBIN)/%) + CLEANUP_INSTALL += $(CLEANUP_BIN:%=$(INSBIN)/%$(VAR)$(EXEEXT)) +endif +endif + +<%endif%> +<%if(sharedname || staticname)%> +include $(ACE_ROOT)/include/makeinclude/rules.lib.GNU +<%endif%> +<%if(pch_source)%> + +ACE_PCH_SOURCE = <%pch_source%> +ACE_PCH_FILE = <%basename(pch_header)%>.gch + +ifeq ($(pchsupport),1) +<%if(pch_defines)%> +CPPFLAGS +=<%foreach(pch_defines)%> -D<%pch_define%><%endfor%> +<%endif%> + +$(addprefix $(VDIR), $(OBJS)): $(VDIR)$(ACE_PCH_FILE) +$(VSHOBJS): $(VSHDIR)$(ACE_PCH_FILE) +endif + +<%endif%> +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +ifeq ($(VXWORKSLINK),true) +include $(TGT_DIR)/h/make/rules.$(PRJ_TYPE) +endif + +<%foreach(source_files)%> +<%if(flag_overrides(source_file, buildflags))%> +$(VDIR)<%noextension(source_file)%>.$(OBJEXT): <%source_file%> + @$(MKDIR) $(VDIR)<%dirname(source_file)%> + <%if(ends_with(source_file, \.c))%>$(COMPILE.c)<%else%>$(COMPILE.cc)<%endif%> <%flag_overrides(source_file, buildflags)%> $(ACE_USE_PCH_OPT) $(CC_OUTPUT_FLAG) $@ $< + ${MVCMD} + +ifneq ($(VSHDIR), $(VDIR)) +$(VSHDIR)<%noextension(source_file)%>.$(OBJEXT): <%source_file%> + @$(MKDIR) $(VSHDIR)<%dirname(source_file)%> + <%if(ends_with(source_file, \.c))%>$(COMPILE.c)<%else%>$(COMPILE.cc)<%endif%> <%flag_overrides(source_file, buildflags)%> $(ACE_USE_PCH_OPT) $(PIC) $(CC_OUTPUT_FLAG) $@ $< +endif + +<%else%> +<%if(dirname(source_file) && !contains(source_file, \.\./))%> +<%if(starts_with(source_file, \$) || !ends_with(source_file, \.cpp))%> +$(VDIR)<%noextension(source_file)%>.$(OBJEXT): <%source_file%> + @$(MKDIR) $(VDIR)<%dirname(source_file)%> + <%if(ends_with(source_file, \.c))%>$(COMPILE.c)<%else%>$(COMPILE.cc)<%endif%> <%if(flag_overrides(source_file, buildflags))%><%flag_overrides(source_file, buildflags)%> <%endif%>$(ACE_USE_PCH_OPT) $(CC_OUTPUT_FLAG) $@ $< + ${MVCMD} + +ifneq ($(VSHDIR), $(VDIR)) +$(VSHDIR)<%noextension(source_file)%>.$(OBJEXT): <%source_file%> + @$(MKDIR) $(VSHDIR)<%dirname(source_file)%> + <%if(ends_with(source_file, \.c))%>$(COMPILE.c)<%else%>$(COMPILE.cc)<%endif%> <%if(flag_overrides(source_file, buildflags))%><%flag_overrides(source_file, buildflags)%> <%endif%>$(ACE_USE_PCH_OPT) $(PIC) $(CC_OUTPUT_FLAG) $@ $< +endif + +<%endif%> +<%endif%> +<%endif%> +<%endfor%> +<%if(libpaths)%> +ifeq ($(VXWORKSLINK),true) +LDLIBPATH =<%foreach(libpaths)%> -L<%libpath%><%endfor%> +else +LDFLAGS +=<%foreach(libpaths)%> -L<%libpath%><%endfor%> +endif +<%endif%> +<%if(includes)%> +CPPFLAGS +=<%foreach(includes)%> -I<%include%><%endfor%> +<%endif%> +<%if(macros)%> +CPPFLAGS +=<%foreach(macros)%> -D<%macro%><%endfor%> +<%endif%> +<%if(dynamicflags)%> +ifeq ($(shared_libs),1) + ifneq ($(SHLIB),) + CPPFLAGS +=<%foreach(dynamicflags)%> -D<%dynamicflag%><%endfor%> + endif +endif +<%endif%> +<%if(staticflags)%> +ifeq ($(static_libs),1) + CPPFLAGS +=<%foreach(staticflags)%> -D<%staticflag%><%endfor%> +endif +<%endif%> + +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- +<%marker(local)%> +lib_warning: + @echo <%project_name%> will not be built due to the following missing library: + @echo $(LIBCHECK) + +<%if(requires)%> +require_warning: + @echo <%project_name%> will not be built due to one of the following disabled features: + @echo<%foreach(requires)%> <%require%><%endfor%> + +<%endif%> +<%if(avoids)%> +avoid_warning: + @echo <%project_name%> will not be built due to one of the following enabled features: + @echo<%foreach(avoids)%> <%avoid%><%endfor%> + +<%endif%> +<%if(custom_types)%> +## Some OS's have /bin/test others only have /usr/bin/test +ifeq ($(wildcard /bin/test), /bin/test) + TEST_EXE = /bin/test +else +ifeq ($(wildcard /usr/bin/test), /usr/bin/test) + TEST_EXE = /usr/bin/test +endif +endif + +<%foreach(custom_types)%> +<%if(custom_type->libpath)%> +DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):<%custom_type->libpath%> +LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):<%custom_type->libpath%> +SHLIB_PATH := $(SHLIB_PATH):<%custom_type->libpath%> +LIBPATH := $(LIBPATH):<%custom_type->libpath%> +PATH := $(PATH):<%custom_type->libpath%> + +<%endif%> +<%foreach(custom_type->input_files)%> +<%if(custom_type->input_file->output_files)%> +GENERATED_DIRTY +=<%foreach(custom_type->input_file->output_files)%> <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>/<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%><%endfor%> +<%if(custom_type->input_file->non_source_output_files)%> +OBJS_DEPEND_ON_GENERATED = 1 +<%endif%> +<%foreach(custom_type->input_file->output_files)%> +<%if(forlast && !forfirst)%> +## More than one file is generated by the command and therefore +## it can not be run in parallel. Unfortunately, there is no way to +## say that only this rule can't be run in parallel. However, we can +## determine if the generated files have already been generated. If that's +## the case, then we don't need this special rule. +ifeq ($(wildcard $(GENERATED_DIRTY)), $(GENERATED_DIRTY)) + ## If we can find /bin/test, then we will continue + ifneq ($(TEST_EXE),) + ## If all of the generated files are there, then we need to check + ## and make sure that the generated files are up-to-date. If they are not + ## then we need the special rule. + ifneq ($(shell<%foreach(custom_type->input_file->output_files)%> $(TEST_EXE) <%custom_type->input_file%> -nt <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>/<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%> 2> /dev/null &&<%endfor%> echo 0),) + .NOTPARALLEL: +<%if(flag_overrides(custom_type->input_file, dependent))%> + else + ## By this point, all of the generated files are here and up-to-date + ## with respect to the source file. Now we need to make sure that + ## they are up-to-date with respect to the generation tool. If the tool + ## is newer than the generated files, then we need the special rule. + ifneq ($(shell<%foreach(dep, flag_overrides(custom_type->input_file, dependent))%><%foreach(custom_type->input_file->output_files)%> $(TEST_EXE) <%dep%> -nt <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>/<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%> 2> /dev/null &&<%endfor%><%endfor%> echo 0),) + .NOTPARALLEL: + endif +<%else%> +<%if(custom_type->dependent)%> + else + ## By this point, all of the generated files are here and up-to-date + ## with respect to the source file. Now we need to make sure that + ## they are up-to-date with respect to the generation tool. If the tool + ## is newer than the generated files, then we need the special rule. + ifneq ($(shell<%foreach(custom_type->dependent)%><%foreach(custom_type->input_file->output_files)%> $(TEST_EXE) <%custom_type->dependent%> -nt <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>/<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%> 2> /dev/null &&<%endfor%><%endfor%> echo 0),) + .NOTPARALLEL: + endif +<%endif%> +<%endif%> + endif + else + .NOTPARALLEL: + endif +else +.NOTPARALLEL: +endif +<%endif%> +<%endfor%> +<%foreach(custom_type->input_file->output_files)%><%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>/<%basename(custom_type->input_file->output_file)%><%else%><%custom_type->input_file->output_file%><%endif%><%fornotlast(" ")%><%endfor%>: <%custom_type->input_file%><%if(custom_type->input_file->dependencies)%> <%custom_type->input_file->dependencies%><%endif%><%if(flag_overrides(custom_type->input_file, dependent))%> <%flag_overrides(custom_type->input_file, dependent)%><%else%><%if(custom_type->dependent)%> <%custom_type->dependent%><%endif%><%endif%> +<%if(flag_overrides(custom_type->input_file, gendir))%> + $(MKDIR) <%flag_overrides(custom_type->input_file, gendir)%> +<%endif%> + <%if(flag_overrides(custom_type->input_file, command))%><%flag_overrides(custom_type->input_file, command)%><%else%><%custom_type->command%><%endif%> <%if(flag_overrides(custom_type->input_file, commandflags))%><%flag_overrides(custom_type->input_file, commandflags)%><%else%><%custom_type->commandflags%><%endif%><%if(custom_type->output_option)%> <%custom_type->output_option%> $@<%endif%> <%custom_type->input_file%> +<%if(flag_overrides(custom_type->input_file, postcommand))%> +<%foreach(custom_type->input_file)%> + <%flag_overrides(custom_type->input_file, postcommand)%> +<%endfor%> +<%else%> +<%if(custom_type->postcommand)%> +<%foreach(custom_type->input_file)%> + <%custom_type->postcommand%> +<%endfor%> +<%endif%> +<%endif%> +<%if(pch_header)%> +<%if(custom_type->pch_postrule)%> +<%foreach(custom_type->input_file->source_output_files)%> + @echo '#include "<%pch_header%>"' > temp.$$$$ && cat <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>/<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%> >> temp.$$$$ && mv temp.$$$$ <%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>/<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%> +<%endfor%> +<%endif%> +<%endif%> + +<%endif%> +<%endfor%> +<%endfor%> +ifneq ($(GENERATED_DIRTY),) +.PRECIOUS: $(GENERATED_DIRTY) +<%if(source_files)%> +## If the generated files are anything but source files, we need to +## ensure that those files are generated before we attempt to build anything +## else. +ifeq ($(OBJS_DEPEND_ON_GENERATED),1) +$(VDIR)$(ACE_PCH_FILE) $(addprefix $(VDIR), $(OBJS)): $(GENERATED_DIRTY) +$(VSHDIR)$(ACE_PCH_FILE) $(VSHOBJS): $(GENERATED_DIRTY) +endif +<%else%> +<%foreach(requires)%> +ifeq ($(<%require%>),1) +<%endfor%> +<%foreach(avoids)%> +ifneq ($(<%avoid%>),1) +<%endfor%> +all: $(GENERATED_DIRTY) +<%foreach(avoids)%> +endif +<%endfor%> +<%foreach(requires)%> +endif +<%endfor%> +<%endif%> +endif + +<%endif%> +<%if(idl_files)%> +ADDITIONAL_IDL_TARGETS +=<%foreach(idl_files)%> <%if(flag_overrides(idl_file, gendir))%><%flag_overrides(idl_file, gendir)%>/<%basenoextension(idl_file)%>$(IDL_CLIENT_HDR_EXT)<%else%><%noextension(idl_file)%>$(IDL_CLIENT_HDR_EXT)<%endif%><%endfor%> +idl_stubs: $(ADDITIONAL_IDL_TARGETS) +<%if(source_files)%> + +# This assignment forces make to run the idl_stubs +# target before building any of the source files. +FORCED_IDL_STUBS = <%source_files%> +<%foreach(custom_types)%> +<%foreach(custom_type->input_files)%> +<%if(custom_type->input_file->source_output_files)%> +<%foreach(custom_type->input_file->source_output_files)%> +FORCED_IDL_STUBS := $(FORCED_IDL_STUBS:<%if(flag_overrides(custom_type->input_file, gendir))%><%flag_overrides(custom_type->input_file, gendir)%>/<%basename(custom_type->input_file->source_output_file)%><%else%><%custom_type->input_file->source_output_file%><%endif%>=) +<%endfor%> +<%endif%> +<%endfor%> +<%endfor%> + +ifneq ($(FORCED_IDL_STUBS),) +$(FORCED_IDL_STUBS): idl_stubs +endif +<%endif%> +<%endif%> +<%if(exename)%> + +ifneq ($(VXWORKSLINK),true) +<%if(libs && libpaths)%> +ifeq ($(static_libs_only), 1) + ifeq ($(use_dep_libs), 1) + DEPLIBS = $(foreach lib,<%foreach(libs)%> <%libname_prefix%><%lib%><%endfor%> <%lit_libs%>, $(foreach libpath, <%libpaths%>, $(wildcard $(libpath)/lib$(lib).a))) + endif +endif + +<%endif%> +$(BIN): $(addprefix $(VDIR), $(OBJS)) $(DEPLIBS) +ifndef kylix + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) +else + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $(VLDLIBS) $(BORINITEXEOBJ) $(POSTLINK) $^, $@,, +endif +endif +<%endif%> + +realclean: clean +ifneq ($(GENERATED_DIRTY),) + -$(RM) -r $(GENERATED_DIRTY) +endif + +<%if(postbuild)%> +all: __postbuild__ + +__postbuild__: + @<%eval(postbuild)%> + +<%endif%> +<%marker(bottom)%> diff --git a/ACE/bin/MakeProjectCreator/templates/gnudll.mpt b/ACE/bin/MakeProjectCreator/templates/gnudll.mpt new file mode 100644 index 00000000000..c5fa1017803 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/templates/gnudll.mpt @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +conditional_include "common" + +targetoutdir = diff --git a/ACE/bin/MakeProjectCreator/templates/gnuexe.mpt b/ACE/bin/MakeProjectCreator/templates/gnuexe.mpt new file mode 100644 index 00000000000..2b595402d86 --- /dev/null +++ b/ACE/bin/MakeProjectCreator/templates/gnuexe.mpt @@ -0,0 +1,4 @@ +// -*- MPC -*- +// $Id$ + +conditional_include "gnudll" diff --git a/ACE/bin/Makefile.am b/ACE/bin/Makefile.am new file mode 100644 index 00000000000..996040dd287 --- /dev/null +++ b/ACE/bin/Makefile.am @@ -0,0 +1,40 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## /acebuilds/ACE_wrappers-repository/bin/mwc.pl -include /acebuilds/MPC/config -include /acebuilds/MPC/templates -feature_file /acebuilds/ACE_wrappers-repository/local.features -noreldefs -type automake -exclude build,Kokyu + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + +SUBDIRS = \ + . \ + PerlACE + +## Makefile.bin.am + +noinst_SCRIPTS = auto_run_tests.pl ace_tests.lst + +noinst_PROGRAMS = envinfo + +envinfo_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) + +envinfo_SOURCES = \ + envinfo.cpp + +envinfo_LDADD = \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/bin/PerlACE/ConfigList.pm b/ACE/bin/PerlACE/ConfigList.pm new file mode 100644 index 00000000000..74e530b1c94 --- /dev/null +++ b/ACE/bin/PerlACE/ConfigList.pm @@ -0,0 +1,158 @@ +# $Id$ + +package PerlACE::ConfigList; +use strict; +use FileHandle; + +@PerlACE::ConfigList::Configs = (); + +my @new_argv = (); + +for(my $i = 0; $i <= $#ARGV; ++$i) { + if ($ARGV[$i] eq '-Config') { + if (defined $ARGV[$i + 1]) { + push @PerlACE::ConfigList::Configs, $ARGV[++$i]; + } + else { + print STDERR "You must pass a configuration with Config\n"; + exit(1); + } + } + else { + push @new_argv, $ARGV[$i]; + } +} +@ARGV = @new_argv; + + +sub new () +{ + my $self = {}; + @{$self->{MY_CONFIGS}} = @PerlACE::ConfigList::Configs; + bless $self; + return $self; +} + +sub my_config_list +{ + my $self = shift; + if (@_) { @{$self->{MY_CONFIGS}} = @_; } + return @{$self->{MY_CONFIGS}}; +} + +sub add_one_config ($) +{ + my $self = shift; + my $newconfig = shift; + push @{$self->{MY_CONFIGS}}, $newconfig; +} + +sub check_config (@) +{ + my $self = shift; + my @testconfigs = @_; + my $included = 0; + my $excluded = 0; + my $noincludes = 1; + + foreach my $config (@testconfigs) { + if ($config =~ /^\w/) { $noincludes = 0; } + foreach my $myconfig (@{$self->{MY_CONFIGS}}) { + if ($config eq "!$myconfig") { $excluded = 1; } + if ($config eq $myconfig) { $included = 1; } + } + } + return ($included || $noincludes) && !$excluded; +} + +sub load ($) +{ + my $self = shift; + my $filename = shift; + + my $fh = new FileHandle; + if (!$fh->open ("< $filename")) { + print STDERR "Could not open $filename: $!\n"; + exit (1); + } + + while (<$fh>) { + chomp; + if (/^\s*$/ || /^#/) { + next; + } + # compress white space + s/\s+/ /g; + + my $entry = ''; + my $configs = ''; + + ($entry, $configs) = split /:/; + + # remove trailing white spaces + $entry =~ s/\s+$//; + + push @{$self->{ENTRIES}}, $entry; + if (defined $configs) { + @{$self->{CONFIGS}->{$entry}} = split (" ", $configs); + } + } + + $fh->close (); +} + +sub valid_entries () +{ + my $self = shift; + my @entries = (); + + foreach my $entry (@{$self->{ENTRIES}}) { + if ($self->check_config (@{$self->{CONFIGS}->{$entry}})) { + push @entries, $entry; + } + } + return @entries; +} + +sub list_configs () +{ + my $self = shift; + my %allconfigs = {}; + my $list = ''; + + foreach my $entry (@{$self->{ENTRIES}}) { + + foreach my $config (@{$self->{CONFIGS}->{$entry}}) { + $config =~ s/!//g; + if ($allconfigs{$config} != 1) { + $list .= $config.' '; + $allconfigs{$config} = 1; + } + } + } + + return $list; +} + +sub dump () +{ + my $self = shift; + + print "============================================================\n"; + print "Config\n"; + foreach my $config (@{$self->{MY_CONFIGS}}) { + print $config, "\n"; + } + print "\n"; + print "Entries\n"; + foreach my $entry (@{$self->{ENTRIES}}) { + print "- ", $entry, ": "; + foreach my $config (@{$self->{CONFIGS}->{$entry}}) { + print $config, " "; + } + print "\n"; + } + print "============================================================\n"; +} + +1; diff --git a/ACE/bin/PerlACE/MSProject.pm b/ACE/bin/PerlACE/MSProject.pm new file mode 100644 index 00000000000..86e6548456a --- /dev/null +++ b/ACE/bin/PerlACE/MSProject.pm @@ -0,0 +1,393 @@ +# $Id$ + +package PerlACE::MSProject; + +use strict; +use FileHandle; + +############################################################################### + +# Constructor + +sub new +{ + my $proto = shift; + my $class = ref ($proto) || $proto; + my $self = {}; + + $self->{FILENAME} = shift; + $self->{VERSION} = undef; + $self->{NAME} = undef; + %{$self->{CONFIGS}} = (); + + bless ($self, $class); + return $self; +} + +############################################################################### + +# Accessors + +sub Filename +{ + my $self = shift; + + if (@_ != 0) { + $self->{FILENAME} = shift; + } + + return $self->{FILENAME}; +} + +sub Version () +{ + my $self = shift; + return $self->{VERSION}; +} + +sub Name () +{ + my $self = shift; + return $self->{NAME}; +} + +sub Configs () +{ + my $self = shift; + return keys %{$self->{CONFIGS}}; +} + +sub DepOutputFile ($) +{ + my $self = shift; + my $config = shift; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + my $name = $self->OutputFile ($config); + + if ($name =~ m/\.dll$/) { + $name = $self->LibraryFile ($config); + } + + $name =~ s/.*\\//; # / <- For devenv + $name =~ s/.*\///; + + return $name; +} + +sub OutputFile ($) +{ + my $self = shift; + my $config = shift; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + if (%{$self->{CONFIGS}}->{$config}->{LINK} =~ m/out\:\"([^\"]*)\"/) { + return $1; + } + elsif (defined $self->Name ()) { + my $filename = $self->Filename; + my $ext = ""; + + if (%{$self->{CONFIGS}}->{$config}->{LINK} =~ m/\/dll/) { + $ext = ".dll"; + } + elsif (%{$self->{CONFIGS}}->{$config}->{LINK} =~ m/\/subsystem\:/) { + $ext = ".exe"; + } + else { + $ext = ".lib"; + } + + $filename =~ s/\.[^\.]*$/$ext/; + return $filename; + } +} + + +sub LibraryFile ($) +{ + my $self = shift; + my $config = shift; + my $dll = undef; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + if ($self->OutputFile ($config) =~ m/([^\/\\]*)\.dll$/i) { + $dll = $1; + } + + if (defined $dll) { + if (%{$self->{CONFIGS}}->{$config}->{LINK} =~ m/implib\:\"([^\"]*)\"/i) { + return $1; + } + else { + $dll =~ s/.*\\//ig; # / <- Just here to fix color coding in devenv beta + return $self->OutputDir ($config). $dll . ".lib"; + } + } +} + +sub OutputDir ($) +{ + my $self = shift; + my $config = shift; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + return %{$self->{CONFIGS}}->{$config}->{OUTPUTDIR}; +} + +sub IntermidiateDir ($) +{ + my $self = shift; + my $config = shift; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + return %{$self->{CONFIGS}}->{$config}->{INTERMEDIATEDIR}; +} + +sub TargetDir ($) +{ + my $self = shift; + my $config = shift; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + return %{$self->{CONFIGS}}->{$config}->{TARGETDIR}; +} + +sub CPPOptions ($) +{ + my $self = shift; + my $config = shift; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + return %{$self->{CONFIGS}}->{$config}->{CPP}; +} + +sub LINKOptions ($) +{ + my $self = shift; + my $config = shift; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + return %{$self->{CONFIGS}}->{$config}->{LINK}; +} + +sub Libs($) +{ + my $self = shift; + my $config = shift; + + if (!defined $config) { + print STDERR "Error: No configuration specified\n"; + return; + } + + return %{$self->{CONFIGS}}->{$config}->{LIBS}; +} + +sub UsesTAOIDL () +{ + my $self = shift; + + return $self->{TAOIDL}; +} + +sub Compiler () +{ + my $self = shift; + + return $self->{COMPILER}; +} + +############################################################################### + +# Big methods + +sub Load () +{ + my $self = shift; + my $config = "Unknown"; + + $self->{valid} = 0; + + my $fh = new FileHandle; + + unless ($fh->open ("<" . $self->{FILENAME})) { + print "Could not open file ", $self->{FILENAME}, ": ", $_; + return; + } + + while (<$fh>) { + if (m/^\#.*Project File - Name=\"([^\"]*)\"/) { + $self->{NAME} = $1; + } + + if (m/^\#.*Format Version (.*)/) { + $self->{VERSION} = $1; + } + + # Check for configurations + + if (m/^\!.*IF \"\$\(CFG\)\" == \".* - (.*)$\"/) { + $config = $1; + } + elsif (m/^\!ENDIF$/) { + $config = ""; + } + + # Check for directories + + if (m/\# PROP Output_Dir \"(.*)\"/) { + %{$self->{CONFIGS}}->{$config}->{OUTPUTDIR} = $1; + } + elsif (m/\# PROP Intermediate_Dir \"(.*)\"/) { + %{$self->{CONFIGS}}->{$config}->{INTERMEDIATEDIR} = $1; + } + elsif (m/\# PROP Target_Dir \"(.*)\"/) { + %{$self->{CONFIGS}}->{$config}->{TARGETDIR} = $1; + } + + # Look at CPP options + + if (m/\# ADD BASE CPP(.*)$/ || m/\# ADD CPP(.*)$/) { + my @flags = split (/ \//, $1); + + foreach my $flag (@flags) { + if ($flag && %{$self->{CONFIGS}}->{$config}->{CPP} !~ m/$flag/) { + %{$self->{CONFIGS}}->{$config}->{CPP} .= " /$flag"; + } + } + } + elsif (m/\# SUBTRACT CPP(.*)$/ || m/\# SUBTRACT BASE CPP(.*)$/) { + my @flags = split (/ \//, $1); + + foreach my $flag (@flags) { + if ($flag && %{$self->{CONFIGS}}->{$config}->{CPP} =~ m/$flag/) { + %{$self->{CONFIGS}}->{$config}->{CPP} =~ s/ \/$flag//g; + } + } + } + + # Look at LINK32 options + + if (m/\# ADD BASE LINK32(.*)$/ || m/\# ADD LINK32(.*)$/ + || m/\# ADD BASE LIB32(.*)$/ || m/\# ADD LIB32(.*)$/) { + my @flags = split (/ \//, $1); + + foreach my $flag (@flags) { + my $found = 0; + my @libs = split (/ /, $flag); + + foreach my $lib (@libs) { + if ($lib =~ m/\.lib$/) { + if (%{$self->{CONFIGS}}->{$config}->{LIBS} !~ m/\Q$lib\E/) { + %{$self->{CONFIGS}}->{$config}->{LIBS} .= " $lib"; + } + $found = 1; + } + } + + if (!$found && $flag) { + my $shortflag = $flag; + if ($flag =~ m/^(.*)\:/) { + $shortflag = $1; + } + + if (%{$self->{CONFIGS}}->{$config}->{LINK} !~ m/ \/$shortflag/) { + %{$self->{CONFIGS}}->{$config}->{LINK} .= " /$flag"; + } + } + } + } + elsif (m/\# SUBTRACT BASE LINK32(.*)$/ || m/\# SUBTRACT LINK32(.*)$/ + || m/\# SUBTRACT BASE LIB32(.*)$/ || m/\# SUBTRACT LIB32(.*)$/) { + my @flags = split (/ \//, $1); + + foreach my $flag (@flags) { + my $shortflag = $flag; + if ($flag =~ m/^(.*)\:/) { + $shortflag = $1; + } + + if ($flag && %{$self->{CONFIGS}}->{$config}->{LINK} =~ m/ (\/$shortflag\:[^ ]*)/) { + %{$self->{CONFIGS}}->{$config}->{LINK} =~ s/ \Q$1\E//ig; + } + } + } + + if (m/^\# Name \".* - (.*)\"/ && defined %{$self->{CONFIGS}}->{"Unknown"}) { + %{$self->{CONFIGS}}->{$1} = %{$self->{CONFIGS}}->{"Unknown"}; + delete %{$self->{CONFIGS}}->{"Unknown"}; + } + + if (m/tao\_idl/ && m/\$\(InputName\)\.idl/ || m/tao\_idl/ && m/\$\(InputPath\)/) { + $self->{TAOIDL} = 1; + } + } + $fh->close (); + $self->{valid} = 1; +} + +############################################################################### + +# Build functions + +sub Build ($) +{ + my $self = shift; + my ($config) = @_; + + my $command = $self->Compiler () . " " . $self->Filename () + . " /USEENV" + . " /MAKE \"" . $self->Name () + . " - " . $config . "\""; + + system $command; +} + +sub Clean ($) +{ + my $self = shift; + my ($config) = @_; + + my $command = $self->Compiler () . " " . $self->Filename () + . " /USEENV" + . " /MAKE \"" . $self->Name () + . " - " . $config . "\" /CLEAN"; + + system $command; +} + + +1;
\ No newline at end of file diff --git a/ACE/bin/PerlACE/MSProject/DSP.pm b/ACE/bin/PerlACE/MSProject/DSP.pm new file mode 100644 index 00000000000..b7ca0276a82 --- /dev/null +++ b/ACE/bin/PerlACE/MSProject/DSP.pm @@ -0,0 +1,28 @@ +# $Id$ + +package PerlACE::MSProject::DSP; + +use strict; +use PerlACE::MSProject; + +our @ISA = ("PerlACE::MSProject"); + +############################################################################### + +# Constructor + +sub new +{ + my $proto = shift; + my $class = ref ($proto) || $proto; + my $self = $class->SUPER::new (@_); + + $self->{COMPILER} = "msdev.com"; + + bless ($self, $class); + return $self; +} + +############################################################################### + +1;
\ No newline at end of file diff --git a/ACE/bin/PerlACE/MSProject/VCP.pm b/ACE/bin/PerlACE/MSProject/VCP.pm new file mode 100644 index 00000000000..8377d22788b --- /dev/null +++ b/ACE/bin/PerlACE/MSProject/VCP.pm @@ -0,0 +1,30 @@ +# $Id$ + +package PerlACE::MSProject::VCP; + +use strict; +use PerlACE::MSProject; + +our @ISA = ("PerlACE::MSProject"); + +############################################################################### + +# Constructor + +sub new +{ + my $proto = shift; + my $class = ref ($proto) || $proto; + my $self = $class->SUPER::new (@_); + + $self->{COMPILER} = "evc.com"; + + bless ($self, $class); + return $self; +} + +############################################################################### + +# Accessors + +1;
\ No newline at end of file diff --git a/ACE/bin/PerlACE/Makefile.am b/ACE/bin/PerlACE/Makefile.am new file mode 100644 index 00000000000..d02bf527aa5 --- /dev/null +++ b/ACE/bin/PerlACE/Makefile.am @@ -0,0 +1,23 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## /acebuilds/ACE_wrappers-repository/bin/mwc.pl -include /acebuilds/MPC/config -include /acebuilds/MPC/templates -feature_file /acebuilds/ACE_wrappers-repository/local.features -noreldefs -type automake -exclude build,Kokyu + + +## Makefile.PerlACE.am + +noinst_SCRIPTS = ConfigList.pm Process.pm Process_Unix.pm Process_Win32.pm Run_Test.pm + + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/bin/PerlACE/Process.pm b/ACE/bin/PerlACE/Process.pm new file mode 100644 index 00000000000..130df8166c5 --- /dev/null +++ b/ACE/bin/PerlACE/Process.pm @@ -0,0 +1,65 @@ +# $Id$ + +package PerlACE::Process; + +use strict; +use English; +use POSIX qw(:time_h); + +$PerlACE::Process::ExeSubDir = './'; + +sub delay_factor { + my($lps) = 128; + my($factor) = 1; + + ## Keep increasing the loops per second until the amount of time + ## exceeds the number of clocks per second. The original code + ## did not multiply $ticks by 8 but, for faster machines, it doesn't + ## seem to return false values. The multiplication is done to minimize + ## the amount of time it takes to determine the correct factor. + while(($lps <<= 1)) { + my($ticks) = clock(); + for(my $i = $lps; $i >= 0; $i--) { + } + $ticks = clock() - $ticks; + if ($ticks * 8 >= CLOCKS_PER_SEC) { + $factor = 500000 / (($lps / $ticks) * CLOCKS_PER_SEC); + last; + } + } + + return $factor; +} + +### Check for -ExeSubDir commands, store the last one +my @new_argv = (); + +for(my $i = 0; $i <= $#ARGV; ++$i) { + if ($ARGV[$i] eq '-ExeSubDir') { + if (defined $ARGV[$i + 1]) { + $PerlACE::Process::ExeSubDir = $ARGV[++$i].'/'; + } + else { + print STDERR "You must pass a directory with ExeSubDir\n"; + exit(1); + } + } + else { + push @new_argv, $ARGV[$i]; + } +} +@ARGV = @new_argv; + +$PerlACE::Process::WAIT_DELAY_FACTOR = $ENV{"ACE_RUNTEST_DELAY"}; + +if ($OSNAME eq "MSWin32") { + require PerlACE::Process_Win32; +} +elsif ($OSNAME eq "VMS") { + require PerlACE::Process_VMS; +} +else { + require PerlACE::Process_Unix; +} + +1; diff --git a/ACE/bin/PerlACE/ProcessVX.pm b/ACE/bin/PerlACE/ProcessVX.pm new file mode 100644 index 00000000000..f92b5140d1c --- /dev/null +++ b/ACE/bin/PerlACE/ProcessVX.pm @@ -0,0 +1,63 @@ +# $Id$ + +package PerlACE::ProcessVX; + +use strict; +use English; +use POSIX qw(:time_h); + +$PerlACE::ProcessVX::ExeSubDir = './'; + +sub delay_factor { + my($lps) = 128; + my($factor) = 1; + + ## Keep increasing the loops per second until the amount of time + ## exceeds the number of clocks per second. The original code + ## did not multiply $ticks by 8 but, for faster machines, it doesn't + ## seem to return false values. The multiplication is done to minimize + ## the amount of time it takes to determine the correct factor. + while(($lps <<= 1)) { + my($ticks) = clock(); + for(my $i = $lps; $i >= 0; $i--) { + } + $ticks = clock() - $ticks; + if ($ticks * 8 >= CLOCKS_PER_SEC) { + $factor = 500000 / (($lps / $ticks) * CLOCKS_PER_SEC); + last; + } + } + + return $factor; +} + +### Check for -ExeSubDir commands, store the last one +my @new_argv = (); + +for(my $i = 0; $i <= $#ARGV; ++$i) { + if ($ARGV[$i] eq '-ExeSubDir') { + if (defined $ARGV[$i + 1]) { + $PerlACE::ProcessVX::ExeSubDir = $ARGV[++$i].'/'; + } + else { + print STDERR "You must pass a directory with ExeSubDir\n"; + exit(1); + } + } + else { + push @new_argv, $ARGV[$i]; + } +} +@ARGV = @new_argv; + +$PerlACE::ProcessVX::WAIT_DELAY_FACTOR = $ENV{"ACE_RUNTEST_DELAY"}; + +if ($OSNAME eq "MSWin32") { + require PerlACE::ProcessVX_Win32; +} +else { + # PerlACE::ProcessVX not supported on Unix yet! + ## require PerlACE::Process_Unix; +} + +1; diff --git a/ACE/bin/PerlACE/ProcessVX_Win32.pm b/ACE/bin/PerlACE/ProcessVX_Win32.pm new file mode 100644 index 00000000000..09e4d710aed --- /dev/null +++ b/ACE/bin/PerlACE/ProcessVX_Win32.pm @@ -0,0 +1,421 @@ +# $Id$ + +package PerlACE::ProcessVX; + +use strict; +use Win32::Process; +use File::Basename; +use File::Spec; +use FileHandle; +use Cwd; + +############################################################################### + +# This is what GetExitCode will return if the process is still running. +my $STILL_ACTIVE = 259; + +my $set_vx_defgw = 1; +my $do_vx_init = (defined $ENV{"ACE_RUN_VX_NO_INITIAL_REBOOT"}) ? 0 : 1; + +############################################################################### + +### Constructor and Destructor + +sub new +{ + my $proto = shift; + my $class = ref ($proto) || $proto; + my $self = {}; + + $self->{RUNNING} = 0; + $self->{IGNOREEXESUBDIR} = 1; + $self->{PROCESS} = undef; + $self->{EXECUTABLE} = shift; + $self->{ARGUMENTS} = shift; + if (!defined $PerlACE::ProcessVX::WAIT_DELAY_FACTOR) { + $PerlACE::ProcessVX::WAIT_DELAY_FACTOR = 3; + } + $self->{WINDSH} = $ENV{"ACE_RUN_WINDSH"}; + if (!defined $self->{WINDSH}) { + $self->{WINDSH} = $ENV{"WIND_BASE"} . "\\host\\" . $ENV{"WIND_HOST_TYPE"} . "\\bin\\windsh.exe"; + } + $self->{REBOOT_CMD} = $ENV{"ACE_RUN_VX_REBOOT_CMD"}; + if (!defined $self->{REBOOT_CMD}) { + $self->{REBOOT_CMD} = "reboot"; + } + $self->{REBOOT_TIME} = $ENV{"ACE_RUN_VX_REBOOT_TIME"}; + if (!defined $self->{REBOOT_TIME}) { + $self->{REBOOT_TIME} = 90; + } + + bless ($self, $class); + return $self; +} + +sub DESTROY +{ + my $self = shift; + + if ($self->{RUNNING} == 1) { + print STDERR "ERROR: <", $self->{EXECUTABLE}, + "> still running upon object destruction\n"; + $self->Kill (); + } + + if (!defined $ENV{'ACE_TEST_VERBOSE'}) { + unlink "run_test.vxs"; + } +} + +############################################################################### + +### Some Accessors + +sub Normalize_Executable_Name +{ + my $executable = shift; + + my $basename = basename ($executable); + my $dirname = dirname ($executable). '/'; + + $executable = $dirname.$PerlACE::ProcessVX::ExeSubDir.$basename.".out"; + + ## Installed executables do not conform to the ExeSubDir + if (! -e $executable && -e $dirname.$basename.'.out') { + $executable = $dirname.$basename.'.out'; + } + + $executable =~ s/\//\\/g; # / <- # color coding issue in devenv + + return $executable; +} + + +sub Executable +{ + my $self = shift; + + if (@_ != 0) { + $self->{EXECUTABLE} = shift; + } + + my $executable = $self->{EXECUTABLE}; + + if ($self->{IGNOREEXESUBDIR} == 0) { + $executable = PerlACE::ProcessVX::Normalize_Executable_Name ($executable); + } + else { + $executable = $executable.".out"; + $executable =~ s/\//\\/g; # / <- # color coding issue in devenv + } + + return $executable; +} + +sub Arguments +{ + my $self = shift; + + if (@_ != 0) { + $self->{ARGUMENTS} = shift; + } + + return $self->{ARGUMENTS}; +} + +sub CommandLine () +{ + my $self = shift; + + my $commandline = $self->Executable (); + + if (defined $self->{ARGUMENTS}) { + $commandline .= ' '.$self->{ARGUMENTS}; + } + + return $commandline; +} + +sub IgnoreExeSubDir +{ + my $self = shift; + + if (@_ != 0) { + $self->{IGNOREEXESUBDIR} = shift; + } + + return $self->{IGNOREEXESUBDIR}; +} + +############################################################################### + +### Spawning processes + + +# Spawn the process and continue. + +sub Spawn () +{ + my $self = shift; + + if ($self->{RUNNING} == 1) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> already running\n"; + return -1; + } + + if (!defined $self->{EXECUTABLE}) { + print STDERR "ERROR: Cannot Spawn: No executable specified\n"; + return -1; + } + + if (!-x $self->{WINDSH}) { + print STDERR "ERROR: Cannot Spawn: <", $self->{WINDSH}, + "> not executable\n"; + return -1; + } + + if ($self->{IGNOREEXESUBDIR} == 0) { + if (!-f $self->Executable ()) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> not found\n"; + return -1; + } + } + + my $status = 0; + + my $cmdline; + ## + ## initialize VxWorks kernel (reboot!) if needed + if ($do_vx_init || $ENV{'ACE_RUN_VX_TGT_REBOOT'}) { + if (defined $ENV{'ACE_RUN_VX_REBOOT_TOOL'}) { + if (defined $ENV{'ACE_TEST_VERBOSE'}) { + print "Calling: $ENV{'ACE_RUN_VX_REBOOT_TOOL'}\n"; + } + system ($ENV{'ACE_RUN_VX_REBOOT_TOOL'}); + } + else { + $cmdline = $self->{WINDSH} . " -e \"shParse {" . $self->{REBOOT_CMD} . "}\" " . $ENV{'ACE_RUN_VX_TGTSVR'}; + if (defined $ENV{'ACE_TEST_VERBOSE'}) { + print $cmdline . "\n"; + } + ## reboot VxWorks kernel to cleanup + Win32::Process::Create ($self->{PROCESS}, + $self->{WINDSH}, + $cmdline, + 0, + 0, + '.'); + if (defined $ENV{'ACE_TEST_VERBOSE'}) { + print "Spawned: " . $cmdline . "\n"; + } + Win32::Process::GetExitCode ($self->{PROCESS}, $status); + if ($status != $STILL_ACTIVE) { + print STDERR "ERROR: Spawn failed for <", $self->{WINDSH}, ">\n"; + exit $status; + } + if (defined $ENV{'ACE_TEST_VERBOSE'}) { + print "Status: $status\n"; + } + $self->{RUNNING} = 1; + $status = $self->TimedWait (3); + if (defined $ENV{'ACE_TEST_VERBOSE'}) { + print "TimedWait Status: $status\n"; + } + if ($status == -1) { + $self->Kill (); + # Don't need to Wait since we are on Win32 + } + $self->{RUNNING} = 0; + $self->{PROCESS} = undef; + } + $set_vx_defgw = 1; + $do_vx_init = 0; + + sleep($self->{REBOOT_TIME}); + } + + my $program = $self->Executable (); + my $cwdrel = dirname ($program); + if (length ($cwdrel) > 0) { + $cwdrel = File::Spec->abs2rel( cwd(), $ENV{"ACE_ROOT"} ); + } + else { + $cwdrel = File::Spec->abs2rel( $cwdrel, $ENV{"ACE_ROOT"} ); + } + $cwdrel =~ s/\\/\//g; + $program = basename($program, ".out"); + + unlink "run_test.vxs"; + my $oh = new FileHandle(); + if (!open($oh, ">run_test.vxs")) { + print STDERR "ERROR: Unable to write to run_test.vxs\n"; + exit -1; + } + + if ( defined $ENV{"ACE_RUN_VX_TGTSVR_DEFGW"} && $set_vx_defgw ) { + print $oh "\n" . + "mRouteAdd(\"0.0.0.0\", \"" . $ENV{"ACE_RUN_VX_TGTSVR_DEFGW"} . "\", 0,0,0)\n"; + $set_vx_defgw = 0; + } + + print $oh "\n" . + "cd \"" . $ENV{"ACE_ROOT"} . "/" . $cwdrel . "\"\n" . + "\@cd \"" . $ENV{"ACE_RUN_VX_TGTSVR_ROOT"} . "/" . $cwdrel . "\"\n" . + "putenv(\"TMPDIR=" . $ENV{"ACE_RUN_VX_TGTSVR_ROOT"} . "/" . $cwdrel . "\")\n"; + + if (defined $ENV{'ACE_RUN_VX_CHECK_RESOURCES'}) { + print $oh "memShow();\n"; + } + + my $length = length ($program) + 2; + my $arguments = ""; + if (defined $self->{ARGUMENTS}) { + ($arguments = $self->{ARGUMENTS})=~ s/\"/\\\"/g; + $arguments = ",\"" . $arguments . "\""; + } + print $oh "write(2, \"\\n$program\\n\", $length);\n" . + "ld 1,0,\"" . $program . ".out\"\n" . + "ace_vx_rc = vx_execae(ace_main" . $arguments . ")\n" . + "unld \"" . $program . ".out\"\n" . + "exit(ace_vx_rc)\n"; + + close($oh); + + my $executable = $self->{WINDSH}; + if (defined $ENV{'ACE_TEST_VERBOSE'}) { + $cmdline = $self->{WINDSH} . " -s run_test.vxs " . $ENV{"ACE_RUN_VX_TGTSVR"}; + print "$executable $cmdline\n"; + } + else { + $cmdline = $self->{WINDSH} . " -q -s run_test.vxs " . $ENV{"ACE_RUN_VX_TGTSVR"}; + + } + Win32::Process::Create ($self->{PROCESS}, + $executable, + $cmdline, + 0, + 0, + '.'); + + Win32::Process::GetExitCode ($self->{PROCESS}, $status); + + if ($status != $STILL_ACTIVE) { + print STDERR "ERROR: Spawn failed for <", $cmdline, ">\n"; + exit $status; + } + + $self->{RUNNING} = 1; + return 0; +} + + +# Wait for the process to exit or kill after a time period + +sub WaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + my $status = $self->TimedWait ($timeout); + + if ($status == -1) { + print STDERR "ERROR: $self->{EXECUTABLE} timedout\n"; + $self->Kill (); + # Don't need to Wait since we are on Win32 + + $do_vx_init = 1; # force reboot on next run + } + + $self->{RUNNING} = 0; + + return $status; +} + + +# Do a Spawn and immediately WaitKill + +sub SpawnWaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + if ($self->Spawn () == -1) { + return -1; + } + + return $self->WaitKill ($timeout); +} + + +# Kill the process + +sub Kill () +{ + my $self = shift; + + if ($self->{RUNNING}) { + Win32::Process::Kill ($self->{PROCESS}, -1); + } + + $self->{RUNNING} = 0; +} + + +# Terminate the process and wait for it to finish + +sub TerminateWaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + if ($self->{RUNNING}) { + print STDERR "INFO: $self->{EXECUTABLE} being killed.\n"; + Win32::Process::Kill ($self->{PROCESS}, 0); + $do_vx_init = 1; # force reboot on next run + } + + return $self->WaitKill ($timeout); +} + + +# Wait until a process exits. +# return -1 if the process is still alive. + +sub Wait ($) +{ + my $self = shift; + my $timeout = shift; + if (!defined $timeout || $timeout < 0) { + $timeout = INFINITE; + } else { + $timeout = $timeout * 1000 * $PerlACE::ProcessVX::WAIT_DELAY_FACTOR; + } + + my $result = 0; + + if ($self->{RUNNING}) { + $result = Win32::Process::Wait ($self->{PROCESS}, $timeout); + if ($result == 0) { + return -1; + } + } + Win32::Process::GetExitCode ($self->{PROCESS}, $result); + if ($result != 0) { + $do_vx_init = 1; # force reboot on next run + } + return $result; +} + + +# Wait for a process to exit with a timeout + +sub TimedWait ($) +{ + my($self) = shift; + my($timeout) = shift; + return $self->Wait($timeout); +} + +1; diff --git a/ACE/bin/PerlACE/Process_Unix.pm b/ACE/bin/PerlACE/Process_Unix.pm new file mode 100644 index 00000000000..c0ff6a9fee8 --- /dev/null +++ b/ACE/bin/PerlACE/Process_Unix.pm @@ -0,0 +1,377 @@ +# $Id$ + +package PerlACE::Process; + +use strict; +use POSIX "sys_wait_h"; +use Cwd; +use File::Basename; +use Config; + +############################################################################### + +### Grab signal names + +my @signame; + +if (defined $Config{sig_name}) { + my $i = 0; + foreach my $name (split (' ', $Config{sig_name})) { + $signame[$i] = $name; + $i++; + } +} +else { + my $i; + for ($i = 0; $i < 255; ++$i) { + $signame[$i] = $i; + } +} + +############################################################################### + +### Constructor and Destructor + +sub new +{ + my $proto = shift; + my $class = ref ($proto) || $proto; + my $self = {}; + + $self->{RUNNING} = 0; + $self->{IGNOREEXESUBDIR} = 0; + $self->{PROCESS} = undef; + $self->{EXECUTABLE} = shift; + $self->{ARGUMENTS} = shift; + $self->{VALGRIND_CMD} = $ENV{"ACE_RUN_VALGRIND_CMD"}; + + if (!defined $PerlACE::Process::WAIT_DELAY_FACTOR) { + if (defined $self->{PURIFY_CMD}) { + $PerlACE::Process::WAIT_DELAY_FACTOR = 10; + } + elsif (defined $self->{VALGRIND_CMD}) { + $PerlACE::Process::WAIT_DELAY_FACTOR = 5; + } + else { + $PerlACE::Process::WAIT_DELAY_FACTOR = 1; + } + } + + bless ($self, $class); + return $self; +} + +sub DESTROY +{ + my $self = shift; + + if ($self->{RUNNING} == 1) { + print STDERR "ERROR: <", $self->{EXECUTABLE}, + "> still running upon object destruction\n"; + $self->Kill (); + } +} + +############################################################################### + +### Some Accessors + +sub Executable +{ + my $self = shift; + + if (@_ != 0) { + $self->{EXECUTABLE} = shift; + } + + my $executable = $self->{EXECUTABLE}; + + if ($self->{IGNOREEXESUBDIR}) { + return $executable; + } + + my $basename = basename ($executable); + my $dirname = dirname ($executable). '/'; + + $executable = $dirname.$PerlACE::Process::ExeSubDir.$basename; + + return $executable; +} + +sub Arguments +{ + my $self = shift; + + if (@_ != 0) { + $self->{ARGUMENTS} = shift; + } + + return $self->{ARGUMENTS}; +} + +sub CommandLine () +{ + my $self = shift; + + my $commandline = $self->Executable (); + + if (defined $self->{ARGUMENTS}) { + $commandline .= ' '.$self->{ARGUMENTS}; + } + + # Avoid modifying TAO/tests run_test.pl scripts by using the + # ACE_RUNTEST_ARGS environment variable to append command line + # arguments. + if ($^O eq "nonstop_kernel") { + my $global_args = $ENV{"ACE_RUNTEST_ARGS"}; + if ((length($global_args) > 0) + && ($commandline !~ /tao_idl/)) { + $commandline = $commandline + . ' ' + . $global_args; + } + } + + return $commandline; +} + +sub IgnoreExeSubDir +{ + my $self = shift; + + if (@_ != 0) { + $self->{IGNOREEXESUBDIR} = shift; + } + + return $self->{IGNOREEXESUBDIR}; +} + +############################################################################### + +# Spawn the process and continue; + +sub Normalize_Executable_Name +{ + my $executable = shift; + + my $basename = basename ($executable); + my $dirname = dirname ($executable). '/'; + + $executable = $dirname.$PerlACE::Process::ExeSubDir.$basename; + + return $executable; +} + +sub Spawn () +{ + my $self = shift; + + if ($self->{RUNNING} == 1) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> already running\n"; + return -1; + } + + if (!defined $self->{EXECUTABLE}) { + print STDERR "ERROR: Cannot Spawn: No executable specified\n"; + return -1; + } + + if ($self->{IGNOREEXESUBDIR} == 0) { + if (!-f $self->Executable ()) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> not found\n"; + return -1; + } + } + + my $cmdline = ""; + my $executable = ""; + + if (defined $self->{VALGRIND_CMD}) { + my $orig_cmdline = $self->CommandLine(); + $executable = $self->{VALGRIND_CMD}; + my $basename = basename ($self->{EXECUTABLE}); + + $cmdline = "$executable $orig_cmdline"; + } + elsif (defined $ENV{'ACE_TEST_WINDOW'}) { + $cmdline = $ENV{'ACE_TEST_WINDOW'} . ' ' . $self->CommandLine(); + } + else { + $executable = $self->Executable(); + $cmdline = $self->CommandLine(); + } + + FORK: + { + if ($self->{PROCESS} = fork) { + #parent here + bless $self; + } + elsif (defined $self->{PROCESS}) { + #child here + if (defined $ENV{'ACE_TEST_VERBOSE'}) { + print "$cmdline\n"; + } + exec $cmdline; + die "ERROR: exec failed for <" . $cmdline . ">"; + } + elsif ($! =~ /No more process/) { + #EAGAIN, supposedly recoverable fork error + sleep 5; + redo FORK; + } + else { + # weird fork error + print STDERR "ERROR: Can't fork <" . $cmdline . ">: $!\n"; + } + } + $self->{RUNNING} = 1; + return 0; +} + +sub WaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + my $status = $self->TimedWait ($timeout); + + if ($status == -1) { + print STDERR "ERROR: $self->{EXECUTABLE} timedout\n"; + $self->Kill (); + } + + $self->{RUNNING} = 0; + + return $status; +} + + +# Do a Spawn and immediately WaitKill + +sub SpawnWaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + if ($self->Spawn () == -1) { + return -1; + } + + return $self->WaitKill ($timeout); +} + +sub TerminateWaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + if ($self->{RUNNING}) { + print STDERR "INFO: $self->{EXECUTABLE} being killed.\n"; + kill ('TERM', $self->{PROCESS}); + } + + return $self->WaitKill ($timeout); +} + +# really only for internal use +sub check_return_value ($) +{ + my $self = shift; + my $rc = shift; + + # NSK OSS has a 32-bit waitpid() status + my $is_NSK = ($^O eq "nonstop_kernel"); + my $CC_MASK = $is_NSK ? 0xffff00 : 0xff00; + + # Exit code processing + if ($rc == 0) { + return 0; + } + elsif ($rc == $CC_MASK) { + print STDERR "ERROR: <", $self->{EXECUTABLE}, + "> failed: $!\n"; + return ($rc >> 8); + } + elsif (($rc & 0xff) == 0) { + $rc >>= 8; + return $rc; + } + + # Ignore NSK 16-bit completion code + $rc &= 0xff if $is_NSK; + + # Remember Core dump flag + my $dump = 0; + + if ($rc & 0x80) { + $rc &= ~0x80; + $dump = 1; + } + + # check for ABRT, KILL or TERM + if ($rc == 6 || $rc == 9 || $rc == 15) { + return 0; + } + + print STDERR "ERROR: <", $self->{EXECUTABLE}, + "> exited with "; + + print STDERR "coredump from " if ($dump == 1); + + print STDERR "signal $rc : ", $signame[$rc], "\n"; + + return 0; +} + +sub Kill ($) +{ + my $self = shift; + my $ignore_return_value = shift; + + if ($self->{RUNNING} && !defined $ENV{'ACE_TEST_WINDOW'}) { + kill ('KILL', $self->{PROCESS}); + waitpid ($self->{PROCESS}, 0); + if (! $ignore_return_value) { + $self->check_return_value ($?); + } + } + + $self->{RUNNING} = 0; +} + +# Wait until a process exits. +# return -1 if the process is still alive. +sub Wait ($) +{ + my $self = shift; + my $timeout = shift; + if (!defined $timeout || $timeout < 0) { + waitpid ($self->{PROCESS}, 0); + } else { + return TimedWait($self, $timeout); + } + +} + +sub TimedWait ($) +{ + my $self = shift; + my $timeout = shift; + + $timeout *= $PerlACE::Process::WAIT_DELAY_FACTOR; + + while ($timeout-- != 0) { + my $pid = waitpid ($self->{PROCESS}, &WNOHANG); + if ($pid != 0 && $? != -1) { + return $self->check_return_value ($?); + } + sleep 1; + } + + return -1; +} + +1; diff --git a/ACE/bin/PerlACE/Process_VMS.pm b/ACE/bin/PerlACE/Process_VMS.pm new file mode 100644 index 00000000000..f3f524f78f6 --- /dev/null +++ b/ACE/bin/PerlACE/Process_VMS.pm @@ -0,0 +1,358 @@ +# $Id$ + +package PerlACE::Process; + +use strict; +use POSIX "sys_wait_h"; +use Cwd; +use File::Basename; +use Config; +use VmsProcess; + +############################################################################### + +### Chorus stuff + +$PerlACE::Process::chorushostname = "localhost"; +$PerlACE::Process::chorus = 0; + +$PerlACE::Process::cwd = getcwd(); + +for(my $i = 0; $i <= $#ARGV; $i++) { + if ($ARGV[$i] eq '-chorus') { + if (defined $ARGV[$i + 1]) { + $PerlACE::Process::chorus = 1; + $PerlACE::Process::chorushostname = $ARGV[$1 + 1]; + } + else { + print STDERR "The -chorus option requires " . + "the hostname of the target\n"; + exit(1); + } + + splice(@ARGV, $i, 2); + # Don't break from the loop just in case there + # is an accidental duplication of the -chorus option + } +} + +############################################################################### + +### Grab signal names + +my @signame; + +if (defined $Config{sig_name}) { + my $i = 0; + foreach my $name (split (' ', $Config{sig_name})) { + $signame[$i] = $name; + $i++; + } +} +else { + my $i; + for ($i = 0; $i < 255; ++$i) { + $signame[$i] = $i; + } +} + +############################################################################### + +### Constructor and Destructor + +sub new +{ + my $proto = shift; + my $class = ref ($proto) || $proto; + my $self = {}; + + $self->{RUNNING} = 0; + $self->{IGNOREEXESUBDIR} = 0; + $self->{PROCESS} = undef; + $self->{EXECUTABLE} = shift; + $self->{ARGUMENTS} = shift; + $self->{VALGRIND_CMD} = $ENV{"ACE_RUN_VALGRIND_CMD"}; + + if (!defined $PerlACE::Process::WAIT_DELAY_FACTOR) { + if (defined $self->{PURIFY_CMD}) { + $PerlACE::Process::WAIT_DELAY_FACTOR = 10; + } + elsif (defined $self->{VALGRIND_CMD}) { + $PerlACE::Process::WAIT_DELAY_FACTOR = 5; + } + else { + $PerlACE::Process::WAIT_DELAY_FACTOR = 1; + } + } + + bless ($self, $class); + return $self; +} + +sub DESTROY +{ + my $self = shift; + + if ($self->{RUNNING} == 1) { + print STDERR "ERROR: <", $self->{EXECUTABLE}, + "> still running upon object destruction\n"; + $self->Kill (); + } +} + +############################################################################### + +### Some Accessors + +sub Executable +{ + my $self = shift; + + if (@_ != 0) { + $self->{EXECUTABLE} = shift; + } + + my $executable = $self->{EXECUTABLE}; + + if ($self->{IGNOREEXESUBDIR}) { + return $executable; + } + + my $basename = basename ($executable); + my $dirname = dirname ($executable). '/'; + if ($dirname != "") { + $executable = $dirname.$PerlACE::Process::ExeSubDir.$basename; + } + else { + $executable = $dirname.$basename; + } + + if ( !-x $executable ) { + if ( -x $executable.'.exe' ) { + $executable = $executable.'.exe'; + } + } + + return $executable; +} + +sub Arguments +{ + my $self = shift; + + if (@_ != 0) { + $self->{ARGUMENTS} = shift; + } + + return $self->{ARGUMENTS}; +} + +sub CommandLine () +{ + my $self = shift; + + my $commandline = $self->Executable (); + + if (defined $self->{ARGUMENTS}) { + $commandline .= ' '.$self->{ARGUMENTS}; + } + + if ($PerlACE::Process::chorus == 1) { + $commandline = "rsh " + . $PerlACE::Process::chorushostname + . " arun " + . $PerlACE::Process::cwd + . "/" + . $commandline; + } + + return $commandline; +} + +sub IgnoreExeSubDir +{ + my $self = shift; + + if (@_ != 0) { + $self->{IGNOREEXESUBDIR} = shift; + } + + return $self->{IGNOREEXESUBDIR}; +} + +############################################################################### + +# Spawn the process and continue; + +sub Spawn () +{ + my $self = shift; + + if ($self->{RUNNING} == 1) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> already running\n"; + return -1; + } + + if (!defined $self->{EXECUTABLE}) { + print STDERR "ERROR: Cannot Spawn: No executable specified\n"; + return -1; + } + + if ($self->{IGNOREEXESUBDIR} == 0) { + if (!-f $self->Executable ()) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> not found\n"; + return -1; + } + + if (!$PerlACE::Process::chorus && !-x $self->Executable ()) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> not executable\n"; + return -1; + } + } + + { + $self->{PROCESS} = VmsProcess::Spawn $self->{EXECUTABLE}, $self->{ARGUMENTS}; + if ($self->{PROCESS}) { + #parent here + bless $self; + } + else { + # weird fork error + print STDERR "ERROR: Can't spawn <" . $self->CommandLine () . ">: $!\n"; + } + } + $self->{RUNNING} = 1; + return 0; +} + +sub WaitKill ($) +{ + my $self = shift; + my $timeout = shift; + my $status = $self->TimedWait ($timeout); + + if ($status == -1) { + print STDERR "ERROR: $self->{EXECUTABLE} timedout\n"; + $self->Kill (); + } + + $self->{RUNNING} = 0; + + return $status; +} + + +# Do a Spawn and immediately WaitKill + +sub SpawnWaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + if ($self->Spawn () == -1) { + return -1; + } + + return $self->WaitKill ($timeout); +} + +sub TerminateWaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + if ($self->{RUNNING}) { + print STDERR "INFO: $self->{EXECUTABLE} being killed.\n"; + kill ('TERM', $self->{PROCESS}); + } + + return $self->WaitKill ($timeout); +} + +# really only for internal use +sub check_return_value ($) +{ + my $self = shift; + my $rc = shift; + + if ($rc == 0) { + return 0; + } + elsif ($rc == 0xff00) { + print STDERR "ERROR: <", $self->{EXECUTABLE}, + "> failed: $!\n"; + return ($rc >> 8); + } + elsif (($rc & 0xff) == 0) { + $rc >>= 8; + return $rc; + } + + my $dump = 0; + + if ($rc & 0x80) { + $rc &= ~0x80; + $dump = 1; + } + + # check for ABRT, KILL or TERM + if ($rc == 6 || $rc == 9 || $rc == 15) { + return 0; + } + + print STDERR "ERROR: <", $self->{EXECUTABLE}, + "> exited with "; + + print STDERR "coredump from " if ($dump == 1); + + print STDERR "signal $rc : ", $signame[$rc], "\n"; + + return 0; +} + +sub Kill () +{ + my $self = shift; + + if ($self->{RUNNING}) { + kill ('KILL', $self->{PROCESS}); + waitpid ($self->{PROCESS}, 0); + $self->check_return_value ($?); + } + + $self->{RUNNING} = 0; +} + +# Wait until a process exits. +# return -1 if the process is still alive. +sub Wait ($) +{ + my $self = shift; + my $timeout = shift; + if (!defined $timeout || $timeout < 0) { + waitpid ($self->{PROCESS}, 0); + } else { + return TimedWait($self, $timeout); + } + +} + +sub TimedWait ($) +{ + my $self = shift; + my $timeout = shift; + + $timeout *= $PerlACE::Process::WAIT_DELAY_FACTOR; + + my $status; + my $pid = VmsProcess::TimedWaitPid ($self->{PROCESS}, $timeout, $status); + if ($pid > 0) { + return $self->check_return_value ($status); + } + return -1; +} + +1; diff --git a/ACE/bin/PerlACE/Process_Win32.pm b/ACE/bin/PerlACE/Process_Win32.pm new file mode 100644 index 00000000000..1c127f41ef8 --- /dev/null +++ b/ACE/bin/PerlACE/Process_Win32.pm @@ -0,0 +1,391 @@ +# $Id$ + +use PerlACE::Run_Test; + +package PerlACE::Process; + +use strict; +use Win32::Process; +use File::Basename; +use Cwd; + +############################################################################### + +# This is what GetExitCode will return if the process is still running. +my $STILL_ACTIVE = 259; + +############################################################################### + +### Constructor and Destructor + +# +# Hack in purify support thru 2 environment variables: +# ACE_RUN_PURIFY_CMD: complete path to purify executable +# ACE_RUNTEST_DELAY: wait delay factor, default to 10 if +# ACE_RUN_PURIFY_CMD is defined, or 1 if +# ACE_RUN_PURIFY_CMD is not defined. +# ** Notice that when ACE_RUN_PURIFY_CMD is define, PerlACE::Process +# reports the return status of *purify*, not the process being purified. +# +# Also hack in the ability to run the test on a WinCE device using the +# ACE_WINCE_TEST_CONTROLLER environment variable. If set, it specifies a +# controlling program to use for setting up and executing the test. +# Further setup can be specialized depending on the value of the variable. + +sub new +{ + my $proto = shift; + my $class = ref ($proto) || $proto; + my $self = {}; + + $self->{RUNNING} = 0; + $self->{IGNOREEXESUBDIR} = 0; + $self->{PROCESS} = undef; + $self->{EXECUTABLE} = shift; + $self->{ARGUMENTS} = shift; + $self->{PURIFY_CMD} = $ENV{"ACE_RUN_PURIFY_CMD"}; + $self->{PURIFY_OPT} = $ENV{"ACE_RUN_PURIFY_OPT"}; + if (!defined $PerlACE::Process::WAIT_DELAY_FACTOR) { + if (defined $self->{PURIFY_CMD}) { + $PerlACE::Process::WAIT_DELAY_FACTOR = 10; + } + else { + $PerlACE::Process::WAIT_DELAY_FACTOR = 1; + } + } + $self->{WINCE_CTL} = $ENV{"ACE_WINCE_TEST_CONTROLLER"}; + + bless ($self, $class); + return $self; +} + +sub DESTROY +{ + my $self = shift; + + if ($self->{RUNNING} == 1) { + print STDERR "ERROR: <", $self->{EXECUTABLE}, + "> still running upon object destruction\n"; + $self->Kill (); + } +} + +############################################################################### + +### Some Accessors + +sub Normalize_Executable_Name +{ + my $executable = shift; + + my $basename = basename ($executable); + my $dirname = dirname ($executable). '/'; + + $executable = $dirname.$PerlACE::Process::ExeSubDir.$basename.".EXE"; + + ## Installed executables do not conform to the ExeSubDir + if (! -x $executable && -x $dirname.$basename.'.EXE') { + $executable = $dirname.$basename.'.EXE'; + } + + $executable =~ s/\//\\/g; # / <- # color coding issue in devenv + + return $executable; +} + + +sub Executable +{ + my $self = shift; + + if (@_ != 0) { + $self->{EXECUTABLE} = shift; + } + + my $executable = $self->{EXECUTABLE}; + + if (PerlACE::is_vxworks_test()) { + $executable = PerlACE::VX_HostFile ($executable); + } + + if ($self->{IGNOREEXESUBDIR} == 0) { + $executable = PerlACE::Process::Normalize_Executable_Name ($executable); + } + else { + if ($executable !~ m/.EXE$/i) { + $executable = $executable.".EXE"; + } + $executable =~ s/\//\\/g; # / <- # color coding issue in devenv + } + + return $executable; +} + +sub Arguments +{ + my $self = shift; + + if (@_ != 0) { + $self->{ARGUMENTS} = shift; + } + + return $self->{ARGUMENTS}; +} + +sub CommandLine () +{ + my $self = shift; + + my $commandline = $self->Executable (); + + if (defined $self->{ARGUMENTS}) { + $commandline .= ' '.$self->{ARGUMENTS}; + } + + return $commandline; +} + +sub IgnoreExeSubDir +{ + my $self = shift; + + if (@_ != 0) { + $self->{IGNOREEXESUBDIR} = shift; + } + + return $self->{IGNOREEXESUBDIR}; +} + +############################################################################### + +### Spawning processes + + +# Spawn the process and continue. + +sub Spawn () +{ + my $self = shift; + + if ($self->{RUNNING} == 1) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> already running\n"; + return -1; + } + + if (!defined $self->{EXECUTABLE}) { + print STDERR "ERROR: Cannot Spawn: No executable specified\n"; + return -1; + } + + if ($self->{IGNOREEXESUBDIR} == 0) { + if (!-f $self->Executable ()) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> not found\n"; + return -1; + } + + if (!-x $self->Executable ()) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> not executable\n"; + return -1; + } + } + + my $state = 0; + my $cmdline = ""; + my $executable = ""; + + if (defined $self->{PURIFY_CMD}) { + my $orig_cmdline = $self->CommandLine (); + $executable = $self->{PURIFY_CMD}; + my $basename = basename ($self->{EXECUTABLE}); + + my $PurifyOptions = $self->{PURIFY_OPT}; + if (!defined $PurifyOptions) { + $PurifyOptions = + "/run ". +# "/save-data=$basename.pfy ". + "/save-text-data=$basename.pfytxt ". + "/AllocCallStackLength=20 ". + "/ErrorCallStackLength=20 ". + "/HandlesInUseAtExit ". + "/InUseAtExit ". + "/LeaksAtExit "; + } + my $basename = basename ($self->{EXECUTABLE}); + $cmdline = + "purify " . + "$PurifyOptions ". + "$orig_cmdline" ; + } + elsif (defined $self->{WINCE_CTL}) { + $executable = $self->Executable (); + $cmdline = $self->CommandLine (); + + # Generate a script to copy the test down to the device, run it, + # copy the log file(s) back to the log directory, then delete the + # program and log files on the remote device. + unless (open (SCRIPT, ">start_test.cmd")) { + print STDERR "ERROR: Cannot Spawn: <", $self->Executable (), + "> failed to create start_test.cmd\n"; + return -1; + } + + my $testname = basename($executable,'.EXE'); + my $here = getcwd(); + $here =~ s/\//\\/g; + $executable =~ s/^\.//; # Chop leading . + $executable = $here . $executable; # Fully qualified name + # Take off the test name from the start of the command line. + # The command name is preprended in the script below. + my @tokens = split(' ', $cmdline); + @tokens = splice(@tokens,1); + $cmdline = join(' ', @tokens); + print SCRIPT "copy $executable 1:\\Windows\n"; + print SCRIPT "start /wait $testname $cmdline\n"; + print SCRIPT "copy 1:\\log\\$testname*.txt $here\\log\n"; + print SCRIPT "del 1:\\Windows\\$testname.exe\n"; + print SCRIPT "del 1:\\log\\$testname*.txt\n"; + close SCRIPT; + + $executable = $ENV{"ComSpec"}; + my $pocket_device_opts = $ENV{"ACE_PCE_DEVICE"}; + $cmdline = "cmd /C start /B /WAIT $self->{WINCE_CTL} $pocket_device_opts -m NAME=start_test.cmd;WAIT=401000; -e" + } + elsif (defined $ENV{'ACE_TEST_WINDOW'}) { + $state = ($ENV{'ACE_TEST_WINDOW'} =~ /\/k/i ? CREATE_NEW_CONSOLE : DETACHED_PROCESS); + $executable = $ENV{'ComSpec'}; + $cmdline = $ENV{'ACE_TEST_WINDOW'} . ' ' . $self->CommandLine(); + } + else { + $executable = $self->Executable (); + $cmdline = $self->CommandLine (); + } + if (defined $ENV{'ACE_TEST_VERBOSE'}) { + print "$executable $cmdline\n"; + } + Win32::Process::Create ($self->{PROCESS}, + $executable, + $cmdline, + 0, + $state, + '.'); + + my $status = 0; + + Win32::Process::GetExitCode ($self->{PROCESS}, $status); + + if ($status != $STILL_ACTIVE) { + print STDERR "ERROR: Spawn failed for <", $self->CommandLine (), ">\n"; + return -1; + } + + $self->{RUNNING} = 1; + return 0; +} + + +# Wait for the process to exit or kill after a time period + +sub WaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + my $status = $self->TimedWait ($timeout); + + if ($status == -1) { + print STDERR "ERROR: $self->{EXECUTABLE} timedout\n"; + $self->Kill (); + # Don't need to Wait since we are on Win32 + } + + $self->{RUNNING} = 0; + + return $status; +} + + +# Do a Spawn and immediately WaitKill + +sub SpawnWaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + if ($self->Spawn () == -1) { + return -1; + } + + return $self->WaitKill ($timeout); +} + + +# Kill the process + +sub Kill ($) +{ + my $self = shift; + my $notused = shift; #Used in Process_Unix.pm + + if ($self->{RUNNING} && !defined $ENV{'ACE_TEST_WINDOW'}) { + Win32::Process::Kill ($self->{PROCESS}, -1); + } + + $self->{RUNNING} = 0; +} + + +# Terminate the process and wait for it to finish + +sub TerminateWaitKill ($) +{ + my $self = shift; + my $timeout = shift; + + if ($self->{RUNNING}) { + print STDERR "INFO: $self->{EXECUTABLE} being killed.\n"; + Win32::Process::Kill ($self->{PROCESS}, 0); + } + + return $self->WaitKill ($timeout); +} + + +# Wait until a process exits. +# return -1 if the process is still alive. + +sub Wait ($) +{ + my $self = shift; + my $timeout = shift; + if (!defined $timeout || $timeout < 0) { + $timeout = INFINITE; + } else { + $timeout = $timeout * 1000 * $PerlACE::Process::WAIT_DELAY_FACTOR; + } + + my $result = 0; + + if ($self->{RUNNING}) { + $result = Win32::Process::Wait ($self->{PROCESS}, $timeout); + if ($result == 0) { + return -1; + } + } + Win32::Process::GetExitCode ($self->{PROCESS}, $result); + return $result; +} + + +# Wait for a process to exit with a timeout + +sub TimedWait ($) +{ + my($self) = shift; + my($timeout) = shift; + return $self->Wait($timeout); +} + +1; diff --git a/ACE/bin/PerlACE/Run_Test.pm b/ACE/bin/PerlACE/Run_Test.pm new file mode 100644 index 00000000000..86727556ab2 --- /dev/null +++ b/ACE/bin/PerlACE/Run_Test.pm @@ -0,0 +1,178 @@ +# $Id$ + +# This module contains a few miscellanous functions and some +# startup ARGV processing that is used by all tests. + +use PerlACE::Process; +use PerlACE::ProcessVX; +use PerlACE::ConfigList; + +package PerlACE; +use File::Spec; +use Cwd; + +my $config = new PerlACE::ConfigList; +$PerlACE::VxWorks_Test = $config->check_config("VxWorks"); + +# Figure out the svc.conf extension +$svcconf_ext = $ENV{"ACE_RUNTEST_SVCCONF_EXT"}; +if (!defined $svcconf_ext) { + $svcconf_ext = ".conf"; +} + +# Default timeout. NSCORBA needs more time for process start up. +$wait_interval_for_process_creation = (($^O eq "lynxos") ? 12 : ($PerlACE::VxWorks_Test ? 60 : 10)); + +# Turn on autoflush +$| = 1; + +sub LocalFile ($) +{ + my $file = shift; + + my $newfile = getcwd () . '/' . $file; + + if ($^O eq "MSWin32") { + $newfile =~ s/\//\\/g; + } + elsif ($^O eq 'cygwin') { + chop($newfile = `/usr/bin/cygpath -w $newfile`); + $newfile =~ s/\\/\\\\/g; + } + + return $newfile; +} + +sub VX_HostFile($) +{ + my $file = shift; + $file = File::Spec->rel2abs ($file); + $file = File::Spec->abs2rel ($file, $ENV{"ACE_ROOT"}); + return $ENV{"HOST_ROOT"}."/".$file; +} + +# Returns a random port within the range of 10002 - 32767 +sub random_port { + return (int(rand($$)) % 22766) + 10002; +} + +# Returns a unique id, uid for unix, last digit of IP for NT +sub uniqueid +{ + if ($^O eq "MSWin32") + { + my $uid = 1; + + open (IPNUM, "ipconfig|") || die "Can't run ipconfig: $!\n"; + + while (<IPNUM>) + { + if (/Address/) + { + $uid = (split (/: (\d+)\.(\d+)\.(\d+)\.(\d+)/))[4]; + } + } + + close IPNUM; + + return $uid; + } + else + { + return $>; + } +} + +# Waits until a file exists +sub waitforfile +{ + local($file) = @_; + sleep 1 while (!(-e $file && -s $file)); +} + +sub waitforfile_timed +{ + my $file = shift; + my $maxtime = shift; + $maxtime *= ($PerlACE::VxWorks_Test ? $PerlACE::ProcessVX::WAIT_DELAY_FACTOR : $PerlACE::Process::WAIT_DELAY_FACTOR); + + while ($maxtime-- != 0) { + if (-e $file && -s $file) { + return 0; + } + sleep 1; + } + return -1; +} + +sub check_n_cleanup_files +{ + my $file = shift; + my @flist = glob ($file); + + my $cntr = 0; + my $nfile = scalar(@flist); + + if ($nfile != 0) { + for (; $cntr < $nfile; $cntr++) { + print STDERR "File <$flist[$cntr]> exists but should be cleaned up\n"; + } + unlink @flist; + } +} + +sub generate_test_file +{ + my $file = shift; + my $size = shift; + + while ( -e $file ) { + $file = $file."X"; + } + + my $data = "abcdefghijklmnopqrstuvwxyz"; + $data = $data.uc($data)."0123456789"; + + open( INPUT, "> $file" ) || die( "can't create input file: $file" ); + for($i=62; $i < $size ; $i += 62 ) { + print INPUT $data; + } + $i -= 62; + if ($i < $size) { + print INPUT substr($data, 0, $size-$i); + } + close(INPUT); + + return $file; +} + +sub is_vxworks_test() +{ + return $PerlACE::VxWorks_Test; +} + +sub add_path { + my $name = shift; + my $value = shift; + if (defined $ENV{$name}) { + $ENV{$name} .= ($^O eq 'MSWin32' ? ';' : ':') . $value + } + else { + $ENV{$name} = $value; + } +} + +sub add_lib_path { + my($value) = shift; + + # Set the library path supporting various platforms. + add_path('PATH', $value); + add_path('LD_LIBRARY_PATH', $value); + add_path('LIBPATH', $value); + add_path('SHLIB_PATH', $value); + +} + +$sleeptime = 5; + +1; diff --git a/ACE/bin/PerlACE/perlace.mpc b/ACE/bin/PerlACE/perlace.mpc new file mode 100644 index 00000000000..ee60bdc70a9 --- /dev/null +++ b/ACE/bin/PerlACE/perlace.mpc @@ -0,0 +1,12 @@ +// -*- MPC -*- +// $Id$ + +project(PerlACE) : script { + Script_Files { + ConfigList.pm + Process.pm + Process_Unix.pm + Process_Win32.pm + Run_Test.pm + } +} diff --git a/ACE/bin/PythonACE/fuzz/__init__.py b/ACE/bin/PythonACE/fuzz/__init__.py new file mode 100644 index 00000000000..26a7b9a3faf --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/__init__.py @@ -0,0 +1,97 @@ +""" This init script loads all python modules in the current directory that + do not start with an '_', loads them as a module""" + +file_type_handlers = dict () + +def register_handler (module): + + for item in module.type_list: + if file_type_handlers.has_key (item): + file_type_handlers[item].append (module.handler) + else: + handlers = list () + handlers.append (module.handler) + file_type_handlers[item] = handlers + +import re + +extension_re = re.compile(".+\.([^.]+)$") + + + +# The following is the initialization logic that is executed +# when the fuzz module is loaded +from os import listdir, chdir, getcwd +from sys import stderr, path +oldwd = getcwd () + +try: + # The following is a trick to get the directory THIS SCRIPT - note, not necessarily the CWD - + # is located. We use this path later to load all of the available fuzz checks. + import _path + script_path = str (_path).split ()[3][1:-11] + if script_path == "": + script_path = "." + + chdir (script_path) + + path.append (getcwd ()) + + files = listdir (".") + + modules = list () + + # We need to import the warning handler here. If we use a traditional import elsewhere, + # we get all kinds of problems with the warning_handler being imported twice - once as + # fuzz._warning_handler and again as _warning_handler - making the singleton instances + # NOT the same. + _warning_handler = __import__ ("_warning_handler") + Warning_Handler = _warning_handler.Warning_Handler + STDERR = _warning_handler.STDERR + MAILER = _warning_handler.MAILER + + for item in files: + if (item[0] != '_') and (item[-3:] == ".py"): + print "Registering " + item [:-3] + try: + module = __import__ (item[:-3]) + register_handler (module) + except: + stderr.write ("FUZZ ERROR: Unable to load the " + item[:-3] + " module, please notify the build czar\n") + +finally: + chdir (oldwd) + + +def fuzz_check (file_name, file_content): + # If the user of the module has not instanciated the warning handler, + # lets do it here + if not Warning_Handler._isInstantiated (): + Warning_Handler.getInstance (STDERR) + + # get the file extension + ext_match = extension_re.search (file_name) + if ext_match == None: + # we don't have no stinking file extension! + ext = "" + else: + ext = ext_match.group (1) + + retval = 0 + + if file_type_handlers.has_key (ext): + for handler in file_type_handlers[ext]: + try: # We don't want one misbehaving handler to screw up the whole sustem + retval += handler (file_name, file_content) + except: + stderr.write ("An unknown exception was thrown while trying to run one of the handlers\n") + + # Run the generic handlers + for handler in file_type_handlers["*"]: + try: # We don't want one misbehaving handler to screw up the whole sustem + retval += handler (file_name, file_content) + except: + stderr.write ("An unknown exception was thrown while trying to run one of the handlers\n") + + + return retval diff --git a/ACE/bin/PythonACE/fuzz/_fuzz.py b/ACE/bin/PythonACE/fuzz/_fuzz.py new file mode 100644 index 00000000000..5dccaa8136e --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/_fuzz.py @@ -0,0 +1,3 @@ +""" Defines the fuzz_check function """ + + diff --git a/ACE/bin/PythonACE/fuzz/_generic_handler.py b/ACE/bin/PythonACE/fuzz/_generic_handler.py new file mode 100644 index 00000000000..ffc7bc10167 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/_generic_handler.py @@ -0,0 +1,44 @@ +""" Defines a generic handler that tests against a given regex, and allows for exclusions. """ + +from sys import stderr +import _warning_handler + +def generic_handler (regex, begin_exclude, end_exclude, error_message, file_name, file_content, warn = False): + retval = 0 + + if regex.search (file_content) != None: + # We have a potential violation, lets check + lines = file_content.splitlines () + exclusion = False + for line in range (len (lines)): + if begin_exclude.search (lines[line]) != None: + exclusion = True + elif end_exclude.search (lines[line]) != None: + exclusion = False + elif (exclusion == False) and (regex.search (lines[line]) != None): + # Violation! + msg = file_name + ':' + str (line + 1) + error_message + if not warn: + stderr.write (msg) + retval = 1 + else: + handler = _warning_handler.Warning_Handler.getInstance () + handler.add_warning (msg) + return retval + +def generic_handler_no_exceptions (regex, error_message, file_name, file_content, warn = False): + retval = 0 + + if regex.search (file_content) != None: + # We have a potential violation, lets check + lines = file_content.splitlines () + for line in range (len (lines)): + if regex.search (lines[line]) != None: + msg = file_name + ':' + str (line + 1) + error_message + # Violation! + if not warn: + stderr.write (msg) + retval = 1 + else: + Warning_Handler.getInstance ().add_warning (msg) + return retval diff --git a/ACE/bin/PythonACE/fuzz/_mailer.py b/ACE/bin/PythonACE/fuzz/_mailer.py new file mode 100644 index 00000000000..6e33cc82c9e --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/_mailer.py @@ -0,0 +1,106 @@ +""" This module implements a mailer to mail a user about fuzz warnings """ + +import _singleton + +def ldap_lookup (username): + """ Performs a ldap lookup to find the email address associated with + username. If none exists, it returns the empty string.""" + import ldap + + try: + conn = ldap.open ("ldap.dre.vanderbilt.edu") + conn.protocol_version = ldap.VERSION3 + + baseDN = "dc=dre,dc=vanderbilt,dc=edu" + scope = ldap.SCOPE_SUBTREE + attrFilter = None + searchFilter = "uid=" + username + + result = conn.search (baseDN, scope, searchFilter, attrFilter) + + result_type, result_data = conn.result (result, 0) + email = "" + if (result_data != []) and (result_type == ldap.RES_SEARCH_ENTRY): + # we have a valid result! + if (result_data[0][1].has_key ('mail')): + email = result_data[0][1]['mail'][0] + elif (result_data[0][1].has_key ('svnmail')): + email = result_data[0][1]['svnmail'][0] + else: + email = "" + + conn.unbind () + + return email + except: + # Some error occurred when looking this guy up. + return "" + + + +class Mailer: + def __init__ (self): + self.recipient = "" + self.body = """\ +This is an automatically generated message from the fuzz check system +in the subversion repository. + +Your recent commit to the ACE/TAO/CIAO repository had a number of warnings +which should be addressed. + +""" + self.warnings = "" + self.subject = "Your recent commit to the DOC group repository." + self.sent = False + + def get_messages (self): + return self.warnings + def open (self, ldap_user_name): + from sys import stderr + stderr.write ("LDAP Name: " + ldap_user_name.rstrip () + "\n") + self.recipient = ldap_lookup (ldap_user_name.rstrip ()) + + def add_warning (self, warning_text): + self.warnings += warning_text + + def close (self): + try: + message = """\ +From: %s +To: %s +Subject: %s +\r\n +%s +""" % ("bczar@dre.vanderbilt.edu", + self.recipient, + self.subject, + self.body + self.warnings) + + print message + + import smtplib + server = smtplib.SMTP('discovery.isis.vanderbilt.edu') + server.sendmail ("bczar@dre.vanderbilt.edu", + [self.recipient], + message) + except smtplib.SMTPRecipientsRefused: + print "Recipients refused exception" + server.close () + except smtplib.SMTPHeloError: + print "Helo error" + server.close () + except smtplib.SMTPSenderRefused: + print "Sender refused" + server.close () + except smtplib.SMTPDataError: + print "Data error" + server.close () + except: + from sys import stderr + stderr.write ("Caught exception while sending email\n") + server.close () + + + + + diff --git a/ACE/bin/PythonACE/fuzz/_path.py b/ACE/bin/PythonACE/fuzz/_path.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/_path.py diff --git a/ACE/bin/PythonACE/fuzz/_singleton.py b/ACE/bin/PythonACE/fuzz/_singleton.py new file mode 100644 index 00000000000..f7a686d4988 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/_singleton.py @@ -0,0 +1,60 @@ +""" Implements a singleton mixin class """ + +# The following code was written by Gary Robinson +# (grobinson@transpose.com) and placed in the public domain. His +# copyright notice is as follows: + +# By Gary Robinson, grobinson@transpose.com. No rights reserved -- +# placed in the public domain -- which is only reasonable considering +# how much it owes to other people's version which are in the +# public domain. The idea of using a metaclass came from +# a comment on Gary's blog (see +# http://www.garyrobinson.net/2004/03/python_singleto.html#comments). +# Other improvements came from comments and email from other +# people who saw it online. (See the blog post and comments +# for further credits.) + +# Not guaranteed to be fit for any particular purpose. Use at your +# own risk. + + +class SingletonException(Exception): + pass + +class MetaSingleton(type): + def __new__(metaclass, strName, tupBases, dict): + if dict.has_key('__new__'): + raise SingletonException, 'Can not override __new__ in a Singleton' + return super(MetaSingleton,metaclass).__new__(metaclass, strName, tupBases, dict) + + def __call__(cls, *lstArgs, **dictArgs): + raise SingletonException, 'Singletons may only be instantiated through getInstance()' + +class Singleton(object): + __metaclass__ = MetaSingleton + + def getInstance(cls, *lstArgs): + """ + Call this to instantiate an instance or retrieve the existing instance. + If the singleton requires args to be instantiated, include them the first + time you call getInstance. + """ + if cls._isInstantiated(): + if len(lstArgs) != 0: + raise SingletonException, 'If no supplied args, singleton must already be instantiated, or __init__ must require no args' + else: + if cls._getConstructionArgCountNotCountingSelf() > 0 and len(lstArgs) <= 0: + raise SingletonException, 'If the singleton requires __init__ args, supply them on first instantiation' + instance = cls.__new__(cls) + instance.__init__(*lstArgs) + cls.cInstance = instance + return cls.cInstance + getInstance = classmethod(getInstance) + + def _isInstantiated(cls): + return hasattr(cls, 'cInstance') + _isInstantiated = classmethod(_isInstantiated) + + def _getConstructionArgCountNotCountingSelf(cls): + return cls.__init__.im_func.func_code.co_argcount - 1 + _getConstructionArgCountNotCountingSelf = classmethod(_getConstructionArgCountNotCountingSelf) diff --git a/ACE/bin/PythonACE/fuzz/_types.py b/ACE/bin/PythonACE/fuzz/_types.py new file mode 100644 index 00000000000..d5cb851c440 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/_types.py @@ -0,0 +1,6 @@ +""" Defines a number of file extension groupings """ + +source_files = ["c", "cc", "cpp", "cxx"] +header_files = ["h", "cc", "cpp", "cxx"] +inline_files = ["i", "ipp", "inl", "ixx"] +idl_files = ["idl"] diff --git a/ACE/bin/PythonACE/fuzz/_warning_handler.py b/ACE/bin/PythonACE/fuzz/_warning_handler.py new file mode 100644 index 00000000000..f88b43a0782 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/_warning_handler.py @@ -0,0 +1,53 @@ +""" Implements a warning handler base class and a simple handler that simply + outputs warnings to stderr. """ + +import _singleton + +# Constants +STDERR = 1 +MAILER = 2 + +from sys import stderr + +class Warning_Handler (_singleton.Singleton): + def __init__(self, handlertype=STDERR): + """ Constructor. Type should be either STDERR or MAILER. + There are probably better ways to do this, but it is implemented + this way because I only wanted to have a dependancy on ldap if someone + actually wanted to use the mailer. """ + super (Warning_Handler, self).__init__ () + self.messages = "" + self.add_warning = self.default_add_warning + self.close = self.default_close + self.open = self.default_open + + if handlertype is STDERR: + self.add_warning = self.stderr_add_warning + elif handlertype is MAILER: + from _mailer import Mailer + self.handler = Mailer () + self.add_warning = self.handler.add_warning + self.open = self.handler.open + self.close = self.handler.close + self.get_messages = self.handler.get_messages + else: + self.add_warning = self.stderr_add_warning + + def default_add_warning (self, warning_text): + pass + + def default_open (self, arg = ""): + pass + + def default_close (self, arg = ""): + pass + + def get_messages (self): + return self.messages + + def stderr_add_warning (self, warning_text): + stderr.write (warning_text) + return + + + diff --git a/ACE/bin/PythonACE/fuzz/check_includes.py b/ACE/bin/PythonACE/fuzz/check_includes.py new file mode 100644 index 00000000000..d6ab7148597 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/check_includes.py @@ -0,0 +1,20 @@ +""" Checks that includes of files in ace/tao/ciao use "" instead of <> """ + +import _types +type_list = _types.source_files + _types.header_files + _types.inline_files + _types.idl_files + +from sys import stderr +import re + +regex = re.compile ("\s*#\s*include\s*(\/\*\*\/){0,1}\s*<[(ace)|(tao)|(ciao)|(TAO)|(CIAO)].*>") +begin_exclude = re.compile ("FUZZ\: disable check_for_include") +end_exclude = re.compile ("FUZZ\: enable check_for_include") + +error_message = ": error: contains an include to ace/tao/ciao code using <>, instead of \"\"\n" + +from _generic_handler import generic_handler + +def handler (file_name, file_content): + return generic_handler (regex, begin_exclude, end_exclude, error_message, file_name, file_content) + + diff --git a/ACE/bin/PythonACE/fuzz/cpp_inline.py b/ACE/bin/PythonACE/fuzz/cpp_inline.py new file mode 100644 index 00000000000..92afe0b1e38 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/cpp_inline.py @@ -0,0 +1,23 @@ +""" Checks for ACE_INLINE or and ASYS_INLINE in a .cpp file """ +from _types import source_files +type_list = source_files + + +import re +from sys import stderr +regex = re.compile ("(ACE_INLINE)|(ASYS_INLINE)") + +error_message = ": error: ACE_INLINE or ASYS_INLINE found in .cpp file\n" + +def handler (file_name, file_content): + if regex.search (file_content) != None: + # Lets take some time to generate a detailed error report + # since we appear to have a violation + lines = file_content.splitlines () + for line in range (len (lines)): + if regex.search (lines[line]) != None: + stderr.write (file_name + ':' + str (line + 1) + error_message) + + return 1 + else: + return 0 diff --git a/ACE/bin/PythonACE/fuzz/inline.py b/ACE/bin/PythonACE/fuzz/inline.py new file mode 100644 index 00000000000..9610f0cf76e --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/inline.py @@ -0,0 +1,19 @@ +""" Checks that the C++ inline keyword is not used """ + +from _types import inline_files +type_list = inline_files + +from sys import stderr +import re + +regex = re.compile ("(\s|^)+inline\s+") +begin_exclude = re.compile ("FUZZ\: disable check_for_inline") +end_exclude = re.compile ("FUZZ\: enable check_for_inline") + +error_message = "contains a C++ inline keyword, instead of ACE_INLINE\n" + +from _generic_handler import generic_handler + +def handler (file_name, file_content): + return generic_handler (regex, begin_exclude, end_exclude, error_message, file_name, file_content) + diff --git a/ACE/bin/PythonACE/fuzz/math_include.py b/ACE/bin/PythonACE/fuzz/math_include.py new file mode 100644 index 00000000000..cedbddb0b31 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/math_include.py @@ -0,0 +1,19 @@ +""" Checks that the C++ inline keyword is not used """ + +import _types +type_list = _types.source_files + _types.header_files + _types.inline_files + +from sys import stderr +import re + +regex = re.compile ("^\s*#\s*include\s*(\/\*\*\/){0,1}\s*\<math\.h\>") +begin_exclude = re.compile ("FUZZ\: disable check_math_include") +end_exclude = re.compile ("FUZZ\: enable check_math_include") + +error_message = ": error: contains an include to math.h\n" + +from _generic_handler import generic_handler + +def handler (file_name, file_content): + return generic_handler (regex, begin_exclude, end_exclude, error_message, file_name, file_content) + diff --git a/ACE/bin/PythonACE/fuzz/max_filename.py b/ACE/bin/PythonACE/fuzz/max_filename.py new file mode 100644 index 00000000000..26932064258 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/max_filename.py @@ -0,0 +1,16 @@ +""" Checks that filenames are the correct length """ + +type_list = ["*"] + +max_filename_length = 50 + +from os.path import split +from sys import stderr + +def handler (file_name, file_content): + path, filename = split (file_name) + if len (filename) >= max_filename_length: + stderr.write (file_name + ":0: error: File name meets or exceeds maximum allowable length (" + + str (max_filename_length) + ")\n") + return 1 + return 0 diff --git a/ACE/bin/PythonACE/fuzz/max_project_len.py b/ACE/bin/PythonACE/fuzz/max_project_len.py new file mode 100644 index 00000000000..39d3b14c163 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/max_project_len.py @@ -0,0 +1,26 @@ +""" Checks that project names are not too long """ + +from max_filename import max_filename_length + +type_list = ["mpc"] + +max_proj_len = max_filename_length - 12 # GNUmakefile. + +from sys import stderr +import re + +regex = re.compile ("\s*project\s*\((\w+)\)") + +def handler (file_name, file_content): + match = regex.search (file_content) + if match == None: + return 0 + else: + for group in match.groups (): + stderr.write (file_name + ":0: error: Project named " + group + + " meets or exceeds the maximum project name length of " + + str (max_proj_len) + " characters\n") + + return 1 + + diff --git a/ACE/bin/PythonACE/fuzz/newline.py b/ACE/bin/PythonACE/fuzz/newline.py new file mode 100644 index 00000000000..39847e05c65 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/newline.py @@ -0,0 +1,17 @@ +""" Checks that the file has a newline at the end. """ + +type_list = ["cpp", "h", "inl", "html", "idl", "pl"] + +import re +from sys import stderr + +regex = re.compile ("\n\Z") + +def handler (file_name, file_content): + if regex.search (file_content) == None: + stderr.write (file_name + ":0: error: " + file_name + " lacks a newline at the end of the file.\n") + return 1 + else: + return 0 + + diff --git a/ACE/bin/PythonACE/fuzz/no_conflict_markers.py b/ACE/bin/PythonACE/fuzz/no_conflict_markers.py new file mode 100644 index 00000000000..d2d2f8e917a --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/no_conflict_markers.py @@ -0,0 +1,20 @@ +""" Checks that the file does not contain SVN conflict markers """ + + +type_list = ["*"] + +from sys import stderr +import re + +regex = re.compile ("^<<<<|^>>>>|^====", re.MULTILINE) +begin_exclude = re.compile ("FUZZ\: disable conflict_marker_check") +end_exclude = re.compile ("FUZZ\: enable conflict_marker_check") + +error_message = ": error: contains a SVN conflict marker. Please resolve the conflict before committing.\n" + +from _generic_handler import generic_handler + +def handler (file_name, file_content): + return generic_handler (regex, begin_exclude, end_exclude, error_message, file_name, file_content) + + diff --git a/ACE/bin/PythonACE/fuzz/noncvs.py b/ACE/bin/PythonACE/fuzz/noncvs.py new file mode 100644 index 00000000000..de52422c80d --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/noncvs.py @@ -0,0 +1,12 @@ +""" Catches most files disallowed in CVS """ + +type_list = ["icc", "ncb", "opt", "zip", "dsw", + "vcproj", "dsw", "bor", "vcp", "pdb", + "o", "ilk", "pyc", "so", "dll", "lib" ] + +from sys import stderr + +def handler (file_name, file_content): + stderr.write (file_name + ":0: error: This file should not be checked into the repository\n") + return 1 + diff --git a/ACE/bin/PythonACE/fuzz/ptr_arith_t.py b/ACE/bin/PythonACE/fuzz/ptr_arith_t.py new file mode 100644 index 00000000000..4ee73babb43 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/ptr_arith_t.py @@ -0,0 +1,17 @@ +""" Checks that ptr_arith_t usage in source code. ptr_arithh_t is non-portable + use ptrdiff_t instead. """ + +import _types +type_list = _types.source_files + _types.header_files + _types.inline_files + +from sys import stderr +import re + +regex = re.compile ("(ptr_arith_t )|(ptr_arith_t,)") +error_message = ": error: contains a non portable reference to ptr_arith_t, use ptrdiff_t instead.\n" + +from _generic_handler import generic_handler_no_exceptions + +def handler (file_name, file_content): + return generic_handler_no_exceptions (regex, error_message, file_name, file_content) + diff --git a/ACE/bin/PythonACE/fuzz/refcountservantbase.py b/ACE/bin/PythonACE/fuzz/refcountservantbase.py new file mode 100644 index 00000000000..31d8d5bb3a9 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/refcountservantbase.py @@ -0,0 +1,17 @@ +""" Checks that an obsolete PortableServer::RefCountServantBase is not used """ + +from _types import header_files +type_list = header_files + +from sys import stderr +import re + +regex = re.compile ("RefCountServantBase") + +error_message = ": error: reference to deprecated PortableServer::RefCountServantBase\n" + +from _generic_handler import generic_handler_no_exceptions + +def handler (file_name, file_content): + return generic_handler_no_exceptions (regex, error_message, file_name, file_content) + diff --git a/ACE/bin/PythonACE/fuzz/streams_include.py b/ACE/bin/PythonACE/fuzz/streams_include.py new file mode 100644 index 00000000000..24def75fd66 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/streams_include.py @@ -0,0 +1,19 @@ +""" Checks for inclusion of a non efficient streams include """ + +import _types +type_list = _types.source_files +_types. header_files + _types.inline_files + +import re + +regex = re.compile ("^\s*#\s*include\s*(\/\*\*\/){0,1}\s*\"ace\/streams\.h\"") +begin_exclude = re.compile ("FUZZ\: disable check_for_streams_include") +end_exclude = re.compile ("FUZZ\: enable check_for_streams_include") + +error_message = ": warning: expensive ace/streams.h included; consider ace/iosfwd.h\n" + +from _generic_handler import generic_handler +def handler (file_name, file_content): + return generic_handler (regex, begin_exclude, + end_exclude, error_message, + file_name, file_content, True) + diff --git a/ACE/bin/PythonACE/fuzz/verify_changelog.py b/ACE/bin/PythonACE/fuzz/verify_changelog.py new file mode 100644 index 00000000000..b84f2b3d147 --- /dev/null +++ b/ACE/bin/PythonACE/fuzz/verify_changelog.py @@ -0,0 +1,13 @@ +""" Verifies that changelogs obey certain properties """ + +type_list = [""] + +from sys import stderr +import re + +backslashes = re.compile ("") + +def handler (filename, filetext): + return 0 + + diff --git a/ACE/bin/Uniqueid.pm b/ACE/bin/Uniqueid.pm new file mode 100644 index 00000000000..f1367caa6e4 --- /dev/null +++ b/ACE/bin/Uniqueid.pm @@ -0,0 +1,28 @@ +# $Id$ +sub uniqueid +{ + if ($^O eq "MSWin32") + { + my $uid = 1; + + open (IPNUM, "ipconfig|") || die "Can't run ipconfig: $!\n"; + + while (<IPNUM>) + { + if (/Address/) + { + $uid = (split (/: (\d+)\.(\d+)\.(\d+)\.(\d+)/))[4]; + } + } + + close IPNUM; + + return $uid; + } + else + { + return getpwnam (getlogin ()); + } +} + +1;
\ No newline at end of file diff --git a/ACE/bin/ace-install b/ACE/bin/ace-install new file mode 100755 index 00000000000..8a26fd802e5 --- /dev/null +++ b/ACE/bin/ace-install @@ -0,0 +1,513 @@ +#!/bin/sh + +# $Id$ + + +##################################################################### +# install_ace: distill the minimal stuff out of the ACE+TAO distribution +# alias cpio 'xargs -i echo {}'; # just for testing the script +# +# according to David Levine <levine@cs.wustl.edu> on 1999/01/09: +# +# An even better way would be to only build what you need. +# These directories are probably a good start: +# +# ace +# apps/gperf/src +# TAO/tao +# TAO/TAO_IDL +# TAO/orbsvcs +# +# netsvcs ? - not built in here, probably useful +# +##################################################################### + +# actions +unpack=0 +config=0 +compile=0 +install=0 +force=0 + +# can we do it? +die=0 + + +##################################################################### +# check for install_ace options +##################################################################### + +while [ $# -gt 0 ]; do + + case $1 in + + ########################################## + # help output + + -h | --help*) + echo " " + echo "`basename $0` [options]" + echo " " + echo "options:" + echo " -h, --help show brief help" + echo " " + echo "required options:" + echo " -r, --aceroot=ACE_ROOT use ACE_ROOT directory for build/install" + echo " " + echo "extracting and configuring options:" + echo " -z, --archive=FILE unpack specified source archive" + echo " -p, --platform=HEADER,MAKE use HEADER,MAKE as config.h, platform_macros" + echo " " + echo "compiling options:" + echo " -c, --compile=ACE_OPTS compile with make options (e.g. debug=0)" + echo " " + echo "installing options:" + echo " -i, --install=ACE_DEST install into ACE_DEST directory" + echo " -a, --arch=ACE_ARCH use ACE_ARCH subdirs for arch-dependent files" + echo " " + echo "miscellaneous options:" + echo " -f, --force don't ask for confirmation before proceeding" + echo " " + exit 0 + ;; + + ########################################## + # required options + + -r) + shift + if [ $# -gt 0 ]; then + ACE_ROOT=$1; export ACE_ROOT + else + echo "no ACE_ROOT specified" + exit 1 + fi + shift + ;; + + --aceroot*) + ACE_ROOT=`echo $1 | sed -e 's/^[^=]*=//g'`; export ACE_ROOT + shift + ;; + + ########################################## + # extracting and configuring options + + -z) + shift + if [ $# -gt 0 ]; then + ACE_ARCHIVE=$1; export ACE_ARCHIVE + unpack=1 + else + echo "no archive specified" + exit 1 + fi + shift + ;; + + --archive*) + ACE_ARCHIVE=`echo $1 | sed -e 's/^[^=]*=//g'`; export ACE_ARCHIVE + unpack=1 + shift + ;; + + -p) + shift + if [ $# -gt 0 ]; then + ACE_HEADER=`echo $1 | cut -f 1 -d ,`; export ACE_HEADER + ACE_MAKE=`echo $1 | cut -f 2 -d ,`; export ACE_MAKE + else + echo "no header,make files specified" + exit 1 + fi + config=1 + shift + ;; + + --platform*) + stuff=`echo $1 | sed -e 's/^[^=]*=//g'` + ACE_HEADER=`echo $stuff | cut -f 1 -d ,`; export ACE_HEADER + ACE_MAKE=`echo $stuff | cut -f 2 -d ,`; export ACE_MAKE + config=1 + shift + ;; + + ########################################## + # compiling options + + -c) + shift + if [ $# -gt 0 ]; then + ACE_OPTS="$1"; export ACE_OPTS + compile=1 + else + echo "no compilation options specified (e.g. debug=0)" + exit 1 + fi + shift + ;; + + --compile*) + ACE_OPTS=`echo $1 | sed -e 's/^[^=]*=//g'`; export ACE_OPTS + compile=1 + shift + ;; + + ########################################## + # installing options + + -i) + shift + if [ $# -gt 0 ]; then + ACE_DEST=$1; export ACE_DEST + install=1 + else + echo "no installation target directory specified (e.g. /tools/ace)" + exit 1 + fi + shift + ;; + + --install*) + ACE_DEST=`echo $1 | sed -e 's/^[^=]*=//g'`; export ACE_DEST + install=1 + shift + ;; + + -a) + shift + if [ $# -gt 0 ]; then + ACE_ARCH=$1; export ACE_ARCH + else + echo "no installation target architecture specified" + exit 1 + fi + shift + ;; + + --arch*) + ACE_ARCH=`echo $1 | sed -e 's/^[^=]*=//g'`; export ACE_ARCH + shift + ;; + + ########################################## + # miscellaneous options + + -f) + shift + force=1 + ;; + + *) + # no more options, get on with life + if [ $# -gt 0 ]; then + echo "unrecognized option: $1" + exit 1 + fi + ;; + esac +done + + +##################################################################### +# sanity checks for required variables +##################################################################### + +if [ $install -ne 0 -a $compile -ne 0 -a $unpack -eq 0 ]; then + echo "- No actions specified." + die=1 +fi + +if [ $unpack -ne 0 -a $compile -ne 0 -a $config -eq 0 ] \ + || [ $unpack -ne 0 -a $install -ne 0 -a $config -eq 0 ]; then + echo "- Must set platform config options with --platform option" + echo " (`basename $0` -h for help) to unpack and compile/install" + die=1 +fi + +if [ -z "$ACE_ROOT" ]; then + echo "- Must set ACE_ROOT directory before proceeding..." + echo " The directory may be set with the ACE_ROOT environment" + echo " variable or the --aceroot option (`basename $0` -h for help)" + die=1 +fi + +if [ $install -eq 1 -a -z "$ACE_ARCH" ]; then + # just set it to blank if we want to flatten this level of subdirectory + ACE_ARCH="" +fi + +if [ $die -ne 0 ]; then + echo "- terminating `basename $0` script" + exit 2 +fi + + +##################################################################### +# announce intentions +##################################################################### + +echo "This script will perform the following actions:" + +echo "using ACE_ROOT directory: $ACE_ROOT" + +if [ $unpack -ne 0 ]; then + echo " " + echo "Extracting:" + echo "- unpack source archive: $ACE_ARCHIVE" +fi + +if [ $config -ne 0 ]; then + echo " " + echo "Configuring:" + echo "- platform config.h header: $ACE_HEADER" + echo "- platform makefile macros: $ACE_MAKE" +fi + +if [ $compile -ne 0 ]; then + echo " " + echo "Compiling:" + echo "- ACE/TAO compile options: $ACE_OPTS" +fi + +if [ $install -ne 0 ]; then + echo " " + echo "Installing:" + echo "- install target directory: $ACE_DEST" + echo "- install target arch: $ACE_ARCH" +fi + +echo "" + + +##################################################################### +# confirm desire to proceed +##################################################################### + +if [ $force -eq 0 ]; then + echo " " + echo "Type 'yes' to proceed, anything else to exit" + + read ready + if [ "$ready" != "yes" ]; then + echo "Terminating install script. Thank you for playing." + echo "We have some lovely parting gifts for you. =)" + exit 1 + fi +fi + + +##################################################################### +# extract ACE and TAO +##################################################################### + +if [ $unpack -ne 0 ]; then + + echo "Unpacking $ACE_ARCHIVE..." + + cd `dirname $ACE_ROOT` + gzip -dc $ACE_ARCHIVE | tar xvf - + +fi + + +##################################################################### +# configure ACE and TAO +##################################################################### + +if [ $config -ne 0 ]; then + + echo "Configuring: $ACE_HEADER,$ACE_MAKE..." + + # copy the files if they exist + test -f $ACE_ROOT/ace/$ACE_HEADER \ + && cp $ACE_ROOT/ace/$ACE_HEADER $ACE_ROOT/ace/config.h + test -f $ACE_ROOT/include/makeinclude/$ACE_MAKE \ + && cp $ACE_ROOT/include/makeinclude/$ACE_MAKE \ + $ACE_ROOT/include/makeinclude/platform_macros.GNU + + # print error message and die if they don't + if [ ! -f $ACE_ROOT/ace/$ACE_HEADER ]; then + echo "error: $ACE_HEADER doesn't exist" + die=1 + fi + if [ ! -f $ACE_ROOT/include/makeinclude/$ACE_MAKE ]; then + echo "error: $ACE_MAKE doesn't exist" + die=1 + fi + + if [ $die -ne 0 ]; then + exit $die + fi + +fi + + +##################################################################### +# compile ACE and TAO +##################################################################### + +if [ $compile -ne 0 ]; then + + echo "Compiling: $ACE_OPTS..." + + ########################################## + # add ACE_ROOT/ace to LD_LIBRARY_PATH so tao_idl can find libACE.so + if [ "`uname -s`" = "HP-UX" ]; then + if [ ! -z "$SHLIB_PATH" ]; then + SHLIB_PATH=$ACE_ROOT/ace:$SHLIB_PATH + else + SHLIB_PATH=$ACE_ROOT/ace; export SHLIB_PATH + fi + else + if [ ! -z "$LD_LIBRARY_PATH" ]; then + LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH + else + LD_LIBRARY_PATH=$ACE_ROOT/ace; export LD_LIBRARY_PATH + fi + fi + + ########################################## + # compile a few select directories + for d in ace apps/gperf/src TAO/tao TAO/TAO_IDL TAO/orbsvcs TAO/utils; do + echo --- Building in $d. + cd "$ACE_ROOT/$d" + make $ACE_OPTS + if [ $? -ne 0 ]; then + echo --- Error during build: $? + exit $? + fi + done +fi + + +##################################################################### +# install ACE and TAO +##################################################################### + +if [ $install -ne 0 ]; then + + echo "Installing: $ACE_DEST..." + + ########################################## + # determine final target directories + + ACE_VER=`head -n 1 $ACE_ROOT/VERSION | sed -e 's/^[^0-9]*//' -e 's/[, ].*//'` + ACE_DIR="$ACE_DEST/ACE-$ACE_VER"; export ACE_DIR + + TAO_VER=`head -n 1 $ACE_ROOT/TAO/VERSION | sed -e 's/^[^0-9]*//' -e 's/[, ].*//'` + TAO_DIR="$ACE_DEST/TAO-$TAO_VER"; export ACE_DIR + + ########################################## + # create target directories as needed + echo "creating target directories..." + + ace_dirs="$ACE_DIR $ACE_DIR/include $ACE_DIR/man" + ace_arch_dirs="$ACE_DIR/$ACE_ARCH/include/ace \ + $ACE_DIR/$ACE_ARCH/bin $ACE_DIR/$ACE_ARCH/lib" + tao_dirs="$TAO_DIR $TAO_DIR/include $TAO_DIR/include/orbsvcs" + tao_arch_dirs="$TAO_DIR/$ACE_ARCH/include \ + $TAO_DIR/$ACE_ARCH/bin $TAO_DIR/$ACE_ARCH/lib" + + for dir in $ace_dirs $ace_arch_dirs $tao_dirs $tao_arch_dirs; do + if [ ! -d $dir ]; then + echo $dir + mkdir -p $dir + fi + done + + ########################################## + # copy TAO stuff + + cd $ACE_ROOT/TAO + cp VERSION $TAO_DIR/$ACE_ARCH/TAO-VERSION + + # copy TAO includes + echo "Copying include files..." + find tao -type f -name "*.idl" -print | cpio -p -d -V $TAO_DIR/include + find tao -type f -name "*.pidl" -print | cpio -p -d -V $TAO_DIR/include + find tao -type f -name "*.h" -print | grep -v "^config\.h" | cpio -p -d -V $TAO_DIR/include + find tao -type f \( -name "*.i" -o -name "*.inl" \) -print | cpio -p -d -V $TAO_DIR/include + find tao -type f -name "*.cpp" -print | cpio -p -d -V $TAO_DIR/include + + # NOTE: may need all .h, .i and .cpp under TAO/orbsvcs, instead of just TAO/orbsvcs/orbsvcs + cd orbsvcs + find orbsvcs -type f -name "*.idl" -print | cpio -p -d -V $TAO_DIR/include + find orbsvcs -type f -name "*.pidl" -print | cpio -p -d -V $TAO_DIR/include + find orbsvcs -type f -name "*.h" -print | grep -v "^config\.h" | cpio -p -d -V $TAO_DIR/include + find orbsvcs -type f \( -name "*.i" -o -name "*.inl" \) -print | cpio -p -d -V $TAO_DIR/include + find orbsvcs -type f -name "*.cpp" -print | cpio -p -d -V $TAO_DIR/include + cd .. + + # copy TAO libs + echo "Copying libraries..." + for f in `find . -type f -name "lib?*" -not -name "*\.dsw" -not -name "*Test*" -print`; do + echo $f + cp $f $TAO_DIR/$ACE_ARCH/lib + done + + # copy TAO executables + echo "Copying executables..." + + ALL_PROGS=`find orbsvcs -type f -perm +a+x -print | grep -v ".*lib.*" | grep -v ".\.pl" | grep -v test | grep -v example` + ALL_PROGS="`find utils -type f -perm +a+x -print` $ALL_PROGS" + PROGS=`echo $ALL_PROGS | tr " " "\n" | grep -v test | grep -v default.bld | grep -v README | grep -v GNUmakefile` + + for f in TAO_IDL/tao_idl $PROGS; do + echo $f + cp $f $TAO_DIR/$ACE_ARCH/bin + done + + ########################################## + # copy ACE stuff + + cd $ACE_ROOT + cp VERSION $ACE_DIR/$ACE_ARCH/ACE-VERSION + + # copy ACE includes + echo "Copying include files..." + find ace -type f -name "*.h" -print | grep -v "^config\.h" | cpio -p -d -V $ACE_DIR/include + find ace -type f \( -name "*.i" -o -name "*.inl" \) -print | cpio -p -d -V $ACE_DIR/include + find ace -type f -name "*.cpp" -print | cpio -p -d -V $ACE_DIR/include + cp ace/config.h $ACE_DIR/$ACE_ARCH/include/ace/config.h + chmod -R a+r $ACE_DIR/$ACE_ARCH/include + + # copy ACE libs + echo "Copying libraries..." + for f in `find . -type f -name "lib?*" -not -name "*\.dsw" -not -name "*Test*" -print`; do + # only copy libs if they're not already in $TAO_DIR/$ACE_ARCH/lib + maybe_tao_lib=$TAO_DIR/$ACE_ARCH/lib/`basename $f` + if [ ! -f $maybe_tao_lib ]; then + echo $f + cp $f $ACE_DIR/$ACE_ARCH/lib + fi + test -f $maybe_tao_lib && echo "library $f already installed with TAO" + done + + # copy ACE executables + echo "Copying executables..." + ACE_PROGS=apps/gperf/src/gperf + + for f in $ACE_PROGS; do + echo $f + cp $f $ACE_DIR/$ACE_ARCH/bin + done + + # copy ACE man pages + echo "Copying man pages..." + find man -type f -print | cpio -p -d -V $ACE_DIR + + + # PERMISSIONS + chmod -R a+r $ACE_DEST + find $ACE_DEST -type d -exec chmod a+x {} \; + find $ACE_DEST -type f -perm +a+x -exec chmod a+x {} \; + +fi # if [ $install -ne 0 ] + + +##################################################################### +# that's all, folks +##################################################################### + +echo "`basename $0`: done." diff --git a/ACE/bin/ace_components b/ACE/bin/ace_components new file mode 100755 index 00000000000..23bfeb29149 --- /dev/null +++ b/ACE/bin/ace_components @@ -0,0 +1,111 @@ +#! /bin/sh +# $Id$ +# +# Encapsulates set/access of a components file, which records set of +# components that were built in a library. Intended to be used by +# GNUmakefiles and scripts. See ACE_wrappers/ace/GNUmakefile for an +# example. +# +usage="usage: $0 --ace | --orbsvcs | --tao | --pace \ + [--remove | --set \" <components list> \"]" + +#### +#### Make sure that PACE_ROOT, ACE_ROOT, and TAO_ROOT are set. +#### +if [ ! "$ACE_ROOT" ]; then + echo $0': your ACE_ROOT environment variable is not set!' 1>&2 + exit -1 +fi +if [ ! "$TAO_ROOT" ]; then + TAO_ROOT=$ACE_ROOT/TAO + export TAO_ROOT +fi +if [ ! "$PACE_ROOT" ]; then + PACE_ROOT=$ACE_ROOT/PACE + export PACE_ROOT +fi + +#### +#### Process command line arguments. +#### +if [ $# -ge 1 ]; then + case $1 in + --ace) components_file=$ACE_ROOT/ace/ACE_COMPONENTS.list ;; + --orbsvcs) + components_file=$TAO_ROOT/orbsvcs/orbsvcs/ORBSVCS_COMPONENTS.list ;; + --tao) components_file=$TAO_ROOT/tao/TAO_COMPONENTS.list ;; + --pace) components_file=$PACE_ROOT/PACE_COMPONENTS.list ;; + *) echo $usage; exit -1 ;; + esac + shift +else + echo $usage + exit -1 +fi + +set_components=0 +append_components=0 +if [ $# -ge 1 ]; then + if [ $1 = '--set' ]; then + set_components=1 + shift + if [ $# -eq 1 ]; then + components=$1 + shift + else + echo $usage + exit -1 + fi + elif [ $1 = '--append' ]; then + append_components=1 + shift + if [ $# -eq 1 ]; then + components=$1 + shift + else + echo $usage + exit -1 + fi + elif [ $1 = '--remove' ]; then + rm -f $components_file + else + echo $usage + exit -1 + fi +fi + +if [ $set_components -eq 1 ]; then + #### + #### Update the components file, if it has changed since last set. + #### + if [ -f $components_file ]; then + if echo "$components" | diff - $components_file > /dev/null; then + : + else + echo "$components" > $components_file + fi + else + echo "$components" > $components_file + fi +elif [ $append_components -eq 1 ]; then + #### + #### Update the components file, if it has changed since last set. + #### + if [ -f $components_file ]; then + if cat $components_file | grep "$components" > /dev/null; then + : + else + (cat $components_file; echo "$components") | tr ' ' '\012' | sort -u > $components_file.$$ + mv -f $components_file.$$ $components_file + fi + else + echo "$components" > $components_file + fi +else + #### + #### Access the contents of the components file, if it exists. + #### + if [ -f $components_file ]; then + cat $components_file + fi +fi diff --git a/ACE/bin/ace_ld b/ACE/bin/ace_ld new file mode 100755 index 00000000000..0f5cc50e1b0 --- /dev/null +++ b/ACE/bin/ace_ld @@ -0,0 +1,237 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# +# Drop-in replacement for "ld" that supports munching. +# +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +## +## Symbols that produce a warning due to size changing. +## This is a harmless known bug with the version of gcc that comes with +## Tornado II. Anything in this list will be suppressed unless the -w +## option is used. +## +my(@symbols) = ('dequeue__t17ACE_Message_Queue1Z14ACE_NULL_SYNCHRP17ACE_Message_BlockP14ACE_Time_Value', + 'activate__t17ACE_Message_Queue1Z14ACE_NULL_SYNCH', + ); + +$usage = + "usage: $0 [-? | [-w] [-o <VDIR>] [[-C <compile> --] [-m <munch>] [-n <nm>]] [-f]]] " . + "<ld command>\n"; + +#### To avoid quoting problems on the command line, all arguments +#### between -C and -- are combined into the single compile command. +$compile_option = 0; +$ss_change_warn = 0; + +#### +#### process command line args +#### +while ( $#ARGV >= 0 && $ARGV[0] =~ /^-/ ) { + if ( $ARGV[0] eq '-C' ) { + $compile_option = 1; + if ( $ARGV[1] !~ /^[-].+$/ ) { + $compile = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -c option\n"; + die $usage; + } + } elsif ( $ARGV[0] eq '--' ) { + $compile_option = 0; + } elsif ( $ARGV[0] eq '-m' ) { + if ( $ARGV[1] !~ /^[-].+$/ ) { + $munch = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -m option\n"; + die $usage; + } + } elsif ( $ARGV[0] eq '-n' ) { + if ( $ARGV[1] !~ /^[-].+$/ ) { + $nm = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -n option\n"; + die $usage; + } + } elsif ( $ARGV[0] eq '-o' ) { + if ( $ARGV[1] !~ /^[-].+$/ ) { + $vdir = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -o option\n"; + die $usage; + } + } elsif ( $ARGV[0] eq '-w' ) { + $ss_change_warn = 1; + } elsif ( $ARGV[0] eq '-?' ) { + print "$usage"; + exit; + } else { + if ($compile_option) { + $compile .= " $ARGV[0]"; + } else { + warn "$0: unknown option $ARGV[0]\n"; + die $usage; + } + } + shift; +} + +#### +#### If $vdir is empty, set default object file directory (.obj) +#### +if ($vdir eq ''){ + $vdir = ".obj"; +} + +#### +#### Save link command, i.e., current @ARGV, for use below. +#### +@args = @ARGV; + + +#### +#### Find full path to each library. +#### +@libDirs = (); +$current_dir_in_libDirs = 0; +@libs = (); +@objs = ''; + +foreach $arg (@ARGV) { + if ($arg =~ /^['"]?-L([\S]+)/) { + ($dir = $1) =~ s%/+$%%; #### trim any trailing slashes + push (@libDirs, $dir); + $current_dir_in_libDirs = 1 if $dir eq '.'; + } elsif ($arg =~ /^['"]?-l([\S]+)/) { + push (@libs, $1); + } elsif ($arg =~ /\.o$/) { + push (@objs, $arg); + } +} + +#### Add . to libDirs if it doesn't already have it. +push (@libDirs, ".") unless $current_dir_in_libDirs; + +foreach $lib (@libs) { + foreach $libDir (@libDirs) { + if (-e "$libDir/lib$lib.a") { + $full_path{$lib} = "$libDir/lib$lib.a"; + last; + } + } +} + + +#### +#### Set up signal handler. +#### +$done = 0; +$SIG{'HUP'} = $SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'cleanup'; + + +#### +#### Munch, if $munch is non-null. +#### +if ($munch) { + $munch_objs = join (' ', @objs); + $munch_libs = join (' ', values %full_path); + + open (MUNCH, "$nm $munch_objs $munch_libs | $munch |") || + &fail ("$0: unable to run \"$nm\" or \"$munch\"\n"); + + open (CTORDTOR, "> __ctordtor.c") || + &fail ("$0: unable to open \"__ctordtor.c\"\n"); + + while (<MUNCH>) { + #### Filter out munch output that contains '.cpp'. It results from + #### .cpp files that have no text or data, e.g., .cpp files that + #### only contain template instantiations. These lines confuse g++. + print CTORDTOR unless /\.cpp/; + } + + close CTORDTOR || &fail ("$0: unable to write \"__ctordtor.c\"\n"); + close MUNCH; + + system ("$compile -o $vdir/__ctordtor.o __ctordtor.c") && + &fail ("$0: \"$compile\" failed\n"); +} + + +#### +#### Construct the link command from @args and perform the link. +#### +if ($munch) { + #### Insert ctordtor object file before first library in link command. + $arg_lib = 0; + foreach $arg (@ARGV) { + if ($arg =~ /^['"]?-l/) { + last; + } + ++$arg_lib; + } + splice (@args, $arg_lib, 0, "$vdir/__ctordtor.o"); +} + +$link_command = join (' ', @args); + +if (open(PP, "$link_command 2>&1 |")) { + while(<PP>) { + my($line) = $_; + if ($ss_change_warn) { + print $line; + } + else { + my($found) = 0; + foreach my $symbol (@symbols) { + if ($line =~ /Warning: size of symbol `$symbol\'/) { + $found = 1; + } + } + if (!$found) { + print $line; + } + } + } + close(PP); + + if ($? ne 0) { + fail ("$0: $link_command failed\n"); + } +} +else { + fail ("$0: $link_command failed\n"); +} + + +$done = 1; +&cleanup; + + +#### +#### +#### +sub fail { + local ($message) = @_; + + warn $message; + &cleanup; +} + + +#### +#### clean up when done or on signal +#### +sub cleanup { + unlink "__ctordtor.c", "$vdir/__ctordtor.o"; + if ($done) { + exit 0; + } else { + exit 1; + } +} + +#### EOF diff --git a/ACE/bin/ace_tests.lst b/ACE/bin/ace_tests.lst new file mode 100644 index 00000000000..0b5d78549d0 --- /dev/null +++ b/ACE/bin/ace_tests.lst @@ -0,0 +1,13 @@ +# $Id$ +# +# This is the list of run_test.pl's that need to be run by +# auto_run_tests.pl. +# Each line has its own test, and a test can be followed by a +# list of configurations it does _not_ run on. +# +# Example: TAO\examples\foo\run_test.pl: !MINIMUM !ST +# +# NOTE: This file contains tests only for ACE. Please do not include +# tests in TAO here.. +tests/run_test.pl +examples/Reactor/WFMO_Reactor/run_test.pl: !Cygwin !VxWorks diff --git a/ACE/bin/aix_shr b/ACE/bin/aix_shr new file mode 100755 index 00000000000..16daded8e02 --- /dev/null +++ b/ACE/bin/aix_shr @@ -0,0 +1,32 @@ +#!/bin/sh +# $Id$ +# Filter out the duplicate symbol warnings from Visual Age C++ +# + +output=`basename $0`.$$.`/bin/date +%Y%m%d%H%M%S` +usrtmp="/tmp" +for possible in "$TMPDIR" "$TEMP" "$TMP"; do + if [ "$possible" != "" ]; then + if [ -w "$possible" ]; then + usrtmp="$possible" + break + fi + fi +done + +## Send the output to a temporary file and save the return code. +## This macro is being passed during the to avoid #include errors +## while instantiating templates. +$@ -DACE_VACPP_INSTANTIATING_TEMPLATES > "$usrtmp/$output" 2>&1 +status=$? + +## Print the output to stdout, but filter duplicate symbol warnings from +## Visual Age C++-using builds. The first pattern ends up coming from the +## linker in Visual Age C++ 5 builds; the second is from Visual Age C++ 6. +/bin/egrep -v '0711-(224|345)|1540-0(424|425|436)' "$usrtmp/$output" + +## Clean up the temporary file +/bin/rm -f "$usrtmp/$output" + +## Exit with the return code from the compiler +exit $status diff --git a/ACE/bin/auto_compile b/ACE/bin/auto_compile new file mode 100755 index 00000000000..914bcabaa18 --- /dev/null +++ b/ACE/bin/auto_compile @@ -0,0 +1,607 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- +# $Id$ +# +# This script checkouts ACE from CVS, updates the "clone" directory, +# compiles $ACE_ROOT/ace and $ACE_ROOT/tests and finally runs +# $ACE_ROOT/tests/run_tests.sh. +# +# If it detects any problem it send email. +# +# DO NOT invoke this script from your crontab, use +# auto_compile_wrapper for that. +# +# This script requires Perl5. +# +# TODO: Modify the script or split it in such a way that the main copy +# can be obtained either using cvs or downloading the lastest beta +# from the WWW. +# + +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +use File::Basename; +use File::Copy; +use FileHandle; +require POSIX; + +# This are the sub-directories (in the module) we really compile. + +# Find out the command name. +$CMD = basename($0); + +$dont_update = 0; +# $copy_logs = 1; +# $LOG_DESTINATION = $ENV{'HOME'}.'/.www-docs/auto_compile'; + +$copy_logs = 0; +$LOG_DESTINATION='bugzilla'.'@cs.wustl.edu'; + +$dont_build_tao = 0; +$dont_run = 0; +$makefile_suffix = ""; +$pre_realclean = 0; +$post_realclean = 0; +$report_success = 0; +$debug = 0; +$sandbox = ''; +$sandbox_timeout = 600; +$sendreport = 0; +@BUILD_LIST= (); +@CONFIGURATION_OPTIONS = (); + +@ARGS = (); +while ($#ARGV >= 0) { + if (!($ARGV[0] =~ m/^-/)) { + push @ARGS, $ARGV[0]; + } elsif ($ARGV[0] eq "-single_threaded") { + print STDERR "$CMD: obsolete option $ARGV[0], " + ."please use -config instead\n"; + push @CONFIGURATION_OPTIONS, 'ST'; + } elsif ($ARGV[0] eq "-minimum_corba") { + print STDERR "$CMD: obsolete option $ARGV[0], " + ."please use -config instead\n"; + push @CONFIGURATION_OPTIONS, 'MINIMUM'; + } elsif ($ARGV[0] eq "-ami") { + print STDERR "$CMD: obsolete option $ARGV[0], " + ."please use -config instead\n"; + push @CONFIGURATION_OPTIONS, 'AMI'; + } elsif ($ARGV[0] eq "-smart_proxies") { + print STDERR "$CMD: obsolete option $ARGV[0], " + ."please use -config instead\n"; + push @CONFIGURATION_OPTIONS, 'SMART_PROXIES'; + } elsif ($ARGV[0] eq "-static") { + print STDERR "$CMD: obsolete option $ARGV[0], " + ."please use -config instead\n"; + push @CONFIGURATION_OPTIONS, 'STATIC'; + } elsif ($ARGV[0] eq "-config") { + shift; + push @CONFIGURATION_OPTIONS, $ARGV[0]; + } elsif ($ARGV[0] eq "-build_list") { + shift; + @BUILD_LIST = split (/,/, $ARGV[0]); + } elsif ($ARGV[0] eq "-dont_update") { + $dont_update = 1; + } elsif ($ARGV[0] eq "-copy_logs") { + shift; + $copy_logs = 1; + $LOG_DESTINATION = $ARGV[0]; + } elsif ($ARGV[0] eq "-sandbox") { + shift; + $sandbox = $ARGV[0]; + } elsif ($ARGV[0] eq "-sandbox_timeout") { + shift; + $sandbox_timeout = $ARGV[0]; + } elsif ($ARGV[0] eq "-dont_run") { + $dont_run = 1; + } elsif ($ARGV[0] eq "-pre_realclean") { + $pre_realclean = 1; + } elsif ($ARGV[0] eq "-post_realclean") { + $post_realclean = 1; + } elsif ($ARGV[0] eq "-report_success") { + $report_success = 1; + } elsif ($ARGV[0] eq "-debug") { + $debug = 1; + } elsif ($ARGV[0] eq "-sendreport") { + $sendreport = 1; + } elsif ($ARGV[0] eq "-notao") { + $dont_build_tao = 1; + } elsif ($ARGV[0] eq "-make_type") { + shift; + $makefile_suffix = $ARGV[0]; + } else { + print "Ignoring option $ARGV[0]\n"; + } + shift; +} + +# Extract configuration information from command line. + # TODO: Some validation and checking should be done here. +$CHECKOUT = $ARGS[0]; +$BUILD = $ARGS[1]; +$LOGDIR = $ARGS[2]; +$ADMIN = $ARGS[3]; +$MAIL = "mail"; +if ($#ARGS >= 4) { + $MAIL = $ARGS[4]; +} +$LOG_URL = "http://ace.cs.wustl.edu/~bugzilla/auto_compile_logs/"; +if ($#ARGS >= 5) { + $LOG_URL = $ARGS[5]; +} +# This is the module we will checkout unless a different one is on the +# command line. +$MODULE='ACE_wrappers'; +if ($#ARGS >= 6) { + $MODULE = $ARGS[6]; +} + +$ENV{'ACE_ROOT'} = $CHECKOUT . '/' . $MODULE . '/build/' . $BUILD; +$ENV{'TAO_ROOT'} = $CHECKOUT . '/' . $MODULE . '/build/' . $BUILD . '/TAO'; + +# We obtain our revision to report errors. +$REVISION='$Revision$ '; + +# When an error is found we try to die gracefully and send some email +# to ADMIN. + +$disable_file = $LOGDIR . '/.disable'; +$histfile = $LOGDIR . '/history'; +$LOGBASE = POSIX::strftime("%Y_%m_%d_%H_%M", localtime); +$LOGFILE = $LOGDIR . '/' . $LOGBASE . '.txt'; +$HOST = `hostname`; +chop $HOST; +$LOG_NAME = $HOST . '_' . $BUILD . '/' . $LOGBASE . '.txt'; +$STATUS = "OK"; + +if ($debug) { + print "CHECKOUT = $CHECKOUT\n"; + print "BUILD = $BUILD\n"; + print "LOGDIR = $LOGDIR\n"; + print "ADMIN = $ADMIN\n"; + print "MAIL = $MAIL\n"; + print "ACE_ROOT = $ENV{ACE_ROOT}\n"; + print "TAO_ROOT = $ENV{TAO_ROOT}\n"; + print "CONFIGURATION_OPTIONS = ", @CONFIGURATION_OPTIONS, "\n"; +} + +push @INC, $CHECKOUT . '/' . $MODULE . '/bin'; + +require PerlACE::ConfigList; + +$config_list = new PerlACE::ConfigList; + +$config_list->my_config_list (@CONFIGURATION_OPTIONS); + +if ($#BUILD_LIST == -1) { + if ($dont_build_tao) { + @BUILD_LIST=('ace', 'netsvcs', 'tests'); + } + else { + @BUILD_LIST=('.', 'TAO'); + } +} + +sub mydie { + my $DEST_DIR = $LOG_DESTINATION.'/'.$HOST.'_'.$BUILD; + mkdir $DEST_DIR,0755 if (!-d $DEST_DIR); + if (open(STATUS, '>'.$DEST_DIR.'/status.txt')) { + print STATUS "SCOREBOARD_STATUS: Inactive\n"; + close STATUS; + } + unlink $disable_file; + die $_ . "\n"; +} + +@RUN_LIST = (); + +if ($debug) { + + @BUILD_LIST = ('ace'); + @RUN_LIST = ('TAO/tests/OctetSeq/run_test.pl'); + $ADMIN = $ENV{'LOGNAME'}; + +} else { + $config_list->load ($CHECKOUT . '/' . $MODULE . '/' . 'build/' . $BUILD . '/bin/auto_run_tests.lst'); + + @RUN_LIST = $config_list->valid_entries (); +} + +sub mail_logs { + open (MAIL, "|".$MAIL.' -s AUTO_COMPILE_LOG='.$LOG_NAME.' '.$LOG_DESTINATION) + || mydie "Cannot open mail pipe for: $LOG_NAME\n"; + + print MAIL 'This is the log for: ', "\n"; + print MAIL $CMD, ' [', $REVISION, "] for $HOST/$BUILD\n"; + + print MAIL "\n================================================================\n"; + + if (open (THELOG, "$LOGFILE")) + { + while (<THELOG>) { + print MAIL $_; + } + close (THELOG); + } + close (MAIL); # Ignore errors.... +} + +sub copy_logs { + local $DEST_DIR = $LOG_DESTINATION.'/'.$HOST.'_'.$BUILD; + mkdir $DEST_DIR,0755 if (!-d $DEST_DIR); + + copy($LOGFILE, $DEST_DIR.'/'.$LOGBASE.'.txt'); + + local $MAKE_PRETTY="$CHECKOUT/$MODULE/bin/make_pretty.pl"; + system ("perl $MAKE_PRETTY -b -i $LOGFILE >$DEST_DIR/$LOGBASE"."_brief.html"); + system ("perl $MAKE_PRETTY -i $LOGFILE >$DEST_DIR/$LOGBASE".".html"); + + chmod 0644, $DEST_DIR.'/'.$LOGBASE.'.txt' + , $DEST_DIR.'/'.$LOGBASE.'_brief.html' + , $DEST_DIR.'/'.$LOGBASE.'.html' ; +} + +sub report_errors { + + # First clear the lock, so the next execution works... + unlink $disable_file; # Ignore errors! + + if ($sendreport) { + # Now send a summary of the errors to the ADMIN account, if there are any. + + if ($#_ >= 0) { + local $to = $ADMIN; + + open (MAIL, "|".$MAIL.' -s "[AUTO_COMPILE] '.$HOST.' '.$BUILD.'" '.$to) + || mydie "Cannot open mail pipe for: $_\n"; + + print MAIL 'The following message is brought to you by: ', "\n"; + print MAIL $CMD, ' [', $REVISION, "] for $BUILD on $HOST\n\n"; + + print MAIL "\nPlease check the following log for more info:\n\n"; + print MAIL $LOG_URL, '?', $HOST, '_', $BUILD, "\n\n"; + + local $m; + foreach $m (@_) { + print MAIL $m, "\n"; + } + close (MAIL); # Ignore errors.... + } + } + + # Now send the complete log to bugzilla... + if ($copy_logs) { + copy_logs (); + } else { + mail_logs (); + } +} + +### MAIN FUNCTION + +if (-f $disable_file) { + print 'The following message is brought to you by: ', "\n"; + print $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n"; + + print "DISABLED\n"; + + exit 0; +} + +open (DISABLE, '>' . $disable_file) + || die "cannot open disable file <$disable_file>\n"; +print DISABLE "auto_compile <$date> is running\n"; +close (DISABLE) + || die "cannot close disable file"; + +open(HIST, '>>' . $histfile) + # Do not use 'mydie' to report the problem, it tries to remove the + # disable file + || mydie "cannot open history file \"$histfile\"\n"; + +$date = localtime; + +print HIST $CMD, ': running at ', $date, ' '; + +open(LOG, '>' . $LOGFILE) + || mydie "cannot open log file"; + +LOG->autoflush (); + +# The following lines are useful when debugging the script or wrapper. +# print LOG $CHECKOUT, " ", $BUILD, " ", $LOGDIR, " ", $ADMIN, "\n"; +#while (($key,$value) = each %ENV) { +# print LOG $key, " = ", $value, "\n"; +#} + +print LOG "#################### CVS\n"; +my $DEST_DIR = $LOG_DESTINATION.'/'.$HOST.'_'.$BUILD; +mkdir $DEST_DIR,0755 if !-d $DEST_DIR; +if (open(STATUS, '>'.$DEST_DIR.'/status.txt')) { + print STATUS "SCOREBOARD_STATUS: CVS\n"; + close STATUS; +} + +chdir($CHECKOUT) + || mydie "Cannot chdir to $CHECKOUT"; + +if ($dont_update == 0) { + $date = localtime; + print LOG "$CMD: starting checkout at ", $date, "\n"; + open(CVS, "cvs -q checkout -P $MODULE 2>&1 |") + || mydie "cannot start checkout of $MODULE"; + + $conflicts = 0; + while (<CVS>) { + if (m/^C /) { + ($unused, $entry) = split('/'); + if (($entry ne "ChangeLog\n") && ($entry ne "THANKS\n")) { + $conflicts = 1; + } + } + print LOG $_; + } + close(CVS); +# || mydie "error while checking out $MODULE"; + $date = localtime; + print LOG "$CMD: checkout finished at ", $date, "\n"; + + if ($conflicts != 0) { + mydie "conflicts on checkout"; + } +} + +chdir($MODULE) + || mydie "cannot chdir to $MODULE"; + +$date = localtime; +print LOG "$CMD: starting clone at ", $date, "\n"; +open(CLONE, "perl bin/create_ace_build -a -v $BUILD 2>&1 |") + || mydie "cannot clone directory"; +while(<CLONE>) { + print LOG $_; +} +close(CLONE) + || mydie "error while cloning ACE_ROOT"; +$date = localtime; +print LOG "$CMD: clone finished at ", $date, "\n"; + +chdir('build/' . $BUILD) + || mydie "cannot chdir to $BUILD"; + +@failures = (); + +if ($makefile_suffix ne "") { + $MAKEFLAGS = "-f Makefile.$makefile_suffix"; +} + +print LOG "#################### Compiler\n"; +if (open(STATUS, '>'.$DEST_DIR.'/status.txt')) { + print STATUS "SCOREBOARD_STATUS: Compile\n"; + close STATUS; +} + +if ($pre_realclean) { + foreach $i (reverse(@BUILD_LIST)) { + $date = localtime; + print LOG "$CMD: =============================================\n"; + print LOG "$CMD: make realclean in $i started at ", $date, "\n"; + open(MAKE, "make -k $MAKEFLAGS -C $i realclean 2>&1 |") + || mydie "cannot start make in $i"; + + while (<MAKE>) { + # Ignore errors.... + } + if (close(MAKE) == 0) { + push @failures, "errors while cleaning $i"; + } + $date = localtime; + print LOG "$CMD: make realclean in $i finished at ", $date, "\n"; + print LOG "$CMD: =============================================\n\n"; + } +} + +$MAKEFLAGS .= ""; +foreach $i (@BUILD_LIST) { + $date = localtime; + print LOG "$CMD: =============================================\n"; + print LOG "$CMD: make for $i started at ", $date, "\n"; + open(MAKE, "make -k $MAKEFLAGS -C $i 2>&1 |") + || mydie "cannot start make for $i"; + + local $current_dir = $i; + local $last_error = ""; + local $this_error = 0; + local $this_warning = 0; + while (<MAKE>) { + chop; + $this_error = $this_warning = 0; + if ($^O eq 'hpux' + && m/^Warning:[ \t]+[0-9]+ future errors were detected/) { + next; + } + print LOG $_, "\n"; + + if (m/^make(\[[0-9]+\])?: Entering directory /) { + s/^make(\[[0-9]+\])?: Entering directory //; + s%^$ENV{'ACE_ROOT'}/%%; + $current_dir = $_; + } + if (m/error:/i || m/error /i + || m/^make(\[[0-9]+\])?: \*\*\*/) { + $this_error = 1; + } + if ($^O eq 'aix' + && m/\d+-\d+ \([SI]\)/) { + $this_error = 1; + } + if ($this_error) { + if ($last_error ne $current_dir + || STATUS eq "COMPILATION WARNING") { + $STATUS = "COMPILATION ERROR"; + push @failures, "Error while compiling in $current_dir \n"; + $last_error = $current_dir; + } + } + if (m/warning:/i + || m/warning /i + || m/Info: /i) { + $this_warning = 1; + if ($^O eq 'aix' + && m/^ld: \d+-\d+ WARNING: Duplicate symbol: .*ACE.*/) { + $this_warning = 0; + } + } + if ($^O eq 'aix' + && m/\d+-\d+ \(W\)/) { + $this_warning = 1; + } + if ($this_warning) { + if ($last_error ne $current_dir) { + if ($STATUS eq "OK") { + $STATUS = "COMPILATION WARNING"; + } + push @failures, "Warning while compiling in $current_dir\n"; + $last_error = $current_dir; + } + } + } + if (close(MAKE) == 0) { + push @failures, "errors while running make in $i"; + } + $date = localtime; + print LOG "$CMD: make for $i finished at ", $date, "\n"; + print LOG "$CMD: =============================================\n\n"; +} + +print LOG "#################### Tests\n"; +if (open(STATUS, '>'.$DEST_DIR.'/status.txt')) { + print STATUS "SCOREBOARD_STATUS: Tests\n"; + close STATUS; +} + +if ($dont_run == 0) { + my $config_params; + if ($#CONFIGURATION_OPTIONS != -1) { + $config_params = ' -Config '; + } + $config_params .= join ' -Config ', @CONFIGURATION_OPTIONS; + + foreach my $i (@RUN_LIST) { + + local $directory = '.'; + local $program = $i; + + if ($i =~ /(.*)\/([^\/]*)$/) { + $directory = $1; + $program = $2; + } + + $date = localtime; + print LOG "\n\n$CMD: ================ $date ================\n"; + print LOG "auto_run_tests: $i\n"; + local $subdir = + $CHECKOUT .'/'. $MODULE .'/build/'. $BUILD .'/'. $directory; + chdir ($subdir) + || mydie "cannot chdir to $subdir"; + + $run_error = 0; + my $prefix = ''; + if ($sandbox ne "") { + $prefix = $sandbox.' '.$sandbox_timeout.' '; + } + if (open(RUN, $prefix."perl $program $config_params 2>&1 |") == 0) { + push @failures, "cannot run $program in $directory"; + next; + } + while (<RUN>) { + print LOG $_; + if (m/Error/ + || m/ERROR/ + || m/FAILED/ + || m/EXCEPTION/ + || m/pure virtual /i) { + if ($STATUS eq "OK") { + $STATUS = "RUNTIME ERROR"; + } + $run_error = 1; + } + } + if (close(RUN) == 0) { + if ($STATUS eq "OK") { + $STATUS = "RUNTIME ERROR"; + } + print LOG "ERROR, non-zero status returned by test script\n"; + push @failures, "Error when closing pipe for $program in $directory"; + next; + } + $date = localtime; + print LOG "$CMD: $program finished ", $date, "\n"; + + if ($run_error != 0) { + push @failures, + "errors detected while running $program in $directory"; + } + } +} + +if ($post_realclean) { + foreach $i (reverse(@BUILD_LIST)) { + $date = localtime; + print LOG "$CMD: =============================================\n"; + print LOG "$CMD: make realclean in $i started at ", $date, "\n"; + open(MAKE, "make -k $MAKEFLAGS -C $i realclean 2>&1 |"); + + while (<MAKE>) { + # Ignore errors.... + } + if (close(MAKE) == 0) { + push @failures, "errors while cleaning $i"; + } + $date = localtime; + print LOG "$CMD: make realclean in $i finished at ", $date, "\n"; + print LOG "$CMD: =============================================\n\n"; + } +} + +print LOG "#################### Config\n"; + +chdir($CHECKOUT . "/" . $MODULE . "/build/" . $BUILD) + || mydie "Cannot chdir to $CHECKOUT/$MODULE/build/$BUILD"; + +open (CONFIG, "perl bin/nightlybuilds/print_config.pl $CHECKOUT/$MODULE/build/$BUILD 2>&1 |") + || mydie "Cannot run print_config.pl script"; +while (<CONFIG>) { + print LOG $_; +} +close (CONFIG) + || mydie "Error while running print_config.pl script"; + +report_errors @failures; + +print LOG "#################### End\n"; +if (open(STATUS, '>'.$DEST_DIR.'/status.txt')) { + print STATUS "SCOREBOARD_STATUS: Inactive\n"; + close STATUS; +} + +close(LOG) + || mydie "cannot close LOGFILE"; + +print HIST "$STATUS\n"; +close(HIST) + || mydie "cannot close history file"; + +unlink $disable_file + || die "cannot unlink disable file"; + +if ($report_success && $STATUS eq "OK") { + report_errors "Congratulations: No errors or warnings detected\n"; +} + +exit 0; diff --git a/ACE/bin/auto_compile_wrapper b/ACE/bin/auto_compile_wrapper new file mode 100755 index 00000000000..f99c8df01a7 --- /dev/null +++ b/ACE/bin/auto_compile_wrapper @@ -0,0 +1,56 @@ +#!/bin/sh +# +# $Id$ +# +# Usually cron setups a really miserable enviroment, this script +# serves two purposes: +# 1. Setup a good enviroment for auto_compile. +# 2. Invoke auto_compile with the proper arguments for each site. +# +# The idea is to modify this script on a per-site basis and leave +# auto_compile unmodified. +# + +# Setup a proper path, remember that cvs, GNU make, perl5 and your +# compiler must be there. +PATH=.:$HOME/bin:/pkg/gnu/bin:/opt/SUNWspro/bin:$PATH +export PATH + +# Obvious enough. +CVSROOT=/project/cvs-repository +export CVSROOT + +# It could be a good idea to set CVSREAD this will make the staging +# area read-only, but our staging areas are public. +# CVSREAD=Y +# export CVSREAD + +# Here we define the cvs working copy for our staging area. +CHECKOUT=$HOME/head + +# In some sites the building directory differs from the cvs working +# copy. The directory is updated running +# $ACE_ROOT/bin/create_ace_build; but it must be setup manually the +# first time. +# TODO: Arrange for automatic creation of platform_macros.GNU & +# config.h. +BUILD=SUNCC + +# Here is where we store auto_compile output and keep a history of +# each run. +LOGDIR=$HOME/head/ACE_wrappers/build/$BUILD/auto_compile + +# Who do we send email when compilation (or anything else) fails. +ADMIN=PUT_YOUR_ADDRESS_HERE ; echo "You must edit this file" ; exit 0 + +# You must select a mail tool that can understand the -s option such +# as: +# +# /usr/bin/mailx Solaris +# /usr/bin/mailx HP-UX +# /usr/sbin/mailx IRIX +# /bin/mail Linux + +exec /pkg/gnu/bin/perl $CHECKOUT/ACE_wrappers/bin/auto_compile \ + $CHECKOUT $BUILD $LOGDIR $ADMIN /usr/bin/mailx + diff --git a/ACE/bin/auto_ptr.perl b/ACE/bin/auto_ptr.perl new file mode 100755 index 00000000000..ca75bb8b4c1 --- /dev/null +++ b/ACE/bin/auto_ptr.perl @@ -0,0 +1,16 @@ +eval '(exit $?0)' && eval 'exec perl -pi -S $0 ${1+"$@"}' + & eval 'exec perl -pi -S $0 $argv:q' + if 0; + +# $Id$ +# +# You may want to run the "find" command with this script, which maybe +# something like this: +# +# find . -type f \( -name "*.i" -o -name "*.h" -o -name "*.C" -o -name "*.cc" -o -name "*.c" -o -name "*.cpp" -o -name "*.hpp" -o -name "*.ipp" \) -print | xargs $ACE_ROOT/bin/auto_ptr.perl + +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +s/__TEXT/ACE_TEXT/g; diff --git a/ACE/bin/auto_run_tests.pl b/ACE/bin/auto_run_tests.pl new file mode 100755 index 00000000000..93368be3f37 --- /dev/null +++ b/ACE/bin/auto_run_tests.pl @@ -0,0 +1,164 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# -*- perl -*- +# This file is for running the run_test.pl scripts listed in +# auto_run_tests.lst. + +use lib "$ENV{ACE_ROOT}/bin"; +if (defined $ENV{srcdir}) { + use lib "$ENV{srcdir}/bin"; +} +use PerlACE::Run_Test; + +use English; +use Getopt::Std; +use Cwd; + +use Env qw(ACE_ROOT PATH); + +################################################################################ + +if (!getopts ('ados:tC') || $opt_h) { + print "auto_run_tests.pl [-a] [-h] [-s sandbox] [-o] [-t]\n"; + print "\n"; + print "Runs the tests listed in auto_run_tests.lst\n"; + print "\n"; + print "Options:\n"; + print " -a ACE tests only\n"; + print " -c config Run the tests for the <config> configuration\n"; + print " -h display this help\n"; + print " -s sandbox Runs each program using a sandbox program\n"; + print " -o ORB test only\n"; + print " -t TAO tests (other than ORB tests) only\n"; + print " -C CIAO tests only\n"; + print " -Config cfg Run the tests for the <cfg> configuration\n"; + print "\n"; + $ace_config_list = new PerlACE::ConfigList; + $ace_config_list->load ($ACE_ROOT."/bin/ace_tests.lst"); + print "ACE Test Configs: " . $ace_config_list->list_configs () . "\n"; + $orb_config_list = new PerlACE::ConfigList; + $orb_config_list->load ($ACE_ROOT."/bin/tao_orb_tests.lst"); + print "ORB Test Configs: " . $orb_config_list->list_configs () . "\n"; + $tao_config_list = new PerlACE::ConfigList; + $tao_config_list->load ($ACE_ROOT."/bin/tao_other_tests.lst"); + print "TAO Test Configs: " . $tao_config_list->list_configs () . "\n"; + $ciao_config_list = new PerlACE::ConfigList; + $ciao_config_list->load ($ACE_ROOT."/bin/ciao_tests.lst"); + print "CIAO Test Configs: " . $ciao_config_list->list_configs () . "\n"; + exit (1); +} + +my @file_list; + +if ($opt_a) { +push (@file_list, "/bin/ace_tests.lst"); +} + +if ($opt_o) { +push (@file_list, "/bin/tao_orb_tests.lst"); +} + +if ($opt_t) { +push (@file_list, "/bin/tao_other_tests.lst"); +} + +if ($opt_C) { +push (@file_list, "/bin/ciao_tests.lst"); +} + +if (scalar(@file_list) == 0) { +push (@file_list, "/bin/ace_tests.lst"); +push (@file_list, "/bin/tao_orb_tests.lst") if -d "$ACE_ROOT/TAO"; +push (@file_list, "/bin/tao_other_tests.lst") if -d "$ACE_ROOT/TAO"; +push (@file_list, "/bin/ciao_tests.lst") if -d "$ACE_ROOT/TAO/CIAO"; +} + +foreach my $test_lst (@file_list) { + + my $config_list = new PerlACE::ConfigList; + $config_list->load ($ACE_ROOT.$test_lst); + + # Insures that we search for stuff in the current directory. + $PATH .= $Config::Config{path_sep} . '.'; + + foreach $test ($config_list->valid_entries ()) { + my $directory = "."; + my $program = "."; + + if ($test =~ /(.*)\/([^\/]*)$/) { + $directory = $1; + $program = $2; + } + else { + $program = $test; + } + + # this is to ensure that we dont print out the time for tests/run_test.pl + # that test prints out the times for each of the ace tests individually + my $is_ace_test = ($directory eq "tests"); + + if (! $is_ace_test) { + print "auto_run_tests: $test\n"; + } + + chdir ($ACE_ROOT."/$directory") + || print STDERR "ERROR: Cannot chdir to $ACE_ROOT/$directory" || next; + + if ($program =~ /(.*?) (.*)/) { + if (! -e $1) { + print STDERR "ERROR: $directory.$1 does not exist\n"; + next; + } + } + else { + if (! -e $program) { + print STDERR "ERROR: $directory.$program does not exist\n"; + next; + } + } + + ### Generate the -ExeSubDir and -Config options + my $inherited_options = " -ExeSubDir $PerlACE::Process::ExeSubDir "; + + foreach my $config ($config_list->my_config_list ()) { + $inherited_options .= " -Config $config "; + } + + $cmd = ''; + if ($opt_s) { + $cmd = "$opt_s \"perl $program $inherited_options\""; + } + else { + if ($^O eq 'VMS') { + $cmd = "perl $program$inherited_options"; + } + else { + $cmd = $program.$inherited_options; + } + } + + + my $result = 0; + + if (defined $opt_d) { + print "Running: $cmd\n"; + } + else { + $start_time = time(); + $result = system ($cmd); + $time = time() - $start_time; + + # see note about tests/run_test.pl printing reports for ace tests individually + if (! $is_ace_test) { + if ($result != 0) { + print "Error: $test returned with status $result\n"; + } + + print "\nauto_run_tests_finished: $test Time:$time"."s Result:$result\n"; + } + } + } +} diff --git a/ACE/bin/autoconf_compile b/ACE/bin/autoconf_compile new file mode 100755 index 00000000000..8c3a283723d --- /dev/null +++ b/ACE/bin/autoconf_compile @@ -0,0 +1,520 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- +# $Id$ +# +# This script checkouts ACE from CVS, configures ACE, and compiles +# `ace', `tests' and finally runs `tests/run_tests.sh'. +# +# If it detects any problem it sends e-mail. +# +# DO NOT invoke this script from your crontab, use +# autoconf_compile_wrapper for that. +# +# This script requires Perl 5. +# +# TODO: Modify the script or split it in such a way that the main copy +# can be obtained either using cvs or downloading the latest beta +# from the WWW. +# + +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +use File::Basename; +use FileHandle; +require POSIX; + +$directory_mode=0755; + +# This is the module we will checkout, someday someone could define a +# smaller module. +$MODULE='ACE_wrappers'; + +# These are the sub-directories (in the module) we really compile. + +# Find out the command name. +$CMD = basename($0); + +$single_threaded = 0; +$minimum_corba = 0; +$ami = 0; +$dont_update = 0; +$dont_run = 0; +$pre_clean = 0; +$post_clean = 0; +$report_success = 0; +$debug = 0; +@BUILD_LIST= (); + +@ARGS = (); +while ($#ARGV >= 0) { + if (!($ARGV[0] =~ m/-/)) { + push @ARGS, $ARGV[0]; + shift; + } elsif ($ARGV[0] eq "-single_threaded") { + $single_threaded = 1; + shift; + } elsif ($ARGV[0] eq "-minimum_corba") { + $minimum_corba = 1; + shift; + } elsif ($ARGV[0] eq "-ami") { + $ami =1; + shift; + } elsif ($ARGV[0] eq "-build_list") { + shift; + @BUILD_LIST = split (/,/, $ARGV[0]); + shift; + } elsif ($ARGV[0] eq "-dont_update") { + $dont_update = 1; + shift; + } elsif ($ARGV[0] eq "-dont_run") { + $dont_run = 1; + shift; + } elsif ($ARGV[0] eq "-pre_clean") { + $pre_clean = 1; + shift; + } elsif ($ARGV[0] eq "-post_clean") { + $post_clean = 1; + shift; + } elsif ($ARGV[0] eq "-report_success") { + $report_success = 1; + shift; + } elsif ($ARGV[0] eq "-debug") { + $debug = 1; + shift; + } +} + +# Extract configuration information from command line. + # TODO: Some validation and checking should be done here. +$CHECKOUT = $ARGS[0]; +$BUILD = $ARGS[1]; +$LOGDIR = $ARGS[2]; +$ADMIN = $ARGS[3]; +$MAIL = "mail"; +if ($#ARGS >= 4) { + $MAIL = $ARGS[4]; +} + +# We obtain our revision to report errors. +$REVISION='$Revision$ '; + +# When an error is found we try to die gracefully and send some email +# to ADMIN. + +$disable_file = $LOGDIR . '/.disable'; +$histfile = $LOGDIR . '/history'; +$LOGBASE = POSIX::strftime("%b%d_%Y.txt", localtime); +$LOGFILE = $LOGDIR . '/' . $LOGBASE; +$HOST = `hostname`; +chop $HOST; +$LOG_NAME = $HOST . "_" . $BUILD . "_" . $LOGBASE; +$STATUS = "OK"; + +if ($debug) { + print "CHECKOUT = $CHECKOUT\n"; + print "BUILD = $BUILD\n"; + print "LOGDIR = $LOGDIR\n"; + print "ADMIN = $ADMIN\n"; + print "MAIL = $MAIL\n"; +} + +push @INC, $CHECKOUT . '/' . $MODULE . '/bin'; +#require run_all_list; +@RUN_LIST = ('tests'); # Temporary hack + + +if ($#BUILD_LIST == -1) { + @BUILD_LIST= + ('ace', + 'netsvcs', + 'tests', + 'apps/gperf'); +} +if ($debug) { + + @BUILD_LIST = ('ace'); + @RUN_LIST = ('tests'); +# @SINGLE_THREADED_LIST = ('TAO/tests/OctetSeq'); +# @MINIMUM_CORBA_LIST = ('TAO/tests/OctetSeq'); + $ADMIN = $ENV{'LOGNAME'}; + +} + +sub mydie { + unlink $disable_file; + die $_ . "\n"; +} + +sub report_errors { + # First clear the lock, so the next execution works... + unlink $disable_file; # Ignore errors! + + # Now send a summary of the errors to the ADMIN account... + local $to = $ADMIN; + + open (MAIL, "|".$MAIL.' -s "[AUTO_COMPILE] '.$BUILD.'" '.$to) + || mydie "Cannot open mail pipe for: $_\n"; + + print MAIL 'The following message is brought to you by: ', "\n"; + print MAIL $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n\n"; + + local $m; + foreach $m (@_) { + print MAIL $m, "\n"; + } + + print MAIL "\nPlease check the following log for more info:\n\n"; + print MAIL 'http://www.cs.wustl.edu/~bugzilla/auto_compile_logs/', + $LOG_NAME, "\n\n"; + + close (MAIL); # Ignore errors.... + + # Now send the complete log to bugzilla... + local $bugs = 'bugzilla'.'@cs.wustl.edu'; + open (MAIL, "|".$MAIL.' -s AUTO_COMPILE_LOG='.$LOG_NAME.' '.$bugs) + || mydie "Cannot open mail pipe for: $LOG_NAME\n"; + + print MAIL 'This is the log for: ', "\n"; + print MAIL $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n"; + + print MAIL "\n================================================================\n"; + + if (open (THELOG, "$LOGFILE")) + { + while (<THELOG>) { + print MAIL $_; + } + close (THELOG); + } + close (MAIL); # Ignore errors.... +} + +### MAIN FUNCTION + +if (-f $disable_file) { + print 'The following message is brought to you by: ', "\n"; + print $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n"; + + print "DISABLED\n"; + + exit 0; +} + +open (DISABLE, '>' . $disable_file) + || die "cannot open disable file"; +print DISABLE "autoconf_compile <$date> is running\n"; +close (DISABLE) + || die "cannot close disable file"; + +open(HIST, '>>' . $histfile) + # Do not use 'mydie' to report the problem, it tries to remove the + # disable file + || mydie "cannot open history file \"$histfile\"\n"; + +$date = localtime; + +print HIST $CMD, ': running at ', $date, ' '; + +open(LOG, '>' . $LOGFILE) + || mydie "cannot open log file"; + +LOG->autoflush (); + +# The following lines are useful when debugging the script or wrapper. +# print LOG $CHECKOUT, " ", $BUILD, " ", $LOGDIR, " ", $ADMIN, "\n"; +#while (($key,$value) = each %ENV) { +# print LOG $key, " = ", $value, "\n"; +#} + +chdir($CHECKOUT) + || mydie "Cannot chdir to $CHECKOUT"; + +if ($dont_update == 0) { + $date = localtime; + print LOG "$CMD: starting checkout at ", $date, "\n"; + open(CVS, "cvs -q checkout -P $MODULE 2>&1 |") + || mydie "cannot start checkout of $MODULE"; +# open(CVS, "cvsup -g -L 2 -P m ace-supfile 2>&1 |") +# || mydie "cannot start checkout"; + + $conflicts = 0; + while (<CVS>) { + if (m/^C /) { + $conflicts = 1; + } + print LOG $_; + } + close(CVS) + || mydie "error while checking out $MODULE"; + $date = localtime; + print LOG "$CMD: checkout finished at ", $date, "\n"; + + if ($conflicts != 0) { + mydie "conflicts on checkout"; + } +} + +chdir($MODULE) + || mydie "cannot chdir to $MODULE"; + +open (CHLOG, "ChangeLog") + || mydie "cannot open Changelog"; +$_ = <CHLOG>; +chop; +print LOG "ACE ChangeLogTag:", $_, "\n"; +close (CHLOG); + +open (CHLOG, "TAO/ChangeLog") + || mydie "cannot open TAO/Changelog"; +$_ = <CHLOG>; +chop; +print LOG "TAO ChangeLogTag:", $_, "\n"; +close (CHLOG); + +# Bootstrap the workspace +print LOG "$CMD: ==================================================\n\n"; +print LOG "$CMD: bootstrapping the workspace\n"; +open(BOOTSTRAP, "cd $CHECKOUT/ACE_wrappers && " + . "sh bin/bootstrap workspace --enable-deps 2>&1 |") + || mydie "cannot bootstrap workspace for $BUILD"; +while(<BOOTSTRAP>) { + print LOG $_; +} +close(BOOTSTRAP) + || mydie "error while bootstrapping the workspace"; +print LOG "$CMD: ==================================================\n\n"; + +# Begin the workspace configuration +$date = localtime; +print LOG "$CMD: starting configuration at ", $date, "\n"; + +# Check that we're in an ACE "top level" directory. +# We can actually build outside of the top level ACE directory, but +# let's do it this way for now. +(-d 'ace' && -d 'm4') || + die "$0: must be in top level ACE directory!\n"; + +# Create build directories, if needed. +-d 'build' || mkdir ('build', $directory_mode); +-d "$build" || mkdir ('build/' . "$BUILD", $directory_mode); + +# Now enter the build directory. +chdir('build/' . $BUILD) + || mydie "cannot chdir to $BUILD"; + +# Remove the configuration cache file to make sure a fresh +# configuration is created. +unlink "config.cache"; + +# Run the configuration script. +open(CONFIGURE, "sh $CHECKOUT/ACE_wrappers/configure 2>&1 |") + || mydie "cannot configure for $BUILD"; +while(<CONFIGURE>) { + print LOG $_; +} +close(CONFIGURE) + || mydie "error while configuring ACE"; +$date = localtime; +print LOG "$CMD: configure finished at ", $date, "\n"; + + +@failures = (); + +if ($pre_clean) { + foreach $i (@BUILD_LIST) { + $date = localtime; + print LOG "$CMD: =============================================\n"; + print LOG "$CMD: make clean in $i started at ", $date, "\n"; + open(MAKE, "make -k $MAKEFLAGS -C $i clean 2>&1 |") + || mydie "cannot start make in $i"; + + while (<MAKE>) { + # Ignore errors.... + } + if (close(MAKE) == 0) { + push @failures, "errors while cleaning $i"; + } + $date = localtime; + print LOG "$CMD: make clean in $i finished at ", $date, "\n"; + print LOG "$CMD: ==================================================\n\n"; + } +} + +$MAKEFLAGS .= ""; +foreach $i (@BUILD_LIST) { + $date = localtime; + print LOG "$CMD: =============================================\n"; + print LOG "$CMD: make for $i started at ", $date, "\n"; + open(MAKE, "make -k $MAKEFLAGS -C $i 2>&1 |") + || mydie "cannot start make for $i"; + + local $current_dir = $i; + local $last_error = ""; + while (<MAKE>) { + chop; + if ($^O eq 'hpux' + && m/^Warning:[ \t]+[0-9]+ future errors were detected/) { + next; + } + print LOG $_, "\n"; + + if (m/^make(\[[0-9]+\])?: Entering directory /) { + s/^make(\[[0-9]+\])?: Entering directory //; + $current_dir = $_; + } + if (m/error:/i || m/error /i + || m/^make(\[[0-9]+\])?: \*\*\*/) { + if ($last_error ne $current_dir + || STATUS eq "COMPILATION WARNING") { + $STATUS = "COMPILATION ERROR"; + push @failures, "Error while compiling in $current_dir \n"; + $last_error = $current_dir; + } + } + if (m/warning:/i || m/warning /i) { + if ($last_error ne $current_dir) { + if ($STATUS eq "OK") { + $STATUS = "COMPILATION WARNING"; + } + push @failures, "Warning while compiling in $current_dir\n"; + $last_error = $current_dir; + } + } + } + if (close(MAKE) == 0) { + push @failures, "errors while running make in $i"; + } + $date = localtime; + print LOG "$CMD: make for $i finished at ", $date, "\n"; + print LOG "$CMD: =============================================\n\n"; +} + +if ($dont_run == 0) { + @LIST = @RUN_LIST; + if ($single_threaded) { + @LIST = @SINGLE_THREADED_LIST; + } elsif ($minimum_corba) { + @LIST = @MINIMUM_CORBA_LIST; + } elsif ($ami) { + @LIST = @AMI_CORBA_LIST; + } + + foreach $i (@LIST) { + + $date = localtime; + print LOG "$CMD: ==================================================\n"; + print LOG "$CMD: running checks in $i at ", $date, "\n"; + local $subdir = + $CHECKOUT .'/'. $MODULE .'/build/'. $BUILD .'/'. $i; + chdir ($subdir) + || mydie "cannot chdir to $subdir"; + + $run_error = 0; + open(CHECK, "make -k $MAKEFLAGS -C $subdir check 2>&1 |"); + + local $current_dir = $i; + local $last_error = ""; + while (<CHECK>) { + chop; + if ($^O eq 'hpux' + && m/^Warning:[ \t]+[0-9]+ future errors were detected/) { + next; + } + print LOG $_, "\n"; + + if (m/^make(\[[0-9]+\])?: Entering directory /) { + s/^make(\[[0-9]+\])?: Entering directory //; + $current_dir = $_; + } + if (m/error:/i || m/error /i + || m/^make(\[[0-9]+\])?: \*\*\*/) { + if ($last_error ne $current_dir + || STATUS eq "COMPILATION WARNING") { + $STATUS = "COMPILATION ERROR"; + push @failures, "Error while compiling in $current_dir \n"; + $last_error = $current_dir; + } + } + if (m/warning:/i || m/warning /i) { + if ($last_error ne $current_dir) { + if ($STATUS eq "OK") { + $STATUS = "COMPILATION WARNING"; + } + push @failures, "Warning while compiling in $current_dir\n"; + $last_error = $current_dir; + } + } + if (m/Error/ + || m/ERROR/ + || m/FAILED/ + || m/failed/ + || m/FAIL/ + || m/EXCEPTION/ + || m/pure virtual /i) { + if ($STATUS eq "OK") { + $STATUS = "RUNTIME ERROR"; + } + $run_error = 1; + } + } + + if (close(CHECK) == 0) { + if ($STATUS eq "OK") { + $STATUS = "RUNTIME ERROR"; + } + push @failures, "Error when closing pipe in $i"; + next; + } + $date = localtime; + print LOG "$CMD: check finished ", $date, "\n"; + + if ($run_error != 0) { + push @failures, + "errors detected while making check in $i"; + } + } +} + +if ($post_clean) { + foreach $i (@BUILD_LIST) { + $date = localtime; + print LOG "$CMD: ==================================================\n"; + print LOG "$CMD: make clean in $i started at ", $date, "\n"; + open(MAKE, "make -k $MAKEFLAGS -C $i clean 2>&1 |"); + + while (<MAKE>) { + # Ignore errors.... + } + if (close(MAKE) == 0) { + push @failures, "errors while cleaning $i"; + } + $date = localtime; + print LOG "$CMD: make clean in $i finished at ", $date, "\n"; + print LOG "$CMD: ==================================================\n\n"; + } +} + +if ($#failures >= 0) { + report_errors @failures; +} + +close(LOG) + || mydie "cannot close LOGFILE"; + +print HIST "$STATUS\n"; +close(HIST) + || mydie "cannot close history file"; + +unlink $disable_file + || die "cannot unlink disable file"; + +if ($report_success && $STATUS eq "OK") { + report_errors "Congratulations: No errors or warnings detected\n"; +} + +exit 0; diff --git a/ACE/bin/autoconf_compile_wrapper b/ACE/bin/autoconf_compile_wrapper new file mode 100755 index 00000000000..3ffddafb1a1 --- /dev/null +++ b/ACE/bin/autoconf_compile_wrapper @@ -0,0 +1,56 @@ +#! /bin/sh +# +# $Id$ +# +# Usually cron setups a really miserable enviroment, this script +# serves two purposes: +# 1. Setup a good enviroment for auto_compile. +# 2. Invoke auto_compile with the proper arguments for each site. +# +# The idea is to modify this script on a per-site basis and leave +# auto_compile unmodified. +# + +# Setup a proper path, remember that cvs, make, perl5 and your +# compiler must be there. +PATH=.:$HOME/bin:/pkg/gnu/bin:/opt/SUNWspro/bin:$PATH +export PATH + +# Obvious enough. +CVSROOT=/project/cvs-repository +export CVSROOT + +# It could be a good idea to set CVSREAD this will make the staging +# area read-only, but our staging areas are public. +# CVSREAD=Y +# export CVSREAD + +# Here we define the cvs working copy for our staging area. +CHECKOUT=$HOME/head + +# In some sites the building directory differs from the cvs working +# copy. The directory is updated running +# $ACE_ROOT/bin/create_ace_build; but it must be setup manually the +# first time. +# TODO: Arrange for automatic creation of platform_macros.GNU & +# config.h. +BUILD=SUNCC + +# Here is where we store autoconf_compile output and keep a history of +# each run. +LOGDIR=$HOME/head/ACE_wrappers/build/$BUILD/autoconf_compile + +# Who do we send email when compilation (or anything else) fails. +ADMIN=PUT_YOUR_ADDRESS_HERE ; echo "You must edit this file" ; exit 0 + +# You must select a mail tool that can understand the -s option such +# as: +# +# /usr/bin/mailx Solaris +# /usr/bin/mailx HP-UX +# /usr/sbin/mailx IRIX +# /bin/mail Linux + +exec /pkg/gnu/bin/perl $CHECKOUT/ACE_wrappers/bin/autoconf_compile \ + $CHECKOUT $BUILD $LOGDIR $ADMIN /usr/bin/mailx + diff --git a/ACE/bin/bin.mpc b/ACE/bin/bin.mpc new file mode 100644 index 00000000000..38c100259a0 --- /dev/null +++ b/ACE/bin/bin.mpc @@ -0,0 +1,13 @@ +// -*- MPC -*- +// $Id$ + +project(bin) : aceexe, script { + exename = envinfo + Source_Files { + envinfo.cpp + } + Script_Files { + auto_run_tests.pl + ace_tests.lst + } +} diff --git a/ACE/bin/bootstrap b/ACE/bin/bootstrap new file mode 100755 index 00000000000..9aadb28bf13 --- /dev/null +++ b/ACE/bin/bootstrap @@ -0,0 +1,123 @@ +#! /bin/sh + +# ------------------------------------------------------------------------- +# $Id$ +# +# Bootstrap ACE/TAO configuration tools when checked out from CVS. +# Requires GNU autoconf, GNU automake and GNU libtool. +# +# This script is only meant to be run by ACE/TAO maintainers. +# +# ------------------------------------------------------------------------- + +# Copyright (C) 1999, 2002 Ossama Othman +# +# All Rights Reserved +# +# This library is free software; you can redistribute it and/or +# modify it under the current ACE distribution terms. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + +set -e + +# If paginator environment variable isn't set then use `more'. +PAGER=${PAGER:-more} + +usage() +{ + cat <<EOF | $PAGER +Usage: bootstrap [OPTIONS] + +Generic options: + --help display this help and exit + +EOF + + exit $1 +} + + +if test $# -gt 2; then + usage 1 +fi + +while test $# -gt 0; do + case "$1" in + --help) + usage 0 + ;; + esac + shift +done + + +# This script must be run from the top-level ACE source directory +if test -d m4; then + + ## + # The beta is now cut on a linux box. These are available in /usr/bin. + # + # Set the PATH containing the GNU tools + #if (uname | grep SunOS > /dev/null 2>&1); then + # PATH=/project/danzon/pkg/gnu/bin:$PATH + # export PATH + #fi + + # Update the NEWS file + # For now just copy the contents of the `VERSION' file to make automake + # happy. Eventually, we should start putting real news in to it. +# echo "Creating a NEWS file" +# cp VERSION NEWS + +# autoreconf -I m4 --install --force --symlink --verbose + autoreconf -I m4 --install --force + +# # Generate the man pages. +# # Only generate man pages if bootstrapping a release. +# if test $bootstrap_release = yes; then +# if test -f man/man3/ACE.3; then +# echo ACE man pages have already been generated. +# else +# echo 'Generating the ACE man pages (this may take several minutes)' + +# (ACE_ROOT=.; \ +# export ACE_ROOT; \ +# ./bin/generate_doxygen.pl -is_release -exclude_tao > /dev/null) +# fi # test -f man/man3/ACE.3 +# fi # test $bootstrap_release = yes + +# # Regenerate the man pages lists in the man page Makefiles. + +# if test -f man/man3/Makefile.am; then +# # Only insert man page lists if bootstrapping a release. +# if test $bootstrap_release = yes; then +# echo 'Inserting ACE man page lists into appropriate Makefile.am files.' +# ACE_MAN_PAGES=`(cd man/man3 && echo *.3)` +# else +# ACE_MAN_PAGES= +# fi + +# (cd man/man3; \ +# eval "sed -e 's/^man_MANS =.*$/man_MANS = $ACE_MAN_PAGES/' \ +# Makefile.am > Makefile.am.new"; \ +# mv Makefile.am.new Makefile.am) +# (cd man/html; \ +# eval "sed -e 's/^html_DATA =.*$/html_DATA = $ACE_HTML_MAN_PAGES/' \ +# Makefile.am > Makefile.am.new"; \ +# mv Makefile.am.new Makefile.am) +# else +# test -f man/man3/Makefile.am || echo 'man/man3/Makefile.am is missing!' +# exit 1; +# fi # test -f man/man3/Makefile.am + + # Provide some more "useful" information. + echo "Done bootstrapping ACE autotool support." +else + echo "ACE autotool support must be bootstrapped from the" + echo "top-level ACE source directory." + exit 1; +fi # test -d m4 diff --git a/ACE/bin/ciao_tests.lst b/ACE/bin/ciao_tests.lst new file mode 100644 index 00000000000..56dab5ab5ac --- /dev/null +++ b/ACE/bin/ciao_tests.lst @@ -0,0 +1,14 @@ +# $Id$ +# +# This is the list of run_test.pl's that need to be run by +# auto_run_tests.pl. +# Each line has its own test, and a test can be followed by a +# list of configurations it does _not_ run on. +# +# Example: TAO\examples\foo\run_test.pl: !MINIMUM !ST +# +TAO/CIAO/examples/Hello/descriptors/run_test.pl: !STATIC !MINIMUM !NOXERCES !ACE_FOR_TAO +TAO/CIAO/examples/Hello/descriptors/run_test_without_ns.pl: !STATIC !MINIMUM !NOXERCES +TAO/CIAO/DAnCE/tests/NodeApplicationTest/run_test_simple.pl: !STATIC !MINIMUM +TAO/CIAO/DAnCE/tests/NodeApplicationTest/run_test.pl: !STATIC !MINIMUM +TAO/CIAO/DAnCE/tests/NodeApplicationTest/run_test_ex.pl: !STATIC !MINIMUM diff --git a/ACE/bin/cle.pl b/ACE/bin/cle.pl new file mode 100755 index 00000000000..03f8785f7cd --- /dev/null +++ b/ACE/bin/cle.pl @@ -0,0 +1,289 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# ****************************************************************** +# Author: Chad Elliott +# Date: 6/18/2002 +# $Id$ +# ****************************************************************** + +use strict; +use Cwd; +use File::Basename; +use Sys::Hostname; + +if ( $^O eq 'VMS' ) { + require VMS::Filespec; + import VMS::Filespec qw(unixpath); +} + +unshift(@INC, getExecutePath($0) . 'ChangeLogEditor'); + +require ChangeLogEdit; +require EmailTranslator; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub which { + my($prog) = shift; + my($exec) = $prog; + my($part) = ''; + if ( $^O eq 'VMS' ) { + my($envSep) = ';'; + if (defined $ENV{'PATH'}) { + foreach $part (split(/$envSep/, $ENV{'PATH'})) { + $part .= "$prog"; + if ( -x $part ) { + $exec = $part; + last; + } + } + } + } + else { + my($envSep) = ($^O eq 'MSWin32' ? ';' : ':'); + if (defined $ENV{'PATH'}) { + foreach $part (split(/$envSep/, $ENV{'PATH'})) { + $part .= "/$prog"; + if ( -x $part ) { + $exec = $part; + last; + } + } + } + } + + return $exec; +} + + +sub getExecutePath { + my($prog) = shift; + my($loc) = ''; + + if ( $^O eq 'VMS' ) { + if ($prog ne basename($prog)) { + my($dir) = unixpath( dirname($prog) ); + if ($prog =~ /^[\/\\]/) { + $loc = $dir; + } + else { + $loc = unixpath(getcwd()) . $dir; + } + } + else { + $loc = unixpath( dirname(which($prog)) ); + } + + if ($loc eq '.') { + $loc = unixpath( getcwd() ); + } + } else { + if ($prog ne basename($prog)) { + if ($prog =~ /^[\/\\]/ || + $prog =~ /^[A-Za-z]:[\/\\]?/) { + $loc = dirname($prog); + } + else { + $loc = getcwd() . '/' . dirname($prog); + } + } + else { + $loc = dirname(which($prog)); + } + + $loc =~ s/\/\.$//; + + if ($loc eq '.') { + $loc = getcwd(); + } + + if ($loc ne '') { + $loc .= '/'; + } + } + + return $loc; +} + +sub getDefaultDomain { + my($domain) = undef; + my($host) = hostname(); + + if (defined $host) { + ## First try the hostname + if ($host =~ /[^\.]+\.(.*)/) { + $domain = $1; + } + else { + ## Next try the hosts file + my($hosts) = ($^O eq 'MSWin32' ? + "$ENV{SystemRoot}/system32/drivers/etc/hosts" : + '/etc/hosts'); + my($fh) = new FileHandle(); + if (open($fh, $hosts)) { + while(<$fh>) { + if (/$host\.(.*)/) { + $domain = $1; + last; + } + } + close($fh); + } + + if (!defined $domain) { + ## Next try ipconfig on Windows + if ($^O eq 'MSWin32') { + if (open($fh, 'ipconfig /all |')) { + while(<$fh>) { + if (/Primary\s+DNS\s+Suffix[^:]+:\s+(.*)/) { + $domain = $1; + } + elsif (/DNS\s+Suffix\s+Search[^:]+:\s+(.*)/) { + $domain = $1; + } + } + close($fh); + } + } + else { + ## Try /etc/resolv.conf on UNIX + if (open($fh, '/etc/resolv.conf')) { + while(<$fh>) { + if (/search\s+(.*)/) { + $domain = $1; + last; + } + } + close($fh); + } + } + } + } + } + return $domain; +} + + +sub usageAndExit { + my($arg) = shift; + my($base) = basename($0); + if (defined $arg) { + print "$arg\n\n"; + } + print "Usage: $base [ChangeLog File] [user name] [email address]\n" . + " " . (' ' x length($base)) . "[-d <dir1 dir2 ... dirN>]\n\n" . + " Uses cvs to determine which files are modified or added\n" . + " and generates a bare ChangeLog entry based on those files.\n" . + " This script should be run at the same directory level in\n" . + " which the ChangeLog exists. The entry is prepended to the\n" . + " existing ChangeLog.\n" . + "\n" . + " Email addresses are generated with a certain set of\n" . + " defaults and can be modified using various environment\n" . + " variables. By default email addresses are generated\n" . + " using the user last name followed by an underscore and\n" . + " the first initial of the user first name followed by the\n" . + " email domain.\n" . + "\n" . + " REPLYTO If this environment variable is set, the value\n" . + " is used as the email address.\n" . + " CL_USERNAME This environment variable is used to override\n" . + " the user name (obtained from the password file).\n" . + "\n" . + " The user name and email address can be passed as a parameter to\n" . + " this script. If either is not passed, then the script will try\n" . + " to determine it automatically.\n" . + "\n" . + " If -d is used, everything on the command line after it is\n" . + " considered a directory or file to be considered in the\n" . + " ChangeLog entry.\n"; + exit(0); +} + + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +my($file) = undef; +my($name) = undef; +my($email) = undef; +my(@dirs) = (); +my($restdirs) = 0; + +foreach my $arg (@ARGV) { + if ($restdirs) { + push(@dirs, $arg); + } + elsif ($arg eq '-h') { + usageAndExit(); + } + elsif ($arg eq '-d') { + $restdirs = 1; + } + elsif ($arg =~ /^\-/) { + usageAndExit("Unrecognized parameter: $arg"); + } + elsif (!defined $file) { + $file = $arg; + } + elsif (!defined $name) { + $name = $arg; + } + elsif (!defined $email) { + $email = $arg; + } +} + +if (!defined $file) { + $file = 'ChangeLog'; +} +if (!defined $name) { + my(@pwd) = (); + if (defined $ENV{CL_USERNAME}) { + $pwd[6] = $ENV{CL_USERNAME}; + } + else { + if ($^O eq 'MSWin32' || $^O eq 'cygwin') { + $pwd[6] = 'unknown'; + } + else { + @pwd = getpwuid($<); + $pwd[6] =~ s/,//g; + } + } + $name = $pwd[6]; +} + +if (!defined $email) { + my($trans) = new EmailTranslator(getDefaultDomain()); + $email = $trans->translate($name); +} + +my($editor) = new ChangeLogEdit($name, $email); +my($status, $error, $unknown) = $editor->edit($file, @dirs); + +if (defined $unknown) { + my(@uarray) = @$unknown; + if ($#uarray >= 0) { + print "WARNING: The following files are unknown to the ", + "revsion control system:\n"; + foreach my $unk (@uarray) { + print "$unk\n"; + } + print "\n"; + } +} + +if ($status) { + print "You are now ready to edit the $file.\n"; +} +else { + print "$error\n"; +} + +exit($status ? 0 : 1); diff --git a/ACE/bin/clean_dsp.pl b/ACE/bin/clean_dsp.pl new file mode 100755 index 00000000000..a3ff9be8205 --- /dev/null +++ b/ACE/bin/clean_dsp.pl @@ -0,0 +1,52 @@ +# $Id$ +# DSP cleaner + +$if_depth = 0; +@saved_lines = (); +$dirty = 0; +$in_dependency = 0; + +die "Not enough args" if ($#ARGV < 0); + +open (FILE, "<$ARGV[0]"); + +loop: while (<FILE>) +{ + # Check for dependency information + + if (/^DEP/ || /^NODEP/) { + $in_dependency = 1; + } + + if ($in_dependency) { + $in_dependency = 0 if (!/\\$/); + goto loop; + } + + # Check for empty !IF blocks + + if (/^\!IF/) { + ++$if_depth; + } + + push @saved_lines, $_ + if ($if_depth > 0); + + if (/^\!ENDIF/) { + --$if_depth; + print @saved_lines + if ($if_depth == 0 && $dirty == 1); + @saved_lines = (); + $dirty = 0; + } + elsif ($if_depth == 0) { + print; + } + + $dirty = 1 + if ($if_depth > 0 && !/^\!/ && !/^\s+$/); + + +} + +close (FILE); diff --git a/ACE/bin/clean_sems.sh b/ACE/bin/clean_sems.sh new file mode 100755 index 00000000000..57fbf3e9c06 --- /dev/null +++ b/ACE/bin/clean_sems.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +if [ -z "$USER" ]; then + USER=`id | sed 's/).*//; s/.*(//'` +fi + +SYSTEM=`uname -s` +case "$SYSTEM" in + "Linux" ) + ipcs -a | grep $USER | awk '{ print ($2) }' | xargs ipcrm sem; + ;; + * ) + semids=`ipcs | grep "^s" | grep $USER | awk '{ print ($2) }'` + for p in $semids + do ipcrm -s $p + done + ;; +esac diff --git a/ACE/bin/clone.csh b/ACE/bin/clone.csh new file mode 100644 index 00000000000..1c14e912d64 --- /dev/null +++ b/ACE/bin/clone.csh @@ -0,0 +1,26 @@ +#!/bin/csh + +set src_root=`pwd` +set dst_root=`abspath $1` + +set subdirs=`find * -type d -print` + +mkdir $dst_root +set files=`find * \( -type d -prune \) -o -type f -print` + +if ($#files) then + ln $files $dst_root +endif + +if ($#subdirs) then + foreach subdir ($subdirs) + cd $src_root + mkdir $dst_root/$subdir + cd $src_root/$subdir + set files=`find * \( -type d -prune \) -o -type f -print` + if ($#files) then + ln $files $dst_root/$subdir + endif + end +endif +exit 0 diff --git a/ACE/bin/corba-boolean.perl b/ACE/bin/corba-boolean.perl new file mode 100755 index 00000000000..92e793fc941 --- /dev/null +++ b/ACE/bin/corba-boolean.perl @@ -0,0 +1,19 @@ +eval '(exit $?0)' && eval 'exec perl -pi -S $0 ${1+"$@"}' + & eval 'exec perl -pi -S $0 $argv:q' + if 0; + +# $Id$ +# +# You may want to run the "find" command with this script, which maybe +# something like this: +# +# find . -type f \( -name "*.i" -o -name "*.h" -o -name "*.C" -o -name "*.cc" -o -name "*.c" -o -name "*.cpp" -o -name "*.hpp" -o -name "*.ipp" \) -print | xargs $ACE_ROOT/bin/corba-boolean.perl + +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +s/CORBA::B_FALSE/0/g; +s/CORBA::B_TRUE/1/g; +s/CORBA_B_FALSE/0/g; +s/CORBA_B_TRUE/1/g; diff --git a/ACE/bin/count_lines b/ACE/bin/count_lines new file mode 100755 index 00000000000..f440e19c765 --- /dev/null +++ b/ACE/bin/count_lines @@ -0,0 +1,236 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- +# $Id$ +# + +use File::Basename; + +$cmd= basename($0); + +if ($#ARGV < 0) { + die "Usage: $cmd module...\n"; +} + +@match_order = (); +%typeRE = (); + +&initfiletypes; + +foreach $module (@ARGV) { + if ( ! -d $module ) { + warn "$cmd: no such directory $module\n"; + next; + } + + open(DIRS, "find $module -type d|"); + @dirs = grep {if(!/CVS/) {chop;}} <DIRS>; + close(DIRS); + + open(FIND, "find $module -type f|"); + @files = grep {if (!/build/ + && !/CVS/ + && !/rpc\+\+/ + && !/\.bpr$/ + && !/\.mdp$/ + && !/\.MDP$/ + && !/\.dsp$/ + && !/\.DSP$/ + && !/\.dsw$/ + && !/\.DSW$/ + && !/\.mak$/ + && !/\.MAK$/ + && !/\.o$/ + && !/\.sl$/ + && !/\.a$/) {chop;}} <FIND>; + close(FIND); + + $totdirs = $#dirs; + $totfiles = $#files; + $totlines = 0; + %lines = (); + + foreach $file (@files) { + $n = 0; + if (!open(IN, $file)) { + warn "$cmd: cannot open '$file' for reading\n"; + next; + } + while(<IN>) { + $n++; + } + close(IN); + $lines{$file} = $n; + $totlines += $n; + } + + + # Define two associative arrays to keep the results for each kind + # of file. + %linespertype = (); + %filespertype = (); + foreach $type (keys %typeRE) { + $linespertype{$type} = 0; + $filespertype{$type} = 0; + } + # The file is classified and added to the corresponding variable. + FILE: while (($file, $l) = each %lines) { + foreach $type (@match_order) { + $re = $typeRE{$type}; + if($file =~ m/$re/) { + $linespertype{$type} += $l; + $filespertype{$type}++; + next FILE; + } + } + print STDERR "Unmatched file: $file\n"; + } + + format STDOUT_TOP= + @||| + $% + + Lines of code in module @<<<<<<<<<<<<<<<<<<<< + $module + +Files: @>>>>>>>> + $totfiles +Directories: @>>>>>>>> + $totdirs +Lines: @>>>>>>>> + $totlines + +File type lines files +---------------------------- ------------------ ----------------- +. + format STDOUT= +@<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>>>>>>>>>> @>>>>>>>>>>>>>>>> +$type, $typelines, $typefiles +. + + + foreach $type (@match_order) { + $typelines = $linespertype{$type}; + $typefiles = $filespertype{$type}; + if ($typefiles != 0) { + write; + } + } + # Forzamos un newpage para cada modulo. + $- = 0; +} + +sub updateRE { + local $desc = shift; + local $re = shift; + + if (exists $typeRE{$desc}) { + local $mix = $typeRE{$desc} . '|(' . $re . ')'; + $typeRE{$desc} = $mix; + } else { + $typeRE{$desc} = '(' . $re . ')'; + push @match_order, $desc; + } +} + +sub initfiletypes { + # Here we define the regular expressions for each kind of file. + # This RE must be mutually exclusive, a file will not be counted + # twice, but it could be unproperly classified. + + local %filenames = + ('GNUmakefile' => 'Makefile', + 'Makefile.*' => 'Makefile', + 'README' => 'README files', + 'COPYING' => 'Licenses', + 'LICENSE.*' => 'Licenses', + 'ChangeLog.*' => 'ChangeLog', + 'ChangeLog-.*' => 'ChangeLog', + '.cvsignore' => 'Control CVS', + 'run_test.pl' => 'Test driver', + 'run_test' => 'Test driver', + 'run_tests' => 'Test driver', + 'run_test.sh' => 'Test driver'); + local %fileexts = + ('cc' => 'C++ sources', + 'cpp' => 'C++ sources', + 'inl' => 'C++ sources', + 'i' => 'C++ sources', + 'h' => 'Headers', + 'hh' => 'Headers', + 'c' => 'C/C++ sources', + 'idl' => 'IDL sources', + 'IDL' => 'IDL sources', + 'pidl' => 'IDL sources', + 'y' => 'yacc source', + 'yy' => 'yacc source', + 'l' => 'lex source', + 'll' => 'lex source', + 'php' => 'php script', + 'pm' => 'perl script', + 'pl' => 'perl script', + 'perl' => 'perl script', + 'py' => 'python script', + 'GNU' => 'GNU make config', + 'tex' => '(La)TeX', + 'txt' => 'Text files', + '1' => 'man pages', + '3' => 'man pages', + 'html' => 'HTML', + 'bib' => 'BibTeX', + 'sty' => 'TeX styles', + 'bld' => 'VxWorks build file', + 'am' => 'Automake file', + 'icc' => 'VisualAge project files', + 'icp' => 'VisualAge project files', + 'vac' => 'VisualAge project files', + 'vcp' => 'Microsof eMbedded Visual Tools project files', + 'vcw' => 'Microsof eMbedded Visual Tools project files', + 'bpr' => 'Borland project files', + 'bor' => 'Borland project files', + 'dsp' => 'DevStudio project files', + 'DSP' => 'DevStudio project files', + 'mdp' => 'MSVC project files', + 'MDP' => 'MSVC project files', + 'dsw' => 'MSVC workspaces', + 'DSW' => 'MSVC workspaces', + 'mak' => 'MSVC MAK files', + 'MAK' => 'MSVC MAK files', + 'java' => 'JAVA source', + 'class' => 'JAVA class', + 'cccc' => 'codecount output', + 'gif' => 'GIF images', + 'conf' => 'Svc_Config files', + 'diff' => 'patches', + 'zip' => 'Compressed files', + 'gz' => 'Compressed files', + 'EXE' => 'Win32 executable', + 'shar' => 'Shar archive', + 'mib' => 'MIB definition files', + 'gperf' => 'GPERF input', + 'phil.*'=> 'Test driver' + ); + local %paths = (); + + local ($desc, $reseed); + while (($reseed, $desc) = each %filenames) { + local $re = '/' . $reseed . '$'; + updateRE($desc, $re); + } + while (($reseed, $desc) = each %fileexts) { + local $re = '/[^/]*\.' . $reseed . '$'; + updateRE($desc, $re); + } + while (($reseed, $desc) = each %paths) { + local $re = $reseed; + updateRE($desc, $re); + } + + updateRE('Others', '.*'); + +# while (($desc, $reseed) = each %typeRE) { +# print STDERR $desc, " ==> ", $reseed, "\n"; +# } +} diff --git a/ACE/bin/create_ace_build b/ACE/bin/create_ace_build new file mode 100755 index 00000000000..273342bbd50 --- /dev/null +++ b/ACE/bin/create_ace_build @@ -0,0 +1,307 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# +# Creates an ACE build tree in directory "build/<build name>" below the current +# directory, which must be an ACE "top level" directory (such as +# $ACE_ROOT). The build tree directory structure mirrors that of the ACE +# top level directory structure, except that instead of containing any plain +# files, it contains only symlinks to the files in the ACE top level structure. +# +# This program has a similar purpose to "clone", but in addition to +# only creating symlinks (clone creates hard links, by default), this +# script: +# 1) uses relative rather than absolute symlinks, +# 2) tries not to put junk files into the build tree, +# 3) only creates a new tree in a build/ directory below the current, +# top level ACE directory (it's a feature :-), but it does enforce +# consistency). +# +# This program can be re-run on a build tree at any time in order to +# update it. It will add symlinks for newly added files, and remove +# any that are no longer valid. +# +# If the <build name> starts with "build/", that part will be removed +# from it. +# +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +use File::Find (); +use File::Basename; +use FileHandle; + +print "You should consider using clone_build_tree.pl found with MPC\n"; + +$usage = "usage: $0 -? | [-a] [-d <directory mode>] [-v] <build name>\n"; +$directory_mode = 0777; #### Will be modified by umask, also. +$verbose = 0; + +$source='.'; +$absolute= 0; + +$perl_version = $] + 0; +if ($perl_version >= 5) { + #### Use an eval so that this script will compile with perl4. + eval <<'PERL5_CWD' + require Cwd; + sub cwd { + Cwd::getcwd (); + } +PERL5_CWD +} else { + sub cwd { + local ($pwd); + + chop ($pwd = `pwd`); + $pwd; + } +} + +my($starting_dir) = cwd (); +my(@nlinks) = (); +my($build_re) = undef; + +sub cab_link { + my($real) = shift; + my($fake) = shift; + my($uif) = ($^O eq 'MSWin32' ? 'link' : 'symlink'); + + print "$uif $real $fake\n" if $verbose; + + my($status) = 0; + if ($^O eq 'MSWin32') { + my($fixed) = $fake; + $fixed =~ s/$build_re//; + push(@nlinks, $fixed); + + chdir(dirname($fake)); + $status = link ($real, basename($fake)); + chdir($starting_dir); + } + else { + $status = symlink ($real, $fake); + } + if (!$status) { + warn "$0: $uif to $fake failed\n"; + } +} + +#### +#### Process command line args. +#### +while ($#ARGV >= 0 && $ARGV[0] =~ /^-/) { + if ($ARGV[0] eq '-v') { + $verbose = 1; + } elsif ($ARGV[0] eq '-d') { + if ($ARGV[1] =~ /^\d+$/) { + $directory_mode = eval ($ARGV[1]); shift; + } else { + warn "$0: must provide argument for -d option\n"; + die $usage; + } + } elsif ($ARGV[0] eq '-a') { + $source = &cwd (); + $absolute = 1; + } elsif ($ARGV[0] eq '-?') { + print "$usage"; + exit; + } else { + warn "$0: unknown option $ARGV[0]\n"; + die $usage; + } + shift; +} + +die $usage unless $#ARGV == 0; +$build = $ARGV[0]; +$build =~ s%^build[/\\]%%; #### remove leading "build/", if any +$build = "build/$build"; + +## Set up the build regular expression use under MSWin32 +if ($^O eq 'MSWin32') { + ## Get the original build name + $build_re = $build; + + ## Remove any trailing slashes + $build_re =~ s/[\\\/]+$//; + + ## Add a single trailing slash + $build_re .= '/'; + + ## Escape any special characters + $build_re =~ s/([\\\$\[\]\(\)\.])/\\$1/g; +} + +#### +#### Check that we're in an ACE "top level" directory. +#### +(-d 'ace' && -d 'include') || + die "$0: must be in an ACE top level (ACE_ROOT) directory!\n"; + +#### +#### Create build directories, if needed. +#### +-d 'build' || mkdir ('build', $directory_mode); +-d "$build" || mkdir ("$build", $directory_mode); + +#### +#### Get all ACE plain file and directory names. +#### +@files = (); + +sub wanted { + my ($dev,$ino,$mode,$nlink,$uid,$gid); + + /^CVS\z/s && + ($File::Find::prune = 1) + || + /^build\z/s && + ($File::Find::prune = 1) + || + /^\..*obj\z/s && + ($File::Find::prune = 1) + || + /^Templates\.DB\z/s && + ($File::Find::prune = 1) + || + /^Debug\z/s && + ($File::Find::prune = 1) + || + /^Release\z/s && + ($File::Find::prune = 1) + || + /^Static_Debug\z/s && + ($File::Find::prune = 1) + || + /^Static_Release\z/s && + ($File::Find::prune = 1) + || + ( + ($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) && + ! -l $_ && + ! /^core\z/s && + ! /^.*\.state\z/s && + ! /^.*\.so\z/s && + ! /^.*\.[oa]\z/s && + ! /^.*\.dll\z/s && + ! /^.*\.lib\z/s && + ! /^.*\.obj\z/s && + ! /^.*~\z/s && + ! /^\.\z/s && + ! /^\.#.*\z/s && + ! /^.*\.log\z/s + ) && + push(@files, $File::Find::name); +} + +File::Find::find({wanted => \&wanted}, '.'); + +#### +#### Create directories and symlinks to files. +#### +foreach $file (@files) { + $file =~ s%^./%%g; #### excise leading ./ directory component + + if (-d $file) { + unless (-d "$build/$file") { + print "mkdir $build/$file, $directory_mode\n" if $verbose; + mkdir ("$build/$file", $directory_mode); + } + } else { + unless (-e "$build/$file") { + if (!$absolute) { + $up = '../..'; + while ($file =~ m%/%g) { + $up .= '/..'; + } + + cab_link("$up/$file", "$build/$file"); + } else { + $path = $source . '/' . $file; + cab_link("$path", "$build/$file"); + } + } + } +} + +#### +#### Find all the symlinks in the build directory, and remove ones +#### that are no longer actually linked to a file. +#### + +if ($^O eq 'MSWin32') { + my($lfh) = new FileHandle(); + my($txt) = "$build/create_ace_build.links"; + if (open($lfh, "$txt")) { + while(<$lfh>) { + my($line) = $_; + $line =~ s/\s+$//; + if (-e $line) { + push(@nlinks, $line); + } + else { + print "Removing $build/$line \n" if $verbose; + unlink("$build/$line") || warn "$0: unlink of $build/$line failed\n"; + } + } + close($lfh); + } + + ## Rewrite the link file. + unlink($txt); + if (open($lfh, ">$txt")) { + foreach my $file (@nlinks) { + print $lfh "$file\n"; + } + close($lfh); + } +} +else { + @lfiles = (); + + sub lcheck { + ## There's no way to know if we have hard linked back to a now + ## non-existent file. So, just do the normal -l on the file + ## which will cause no files to be pushed on Windows. + if (-l $_) { + push(@lfiles, $File::Find::name); + } + } + + File::Find::find({wanted => \&lcheck}, $build); + + foreach (@lfiles) { + local @s = stat $_; + if ($#s == -1) { + print "Removing $_ \n" if $verbose; + unlink $_ || warn "$0: unlink of $_ failed\n"; + } + } +} + +#### +#### Done: print message. +#### +print "\nCompleted creation of $build/.\n"; +my($msg) = ''; +if (! -e "$build/ace/config.h") { + $msg .= "$build/ace/config.h"; +} + +if ($^O ne 'MSWin32' && + ! -e "$build/include/makeinclude/platform_macros.GNU") { + if ($msg ne '') { + $msg .= " and\n"; + } + $msg .= "$build/include/makeinclude/platform_macros.GNU"; +} + +if ($msg ne '') { + print "Be sure to setup $msg.\n"; +} + +#### EOF diff --git a/ACE/bin/create_ace_build.pl b/ACE/bin/create_ace_build.pl new file mode 100755 index 00000000000..d184b12c2dd --- /dev/null +++ b/ACE/bin/create_ace_build.pl @@ -0,0 +1,461 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# +# Creates an ACE build tree in directory "build/<build name>" below the $ACE_ROOT +# directory. The build tree directory structure mirrors that of the ACE +# top level directory structure, except that instead of containing any plain +# files, it contains only links to the files in the ACE top level structure. +# Symbolic links will be used instead of hard links if available. +# +# Makefiles, projects, and other build files are not linked. This allows +# use of MPC to generate the correct project types as needed. Use the +# -nompc option to disable this. +# +# This program has a similar purpose to "clone", but in addition to +# only creating symlinks (clone creates hard links, by default), this +# script: +# 1) uses relative rather than absolute symlinks, +# 2) tries not to put junk files into the build tree, +# 3) only creates a new tree in a build/ directory below the current, +# top level ACE directory (it's a feature :-), but it does enforce +# consistency). +# +# This program can be re-run on a build tree at any time in order to +# update it. It will add links for newly added files, and remove +# any that are no longer valid. +# Specifying no command line options will cause all current builds +# to be updated. +# +# If the <build name> starts with "build/", that part will be removed +# from it. + +use File::Find (); +use File::Basename; +use FileHandle; +use File::stat; +use File::Copy; +use File::Path; + +print "You should consider using clone_build_tree.pl found with MPC\n"; + +$usage = "usage: $0 -? | [-a] [-d <directory mode>] [-v] [-nompc] <build name>\n"; +$directory_mode = 0777; #### Will be modified by umask, also. +$verbose = 0; +$mpc = 1; #### When using mpc, we don't want links created for mpc-generated files. +$update_all = 1; +$source='.'; +$absolute = 0; + +#### +#### Check that we're in an ACE "top level" directory. +#### +unless (-d 'ace' && -d 'include') { + die "Must be in an ACE top level (ACE_ROOT) directory!\n"; +} +if (-e 'create_ace_build.links') { + die "Must be in an ACE top level (ACE_ROOT) directory!\n"; +} + +$perl_version = $] + 0; +if ($perl_version >= 5) { + #### Use an eval so that this script will compile with perl4. + eval <<'PERL5_CWD' + require Cwd; + sub cwd { + Cwd::getcwd (); + } +PERL5_CWD +} else { + sub cwd { + local ($pwd); + + chop ($pwd = `pwd`); + $pwd; + } +} + +my($starting_dir) = cwd (); +my(@nlinks) = (); +my(@build_re) = (); + +print "Creating or updating builds in $starting_dir\n"; + +#### If the $linked file is newer than the real file then +#### backup the real file, and replace it with the linked +#### version. + +sub backup_and_copy_changed { + my($real, $linked) = @_; + my($status_real) = stat($real); + + if (! $status_real) { + die "ERROR: cannot access $real.\n"; + } + + my($status_linked) = stat($linked); + if ($status_linked->mtime > $status_real->mtime) { + rename($real, $real . '.bak'); + rename($linked, $real); + return 1; + } + + if ($status_real->mtime != $status_linked->mtime) { + unlink($linked); + return 1; + } + if ($status_real->size != $status_linked->size) { + unlink($linked); + return 1; + } + return 0; +} + +sub cab_link { + my($real,$linked,$build_regex) = @_; + + my($status) = 0; + if ($^O eq 'MSWin32') { + my($fixed) = $linked; + $fixed =~ s/$build_regex//; + push(@nlinks, $fixed); + + my($curdir) = "$starting_dir/" . dirname($linked); + if (! -d $curdir) { + die "ERROR: Dir not found: $curdir\n"; + } + $status = chdir($curdir); + if (! $status) { + die "ERROR: cab_link() chdir " . $curdir . " failed.\n"; + } + + my($base_linked) = basename($linked); + + if (! -e $real) { + ## If the real file "doesn't exist", then we need to change back to + ## the starting directory and look up the short file name. + chdir($starting_dir); + my($short) = Win32::GetShortPathName($fixed); + + ## If we were able to find the short file name, then we need to + ## modyfy $real. Note, we don't need to change back to $curdir + ## unless the short name lookup was successful. + if (defined $short) { + ## Replace a section of $real (the part that isn't a relative + ## path) with the short file name. The hard link will still have + ## the right name, it's just pointing to the short name. + substr($real, length($real) - length($fixed)) = $short; + + ## Get back to the right directory for when we make the hard link + chdir($curdir); + } + else { + ## This should never happen, but there appears to be a bug + ## with the underlying win32 apis on Windows Server 2003. + ## Long paths will cause an error which perl will ignore. + ## Unicode versions of the apis seem to work fine. + ## To experiment try Win32 _fullpath() and CreateHardLink with + ## long paths. + print "ERROR : Skipping $real.\n"; + return; + } + } + + if (-e $base_linked) { + if (! backup_and_copy_changed($real, $base_linked)) { + return; + } + } + + print "link $real $linked\n" if $verbose; + $status = link ($real, $base_linked); + if (! $status) { + ## Once again, this happens for long paths on Win2003 + print "ERROR: Can't link $real\n"; + return; + } + chdir($starting_dir); + } else { + print "$symlink $real $linked\n" if $verbose; + $status = symlink ($real, $linked); + } + if (!$status) { + die "$0: $real -> $linked failed\n"; + } +} + +#### +#### Process command line args. +#### +while ($#ARGV >= 0 && $ARGV[0] =~ /^-/) { + if ($ARGV[0] eq '-v') { + $verbose = 1; + } elsif ($ARGV[0] eq '-d') { + if ($ARGV[1] =~ /^\d+$/) { + $directory_mode = eval ($ARGV[1]); shift; + } else { + warn "$0: must provide argument for -d option\n"; + die $usage; + } + } elsif ($ARGV[0] eq '-a' && ! ($^O eq 'MSWin32')) { + $source = &cwd (); + $absolute = 1; + } elsif ($ARGV[0] =~ /-[?hH]$/) { + die "$usage"; + } elsif ($ARGV[0] eq '-nompc') { + $mpc = 0; + } else { + warn "$0: unknown option $ARGV[0]\n"; + die $usage; + } + shift; +} + +@builds = (); + +if ($#ARGV == 0) { + $update_all = 0; + $builds[0] = $ARGV[0]; + $builds[0] =~ s%^build[/\\]%%; #### remove leading "build/", if any + $builds[0] = "build/$builds[0]"; +} else { + @builds = glob "build/*"; +} + +sub create_build_regex { + if ($^O eq 'MSWin32') { + for ($idx = 0; $idx <= $#builds; $idx++) { + ## Get the original build name + $build_re[$idx] = $builds[idx]; + + ## Remove any trailing slashes + $build_re[$idx] =~ s/[\\\/]+$//; + + ## Add a single trailing slash + $build_re[$idx] .= '/'; + + ## Escape any special characters + $build_re[$idx] =~ s/([\\\$\[\]\(\)\.])/\\$1/g; + } + } +} + +create_build_regex(); + +# all builds go in ACE_wrappers\build +unless (-d "$starting_dir/build") { + print "Creating $starting_dir/build\n"; + mkdir ("$starting_dir/build", $directory_mode); +} +foreach $build (@builds) { + unless (-d "$starting_dir/$build") { + print "Creating $starting_dir/$build\n"; + mkpath ("$starting_dir/$build", 0, $directory_mode); + } +} + +#### +#### Get all ACE plain file and directory names. +#### +@files = (); + +sub wanted { + my ($dev,$ino,$mode,$nlink,$uid,$gid); + + $matches = ! ( + /^CVS\z/s && ($File::Find::prune = 1) + || + /^build\z/s && ($File::Find::prune = 1) + || + /^\..*obj\z/s && ($File::Find::prune = 1) + || + /^Templates\.DB\z/s && ($File::Find::prune = 1) + || + /^Debug\z/s && ($File::Find::prune = 1) + || + /^Release\z/s && ($File::Find::prune = 1) + || + /^Static_Debug\z/s && ($File::Find::prune = 1) + || + /^Static_Release\z/s && ($File::Find::prune = 1) + ); + + $matches = $matches && + ( + ($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) && + ! -l $_ && + ! /^core\z/s && + ! /^.*\.state\z/s && + ! /^.*\.so\z/s && + ! /^.*\.[oa]\z/s && + ! /^.*\.dll\z/s && + ! /^.*\.lib\z/s && + ! /^.*\.obj\z/s && + ! /^.*~\z/s && + ! /^\.\z/s && + ! /^\.#.*\z/s && + ! /^.*\.log\z/s + ); + + if ($mpc && $matches) { + $matches = + ($File::Find::dir =~ /include\/makeinclude*/) || + ( + ! /^.*\.dsp\z/s && + ! /^.*\.vcproj\z/s && + ! /^.*\.bor\z/s && + ! /^.*\.dsw\z/s && + ! /^.*\.sln\z/s && + ! /^.*\.vcp\z/s && + ! /^.*\.nmake\z/s && + ! /^.*\.am\z/s && + ! /^.*\.vcw\z/s && + ! /^.*\.mak\z/s && + ! /^.*\.bld\z/s && + ! /^.*\.icc\z/s && + ! /^.*\.icp\z/s && + ! /^.*\.ncb\z/s && + ! /^.*\.opt\z/s && + ! /^.*\.bak\z/s && + ! /^.*\.ilk\z/s && + ! /^.*\.pdb\z/s && + ! /^\.cvsignore\z/s && + ! /^\.disable\z/s && + ! /^GNUmakefile.*\z/s + ); + } + + if ($matches) { + push(@files, $File::Find::name); + } +} + +File::Find::find({wanted => \&wanted}, '.'); + +print "Found $#files files and directories.\n"; + +#### +#### Create directories and symlinks to files. +#### +foreach $file (@files) { + $file =~ s%^./%%g; #### excise leading ./ directory component + my($fullname) = "$starting_dir/$file"; + for ($idx = 0; $idx <= $#builds; $idx++) { + my($build) = $builds[$idx]; + if (-d $fullname) { + unless (-d "$starting_dir/$build/$file") { + print "Creating $build/$file\n" if $verbose; + mkdir ("$starting_dir/$build/$file", $directory_mode); + } + } else { + unless (($^O ne 'MSWin32') && (-e "$build/$file")) { + if (!$absolute) { + $up = '..'; + while ($build =~ m%/%g) { + $up .= '/..'; + } + while ($file =~ m%/%g) { + $up .= '/..'; + } + cab_link("$up/$file", "$build/$file", $build_re[$idx]); + } else { + $path = $source . '/' . $file; + cab_link("$path", "$build/$file", $build_re[$idx]); + } + + } + } + } +} + +print "Finished creating and updating links.\n"; + +foreach $build (@builds) { + #### + #### Find all the symlinks in the build directory, and remove ones + #### that are no longer actually linked to a file. + #### + + if ($^O eq 'MSWin32') { + my($lfh) = new FileHandle(); + my($links_file) = "$starting_dir/$build/create_ace_build.links"; + if (-e $links_file) { + if (open($lfh, $links_file)) { + while(<$lfh>) { + my($line) = $_; + $line =~ s/\s+$//; + if (-e "$starting_dir/$line") { + ## The links were already added in cab_link when they + ## were checked for changes. + } else { + print "Removing $build/$line \n" if $verbose; + unlink("$starting_dir/$build/$line") || warn "$0: unlink of $build/$line failed\n"; + } + } + close($lfh); + } + unless (unlink($links_file)) { + die "Couldn't delete links file.\n"; + } + } + print "Writing $#nlinks links to link file.\n"; + if (open($lfh, ">$links_file")) { + foreach my $lnk (@nlinks) { + print $lfh "$lnk\n"; + } + close($lfh); + } else { + die "Couldn't open links file.\n"; + } + } + else { + @lfiles = (); + + sub lcheck { + ## There's no way to know if we have hard linked back to a now + ## non-existent file. So, just do the normal -l on the file + ## which will cause no files to be pushed on Windows. + if (-l $_) { + push(@lfiles, $File::Find::name); + } + } + + File::Find::find({wanted => \&lcheck}, $build); + + foreach (@lfiles) { + local @s = stat $_; + if ($#s == -1) { + print "Removing $_ \n" if $verbose; + unlink $_ || warn "$0: unlink of $_ failed\n"; + } + } + } + + #### + #### Done: print message. + #### + print "\nCompleted creation of $build/.\n"; + +foreach $build (@builds) { + unless (-d "$starting_dir/$build") { + print "Creating $starting_dir/$build\n"; + mkdir ("$starting_dir/$build", $directory_mode); + } + + + if (! -e "$starting_dir/$build/ace/config.h") { + print "Be sure to setup $build/ace/config.h"; + } + + if ($^O ne 'MSWin32' && + ! -e "$starting_dir/$build/include/makeinclude/platform_macros.GNU") { + print " and\n$build/include/makeinclude/platform_macros.GNU"; + } + print ".\n"; +} + +} + +#### EOF diff --git a/ACE/bin/cvslog b/ACE/bin/cvslog new file mode 100755 index 00000000000..1330db622f8 --- /dev/null +++ b/ACE/bin/cvslog @@ -0,0 +1,169 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# +# Wraps cvs log, and substitutes messages of form "ChangeLogTag" +# with their corresponding ChangeLog entries. +# +# Authors: Luther J. Baker and David L. Levine + +#### +#### global +#### +use strict; +my $dir_sep = $^O eq 'MSWin32' ? '\\' : '/'; +my $cvs_log_options = ''; +my @changelogs = (); +my %changelog_hash = (); + + +#### +#### main (I do this for reading clarity) +#### +{ + #### + #### Save any command line options (beginning with -), to pass to cvs log. + #### + while ($#ARGV >= $[ && $ARGV[0] =~ /^-/) { + $cvs_log_options .= $cvs_log_options ? " " . shift : shift; + } + + #### + #### Build up the array of ChangeLog files to search, + #### + &find_changelogs($ARGV[0]); + + #### + #### Build the hash table of key=tags value=entry + #### + &build_changelog_hash(); + + + #### + #### Print the cvs log for each filename argument. + #### Inserting expanded entries after ChangeLog tags + #### + foreach my $arg (@ARGV) { + &print_log ($arg); + } +} + + +#### +#### Function surrounding cvs log +#### +sub print_log () { + my $file = shift; + + open (CVSLOG, "cvs log $cvs_log_options $file |") || + die "$0: unable to open cvs log\n"; + + while (<CVSLOG>) { + + if (/ChangeLog(Tag)?: *(.*)/i || + /ChangeLog( *Entry)?: *(.*)/i) { + + chomp; + print "$_:\n"; + + # An array reference HAS to be defined, the following will NOT work + # print "$changelog_hash{$2})" || "ChangeLogTag NOT FOUND!!!!\n"; + + if (defined $changelog_hash{$2}) { + print "@{$changelog_hash{$2}}"; + } else { + print "\n\tChangeLogTag \"$2\" NOT FOUND!!!!\n\n"; + } + + } else { + print; + } + } + + close CVSLOG; +} + + +#### +#### Build the hash +#### +sub build_changelog_hash () { + my $key = 0; + my @entry = (); + + foreach my $changelog_file (@changelogs) { + + open (CHANGELOG, $changelog_file) || + die "$0: unable to open '$changelog_file'\n"; + + while (<CHANGELOG>) { + if (/^\w/) { + if ($key) { + if (defined $changelog_hash{$key}) { + #### Deal with multiple identical ChangeLogTags. + push @{$changelog_hash{$key}}, @entry; + } else { + $changelog_hash{$key} = [ @entry ]; + } + } + @entry = (); + chomp; + $key = $_; + } + else { + push @entry, $_; + } + } + + close CHANGELOG; + } +} + + +#### +#### Find the ChangeLog(s) associated with the file. +#### +sub find_changelogs () { + my $file = shift; + + if ($#changelogs >= 0) { + @changelogs; + } else { + my $pwd = &basename ($file) || '.'; + + #### The [C] ensures that the glob will actually look for the file. + while (! (@changelogs = + glob ("$pwd/[C]hangeLog " . + "$pwd/[C]hangeLog-97 " . #### ACE_wrappers/TAO + "$pwd/[C]hangeLog-97b " . #### ACE_wrappers + "$pwd/ChangeLog-9[89]* " . + "$pwd/ChangeLog-0*"))) { + if ($pwd !~ m%^${dir_sep}%) { + #### We're starting with a relative path. Get the + #### absolute path. + chomp ($pwd = `pwd`); + $pwd .= "/$file"; + } + + $pwd = &basename ($pwd); + + if ($pwd eq '') { + warn "$0: ChangeLog NOT FOUND for '$file'!!!!\n"; + return (); + } + } + } +} + + +#### +#### Return directory component of a filename, without trailing $dir_sep. +#### Return '' if there is no directory component. +#### +sub basename () { + my $filename = shift; + + $filename =~ s%[${dir_sep}][^${dir_sep}]+$%% ? $filename : ''; +} diff --git a/ACE/bin/depgen.pl b/ACE/bin/depgen.pl new file mode 100755 index 00000000000..814521f5b0b --- /dev/null +++ b/ACE/bin/depgen.pl @@ -0,0 +1,211 @@ +eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' + & eval 'exec perl -w -S $0 $argv:q' + if 0; + +# ************************************************************ +# Description : Generate dependencies for GNU Make and NMake. +# Author : Chad Elliott +# Create Date : 5/06/2002 +# $Id$ +# ************************************************************ + +# ************************************************************ +# Pragma Section +# ************************************************************ + +use strict; +use Config; +use FindBin; +use File::Spec; +use File::Basename; + +my($basePath) = $FindBin::Bin; +if ($^O eq 'VMS') { + $basePath = File::Spec->rel2abs(dirname($0)) if ($basePath eq ''); + $basePath = VMS::Filespec::unixify($basePath); +} +unshift(@INC, $basePath . '/DependencyGenerator'); + +require DependencyEditor; + +# ************************************************************ +# Data Section +# ************************************************************ + +my($version) = '1.0'; +my($os) = ($^O eq 'MSWin32' ? 'Windows' : 'UNIX'); +my(%types) = ('gnu' => 1, + 'nmake' => 1, + 'make' => 1, + ); +my(%defaults) = ('UNIX' => ['gnu'], + 'Windows' => ['nmake'], + ); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub usageAndExit { + my($opt) = shift; + my($base) = basename($0); + + if (defined $opt) { + print "$opt.\n"; + } + + print "$base v$version\n" . + "Usage: $base [-D<MACRO>[=VALUE]] [-I<include dir>] [-A] " . + "[-R <VARNAME>]\n" . + " " . (" " x length($base)) . + " [-e <file>] [-f <output file>] [-i] [-t <type>] [-n]\n" . + " " . (" " x length($base)) . " <files...>\n" . + "\n" . + "-D This option sets a macro to an optional value.\n" . + "-I The -I option adds an include directory.\n" . + "-A Replace \$ACE_ROOT and \$TAO_ROOT paths with \$(ACE_ROOT) " . + "and \$(TAO_ROOT)\n respectively.\n" . + "-R Replace \$VARNAME paths with \$(VARNAME).\n" . + "-e Exclude dependencies generated by <file>, but not <file> " . + "itself.\n" . + "-f Specifies the output file. This file will be edited if it " . + "already\n exists.\n" . + "-i Do not print an error if no source files are provided.\n" . + "-n Do not include inline files (ending in .i or .inl) in the " . + "dependencies.\n" . + "-t Use specified type ("; + my(@keys) = sort keys %types; + for(my $i = 0; $i <= $#keys; ++$i) { + print "$keys[$i]" . + ($i != $#keys ? $i == $#keys - 1 ? ' or ' : ', ' : '');; + } + print ") instead of the default.\n" . + " The default is "; + @keys = sort keys %defaults; + for(my $i = 0; $i <= $#keys; ++$i) { + my($def) = $keys[$i]; + print $defaults{$def}->[0] . " on $def" . + ($i != $#keys ? $i == $#keys - 1 ? ' and ' : ', ' : ''); + } + print ".\n"; + exit(0); +} + + +sub setReplace { + my($replace) = shift; + my($name) = shift; + my($value) = shift; + + if (defined $name) { + ## The key will be used in a regular expression. + ## So, we need to escape some special characters. + $name = File::Spec->canonpath($name); + $name =~ s/([\+\-\\\$\[\]\(\)\.])/\\$1/g; + + $$replace{$name} = $value; + } +} + + +# ************************************************************ +# Main Section +# ************************************************************ + +my($type) = $defaults{$os}->[0]; +my($noinline) = undef; +my(@files) = (); +my(%macros) = (); +my(@ipaths) = (); +my(%replace) = (); +my(%exclude) = (); +my($output) = '-'; +my($needsrc) = 1; + +if (defined $ENV{ACE_ROOT} && !defined $ENV{TAO_ROOT}) { + $ENV{TAO_ROOT} = "$ENV{ACE_ROOT}/TAO"; +} + +for(my $i = 0; $i <= $#ARGV; ++$i) { + my($arg) = $ARGV[$i]; + if ($arg =~ /^\-D(\w+)(=(.*))?/) { + $macros{$1} = $3; + } + elsif ($arg =~ /^\-I(.*)/) { + push(@ipaths, File::Spec->canonpath($1)); + } + elsif ($arg eq '-A') { + setReplace(\%replace, $ENV{ACE_ROOT}, '$(ACE_ROOT)'); + setReplace(\%replace, $ENV{TAO_ROOT}, '$(TAO_ROOT)'); + setReplace(\%replace, $ENV{ACE_PLATFORM_CONFIG}, '$(ACE_PLATFORM_CONFIG)'); + } + elsif ($arg eq '-R') { + ++$i; + $arg = $ARGV[$i]; + if (defined $arg) { + my($val) = $ENV{$arg}; + if (defined $val) { + setReplace(\%replace, $val, "\$($arg)"); + } + } + else { + usageAndExit('Invalid use of -R'); + } + } + elsif ($arg eq '-e') { + ++$i; + $arg = $ARGV[$i]; + if (defined $arg) { + $exclude{$arg} = 1; + } + else { + usageAndExit('Invalid use of -e'); + } + } + elsif ($arg eq '-f') { + ++$i; + $arg = $ARGV[$i]; + if (defined $arg) { + $output = $arg; + } + else { + usageAndExit('Invalid use of -f'); + } + } + elsif ($arg eq '-i') { + $needsrc = undef; + } + elsif ($arg eq '-n') { + $noinline = 1; + } + elsif ($arg eq '-h') { + usageAndExit(); + } + elsif ($arg eq '-t') { + ++$i; + $arg = $ARGV[$i]; + if (defined $arg && defined $types{$arg}) { + $type = $arg; + } + else { + usageAndExit('Invalid use of -t'); + } + } + elsif ($arg =~ /^[\-+]/) { + ## We will ignore unknown options + ## Some options for aCC start with + + } + else { + push(@files, $arg); + } +} + +if (!defined $files[0]) { + if ($needsrc) { + usageAndExit('No files specified'); + } +} + +my($editor) = new DependencyEditor(); +exit($editor->process($output, $type, $noinline, \%macros, + \@ipaths, \%replace, \%exclude, \@files)); diff --git a/ACE/bin/diff-builds.pl b/ACE/bin/diff-builds.pl new file mode 100755 index 00000000000..d1932681e4d --- /dev/null +++ b/ACE/bin/diff-builds.pl @@ -0,0 +1,257 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# -*- perl -*- + +use File::Temp qw/ tempfile tempdir /; +use POSIX qw/ strftime /; + +my $debugging = 0; # Print additional info +my $verbose = '-q'; # WGET verbosity +my $new_errors_only = 0; # Show new errors only +my $clean_builds_only = 1; # Only diff todays clean builds + +# The root of the test statistics +my $teststaturl = "http://www.dre.vanderbilt.edu/~remedynl/teststat/builds/"; + +my $allbuildsurl = "http://www.dre.vanderbilt.edu/~remedynl/teststat/buildscore.log"; +my $cleanbuildsurl = "http://www.dre.vanderbilt.edu/~remedynl/teststat/cleanbuildtests.log"; + +# Determine the available timestamps for a build on a date, +# by scanning the index page (build.html) +sub find_timestamps ($$) { + + my ($file,$date) = @_; + +# print "\nSearching for $file, $date\n"; + open (INDEX, "wget " . $verbose . " \'" . $teststaturl . $file . ".html\' -O - |") + || die "Could not read the index page\n"; + + # Split at all HTML tags, except <a ..> + my @suffixes = split ( /[<][b-zB-Z\/]+[>]/, <INDEX>); + close (INDEX); + + # Select only those of the "href=..." that match our file and date + my $rx = quotemeta ( $file . '_' . $date); + my @temp = map { (/${rx}_([0-9][0-9]_[0-9][0-9])/) ? $1 : "" } @suffixes; + return grep /^[0-9]/, @temp; +} + +# Determine the timestamp by scanning the index +sub find_closest_earlier { + + my ($file,$date) = @_; + + open (INDEX, "wget " . $verbose . " \'" . $teststaturl . $file . ".html\' -O - |") + || die "Could not read the index page\n"; + + # Split at all HTML tags, except <a ..> + my @suffixes = split ( /[<][b-zB-Z\/]+[>]/, <INDEX>); + close (INDEX); + + # Select only those of the "href=..." that match our file + my $rx = quotemeta ( $file); + my @temp = map { (/${rx}_([_0-9]+)([0-9][0-9]_[0-9][0-9])/ && $1 le $date) ? $1 : undef } @suffixes; + my @temp2 = grep /^[0-9]/, @temp; + return $temp2[0]; +} + + +sub select_builds ($$$) +{ + my ($rdates, $rbuilds, $rfiles) = @_; + my @dates = @{$rdates}; + my @builds = @{$rbuilds}; + + if ($#dates eq 1) { + $rfiles->[0] = $rbuilds->[0]; + $rfiles->[1] = $rbuilds->[0]; + } + elsif ($#builds eq 1) { + $rfiles->[0] = $rbuilds->[0]; + $rfiles->[1] = $rbuilds->[1]; + + $rdates->[1] = $rdates->[0]; + + } + else { + die "Dates: $#dates, Builds: $#builds\n"; + } + + return 0; +} + + +sub load_failed_tests_list ($$) +{ + my ($file, $date) = @_; + + my @timestamps = find_timestamps ($file, $date); + print "Build times for $file on $date are " + . join (', ', @timestamps) . "\n" unless !$debugging; + + if ($#timestamps == -1) { + print "No builds for $file on $date. The closest earlier date is " + . find_closest_earlier ($file, $date) . "\n\n" + } + + my $fullfile = $file .'_' . $date . '_' . $timestamps[0]; + my ($fh, $tmpfile) = tempfile ($fullfile . ".XXXXXX", UNLINK => 1); + + print "wget " . $verbose . " \'" .$teststaturl + . $fullfile . ".log\' -O - | sort >\'" . $tmpfile . '\'' . "\n" unless !$debugging; + + system ("wget " . $verbose . " \'" .$teststaturl + . $fullfile . ".log\' -O - | sort >\'" . $tmpfile . '\''); + close ($fh); + + return $tmpfile; +} + +sub differentiate ($$) +{ + my ($rfiles, $rdates) = @_; + + open (DIFF, "diff -u \'" . load_failed_tests_list ($rfiles->[0], $rdates->[0]) + . "\' \'" . load_failed_tests_list ($rfiles->[1], $rdates->[1]) . "\' 2>&1 |") + || die "Could not diff the files.\n"; + + while (<DIFF>) { + if (/^[^\+]/) { + print unless ($new_errors_only == 1); + } else { + print; + } + } + + close (DIFF); + print "\n"; +} + + +sub find_builds ($$$) +{ + my ($rbuilds, $buildscoreurl, $selectcolumn) = @_; + + print "Reading from $buildscoreurl\n" unless !$debugging; + + open (CLEANS, "wget " . $verbose . " \'" . $buildscoreurl . "\' -O - |") + || die "Could not read builds score page $buildscoreurl\n"; + + # Split at all spaces + for(my $begin=0; <CLEANS>;) + { + chomp; + my @columns = split (/ +/); + + if (/=+/) { + $begin++; + next; + } + + push (@{$rbuilds}, $columns[$selectcolumn]) unless !$begin; + + } + close (CLEANS); + sort @{$rbuilds}; + + print "Using builds @{$rbuilds}\n" unless !$debugging; +} + +my @dates = (); +my @builds = (); +my @files = (); + + +while ($arg = shift(@ARGV)) { + + if ($arg eq "-h" || $arg eq "-?") { + print "Prints a diff for the list of test failures, for two builds on a certain date\n\n"; + print "diff-builds [-n] [-d] [-D date] [-A] [build ...]\n"; + print "\n"; + print "-n -- Show only new test failing (default=no)\n"; + print "-d -- Show debug info\n"; + print "-h -- Prints this information\n"; + print "-D date -- Specify a date, format is YYYY_MM_DD\n"; + print " Use two to specify an interval\n"; + print "-A -- Use all builds from the score, not only the clean ones\n"; + print "build -- Specify the build name, as it appears on the scoreboard\n"; + print " also can use two builds, with one date.\n"; + print " No build and a single date, implies all builds from\n"; + print " todays build score page.\n"; + exit 0; + } + if ($arg eq '-D') { + push (@dates, shift(@ARGV)); + } + elsif ($arg eq '-v') { + $verbose = undef; + } + elsif ($arg eq '-d') { + $debugging = 1; + } + elsif ($arg eq '-n') { + $new_errors_only = 1; + } + elsif ($arg eq '-A') { + $clean_builds_only = 0; + } + else { + push (@builds, $arg); + } +} + + +# Diff the todays clean builds with the ones from a specific date +if ($#builds == -1 && $#dates == 0) +{ + if ($clean_builds_only) + { + find_builds (\@builds, $cleanbuildsurl, 7); + } + else + { + find_builds (\@builds, $allbuildsurl, 3); + } + + $dates[1] = strftime ("%Y_%m_%d", gmtime); + + foreach $build (@builds) + { + $files[0] = $files[1] = $build; + differentiate (\@files, \@dates); + } +} +else +{ + + die "More than one date or build name are required" + unless ($#dates + $#builds ge 1); + + print "dates=@dates ($#dates)\n" + unless !$debugging; + + print "builds=@builds ($#builds)\n" + unless !$debugging; + + select_builds (\@dates, \@builds, \@files); + differentiate (\@files, \@dates); +} +__END__ + +=head1 diff-builds.pl Diff the lists of failing tests + +=item DESCRIPTION +Prints a diff for the list of test failures, for two builds on a certain date. +Or, for two dates and a certain build. + + +=item EXAMPLE + +diff-builds.pl WinXP_VC71_NET_Static_Debug -D 2006_04_17 -D 2006_05_12 + +=item AUTHOR +Iliyan Jeliazkov <iliyan@ociweb.com> + diff --git a/ACE/bin/doxygen-convert-h.pl b/ACE/bin/doxygen-convert-h.pl new file mode 100755 index 00000000000..3fcfc64abe0 --- /dev/null +++ b/ACE/bin/doxygen-convert-h.pl @@ -0,0 +1,527 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# doxygen-convert-h.pl is a script that would be used to convert old +# documented style ACE/TAO header files to doxygen style. + +# TODO List: +# (Search for @todo in this script) + +use File::Copy; +use Getopt::Std; + +############################################################################## +# Parse the options + +if (!getopts ('dDhsu') || $opt_h) { + print "doxygen-convert-h.pl [-dDhsu] filename\n"; + print "\n"; + print " -d debug script\n"; + print " -D really verbose debug\n"; + print " -h display this help\n"; + print " -s print result to stdout\n"; + print " -u turn off file verification\n"; + exit (1); +} + +## if verbose debug, also regular debug +$opt_d = 1 if (defined $opt_D); + +############################################################################## +# Find the files + +@files = (); + +foreach $arg (@ARGV) { + my @results = glob $arg; + if ($#results < 0) { + print STDERR "File not Found: $arg\n" + } + push @files, @results; +} + +############################################################################## +# Subroutines used to change the file. + +$fail = 0; + +sub verify (@) +{ + my (@contents) = @_; + + print "Verification\n" if (defined $opt_d); + + my $found_id = 0; + my $found_filename = 0; + + foreach $line (@contents) { + $found_id = 1 if ($line =~ /\$Id\:/); + $found_filename = 1 if ($line =~ /\= FILENAME/); + } + + return 0 if ($found_id == 1 && $found_filename == 1); + + # failed + return 1; +} + +sub format_description (@) +{ + my (@description) = @_; + my @after = (); + + my $line; + + if ($#description < 1) { + foreach $line (@description) { + $line =~ s/\/\// \* \@brief /; + push @after, $line; + } + } + else { + foreach $line (@description) { + $line =~ s/\/\// \*/; + $line =~ s/\* /\* /; + push @after, $line; + } + } + + return @after; +} + +sub fix_file_header (@) +{ + my (@before) = @_; + my @after = (); + my @description = (); + my $id = "\$Id\$\n"; + my $authors = ""; + + my $state = 'before'; + ## state = before, filename, description, author, after, done + + print "Fixing File Header\n" if (defined $opt_d); + + LOOP: foreach $line (@before) { + printf ("%10s %s", $state, $line) if (defined $opt_D); + + if ($state eq 'done') { + push @after, $line; + next LOOP; + } + + if ($state eq 'before') { + if ($line =~ /\-\*\- C\+\+ \-\*\-/) { + push @after, $line; + } + elsif ($line =~ /\$Id\:(.*)\n/) { + $id = "\$Id\:$1"; + } + elsif ($line =~ /===================/) { + push @after, "//========================================". + "=====================================\n"; + push @after, "/**\n"; + } + elsif ($line =~ /\= FILENAME/) { + $state = 'filename'; + next LOOP; + } + elsif ($line !~ /^\s*\/\//) { + push @after, $line; + } + } + + if ($state eq 'filename') { + if ($line =~ /\/\/ (.+)/) { + push @after, " * \@file $1\n"; + push @after, " *\n"; + push @after, " * $id\n"; + push @after, " *\n"; + } + elsif ($line =~ /\= DESCRIPTION/) { + $state = 'description'; + next LOOP; + } + elsif ($line =~ /\= AUTHOR/) { + $state = 'author'; + next LOOP; + } + elsif ($line =~ /===================/) { + $state = 'after'; + ### Fall through so the after can put the ending in + } + } + + if ($state eq 'description') { + if ($line =~ /\= AUTHOR/) { + push @after, format_description (@description); + @description = (); + push @after, " *\n"; + $state = 'author'; + next LOOP; + } + elsif ($line =~ /===================/) { + push @after, format_description (@description); + @description = (); + push @after, " *\n"; + $state = 'after'; + ### Fall through + } + push @description, $line; + } + if ($state eq 'author') { + if ($line =~ /\/\/ (.+)\n/) { + $authors .= $1; + } + elsif ($line =~ /===================/ + || $line =~ /\= DESCRIPTION/) { + ## print the authors + + if ($authors ne "") { + @authors = split /\,/, $authors; + + foreach $author (@authors) { + if ($author =~ /^ (.*)/) { + $author = $1; + } + push @after, " * \@author $author\n"; + } + } + + if ($line =~ /\= DESCRIPTION/) { + push @after, " *\n"; + $state = 'description'; + next LOOP; + } + else { + $state = 'after'; + ## Fall through + } + } + } + + if ($state eq 'after') { + if ($line =~ /===================/) { + ## print the rest + push @after, " */\n"; + push @after, "//========================================". + "=====================================\n"; + push @after, "\n"; + $state = 'done'; + } + + next LOOP; + } + } + + return @after; +} + + +sub fix_class_headers (@) +{ + my (@before) = @_; + my @after = (); + my @store = (); + my $classname = ""; + + my $state = 'outside'; + ## state = + ## outside = not in class + ## template = stored template line + ## class = started collecting lines, in case of a class + ## header = after a class foo, but before any methods + + print "Fixing class headers\n" if (defined $opt_d); + + LOOP: foreach $line (@before) { + printf ("%10s %s", $state, $line) if (defined $opt_D); + + if ($state eq 'outside') { + if ($line =~ /^\s*template/) { + push @store, $line; + $state = 'template'; + next LOOP; + } + elsif ($line =~ /^\s*class/) { + $state = 'class'; + ## Fall through + } + else { + push @after, $line; + } + + } + + if ($state eq 'template') { + if ($line =~ /^\s*class/) { + $state = 'class'; + ## Fall through + } + else { + push @after, @store; + @store = (); + push @after, $line; + $state = 'outside'; + next LOOP; + } + } + + if ($state eq 'class') { + if ($line =~ /^\s*class(.*)\n/) { + push @store, $line; + my @s = split / /, $1; + if ($s[1] =~ /export$/i) { + $classname = $s[2]; + } + else { + $classname = $s[1]; + } + } + elsif ($line =~ /^\s*\{/) { + push @store, $line; + } + elsif ($line =~ /^\s*\/\//) { + $state = 'header'; + ### Fall through + } + else { + push @after, @store; + @store = (); + push @after, $line; + $state = 'outside'; + next LOOP; + } + } + + if ($state eq 'header') { + if ($line =~ /^\s*\/\//) { + push @headers, $line; + } + else { + my $prefix = ''; + + $line =~ /^(\s*)[\w\/]/; ### used to get indent + my $indent = $1; + push @after, "$indent/**\n"; + push @after, "$indent * \@class $classname\n"; + + foreach $header (@headers) { + if ($header =~ /\= TITLE/) { + push @after, "$indent *\n"; + $prefix = "$indent * \@brief"; + } + elsif ($header =~ /\= DESCRIPTION/) { + push @after, "$indent *\n"; + $prefix = "$indent *"; + } + elsif ($header !~ /\/\/\s*\n/) { + my $myline = $header; + $myline =~ s/\s*\/\/\s*/$prefix /; + push @after, $myline; + $prefix = "$indent *"; + + } + } + push @after, "$indent */\n"; + @headers = (); + + push @after, @store; + push @after, $line; + @store = (); + $state = 'outside'; + next LOOP; + } + } + } + + return @after; +} + + +sub format_comment (@) +{ + my (@comments) = @_; + my @after = (); + + my $line; + + if ($#comments < 2) { + foreach $line (@comments) { + $line =~ s/\/\//\/\/\//; + push @after, $line; + } + } + else { + my $line = $comments[0]; + $line =~ /^(\s*)\//; + my $indent = $1; + + push @after, "$indent/**\n"; + foreach $line (@comments) { + $line =~ s/\/\// */; + push @after, $line; + } + push @after, "$indent */\n"; + } + + return @after; +} + +sub fix_class_members (@) +{ + my (@before) = @_; + my @after = (); + my @method = (); + my @comment = (); + + my $classfound = 0; + my $classlevel = 0; + my $level = 0; + + print "Fixing class methods\n" if (defined $opt_d); + + LOOP: foreach $line (@before) { + if ($line =~ /\{/ && $line !~ /^\s*\/\//) { + $level++; + } + + if ($line =~ /^\s*class/ + && $line !~ /\;/ + && $level == $classlevel) + { + $classlevel++; + } + + if ($line =~ /\}/ && $line !~ /^\s*\/\//) { + if ($classlevel == $level) { + $classlevel--; + } + $level--; + } + + printf ("%2d%2d", $level, $classlevel) if (defined $opt_D); + + if ($level == $classlevel && $level > 0) { + if ($line =~ /^\s*public/ + || $line =~ /^\s*private/ + || $line =~ /\s*protected/ + || $line =~ /^\s*\n$/ + || $line =~ /^\s*\{/ + || $line =~ /^\s*\}/ + || $line =~ /^\s*\#/) + { + push @after, format_comment (@comment); + push @after, @method; + @comment = (); + @method = (); + + print " $line" if (defined $opt_D); + push @after, $line; + } + elsif ($line =~ /^\s*\/\//) { + print "C $line" if (defined $opt_D); + + if ($#method >= 0) { + push @comment, $line; + } + else { + push @after, $line; + } + } + else { + print "M $line" if (defined $opt_D); + push @method, $line; + } + + } + else { + push @after, format_comment (@comment); + push @after, @method; + @comment = (); + @method = (); + + print " $line" if (defined $opt_D); + push @after, $line; + } + } + + if ($level > 0 || $classlevel > 0) { + $fail = 1; + $failmessage = "Brace level recognition failed" + } + + return @after; +} + +############################################################################## +# Read in the files. + +FILELOOP: foreach $file (@files) { + print "\n" if (defined $opt_d); + print "$file\n"; + print "\n" if (defined $opt_d); + + $fail = 0; + + my @contents = (); + + ### Read file into @contents + print "Reading\n" if (defined $opt_d); + + unless (open (FILE, "<$file")) { + print STDERR "$file: $!\n"; + next FILELOOP; + } + + @contents = <FILE>; + + close (FILE); + + ### Verify file + print "Verifying file\n" if (defined $opt_d); + + if (!defined $opt_u) { + if (verify (@contents) == 1) { + print "$file did not pass verification\n"; + next FILELOOP; + } + elsif (defined $opt_d) { + print "Passed verification\n"; + } + } + + ### Fix up parts of it + print "Fixing file\n" if (defined $opt_d); + + @contents = fix_file_header (@contents); + @contents = fix_class_headers (@contents); + @contents = fix_class_members (@contents); + + if ($fail != 0) { + print "$file: $failmessage\n"; + } + else { + if (defined $opt_s) { + print @contents; + } + elsif (!defined $opt_D) { + ### Save @contents back to the file + print "Saving\n" if (defined $opt_d); + + unless (open (FILE, ">$file")) { + print STDERR "$file: $!\n"; + next FILELOOP; + } + + foreach $line (@contents) { + print FILE $line; + } + + close (FILE); + } + } +} + diff --git a/ACE/bin/envinfo.cpp b/ACE/bin/envinfo.cpp new file mode 100644 index 00000000000..7a727d08818 --- /dev/null +++ b/ACE/bin/envinfo.cpp @@ -0,0 +1,40 @@ +// $Id$ + +#include "ace/ACE.h" +#include "ace/Log_Msg.h" +#include "ace/OS_main.h" +#include "ace/OS_NS_sys_utsname.h" + +ACE_RCSID(bin, envinfo, "$Id$") + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_DEBUG ((LM_INFO, ACE_TEXT ("ACE: %u.%u.%u\n"), + ACE::major_version(), + ACE::minor_version(), + ACE::beta_version())); + + ACE_utsname uname; + ACE_OS::uname(&uname); +#if defined (ACE_LACKS_UTSNAME_T) + ACE_DEBUG ((LM_INFO, + ACE_TEXT ("OS: %s %s\n"), + uname.sysname, + uname.release)); +#else + ACE_DEBUG ((LM_INFO, + ACE_TEXT ("OS: %C %C\n"), + uname.sysname, + uname.release)); +#endif + + ACE_DEBUG ((LM_INFO, ACE_TEXT ("Compiler: %s %u.%u\n"), + ACE::compiler_name(), + ACE::compiler_major_version(), + ACE::compiler_minor_version(), + ACE::compiler_beta_version())); + + return 0; +} + diff --git a/ACE/bin/footprint_stats.sh b/ACE/bin/footprint_stats.sh new file mode 100755 index 00000000000..4792da5afc0 --- /dev/null +++ b/ACE/bin/footprint_stats.sh @@ -0,0 +1,76 @@ +#!/bin/sh +# +# $Id$ +# + + +if [ $# -lt 2 ]; then + echo "Usage: $0 [ACE_ROOT] [DEST]" + exit 0 +fi + +ACE_ROOT=$1 +DEST=$2 +DATE=`date +%Y/%m/%d-%H:%M` + +BINS="TAO/tests/ORB_init/ORB_init TAO/tests/ORB_destroy/ORB_destroy" + +LIBS="ace/libACE.a \ + TAO/tao/libTAO.a \ + TAO/tao/libTAO_PortableServer.a \ + TAO/tao/libTAO_Strategies.a \ + TAO/tao/libTAO_SmartProxies.a \ + TAO/tao/libTAO_DynamicAny.a \ + TAO/tao/libTAO_DynamicInterface.a \ + TAO/tao/libTAO_IFR_Client.a \ + TAO/tao/libTAO_BiDirGIOP.a \ + TAO/tao/libTAO_Domain.a \ + TAO/tao/libTAO_IORManip.a \ + TAO/tao/libTAO_IORTable.a \ + TAO/tao/libTAO_TypeCodeFactory.a \ + TAO/tao/libTAO_RTCORBA.a \ + TAO/tao/libTAO_IORInterceptor.a \ + TAO/tao/libTAO_Messaging.a \ + TAO/tao/libTAO_ObjRefTemplate.a \ + TAO/tao/libTAO_Valuetype.a \ + TAO/tao/libTAO_RTScheduler.a \ + TAO/tao/libTAO_AnyTypeCode.a \ + TAO/tao/libTAO_PI.a \ + TAO/tao/libTAO_PI_Server.a \ + TAO/tao/libTAO_Codeset.a \ + TAO/tao/libTAO_CodecFactory.a \ + TAO/tao/libTAO_RTPortableServer.a" + +cd $ACE_ROOT + +for i in $BINS; do + b=`basename $i` + if [ -x $i ]; then + ( + echo -n $DATE " "; + size $i | + grep -v text | + awk '{print $4}' + ) >> $DEST/source/${b}_size.txt + fi +done + +for i in $LIBS; do + b=`basename $i`; + if [ -f $i ]; then + ( + echo -n $DATE " "; + size $i | + awk '{s += $4} END {print s}' + ) >> $DEST/source/${b}_size.txt + fi +done + +cd $DEST/source + +for i in $LIBS $BINS; do + b=`basename $i` + /usr/bin/tac ${b}_size.txt > $DEST/data/${b}_size.txt + /usr/bin/tail -5 ${b}_size.txt > $DEST/data/LAST_${b}_size.txt + $ACE_ROOT/bin/generate_footprint_chart.sh ${b}_size.txt $DEST/images/${b}_size.png $b +done diff --git a/ACE/bin/fuzz.pl b/ACE/bin/fuzz.pl new file mode 100755 index 00000000000..1f22a071d3e --- /dev/null +++ b/ACE/bin/fuzz.pl @@ -0,0 +1,1479 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# Fuzz is a script whose purpose is to check through ACE/TAO files for +# easy to spot (by a perl script, at least) problems. + +use File::Find; +use File::Basename; +use Getopt::Std; + +###### TODO +# +# Add tests for these: +# +# - no relative path to tao_idl in the .dsp files +# - Linking to wrong type of library in dsp's +# - not setting up the release configs correctly in dsp files +# - Guards in .h files +# - no global functions +# - other commit_check checks, tabs, trailing spaces. +# - _narrow() should always have ACE_ENV_ARG_PARAMETER +# - Using ACE_TRY_NEW_ENV (Nanbor suggests using ACE_DECLARE_NEW_CORBA_ENV) +# +# And others in ACE_Guidelines and Design Rules +# +# Also add a -g flag to ignore tao_idl generated files +# +###### END TODO + +# Lists of all the files +@files_cpp = (); +@files_inl = (); +@files_h = (); +@files_html = (); +@files_dsp = (); +@files_dsw = (); +@files_gnu = (); +@files_idl = (); +@files_pl = (); +@files_changelog = (); +@files_makefile = (); +@files_mpc = (); +@files_bor = (); +@files_noncvs = (); + +# To keep track of errors and warnings +$errors = 0; +$warnings = 0; + +############################################################################## + +# Find_Modified_Files will use 'cvs -nq' to get a list of locally modified +# files to look through +sub find_mod_files () +{ + unless (open (CVS, "cvs -nq up |")) { + print STDERR "Error: Could not run cvs\n"; + exit (1); + } + + while (<CVS>) { + if (/^[M|A] (.*)/) { + store_file ($1); + } + } + close (CVS); +} + + + +# Find_Files will search for files with certain extensions in the +# directory tree +sub find_files () +{ + # wanted is only used for the File::Find + sub wanted + { + store_file ($File::Find::name); + } + + find (\&wanted, '.'); +} + +# +sub store_file ($) +{ + my $name = shift; + if ($name =~ /\.(c|cc|cpp|cxx)$/i) { + push @files_cpp, ($name); + } + elsif ($name =~ /\.(inl|i)$/i) { + push @files_inl, ($name); + } + elsif ($name =~ /\.(h|hh|hpp|hxx)$/i) { + push @files_h, ($name); + } + elsif ($name =~ /\.(htm|html)$/i) { + push @files_html, ($name); + } + elsif ($name =~ /\.(bor)$/i) { + push @files_bor, ($name); + } + elsif ($name =~ /\.(GNU)$/i) { + push @files_gnu, ($name); + } + elsif ($name =~ /\.(dsp|vcp)$/i) { + push @files_dsp, ($name); + } + elsif ($name =~ /\.(dsw|vcp)$/i) { + push @files_dsw, ($name); + } + elsif ($name =~ /\.(pidl|idl)$/i) { + push @files_idl, ($name); + } + elsif ($name =~ /\.pl$/i) { + push @files_pl, ($name); + } + elsif ($name =~ /ChangeLog/i && -f $name) { + push @files_changelog, ($name); + } + elsif ($name =~ /\/GNUmakefile.*.[^~]$/) { + push @files_makefile, ($name); + } + elsif ($name =~ /\.(mpc|mwc|mpb|mpt)/i) { + push @files_mpc, ($name); + } + elsif ($name =~ /\.(icc|ncb|opt|zip)$/i) { + push @files_noncvs, ($name); + } +} + +############################################################################## +## Just messages + +sub print_error ($) +{ + my $msg = shift; + print "Error: $msg\n"; + ++$errors; +} + + +sub print_warning ($) +{ + my $msg = shift; + print "Warning: $msg\n"; + ++$warnings; +} + + +############################################################################## +## Tests + +# The point of this test is to check for the existence of ACE_INLINE +# or ASYS_INLINE in a .cpp file. This is most commonly caused by +# copy/pasted code from a .inl/.i file +sub check_for_inline_in_cpp () +{ + print "Running ACE_INLINE/ASYS_INLINE check\n"; + foreach $file (@files_cpp) { + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/^ACE_INLINE/) { + print_error ("$file:$.: ACE_INLINE found"); + } + if (/^ASYS_INLINE/) { + print_error ("$file:$.: ASYS_INLINE found"); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test checks to make sure files have the $Id string in them. +# Commit_check should find these when checking in files, but this can +# be used locally or to check for files +sub check_for_id_string () +{ + print "Running \$Id\$ string check\n"; + foreach $file (@files_cpp, @files_inl, @files_h, @files_mpc, @files_bor, @files_gnu, + @files_html, @files_idl, @files_pl, @makefile_files) { + my $found = 0; + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/\$Id\:/ or /\$Id\$/) { + $found = 1; + } + if (/\$id\$/) { + print_error ("$file:$.: Incorrect \$id\$ found (correct casing)"); + } + } + close (FILE); + if ($found == 0) { + print_error ("$file:1: No \$Id\$ string found."); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# check for _MSC_VER +sub check_for_msc_ver_string () +{ + print "Running _MSC_VER check\n"; + foreach $file (@files_cpp, @files_inl, @files_h) { + my $found = 0; + if (open (FILE, $file)) { + my $disable = 0; + my $mscline = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_msc_ver/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_msc_ver/) { + $disable = 0; + } + if ($disable == 0 and /\_MSC_VER \<= 1200/) { + $found = 1; + $mscline = $.; + } + if ($disable == 0 and /\_MSC_VER \>= 1200/) { + $found = 1; + $mscline = $.; + } + if ($disable == 0 and /\_MSC_VER \< 1300/) { + $found = 1; + $mscline = $.; + } + if ($disable == 0 and /\_MSC_VER \<= 1300/) { + $found = 1; + $mscline = $.; + } + } + close (FILE); + if ($found == 1) { + print_error ("$file:$mscline: Incorrect _MSC_VER check found"); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test checks for the newline at the end of a file +sub check_for_newline () +{ + print "Running newline check\n"; + foreach $file (@files_cpp, @files_inl, @files_h, + @files_html, @files_idl, @files_pl) { + if (open (FILE, $file)) { + my $line; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + $line = $_ + } + close (FILE); + if ($line !~ /\n$/) { + print_error ("$file:$.: No ending newline found in $file"); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + + +# This test checks for files that are not allowed to be in cvs +sub check_for_noncvs_files () +{ + print "Running non cvs files check\n"; + foreach $file (@files_noncvs, @files_dsp, @files_dsw, @files_makefile) { + print_error ("File $file should not be in cvs!"); + } +} + + +# This test checks for the use of "inline" instead of ACE_INLINE +sub check_for_inline () +{ + print "Running inline check\n"; + foreach $file (@files_inl) { + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + ++$line; + if (/FUZZ\: disable check_for_inline/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_inline/) { + $disable = 0; + } + if ($disable == 0 and m/^\s*inline/) { + print_error ("$file:$.: 'inline' keyword found"); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + + +# This test checks for the inclusion of math.h. math.h should be avoided +# since on some platforms, "exceptions" is defined as a struct, which will +# cause problems with exception handling +sub check_for_math_include () +{ + print "Running math.h test\n"; + foreach $file (@files_h, @files_cpp, @files_inl) { + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_math_include/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_math_include/) { + $disable = 0; + } + if ($disable == 0 + and /^\s*#\s*include\s*(\/\*\*\/){0,1}\s*\<math\.h\>/) { + print_error ("$file:$.: <math.h> included"); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test checks for the inclusion of streams.h. +# // FUZZ: disable check_for_streams_include +sub check_for_streams_include () +{ + print "Running ace/streams.h test\n"; + foreach $file (@files_h, @files_cpp, @files_inl) { + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_streams_include/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_streams_include/) { + $disable = 0; + } + if ($disable == 0 + and /^\s*#\s*include\s*\"ace\/streams\.h\"/) { + print_error ("$file:$.: expensive ace/streams.h included; consider ace/iosfwd.h"); + print " ace/streams.h is very expensive in both "; + print "compile-time and footprint. \n"; + print " Please consider including ace/iosfwd.h instead.\n\n"; + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test checks for the inclusion of OS.h. +sub check_for_OS_h_include () +{ + print "Running ace/OS.h test\n"; + foreach $file (@files_h, @files_cpp, @files_inl) { + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_OS_h_include/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_OS_h_include/) { + $disable = 0; + } + if ($disable == 0 + and /^\s*#\s*include\s*\"ace\/OS\.h\"/) { + print_error ("$file:$.: expensive ace/OS.h included; consider an OS_NS_*.h file"); + print " OS.h is very expensive in both "; + print "compile-time and footprint. \n"; + print " Please consider including one of the "; + print "OS_NS_*.h files instead.\n\n"; + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test checks for the inclusion of Synch*.h. +sub check_for_synch_include () +{ + print "Running ace/Synch*.h test\n"; + foreach $file (@files_h, @files_cpp, @files_inl) { + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_synch_include/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_synch_include/) { + $disable = 0; + } + if ($disable == 0 + and (/^\s*#\s*include\s*\"(ace\/Synch\.h)\"/ + or /^\s*#\s*include\s*\"(ace\/Synch_T\.h)\"/)) { + my $synch = $1; + print_error ("$file:$.: expensive $synch included; consider individual synch file"); + print " $synch is very expensive in both "; + print "compile-time and footprint. \n"; + print " Please consider including one of the "; + print "individual synch files instead.\n\n"; + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# For general readability, lines should not contain more than 80 characters +sub check_for_line_length () +{ + print "Running line length test\n"; + foreach $file (@files_h, @files_cpp, @files_inl) { + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + + # Make sure to ignore ACE_RCSID lines, since they + # are difficult to get under 80 chars. + if (/.{80,}/ and !/^ACE_RCSID/) { + print_error ("$file:$.: line longer than 80 chars"); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + + +# For preprocessor directives, only the old C style comments (/* */) +# should be used, not the newer // style. +sub check_for_preprocessor_comments () +{ + print "Running preprocessor comment test\n"; + foreach $file (@files_h, @files_cpp, @files_inl) { + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/^\#.*\/\//) { + print_error ("$file:$.: C++ comment in directive"); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# We should not have empty inline files in the repo +sub check_for_empty_inline_files () +{ + print "Running empty inline files test\n"; + foreach $file (@files_inl) { + my $found_non_empty_line = 0; + my $idl_generated = 0; + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + next if /^[:blank:]*$/; # skip empty lines + next if /^[:blank:]*\/\//; # skip C++ comments + next if /^[:blank:]*\/\*/; # skip C++ comments + $found_non_empty_line = 1; + last; + } + close (FILE); + if ($found_non_empty_line == 0 and $idl_generated == 0) { + print_error ("$file:1: empty inline file should not be in the repository"); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + + +# This test checks for the use of the Win32 Unicode string defines +# or outdated ASYS_* macros +# We should only be using the ACE_TCHAR, ACE_TEXT macros instead. +sub check_for_tchar +{ + print "Running TCHAR test\n"; + foreach $file (@files_h, @files_cpp, @files_inl) { + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_tchar/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_tchar/) { + $disable = 0; + } + if ($disable == 0) { + if (/LPTSTR/) { + print_error ("$file:$.: LPTSTR found"); + } + + if (/LPCTSTR/) { + print_error ("$file:$.: LPCTSTR found"); + } + + if (/ASYS_TCHAR/) { + print_error ("$file:$.: ASYS_TCHAR found"); + } + elsif (/TCHAR/ and !/ACE_TCHAR/) { + ### Do a double check, since some macros do have TCHAR + ### (like DEFAULTCHARS) + if (/^TCHAR[^\w_]/ or /[^\w_]TCHAR[^\w_]/) { + print_error ("$file:$.: TCHAR found"); + } + } + + if (/ASYS_TEXT/) { + print_error ("$file:$.: ASYS_TEXT found"); + } + elsif (/TEXT/ and !/ACE_TEXT/) { + ### Do a double check, since there are several macros + ### that end with TEXT + if (/^TEXT\s*\(/ or /[^\w_]TEXT\s*\(/) { + print_error ("$file:$.: TEXT found"); + } + } + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This checks to see if Makefiles define a DEPENDENCY_FILE, and if they do +# whether or not it's in the cvs repo. +sub check_for_dependency_file () +{ + print "Running DEPENDENCY_FILE test\n"; + foreach $file (@files_makefile) { + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/^DEPENDENCY_FILE\s* =\s*(.*)/) { + my $depend = $1; + my $path = $file; + $path =~ s/\/GNUmakefile.*/\//; + $depend = $path . $depend; + unless (open (DFILE, $depend)) { + print_error ("DEPENDENCY_FILE \"$depend\" not found"); + print " Either add \"$depend\" to cvs "; + print "or remove DEPENDENCY_FILE variable\n"; + print " from $file\n\n"; + } + close (DFILE); + } + } + close (FILE); + } + else { + print_error ("cannot open $file"); + } + } +} + +# This checks to see if GNUmakefiles define a MAKEFILE, and if it matches the +# name of the GNUmakefile +sub check_for_makefile_variable () +{ + print "Running MAKEFILE variable test\n"; + foreach $file (@files_makefile) { + if (!(substr($file,-4) eq ".bor") + and !(substr($file,-3) eq ".am") + and !(substr($file,-4) eq ".vac") + and !(substr($file,-4) eq ".alt")) { + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + my $makevarfound = 0; + my $filename = basename($file,""); + while (<FILE>) { + if (/^MAKEFILE\s*=\s*(.*)/) { + $makevarfound = 1; + $makevar = $1; + if (!($makevar eq $filename)) { + print_error ("$file:$.: MAKEFILE variable $makevar != $filename"); + print " Change MAKEFILE = $filename in $file.\n\n"; + } + } + } + if ($makevarfound == 0 and !($filename eq "GNUmakefile")) { + print_error ("$file:$.: MAKEFILE variable missing in $file"); + print " Add MAKEFILE = $filename to the top of $file.\n\n"; + } + close (FILE); + } + else { + print_error ("cannot open $file"); + } + } + } +} + + +# This checks to make sure files include ace/post.h if ace/pre.h is included +# and vice versa. +sub check_for_pre_and_post () +{ + print "Running pre.h/post.h test\n"; + foreach $file (@files_h) { + my $pre = 0; + my $post = 0; + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_pre_and_post/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_pre_and_post/) { + $disable = 0; + } + if ($disable == 0) { + if (/^\s*#\s*include\s*\"ace\/pre\.h\"/) { + print_error ("$file:$.: pre.h missing \"/**/\""); + ++$pre; + } + if (/^\s*#\s*include\s*\s*\"ace\/post\.h\"/) { + print_error ("$file:$.: post.h missing \"/**/\""); + ++$post; + } + if (/^\s*#\s*include\s*\/\*\*\/\s*\"ace\/pre\.h\"/) { + ++$pre; + } + if (/^\s*#\s*include\s*\/\*\*\/\s*\"ace\/post\.h\"/) { + ++$post; + } + } + } + close (FILE); + + if ($disable == 0 && $pre != $post) { + print_error ("$file:1: pre.h/post.h mismatch"); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test verifies that the same number of "#pragma warning(push)" and +# "#pragma warning(pop)" pragmas are used in a given header. +sub check_for_push_and_pop () +{ + print "Running #pragma (push)/(pop) test\n"; + foreach $file (@files_h) { + my $push_count = 0; + my $pop_count = 0; + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_push_and_pop/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_push_and_pop/) { + $disable = 0; + } + if ($disable == 0) { + if (/^\s*#\s*pragma\s*warning\s*\(\s*push[,1-4]*\s*\)/) { + ++$push_count; + } + if (/^\s*#\s*pragma\s*warning\s*\(\s*pop\s*\)/) { + ++$pop_count; + } + } + } + close (FILE); + + if ($disable == 0 && $push_count != $pop_count) { + print_error ("$file: #pragma warning(push)/(pop) mismatch"); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test verifies that the same number of +# "ACE_VERSIONED_NAMESPACE_BEGIN_DECL" and +# "ACE_END_VERSIONED_NAMESPACE_DECL" macros are used in a given +# source file. +sub check_for_versioned_namespace_begin_end () +{ + print "Running versioned namespace begin/end test\n"; + foreach $file (@files_cpp, @files_inl, @files_h) { + my $begin_count = 0; + my $end_count = 0; + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/^\s*\w+_BEGIN_VERSIONED_NAMESPACE_DECL/) { + ++$begin_count; + } + if (/^\s*\w+_END_VERSIONED_NAMESPACE_DECL/) { + ++$end_count; + } + if ($begin_count > $end_count and /^\s*#\s*include\s*/) { + print_error ("$file:$.: #include directive within Versioned namespace block"); + } + } + + close (FILE); + + if ($begin_count != $end_count) { + print_error ("$file: Versioned namespace begin($begin_count)/end($end_count) mismatch"); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + + +# Check doxygen @file comments +sub check_for_mismatched_filename () +{ + print "Running doxygen \@file test\n"; + foreach $file (@files_h, @files_cpp, @files_inl, @files_idl) { + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (m/\@file\s*([^\s]+)/){ + # $file includes complete path, $1 is the name after + # @file. We must strip the complete path from $file. + # we do that using the basename function from + # File::BaseName + $filename = basename($file,""); + if (!($filename eq $1)){ + print_error ("$file:$.: \@file mismatch in $file, found $1"); + } + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# check for bad run_test +sub check_for_bad_run_test () +{ + print "Running run_test.pl test\n"; + foreach $file (@files_pl) { + if (open (FILE, $file)) { + my $is_run_test = 0; + my $sub = 0; + + print "Looking at file $file\n" if $opt_d; + + while (<FILE>) { + + if (m/PerlACE/ || m/ACEutils/) { + $is_run_test = 1; + } + + if ($is_run_test == 1) { + if (m/ACEutils/) { + print_error ("$file:$.: ACEutils.pm still in use"); + } + + if (m/unshift \@INC/) { + print_error ("$file:$.: unshifting \@INC; use \"use lib\""); + } + + if (m/\$EXEPREFIX/) { + print_error ("$file:$.: using \$EXEPREFIX"); + } + + if (m/\$EXE_EXT/) { + print_error ("$file:$.: using \$EXE_EXT"); + } + + if (m/\$DIR_SEPARATOR/) { + print_error ("$file:$.: using \$DIR_SEPARATOR"); + } + if (m/ACE\:\:/ && !m/PerlACE\:\:/) { + print_error ("$file:$.: using ACE::*"); + } + + if (m/Process\:\:/ && !m/PerlACE\:\:Process\:\:/) { + print_error ("$file:$.: using Process::*"); + } + + if (m/Process\:\:Create/) { + print_error ("$file:$.: using Process::Create"); + } + + if ((m/\.ior/ || m/\.conf/) && !m/LocalFile/) { + print_error ("$file:$.: Not using PerlACE::LocalFile"); + } + + if (m/^ [^ ]/) { + print_warning ("$file:$.: using two-space indentation"); + } + + if (m/^\s*\t/) { + print_error ("$file:$.: Indenting using tabs"); + } + + if (m/^\s*\{/ && $sub != 1) { + print_warning ("$file:$.: Using Curly Brace alone"); + } + + if (m/timedout/i && !m/\#/) { + print_error ("$file:$.: timedout message found"); + } + + if (m/^\s*sub/) { + $sub = 1; + } + else { + $sub = 0; + } + } + } + + close (FILE); + + if ($is_run_test) { + my @output = `perl -wc $file 2>&1`; + + foreach $output (@output) { + chomp $output; + if ($output =~ m/error/i) { + print_error ($output); + } + elsif ($output !~ m/syntax OK/) { + print_warning ($output); + } + } + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + + +# Check for links to ~schmidt/ACE_wrappers/, which should not be in the +# documentation +sub check_for_absolute_ace_wrappers() +{ + print "Running absolute ACE_wrappers test\n"; + foreach $file (@files_html) { + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (m/\~schmidt\/ACE_wrappers\//) { + chomp; + print_error ("$file:$.: ~schmidt/ACE_wrappers found"); + print_error ($_) if (defined $opt_v); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# Make sure ACE_[OS_]TRACE matches the function/method +sub check_for_bad_ace_trace() +{ + print "Running TRACE test\n"; + foreach $file (@files_inl, @files_cpp) { + if (open (FILE, $file)) { + my $class; + my $function; + + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + + # look for methods or functions + if (m/(^[^\s][^\(]*)\:\:([^\:^\(]*[^\s^\(])\s*/) { + $class = $1; + $function = $2; + } + elsif (m/^([^\s^\(^\#]*) \(/i) { + $class = ""; + $function = $1; + } + elsif (m/^(operator.*) \(/i) { + $class = ""; + $function = $1; + } + + # Look for TRACE statements + if (m/ACE_OS_TRACE\s*\(\s*\"(.*)\"/ + || m/ACE_TRACE\s*\(\s*\"(.*)\"/) { + my $trace = $1; + + # reduce the classname + if ($class =~ m/([^\s][^\<^\s]*)\s*\</) { + $class = $1; + } + + if ($class =~ m/([^\s^\&^\*]*)\s*$/) { + $class = $1; + } + + if ($trace !~ m/\Q$function\E/ + || ($trace =~ m/\:\:/ && !($trace =~ m/\Q$class\E/ && $trace =~ m/\Q$function\E/))) { + print_error ("$file:$.: Mismatched TRACE"); + print_error ("$file:$.: I see \"$trace\" but I think I'm in \"" + . $class . "::" . $function . "\"") if (defined $opt_v); + } + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + + + +# This test checks missing ACE_ENV_ARG_PARAMETER when using +# resolve_initial_references +sub check_for_missing_rir_env () +{ + print "Running resolve_initial_references() check\n"; + foreach $file (@files_cpp, @files_inl) { + if (open (FILE, $file)) { + my $disable = 0; + my $native_try = 0; + my $in_rir = 0; + my $found_env = 0; + + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_missing_rir_env/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_missing_rir_env/) { + $disable = 0; + } + if ($disable == 0) { + next if m/^\s*\/\//; + + if (m/^\s*try/) { + $disable = 1; + next; + } + + if (m/[^\:]resolve_initial_references\s*\(/) { + $found_env = 0; + $in_rir = 1; + } + + if (m/ACE_ENV_ARG_PARAMETER/) { + $found_env = 1; + } + + if ($in_rir == 1 && m/\;\s*$/) { + $in_rir = 0; + if ($found_env != 1) { + print_error ("$file:$.: Missing ACE_ENV_ARG_PARAMETER in" + . " resolve_initial_references"); + } + $found_env = 0; + } + + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test checks for usage of ACE_CHECK/ACE_TRY_CHECK +sub check_for_ace_check () +{ + print "Running ACE_CHECK check\n"; + foreach $file (@files_cpp, @files_inl) { + if (open (FILE, $file)) { + my $disable = 0; + my $in_func = 0; + my $in_return = 0; + my $in_ace_try = 0; + my $found_env = 0; + + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_ace_check/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_ace_check/) { + $disable = 0; + } + + if (/FUZZ\: ignore check_for_ace_check/) { + next; + } + + next if m/^\s*\/\//; + next if m/^\s*$/; + + if (m/ACE_TRY\s*$/ || m/ACE_TRY_EX/ || m/ACE_TRY\s*{/) { + $in_ace_try = 1; + } + if (m/ACE_CATCH/) { + $in_ace_try = 0; + } + + if ($disable == 0) { + if (m/\s*ACE_ENV_(SINGLE_)?ARG_PARAMETER[,\)]/) { + $env_line = $.; + if ($found_env) { + print_error ("$file:$env_line: Missing ACE_CHECK/ACE_TRY_CHECK"); + } + $found_env = 1; + $in_func = 1; + } + + if (m/^\s*return/) { + $in_return = 1; + } + if ($in_return && m/;/) { + $in_return = 0; + $found_env = 0; + } + + # ignore quoted ACE_ENV_ARG_PARAMETERS's + if (m/^[^\"]*\"[^\"]*ACE_ENV_(SINGLE_)?ARG_PARAMETER[^\"]*\"[^\"]*$/) { + $found_env = 0; + } + + if (m/ACE_ENV_(SINGLE_)?ARG_PARAMETER.*ACE_ENV_(SINGLE_)?ARG_PARAMETER/) { + print_error ("$file:$.: Multiple ACE_ENV_ARG_PARAMETER"); + } + + if (m/ACE_THROW/ && $in_ace_try) { + print_error ("$file:$.: ACE_THROW/ACE_THROW_RETURN used inside of an ACE_TRY"); + } + + if ($in_func && m/\)/) { + $in_func = 0; + } + elsif (!$in_func && $found_env) { + if (m/ACE_CHECK/ && $in_ace_try) { + print_error ("$file:$.: ACE_CHECK/ACE_CHECK_RETURN used inside of an ACE_TRY"); + } + elsif (!m/_CHECK/ && !m/^\}/ && !$in_return) { + print_error ("$file:$env_line: Missing ACE_CHECK/ACE_TRY_CHECK"); + } + $found_env = 0; + } + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test checks for broken ChangeLog entries. +sub check_for_changelog_errors () +{ + print "Running ChangeLog check\n"; + foreach $file (@files_changelog) { + if (open (FILE, $file)) { + my $found_backslash = 0; + my $found_cvs_conflict = 0; + + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + + next if m/^\s*\/\//; + next if m/^\s*$/; + + # Check for backslashes in paths. + if (m/\*.*\\[^ ]*:/) { + print_error ("$file:$.: Backslashes in file path"); + } + + # Check for CVS conflict tags + if (m/^<<<<</ || m/^=====/ || m/^>>>>>/) { + print_error ("$file:$.: CVS conflict markers"); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +sub check_for_deprecated_macros () +{ + print "Running deprecated macros check\n"; + foreach $file (@files_cpp, @files_inl, @files_h) { + if (open (FILE, $file)) { + + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + # Check for ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION usage. + if (m/ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION\)/) { + print_error ("$file:$.: ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION found."); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} +# This test checks for ptr_arith_t usage in source code. ptr_arith_t +# is non-portable. Use ptrdiff_t instead. +sub check_for_ptr_arith_t () +{ + print "Running ptr_arith_t check\n"; + foreach $file (@files_cpp, @files_inl, @files_h) { + if (open (FILE, $file)) { + + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + + next if m/^\s*\/\//; # Ignore C++ comments. + next if m/^\s*$/; # Skip lines only containing + # whitespace. + + # Check for ptr_arith_t usage. This test should + # ignore typedefs, and should only catch variable + # declarations and parameter types. + if (m/ptr_arith_t / || m/ptr_arith_t,/) { + print_error ("$file:$.: ptr_arith_t; use ptrdiff_t instead."); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test checks for the #include <ace/...> +# This check is suggested by Don Hinton to force user to use +# " " instead of <> to avoid confict with Doxygen. +sub check_for_include () +{ + print "Running the include check\n"; + foreach $file (@files_h, @files_cpp, @files_inl, @files_idl) { + my $bad_occurance = 0; + if (open (FILE, $file)) { + my $disable = 0; + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + if (/FUZZ\: disable check_for_include/) { + $disable = 1; + } + if (/FUZZ\: enable check_for_include/) { + $disable = 0; + } + if ($disable == 0) { + if (/^\s*#\s*include\s*<[(ace)|(TAO)|(CIAO)]\/.*>/) { + print_error ("$file:$.: include <ace\/..> used") if ($opt_v); + ++$bad_occurance; + } + if (/^\s*#\s*include\s*<tao\/.*>/) { + print_error ("$file:$.: include <tao\/..> used") if ($opt_v); + ++$bad_occurance; + } + if (/^\s*#\s*include\s*<ciao\/.*>/) { + print_error ("$file:$.: include <ciao\/..> used") if ($opt_v); + ++$bad_occurance; + } + } + } + close (FILE); + + if ($disable == 0 && $bad_occurance > 0 ) { + print_error ("$file:1: found $bad_occurance usage(s) of #include <> of ace\/tao\/ciao."); + } + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test verifies that all equality, relational and logical +# operators return bool, as is the norm for modern C++. +# +# NOTE: This test isn't fool proof yet. +sub check_for_non_bool_operators () +{ + print "Running non-bool equality, relational and logical operator check\n"; + foreach $file (@files_h, @files_inl, @files_cpp) { + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + my $found_bool = 0; + my $found_return_type = 0; + while (<FILE>) { + + if ($found_bool == 0 + && (/[^\w]bool\s*$/ + || /^bool\s*$/ + || /\sbool\s+\w/ + || /^bool\s+\w/ + || /[^\w]return\s*$/)) + { + $found_bool = 1; + $found_return_type = 0; + next; + } + + if ($found_bool == 0 && $found_return_type == 0 + && /^(?:\w+|\s+\w+)\s*$/ + && !/[^\w]return\s*$/) + { + $found_return_type = 1; + $found_bool = 0; + next; + } + + if ($found_bool == 0 + && /(?<![^\w]bool)(\s+|\w+::|>\s*::)operator\s*(?:!|<|<=|>|>=|==|!=|&&|\|\|)\s*\(/ + && !/\(.*operator\s*(?:!|<|<=|>|>=|==|!=|&&|\|\|)\s*\(/ + && !/^\s*return\s+/) { + print_error ("$file:$.: non-bool return type for operator"); + } + + $found_return_type = 0; + $found_bool = 0; + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +# This test verifies that all filenames are short enough + +sub check_for_long_file_names () +{ + my $max_filename = 50; + my $max_mpc_projectname = $max_filename - 12; ## GNUmakefile.[project_name] + print "Running file names check\n"; + + foreach $file (@files_cpp, @files_inl, @files_h, @files_html, + @files_dsp, @files_dsw, @files_gnu, @files_idl, + @files_pl, @files_changelog, @files_makefile, + @files_bor, @files_mpc) { + if ( length( basename($file) ) >= $max_filename ) + { + print_error ("File name $file meets or exceeds $max_filename chars."); + } + } + foreach $file (grep(/\.mpc$/, @files_mpc)) { + if (open(FH, $file)) { + my($blen) = length(basename($file)) - 4; ## .mpc + while(<FH>) { + if (/project\s*(:.*)\s*{/) { + if ($blen >= $max_mpc_projectname) { + print_warning ("File name $file meets or exceeds $max_mpc_projectname chars."); + } + } + elsif (/project\s*\(([^\)]+)\)/) { + my($name) = $1; + if ($name =~ /\*/) { + my($length) = length($name) + (($name =~ tr/*//) * $blen); + if ($length >= $max_mpc_projectname) { + print_warning ("Project name ($name) from $file will meet or exceed $max_mpc_projectname chars when expanded by MPC."); + } + } + else { + if (length($name) >= $max_mpc_projectname) { + print_warning ("Project name ($name) from $file meets or exceeds $max_mpc_projectname chars."); + } + } + } + } + close(FH); + } + } +} + +sub check_for_refcountservantbase () +{ + print "Running PortableServer::RefCountServantBase derivation check\n"; + + foreach $file (@files_h) { + if (open (FILE, $file)) { + print "Looking at file $file\n" if $opt_d; + while (<FILE>) { + + if (/PortableServer::RefCountServantBase/) { + print_error ("$file:$.: reference to deprecated PortableServer::RefCountServantBase"); + } + } + close (FILE); + } + else { + print STDERR "Error: Could not open $file\n"; + } + } +} + +############################################################################## + +use vars qw/$opt_c $opt_d $opt_h $opt_l $opt_t $opt_m $opt_v/; + +if (!getopts ('cdhl:t:mv') || $opt_h) { + print "fuzz.pl [-cdhm] [-l level] [-t test_name][file1, file2, ...]\n"; + print "\n"; + print " -c only look at the files passed in\n"; + print " -d turn on debugging\n"; + print " -h display this help\n"; + print " -l level set detection level (default = 5)\n"; + print " -t test_name specify any single test to run. This will disable the run level setting\n"; + print " -m only check locally modified files (uses cvs)\n"; + print " -v verbose mode\n"; + print "======================================================\n"; + print "list of the tests that could be run:\n"; + print "\t check_for_noncvs_files + check_for_synch_include + check_for_OS_h_include + check_for_streams_include + check_for_dependency_file + check_for_makefile_variable + check_for_inline_in_cpp + check_for_id_string + check_for_newline + check_for_inline + check_for_math_include + check_for_line_length + check_for_preprocessor_comments + check_for_tchar + check_for_pre_and_post + check_for_push_and_pop + check_for_versioned_namespace_begin_end + check_for_mismatched_filename + check_for_bad_run_test + check_for_absolute_ace_wrappers + check_for_bad_ace_trace + check_for_missing_rir_env + check_for_ace_check + check_for_changelog_errors + check_for_ptr_arith_t + check_for_include + check_for_non_bool_operators + check_for_long_file_names + check_for_refcountservantbase\n"; + exit (1); +} + +if (!$opt_l) { + $opt_l = 5; +} + +if ($opt_c) { + foreach $file (@ARGV) { + store_file ($file); + } +} +elsif ($opt_m) { + find_mod_files (); +} +else { + find_files (); +} + +if ($opt_t) { + &$opt_t(); + exit (1); +} + +print "--------------------Configuration: Fuzz - Level ",$opt_l, + "--------------------\n"; + +check_for_deprecated_macros () if ($opt_l > 1 ); +check_for_refcountservantbase () if ($opt_l > 1 ); +check_for_msc_ver_string () if ($opt_l >= 3); +check_for_empty_inline_files () if ($opt_l >= 1); +check_for_noncvs_files () if ($opt_l >= 1); +check_for_streams_include () if ($opt_l >= 6); +check_for_dependency_file () if ($opt_l >= 1); +check_for_makefile_variable () if ($opt_l >= 1); +check_for_inline_in_cpp () if ($opt_l >= 2); +check_for_id_string () if ($opt_l >= 1); +check_for_newline () if ($opt_l >= 1); +check_for_inline () if ($opt_l >= 2); +check_for_math_include () if ($opt_l >= 3); +check_for_synch_include () if ($opt_l >= 6); +check_for_OS_h_include () if ($opt_l >= 6); +check_for_line_length () if ($opt_l >= 8); +check_for_preprocessor_comments () if ($opt_l >= 7); +check_for_tchar () if ($opt_l >= 4); +check_for_pre_and_post () if ($opt_l >= 4); +check_for_push_and_pop () if ($opt_l >= 4); +check_for_versioned_namespace_begin_end () if ($opt_l >= 4); +check_for_mismatched_filename () if ($opt_l >= 2); +check_for_bad_run_test () if ($opt_l >= 6); +check_for_absolute_ace_wrappers () if ($opt_l >= 3); +check_for_bad_ace_trace () if ($opt_l >= 4); +check_for_missing_rir_env () if ($opt_l >= 6); +check_for_ace_check () if ($opt_l >= 6); +check_for_changelog_errors () if ($opt_l >= 4); +check_for_ptr_arith_t () if ($opt_l >= 4); +check_for_include () if ($opt_l >= 5); +check_for_non_bool_operators () if ($opt_l > 2); +check_for_long_file_names () if ($opt_l > 1 ); + + +print "\nFuzz.pl - $errors error(s), $warnings warning(s)\n"; + +exit (1) if $errors > 0; diff --git a/ACE/bin/g++_metric.sh b/ACE/bin/g++_metric.sh new file mode 100755 index 00000000000..93af97932a1 --- /dev/null +++ b/ACE/bin/g++_metric.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# +# $Id$ +# +# This simple script is used to gather compile time metrics. You can use +# it with make like this: +# +# $ make CXX=g++_metric.sh +# + +commandline=$@ +# find the target and save it to a variable +until [ -z "$1" ] # test all command line parameters +do + if [ "-o" = "$1" ] + then + shift + target=$1 + break + fi + shift +done + +# echo out "(%x)", the return value from g++, so the script processes the output +# will only use times for successful compilations, i.e., "(0)". +/usr/bin/time -f "//compile time(%x): ${PWD#$ACE_ROOT/}/${target} %U %S" g++ $commandline + +retval=$? + +exit $retval diff --git a/ACE/bin/g++dep b/ACE/bin/g++dep new file mode 100755 index 00000000000..a4cd4873301 --- /dev/null +++ b/ACE/bin/g++dep @@ -0,0 +1,173 @@ +#! /bin/sh +# $Id$ + +# This utility is a lightly editted version of the freed Berkeley +# script `mkdep'. The current script is intended to work for GNU G++. + +# Here is the original BSD header: +# @(#)mkdep.sh 1.7 (Berkeley) 10/13/87 +# + +if [ $# = 0 ] ; then + echo 'usage: g++dep [-p] [-f makefile] [flags] file ...' + exit 1 +fi + +DO_ACE_MAKE_DEPEND=0 +MAKE=GNUmakefile +STOPNOW=0 +REL="" + +while [ $STOPNOW -eq 0 ] +do +case $1 in + # -e for compatibility with depgen.pl + -e) shift; shift ;; + + # -f allows you to select a makefile name + -f) MAKE=$2 + shift; shift ;; + + # the -p flag produces "program: program.c" style dependencies + # so .o's don't get produced + -p) SED='s;\.o;;' + shift ;; + + # -A implies -r and fixes the .obj line, hate + -A) REL="ACE_ROOT TAO_ROOT "$REL + DO_ACE_MAKE_DEPEND=1 + shift ;; + + # -r allows the use of relative pathnames... + -r) REL="ACE_ROOT TAO_ROOT "$REL + shift ;; + + # -R VARNAME allows you to specify a variable which should be used + # to generate relative paths if it's defined. You can use multiple + # -R options, but be careful if one of the values is a proper + # subset of a subsequent value, because I suspect that sed will + # substitute for the first value properly, but not for the + # second. You might be able to get around this by reordering and + # having the more specific values lead the less specific values. + -R) REL=$2" "$REL + shift; shift;; + *) STOPNOW=1 +esac +done + +if [ ! -w $MAKE ]; then + echo "g++dep: no writeable file \"$MAKE\"" + exit 1 +fi + +TMP=/tmp/g++dep$$ +SCRIPT=${TMP}_script + +trap 'rm -f $TMP $SCRIPT; exit 1' 1 2 3 13 15 + +cp $MAKE ${MAKE}.bak + +sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP + +cat << _EOF_ >> $TMP +# DO NOT DELETE THIS LINE -- g++dep uses it. +# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. + +_EOF_ + +# Local files may appear as './foo' change that to 'foo' +echo 's; \./; ;g' >$SCRIPT + +# If the -p flag is set we want to change 'foo.o' to simply 'foo' +echo $SED >>$SCRIPT + +# Dependencies on local files are better expressed like that, instead +# of using $(TAO_ROOT) or $(ACE_ROOT). This is specially important +# for IDL generated files. +echo "s;`pwd`/;;g" >>$SCRIPT + +if [ -z "$TAO_ROOT" ]; then + TAO_ROOT=${ACE_ROOT}/TAO +fi + +# This is a long series of commands to change the actual value of +# $ACE_ROOT to '$(ACE_ROOT)', similar changes are done for TAO_ROOT +# and any number of "variables" defined via the -R option. +for varname in $REL; do + varvalue=$(eval echo \$${varname}) + echo "s;"$varvalue";$""("$varname");g" >>$SCRIPT +done + +if [ $DO_ACE_MAKE_DEPEND -eq 1 ]; then + # Append a series of commands to the sed script that help with the + # ACE build style (.obj subdirectories, plaform indenpendent + # dependencies, etc.) + + # To avoid interpolation we build this string in pieces, the idea is + # to generate a rule that will convert + # foo.o: + # into + # .obj/foo.o .shobj/foo.o .obj/foo.so .shobj/foo.so: + # + # will be foo.o foo. + LONG_TARGET="$""(sort " + for i in VDIR VSHDIR; do + for j in OBJEXT SOEXT; do + LONG_TARGET=${LONG_TARGET}"$""("${i}")\1.$""("${j}") " + done + done + LONG_TARGET=${LONG_TARGET}")" + + cat >>$SCRIPT <<EOF +# +# Change the actual plaform config.h file to a MAKE macro... +s;${ACE_PLATFORM_CONFIG};\$(ACE_PLATFORM_CONFIG);g +# +# Append a 'x' character to the config-all and config-lite names, +# because we are going to remove all the config-* names.. +s/config-all/configx-all/ +s/config-lite/configx-lite/ +# +# Remove the config-* names +/config-.*\.h/d +# +# Restore configx-all and configx-lite to their original names +s/configx-all/config-all/ +s/configx-lite/config-lite/ +# +# Remove any absolute dependencies +s; /[-a-zA-Z0-9_./+]*\.h;;g +# +# Remove blanks followed by a backslash +s;[ \\t][ \\t]*\\\\; \\\\;g +# +# g++ generate dependencies for foo.o in the current directory, but we +# we need dependencies for foo.o and foo.so in the .obj and .shobj +# subdirectories. Actually .obj and .shobj are, respectively, the +# expansions of VDIR and VSHDIR, therefore it is better *NOT* to use +# the values of said variables, but generated dependencies that expand +# them. +s;\([-a-zA-Z0-9._+]*\)\.o:;\\${LONG_TARGET}:; +# +# An older implementation of the previous code, but using the actual +# value of VDIR and VSHDIR at time of dependency generation. +# +#s;\([-a-zA-Z0-9._+]*\)\.o:;\\${VDIR}\1.${OBJEXT} ${VDIR}\1.${SOEXT} ${VSHDIR}\1.${OBJEXT} ${VSHDIR}\1.${SOEXT}:; +# +# +EOF +fi + +g++ -MM -MG -DACE_LACKS_PRAGMA_ONCE $* | + sed -f $SCRIPT ${ACE_DEPEND_SED_CMD} >>$TMP +/bin/rm -f $SCRIPT + +cat << _EOF_ >> $TMP + +# IF YOU PUT ANYTHING HERE IT WILL GO AWAY +_EOF_ + +# copy to preserve permissions +cp $TMP $MAKE +rm -f ${MAKE}.bak $TMP +exit 0 diff --git a/ACE/bin/generate_compile_stats.sh b/ACE/bin/generate_compile_stats.sh new file mode 100755 index 00000000000..754635d1161 --- /dev/null +++ b/ACE/bin/generate_compile_stats.sh @@ -0,0 +1,1038 @@ +#! /bin/sh +# +# $Id$ +# +# This script generate metrics html pages for either compile times or +# footprint. +# +# Compile times: +# Parse the build.txt file from an autobuild that was generated with the +# g++_metric.sh script, e.g., with CXX=g++_metric.sh which outputs +# compile times on a per object basis, and use the data to generate time +# series graphs with gnuplot. +# +# Footprint: +# Parse the build.txt file and and the *.map files, generated with LDFLAGS +# set to =-Xlinker -M -Xlinker -Map -Xlinker \$@.map and static_libs_only=1. +# +# For use with an autobuild, place a line something like this in the xml file, +# after the log file is closed, but before it's moved. +# +# <command name="shell" options="$ACE_ROOT/bin/generate_compile_stats.sh <path>/build.txt <destination> Footprint" /> +# + +############################################################################### +# +# usage +# +############################################################################### +usage () +{ + echo "usage: $0 <input_file> <destination_directory> <target_file> {Footprint|Compilation} [<date> [<fudge_factor>]]" + exit +} + +############################################################################### +# +# parse_time +# +# this only works for english +# assumes the date is formatted like this: Sat Apr 12 18:19:31 UTC 2003 +# and outputs this: 2003/04/12-18:19 +# +############################################################################### +parse_time () +{ + # todo: add a format parameter + local INDEX=0 + local PT_MONTH="" + local PT_DAY="" + local PT_YEAR="" + local PT_HOUR="" + local PT_MINUTE="" + local PT_SECOND="" + local PT_TIMEZONE="" + + read -a line + for token in "${line[@]}"; do + #echo "$INDEX = $token" + case $INDEX in + 1 ) case $token in + Jan ) PT_MONTH="01" ;; + Feb ) PT_MONTH="02" ;; + Mar ) PT_MONTH="03" ;; + Apr ) PT_MONTH="04" ;; + May ) PT_MONTH="05" ;; + Jun ) PT_MONTH="06" ;; + Jul ) PT_MONTH="07" ;; + Aug ) PT_MONTH="08" ;; + Sep ) PT_MONTH="09" ;; + Oct ) PT_MONTH="10" ;; + Nov ) PT_MONTH="11" ;; + Dec ) PT_MONTH="12" ;; + esac ;; + 2 ) PT_DAY="$token" ;; + 3 ) PT_HOUR="${token%%:*}" + PT_MINUTE="${token%:*}" + PT_MINUTE="${PT_MINUTE#*:}" + PT_SECOND="${token##*:}" ;; + 4 ) PT_TIMEZONE="$token" ;; + 5 ) PT_YEAR="$token" ;; + esac + let INDEX=$INDEX+1 + done + if [ "$1" = "debug" ]; then + echo "month = $PT_MONTH" + echo "day = $PT_DAY" + echo "year = $PT_YEAR" + echo "hour = $PT_HOUR" + echo "min = $PT_MINUTE" + echo "sec = $PT_SECOND" + echo "tz = $PT_TIMEZONE" + fi + echo "$PT_YEAR/$PT_MONTH/$PT_DAY-$PT_HOUR:$PT_MINUTE" +} + +############################################################################### +# +# strip_date +# +# grab date from line with following format: +# ################### End [Fri Apr 11 00:18:31 2003 UTC] +# and return it in this format: Fri Apr 11 00:18:31 UTC 2003 which is +# what parse_time() expects +# +############################################################################### +strip_date () +{ + local INDEX=0 + local TEMP_DATE="" + local DATE="" + read -a line + for token in "${line[@]}"; do + #echo "$INDEX = $token" + case $INDEX in + 2 ) DATE=${token#[} ;; + 7 ) DATE="$DATE ${token%]} $TEMP_DATE" ;; + # this is a hack since the autobuild scripts don't format the date + # correctly... :-( + 6 ) TEMP_DATE=$token ;; + * ) DATE="$DATE $token" ;; + esac + let INDEX=$INDEX+1 + done + echo $DATE +} + +############################################################################### +# +# parse +# +# Parse the commandline and validate the inputs +# +############################################################################### +parse () +{ + echo "parse()" + # set input file and destination (required) + if [ $# -gt 1 ]; then + INFILE=$1 + DEST=$2 + + if ! [ -e "$INFILE" ]; then + echo "input_file $INFILE does not exist." + usage + fi + if ! [ -d "$DEST" ]; then + echo "destination_directory $DEST does not exist." + usage + fi + if ! [ -w "$DEST" ]; then + echo "destination_directory $DEST is not writable." + usage + fi + else + usage + fi + + # set the target file from command line + if [ $# -gt 2 ]; then + TARGETS=$3 + else + TARGETS=$INFILE + fi + + # set type of metric from command line + if [ $# -gt 3 ]; then + METRIC=$4 + else + METRIC="Compilation" + fi + echo "metric = ($METRIC)" + + # set the date from command line + if [ $# -gt 4 ]; then + DATE=$5 + else + DATE=`tail -n 1 $INFILE | strip_date | parse_time` + fi + echo "date = ($DATE)" + + # set fudge factor from commandline (for testing) + if [ $# -gt 5 ]; then + FUDGE_FACTOR=$6 + else + FUDGE_FACTOR=0 + fi +} + +############################################################################### +# +# gen_chart +# +# Generate the actual charts and move them to $DEST +# +############################################################################### +gen_chart () +{ + local object=$1 + local DEST=$2 + local TYPE=$3 + local EXT="txt" + local YLABEL="Compile Time (Seconds)" + local FACTOR=100 + if [ "$TYPE" = "Footprint" ]; then + EXT="size" + YLABEL="Footprint (KBytes)" + FACTOR=1024 + fi + + local low=$4 + let low="${low}/${FACTOR}" + local high=$5 + let high="${high}/${FACTOR}" + + gnuplot <<EOF + set data style lp l + set time "$DATE" + set xdata time + set timefmt "%Y/%m/%d-%H:%M" + set format x "%Y/%m/%d" + set xtics rotate + set xlabel 'Date (YYYY/MM/DD)' 0,-3 + set ylabel "${YLABEL}" + set terminal png small size 800,600 color + set yrange [$low:$high] + set output ".metrics/images/${object}_${TYPE}.png" + set title "${object//___//}" + plot '.metrics/data/${object}.${EXT}' using 1:(\$2/$FACTOR) notitle w points, '.metrics/data/${object}.${EXT}' using 1:(\$2/$FACTOR) notitle w l lt 3 lw 4 + exit +EOF + + # here's how to reduce the scale + # plot '$1' using 1:(\$2/1024.0) title '$3' w l + + # copy the data and images to $DEST + /bin/cp .metrics/images/${object}_${TYPE}.png $DEST/images/${object}_${TYPE}.png + # don't do thumbnails, yet... + #/bin/cp .metrics/images/${object}_size.png .metrics/images/thumbnails/${object}_size.png + #/usr/bin/X11/mogrify -geometry '25%' .metrics/images/thumbnails/${object}_size.png + #/bin/cp .metrics/images/thumbnails/${object}_size.mgk $DEST/images/thumbnails/${object}_size.png + /usr/bin/tac .metrics/data/${object}.${EXT} > $DEST/data/${object}.${EXT} + /usr/bin/tail -5 .metrics/data/${object}.${EXT} > $DEST/data/LAST_${object}.${EXT} + +} + +############################################################################### +# +# create_dirs +# +# Make sure hidden directory tree exists, and create it if it doesn't +# +############################################################################### +create_dirs () +{ + echo "create_dirs() '$1'" + if ! [ -d "${1}" ]; then + mkdir ${1} + fi + if ! [ -d "${1}data" ]; then + mkdir ${1}data + fi + if ! [ -d "${1}images" ]; then + mkdir ${1}images + fi + if ! [ -d "${1}images/thumbnails" ]; then + mkdir ${1}images/thumbnails + fi +} + +############################################################################### +# +# process_file +# +# Process the the $INPUT file +# +############################################################################### +process_file () +{ + echo "process_file()" + + local CURRENT_TIME=0 + local CURRENT_OBJECT="" + local CURRENT_PATH="" + local seconds=0 + local hundreths=0 + + while read target usertime systemtime; do + + # get path + CURRENT_PATH=${target%/*} + + # strip off the hidden directory if needbe + CURRENT_PATH=${CURRENT_PATH%/.*} + + # replace all "/" with "___" + # (so we can keep them all in the same directory) + CURRENT_PATH=${CURRENT_PATH//\//___} + + # strip path off of target + CURRENT_OBJECT=${CURRENT_PATH}___${target##*/} + #echo "target = $target, object = $CURRENT_OBJECT, path = $CURRENT_PATH" + #echo "usertime = $usertime, systemtime = $systemtime" + + let seconds="${usertime%.*}+${systemtime%.*}" + + # it's just easier to grab the values first, since .0n causes problems... + userdec="${usertime#*.}" + userdec=${userdec#0} + systemdec="${systemtime#*.}" + systemdec=${systemdec#0} + let hundreths="${userdec}+${systemdec}" + + let CURRENT_TIME="(${seconds}*100 + ${hundreths})+$FUDGE_FACTOR" + echo $DATE $CURRENT_TIME >> .metrics/data/${CURRENT_OBJECT}.txt + + done # while +} + +############################################################################### +# +# composite_list +# +############################################################################### +composite_list () +{ + local FOUND_OBJ=0 + local BASE_OBJ_FLAG=0 + local BASE_OBJ="" + local OBJ_LIST="" + local DIR_LINE=0 + local DIR="" + local INDEX=0 + + while read -a line; do + DIR_LINE=0 + INDEX=0 + + for i in "${line[@]}"; do + if [ $DIR_LINE -eq 1 ]; then + + # only process when entering a directory + if [ $INDEX -eq 1 ] && [ "$i" = "Leaving" ]; then + DIR="" + break + fi + + if [ $INDEX -eq 3 ]; then + DIR="${i%?}" # strip off last "'" + DIR="${DIR#*$ACE_ROOT/}" # strip off $ACE_ROOT + DIR="${DIR//\//___}___" # replace "/" with "___" + break + else + let INDEX="$INDEX+1" + continue + fi + fi + + # if it was a "make" line then continue to the next token which will + # continue to process above + if [ "${i%[*}" = "make" ] || [ "${i%:*}" = "make" ]; then + DIR="" + let DIR_LINE=1 + let INDEX="$INDEX+1" + continue + fi + + # not an "make" line, so process it here. + if [ $BASE_OBJ_FLAG -eq 1 ]; then + BASE_OBJ="${DIR}${i##.*/}" + # strip off lib numbers + if [ "$BASE_OBJ" != "${BASE_OBJ%.so.*}" ]; then + BASE_OBJ=${BASE_OBJ%.so.*}.so + fi + BASE_OBJ_FLAG=0 + elif [ "$i" = "-o" ]; then + # found our base object, set flag so we can grab the next one + BASE_OBJ_FLAG=1 + elif [ "$i" = "${i#-}" -a "$i" = "${i#/}" -a "$i" != "${i%.o}" ]; then + OBJ_LIST="$OBJ_LIST ${DIR}${i##*/}" + FOUND_OBJ=1 + fi + done # for + if [ $FOUND_OBJ -eq 1 ]; then + echo "$BASE_OBJ : $OBJ_LIST" + FOUND_OBJ=0 + OBJ_LIST="" + BASE_OBJ="" + fi + done # while +} + +############################################################################### +# +# create_composite_list +# +############################################################################### +create_composite_list () +{ + echo "create_composite_list()" + local INFILE=$1 + + # create a pattern file + echo "\-L" > .metrics/comp_match.txt + echo "Entering directory" >> .metrics/comp_match.txt + + # grep out the entering directory line and all the link lines, + # but only keep entering directory lines preceeding link lines. + cat $INFILE | grep -f .metrics/comp_match.txt | grep -B1 "\-L" \ + | grep -ve "--" | composite_list > .metrics/composites.txt +} + +############################################################################### +# +# library_list +# +############################################################################### +library_list () +{ + local FOUND_OBJ=0 + local BASE_OBJ_FLAG=0 + local BASE_OBJ="" + local OBJ_LIST="" + local DIR_LINE=0 + local DIR="" + local INDEX=0 + + while read -a line; do + DIR_LINE=0 + INDEX=0 + for i in "${line[@]}"; do + if [ $DIR_LINE -eq 1 ]; then + if [ $INDEX -eq 3 ]; then + DIR="${i%?}" # strip off last "'" + DIR="${DIR#*$ACE_ROOT/}" # strip off $ACE_ROOT + DIR="${DIR//\//___}___" # replace "/" with "___" + break + else + let INDEX="$INDEX+1" + continue + fi + fi + + # if it was a "make" line then continue to the next token which will + # continue to process above + if [ "${i%[*}" = "make" ]; then + let DIR_LINE=1 + let INDEX="$INDEX+1" + continue + fi + + # not a "make" line, so process it here. We are interested in the + # 3rd, and last, token, i.e., lib*.a + let INDEX="$INDEX+1" + if [ $INDEX -eq 3 ]; then + echo "$DIR$i" + fi + done # for + done # while +} + +############################################################################### +# +# create_library_list +# +############################################################################### +create_library_list () +{ + echo "create_library_list()" + local INFILE=$1 + + # create a pattern file + echo "chmod" > .metrics/lib_match.txt + echo "Entering directory" >> .metrics/lib_match.txt + + # grep out the entering directory line and all the link lines, + # but only keep entering directory lines preceeding link lines. + cat $INFILE | grep -f .metrics/lib_match.txt | grep -B1 "chmod" \ + | grep -ve "--" | library_list > .metrics/libraries.txt +} + +############################################################################### +# +# rollup_compile_times +# +############################################################################### +rollup_compile_times () +{ + echo "process_composite_objects()" + local TOTAL_TIME=0 + local temp + local tdate="" + local ttime=0 + local lpath=".metrics/data/" + + # rollup compile times + while read outfile colon infiles; do + #echo "$outfile ----- $infiles" + for i in $infiles; do + temp=`tail -n 1 ${lpath}${i}.txt` + tdate=${temp%% *} + let ttime="${temp##* }" + + if [ "$tdate" = "$DATE" ]; then + let TOTAL_TIME="$TOTAL_TIME + ${ttime}" + fi + done # for + echo "$DATE $TOTAL_TIME" >> ${lpath}${outfile}.txt + let TOTAL_TIME=0 + done # while +} + +############################################################################### +# +# footprint +# +############################################################################### +footprint () +{ + echo "footprint()" + local TYPE="$1" + local fpath="" + local lpath=".metrics/data/" + local FILE="" + local SIZE="" + + # Remove the old size_composites.txt and create a new one since + # we have all the info we need from the size command on a library. + if [ "$TYPE" = "LIB" ] && [ -e .metrics/size_composites.txt ]; then + rm .metrics/size_composites.txt + fi + + # go through all the targets and get the sizes of the target and + # each dependent object and write it to a *.size file. + while read outfile colon infiles; do + # reconstitue file name + FILE="$ACE_ROOT/${outfile//___//}" + + if [ -e $FILE ]; then + #echo "inside if" + SIZE=`size $FILE | grep -v text | awk '{s += \$4} END {print s}'` + echo "$DATE $SIZE" >> $lpath/${outfile}.size + + # only process the included objects if it's a library + if [ "$TYPE" = "LIB" ]; then + fpath=${FILE%/*} + # now, do the same for all the objects in the file (if any) + size $FILE | + grep -v text | + awk '{print $4 " : " $6}' | process_included $fpath $lpath $FILE + fi + fi + + done # while +} + +############################################################################### +# +# process_included +# +############################################################################### +process_included () +{ + echo "process_included()" + local fpath=$1 + local lpath=$2 + local LIBRARY=$3 + local FILE="" + local OUTFILE="" + + # while we are here, and have the info, go ahead and write out + # size dependencies for each library. + LIBRARY="${LIBRARY#*$ACE_ROOT/}" # strip off $ACE_ROOT + LIBRARY="${LIBRARY//\//___}" # replace "/" with "___" + echo -n "$LIBRARY : " >> .metrics/size_composites.txt + + while read size colon file; do + FILE=$fpath/$file + OUTFILE="${FILE#*$ACE_ROOT/}" # strip off $ACE_ROOT + OUTFILE="${OUTFILE//\//___}" # replace "/" with "___" + #echo "size = ($size)" + echo "$DATE $size" >> $lpath/${OUTFILE}.size + + # add the object + echo -n "$OUTFILE " >> .metrics/size_composites.txt + + done + # add newline + echo "" >> .metrics/size_composites.txt + +} + +############################################################################### +# +# process_map_file +# +############################################################################### +process_map_file () +{ + # this is way too noisy... + #echo "process_map_file()" + local index=0 + local INFILE=$1 + local FILE="" + + # Read in the map file. The first section is all we are interested + # in right now. As soon as we see "Memory Configuration" we are done. + while read line; do + let index=$index+1 + # Skip the first 2 lines, then read in all the odd lines, they are the + # objects that must be loaded. The following line, even lines, is the + # object that caused it to be loaded. + if [ $index -lt 3 ] || [ "$line" = "" ]; then + continue + fi + + # The line looks like this: + #/ace_root_path/ace/libACE.a(Malloc.o) + # need to find the real library path, since these libs will + # always be in ace/, but the objects will be in the original + # location. + lib="${line##/*/}" # strip off path, but only if it starts a line + lib="${lib%%.a*}" # strip off rest of line + lib="$lib.a" # put back the .a to make it unambiguous + libpath=`grep $lib .metrics/libraries.txt` + path="${libpath%___lib*}" # strip off libname + FILE="${line#*(}" # strip off everything up to object name + FILE="${FILE%%)*}" # strip off rest of line + FILE="${path}___${FILE}" + echo -n "$FILE " >> .metrics/size_composites.txt + done + + echo "" >> .metrics/size_composites.txt + +} + +############################################################################### +# +# create_size_composites +# +############################################################################### +create_size_composites () +{ + echo "create_size_composites()" + local FILE="" + + while read outfile colon infiles; do + # reconstitue file name + FILE="$ACE_ROOT/${outfile//___//}.map" + if [ -e $FILE ]; then + echo -n "$outfile : " >> .metrics/size_composites.txt + # only process lines that don't begin with a space + cat $FILE | sed -e '/Memory Configuration/,$d' \ + | sed -e '/Allocating common symbols/,$d' \ + | grep -v "^ " | process_map_file $FILE + fi + #break + done + +} + +############################################################################### +# +# create_images +# +############################################################################### +create_images () +{ + echo "create_images()" + + local DEST=$1 + local TYPE=$2 + local LOW=0 + local HIGH=5000 + local STEP=0 + local TMP=0 + + while read object; do + if [ -e $object ] && [ `sort -k 2n $object | tail -n 1 | cut -d' ' -f2` ]; then + let TMP=`sort -k 2n $object | tail -n 1 | cut -d' ' -f2` + let TMP=$TMP*16/10 + STEP=1000 + HIGH=0 + while [ $HIGH -eq 0 ]; do + if [ $TMP -lt $STEP ]; then + HIGH=$STEP + fi + let STEP=$STEP*15/10 + done + + if [ "$TYPE" = "Footprint" ]; then + object="${object%.size}" + else + object="${object%.txt}" + fi + + gen_chart "${object##*/}" ${DEST} ${TYPE} ${LOW} ${HIGH} >/dev/null 2>&1 + fi + done + +} + +############################################################################### +# +# create_index_page +# +############################################################################### +create_index_page () +{ + local TYPE="$1" + local TITLE="$TYPE metrics for ACE+TAO+CIAO" + + echo "<html>" + echo "<head><title>$TITLE</title></head>" + echo '<style><!--' + echo 'body,td,a,p,.h{font-family:arial,sans-serif;}' + echo '.h{font-size: 20px;}' + echo '.q{text-decoration:none; color:#0000cc;}' + echo '//-->' + echo '</style>' + echo '<body text = "#000000" link="#000fff" vlink="#ff0f0f" bgcolor="#ffffff">' + echo "<br><center><h1>$TITLE</h1></center><br><hr>" + echo '<p>One of the goals of the PCES-TENA project is to decrease compile times. + In order to track our progress, metrics are gathered nightly on all + objects in the ACE+TAO+CIAO distribution and displayed here.' + echo '<ul>' + echo "<li><a href=\"ace_${TYPE}.html\">ACE</a>" + echo "<li><a href=\"tao_${TYPE}.html\">TAO</a>" + echo "<li><a href=\"ciao_${TYPE}.html\">CIAO</a>" + echo '</ul>' + echo '<hr>' + + echo '<P>All the experiments run on the system described below. ' + echo 'The machine is running Linux (' + + if [ -e "/etc/SuSE-release" ]; then + cat /etc/SuSE-release + fi + + if [ -e "/etc/redhat-release" ]; then + cat /etc/redhat-release + fi + + echo '), and we use GCC ' + + /usr/bin/gcc -dumpversion > .metrics/gccversion.txt 2>&1 + cat .metrics/gccversion.txt + + echo ' to compile ACE+TAO+CIAO. </P>' + + echo '<TABLE border="2"><TBODY><TR><TD>ACE+TAO+CIAO Configuration</TD><TD>config.h</TD></TR>' + echo '<TR><TD colspan="2"><PRE>' + + cat $ACE_ROOT/ace/config.h + + echo '</PRE></TD></TR><TR><TD>ACE+TAO+CIAO Configuration</TD><TD>platform_macros.GNU</TD></TR>' + echo '<TR><TD colspan="2"><PRE>' + + cat $ACE_ROOT/include/makeinclude/platform_macros.GNU + + echo '</PRE></TD></TR><TR><TD>CPU Information</TD><TD>/proc/cpuinfo</TD></TR>' + echo '<TR><TD colspan="2"><PRE>' + + cat /proc/cpuinfo + + echo '</PRE></TD></TR><TR><TD>Available Memory</TD><TD>/proc/meminfo</TD></TR>' + echo '<TR><TD colspan="2"><PRE>' + + cat /proc/meminfo + + echo '</PRE></TD></TR><TR><TD>OS Version</TD><TD>uname -a</TD></TR>' + echo '<TR><TD colspan="2"><PRE>' + + /bin/uname -a + + echo '</PRE></TD></TR><TR><TD>Compiler Version</TD><TD>gcc -v</TD></TR>' + echo '<TR><TD colspan="2">' + + /usr/bin/gcc -v > .metrics/gcc.txt 2>&1 + cat .metrics/gcc.txt + + echo '</TD></TR><TR><TD>Library Version</TD><TD>/lib/libc.so.6</TD></TR>' + echo '<TR><TD colspan="2"><PRE>' + + /lib/libc.so.6 | sed -e 's/</\</g' -e 's/>/\>/g' + + echo '</PRE></TD></TR></TBODY></TABLE>' + echo '</body></html>' +} + +############################################################################### +# +# create_page +# +############################################################################### +create_page () +{ + # always strip off "TAO___" / "CIAO___" + local BASE=$1 + local TYPE=$2 + local EXT="" + local BASE_NAME=${BASE#TAO___} + local BASE_NAME=${BASE#CIAO___} + local TITLE="${TYPE} metrics for ${BASE_NAME//___//}" + + if [ "$TYPE" = "Compilation" ]; then + EXT="txt" + UNITS="100th's of seconds" + else + EXT="size" + UNITS="Bytes" + fi + + # header + echo "<html>" + echo "<head><title>$TITLE</title></head>" + echo '<style><!--' + echo 'body,td,a,p,.h{font-family:arial,sans-serif;}' + echo '.h{font-size: 20px;}' + echo '.q{text-decoration:none; color:#0000cc;}' + echo '//-->' + echo '</style>' + echo '<body text = "#000000" link="#000fff" vlink="#ff0f0f" bgcolor="#ffffff">' + echo "<br><center><h1>$TITLE</h1></center><br>" + if [ -e ".metrics/images/${BASE}_${TYPE}.png" ]; then + echo '<DIV align="center"><P>' + echo "<IMG alt=\"$BASE\" border=0 src=\"images/${BASE}_${TYPE}.png\"" + echo 'width="800" height="600"></P></DIV>' + fi + + echo "<br><hr><br>" + echo "<center><h2>Detail (${DATE})</h2></center>" + + echo '<TABLE border="2"><TBODY><TR><TD rowspan=2><b>Object</b></TD>' + echo '<TD colspan="3"; align=center><b>Last Compile</b></TD></TR>' + echo "<TD align=center><b>Date</b></TD><TD align=center><b>$UNITS</b></TD>" + echo '<TD align=center><b>%chg</b></TD></TR>' + while read i; do + if [ -e ".metrics/data/${i}.${EXT}" ]; then + LAST=0 PRE=0 VAL_TMP=0 VAL_INT=0 VAL_SIGN="+" + echo '<TR><TD>' + if [ -e ".metrics/${i}_${TYPE}.html" ]; then + # strip off "TAO___" if it exists + NAME=${i#TAO___} + # strip off "CIAO___" if it exists + NAME=${i#CIAO___} + echo "<a href=\"${i}_${TYPE}.html\">${NAME//___//}</a>" + elif [ -e ".metrics/images/${i}_${TYPE}.png" ]; then + # since you'll only have images if it's a composite, strip off the + # path for the name + if [ "$TYPE" = "Footprint" ]; then + # if we are doing footprint, add library + llib=`grep -e "lib.*\.a" .metrics/size_composites.txt | grep ${i} | awk '{print $1}'` + #echo "lib $llib" + #llib="${llib% :}" + llib="${llib//___//}" + NAME="${llib}(${i##*___})" + else + NAME="${i##*___}" + fi + echo "<a href=\"images/${i}_${TYPE}.png\">${NAME}</a>" + else + echo "${i##*___}" + fi + echo '</TD><TD>' + echo `tail -n1 .metrics/data/${i}.${EXT} | cut -d" " -f1` + let LAST=`tail -n1 .metrics/data/${i}.${EXT} | cut -d" " -f2` + echo "</TD><TD align=right>$LAST</TD>" + let PRE=`tail -n2 .metrics/data/${i}.${EXT} | head -n1 | cut -d" " -f2` + let VAL_TMP="((($LAST+1)-($PRE+1))*1000)/($PRE+1)" + if [ $VAL_TMP -lt 0 ]; then + VAL_SIGN="-" + let VAL_TMP="-1*$VAL_TMP" + elif [ $VAL_TMP -eq 0 ]; then + VAL_SIGN= + fi + let VAL_INT="$VAL_TMP/10" + let VAL_TENTH="$VAL_TMP-($VAL_INT*10)" + echo "<TD align=right>${VAL_SIGN}${VAL_INT}.${VAL_TENTH}</TD></TR>" + else + echo '<TR><TD>' + echo "${i}" + echo '</TD><TD>' + echo '?' + echo "</TD><TD align=right>?</TD>" + echo "<TD align=right>?</TD></TR>" + fi + done # for + echo '</TBODY></TABLE>' + + # footer + echo '</body></html>' + +} + +############################################################################### +# +# sort_list +# +############################################################################### +sort_list () +{ + # sort the dependency files + if [ -e .metrics/tmp_list ]; then + rm .metrics/tmp_list + fi + + touch .metrics/tmp_list + for i in $@; do + echo "$i" >> .metrics/tmp_list + #echo $i + done + + # sort eats underscores, soo... + sed "s/___/000/g" .metrics/tmp_list | sort -f | sed "s/000/___/g" +} + +############################################################################### +# +# create_html +# +############################################################################### +create_html () +{ + echo "create_html()" + + local DEST=$1 + local TYPE=$2 + local ALL_BASE="" + local ACE_OBJS="" + local TAO_OBJS="" + local CIAO_OBJS="" + + while read base colon files; do + # create individual page for app/lib + + sort_list ${files} | create_page ${base} ${TYPE} \ + > .metrics/${base}_${TYPE}.html + cp .metrics/${base}_${TYPE}.html $DEST/${base}_${TYPE}.html + if [ "${base}" != "${base#TAO___CIAO}" ]; then + CIAO_OBJS="${CIAO_OBJS} ${base}" + elif [ "${base}" != "${base#TAO}" ]; then + TAO_OBJS="${TAO_OBJS} ${base}" + else + ACE_OBJS="${ACE_OBJS} ${base}" + fi + ALL_OBJS="${ALL_BASE} ${base}" + done + + # create main page + create_index_page ${TYPE} > .metrics/index.html + cp .metrics/index.html ${DEST}/index.html + + if [ "${TYPE}" = "Compilation" ] || [ "${TYPE}" = "Footprint" ]; then + #echo "ace objects: $ACE_OBJS" + name="ace_${TYPE}.html" + sort_list ${ACE_OBJS} | create_page "ACE" ${TYPE} > .metrics/${name} + cp .metrics/${name} ${DEST}/${name} + + name="tao_${TYPE}.html" + sort_list ${TAO_OBJS} | create_page "TAO" ${TYPE} > .metrics/${name} + cp .metrics/${name} ${DEST}/${name} + + name="ciao_${TYPE}.html" + sort_list ${CIAO_OBJS} | create_page "CIAO" ${TYPE} > .metrics/${name} + cp .metrics/${name} ${DEST}/${name} + fi +} + +############################################################################### +# +# main program +# +############################################################################### + +INFILE="" +DEST="" +TARGETS="" +DATE="" +METRIC="Compilation" +FUDGE_FACTOR=0 + +parse $@ +create_dirs ".metrics/" +create_dirs "$DEST/" + +if [ "$METRIC" = "Compilation" ]; then + + ######################################################## + # compile times + + # grab the compile time metrics for objects only and process them + grep "compile time(0):" $INFILE | grep "\.o" | cut -d' ' -f3,4,5 | process_file + + # Create .metrics/composites.txt with entries like this: + # tests___OS_Test : tests___OS_Test.o tests___Main.o + create_composite_list $TARGETS + + # compile times + cat .metrics/composites.txt | rollup_compile_times + find .metrics/data/ -name "*.txt" | create_images $DEST "Compilation" + cat .metrics/composites.txt | create_html $DEST "Compilation" + +elif [ "$METRIC" = "Footprint" ]; then + + ######################################################## + # footprint + + # Create .metrics/libraries.txt with entries like this: + # ace___libACE.a + create_library_list $TARGETS + + # Create .metrics/composites.txt with entries like this: + # tests___OS_Test : tests___OS_Test.o tests___Main.o + create_composite_list $TARGETS + + # Run size on the executables and append results to *.size file. + cat .metrics/composites.txt | footprint + + # Run size on the libraries and append results to *.size for the + # library and each contained object. + # It also creates .metrics/size_composites.txt based on size output for + # libraries with entries like this: + # ace___libACE.a : ace___ACE.o ace___Addr.o + cat .metrics/libraries.txt | footprint LIB + + # Add executables to .metrics/size_composites.txt based on output + # from the map files (created with LDFLAGS=-Xlinker -M -Xlinker + # -Map -Xlinker $(@).map). Find the map files of we want based on + # entries in .metrics/composites.txt. + cat .metrics/composites.txt | create_size_composites + + find .metrics/data/ -name "*.size" | create_images $DEST "Footprint" + cat .metrics/size_composites.txt | create_html $DEST "Footprint" + +else + echo "metric type ($METRIC) not recognized" + usage +fi diff --git a/ACE/bin/generate_doxygen.pl b/ACE/bin/generate_doxygen.pl new file mode 100755 index 00000000000..20365f58fd6 --- /dev/null +++ b/ACE/bin/generate_doxygen.pl @@ -0,0 +1,259 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- +# $Id$ +# + +require POSIX; +require File::Path; + +# Configuration and default values + +$is_release = 0; +$exclude_ace = 0; +$exclude_tao = 0; +$exclude_ciao = 0; +$verbose = 0; +$perl_path = '/usr/bin/perl'; +$dot_path = '/usr/local/bin'; +$html_output_dir = '.'; +@ACE_DOCS = ('ace', + 'ace_man', + 'ace_rmcast', + 'ace_ssl', + 'ace_qos', + 'acexml'); +@TAO_DOCS = ('tao' + ,'tao_anytypecode' + ,'tao_portableserver' + ,'tao_pi' + ,'tao_pi_server' + ,'tao_rtportableserver' + ,'tao_rtcorba' + ,'tao_dynamicany' + ,'tao_dynamicinterface' + ,'tao_iormanip' + ,'tao_iortable' + ,'tao_esf' + ,'tao_rtevent' + ,'tao_cosevent' + ,'tao_cosnotification' + ,'tao_implrepo' + ,'tao_strategies' + ,'tao_smartproxies' + ,'tao_av' + ,'tao_security' + ,'tao_ssliop' + ,'tao_cosnaming' + ,'tao_costime' + ,'tao_costrader' + ,'tao_portablegroup' + ,'tao_pss' + ,'tao_ifr'); +@CIAO_DOCS = ('ciao_config_handlers' + ,'ciao_DAnCE' + ,'ciao'); + +# Modify defaults using the command line arguments +&parse_args (); + +open(CONFIG_H, ">ace/config.h") + || die "Cannot create config file\n"; +print CONFIG_H "#include \"ace/config-doxygen.h\"\n"; +close (CONFIG_H); + +&generate_doxy_files ('ACE', 'VERSION', @ACE_DOCS) if (!$exclude_ace); +&generate_doxy_files ('TAO', 'TAO/VERSION', @TAO_DOCS) if (!$exclude_tao); +&generate_doxy_files ('CIAO','TAO/CIAO/VERSION', @CIAO_DOCS) if (!$exclude_ciao); + +unlink "ace/config.h"; + +exit 0; + +sub parse_args { + my @ARGS = (); + while ($#ARGV >= 0) { + if (!($ARGV[0] =~ m/^-/)) { + push @ARGS, $ARGV[0]; + } elsif ($ARGV[0] eq "-is_release") { + $is_release = 1; + } elsif ($ARGV[0] eq "-exclude_ace") { + $exclude_ace = 1; + } elsif ($ARGV[0] eq "-exclude_tao") { + $exclude_tao = 1; + } elsif ($ARGV[0] eq "-exclude_ciao") { + $exclude_ciao = 1; + } elsif ($ARGV[0] eq "-verbose") { + $verbose = 1; + } elsif ($ARGV[0] eq "-perl_path" && $#ARGV >= 1) { + $perl_path = $ARGV[1]; + shift; + } elsif ($ARGV[0] eq "-dot_path" && $#ARGV >= 1) { + $dot_path = $ARGV[1]; + shift; + } elsif ($ARGV[0] eq "-html_output" && $#ARGV >= 1) { + $html_output_dir = $ARGV[1]; + shift; + } else { + print "Ignoring option $ARGV[0]\n"; + } + shift @ARGV; + } + @ARGV = @ARGS; +} + +sub generate_doxy_files { + + my $KIT = shift; + my $VERSION_FILE = shift; + my @DOCS = @_; + + my $VERSION = 'Snapshot ('. + POSIX::strftime("%Y/%m/%d-%H:%M", localtime) + .')'; + + foreach my $i (@DOCS) { + if ($is_release) { + my ($major, $minor, $beta) = &get_versions ($KIT, $VERSION_FILE); + $VERSION = $major.'.'.$minor.'.'.$beta; + } + + my $input = "etc/".$i.".doxygen"; + my $output = "/tmp/".$i.".".$$.".doxygen"; + + open(DOXYINPUT, $input) + || die "Cannot open doxygen input file $input\n"; + open(DOXYOUTPUT, ">$output") + || die "Cannot open doxygen output file $output\n"; + + my $generate_man = 0; + my $generate_html = 0; + my @output_dirs = (); + while (<DOXYINPUT>) { + chomp; + if (/^PROJECT_NUMBER/) { + print DOXYOUTPUT "PROJECT_NUMBER = ", $VERSION, "\n"; + next; + } elsif (/^PERL_PATH /) { + print DOXYOUTPUT "PERL_PATH = $perl_path\n"; + next; + } elsif (/^DOT_PATH /) { + print DOXYOUTPUT "DOT_PATH = $dot_path\n"; + next; + } elsif (/^QUIET / && $verbose) { + print DOXYOUTPUT "QUIET = NO\n"; + next; + } elsif (/^INLINE_SOURCES/ && $is_release) { + print DOXYOUTPUT "INLINE_SOURCES = NO\n"; + next; + } elsif (/^SOURCE_BROWSER/ && $is_release) { + print DOXYOUTPUT "SOURCE_BROWSER = NO\n"; + next; + } elsif (/^VERBATIM_HEADERS/ && $is_release) { + print DOXYOUTPUT "VERBATIM_HEADERS = NO\n"; + next; +# } elsif (/^INCLUDE_GRAPH/ && $is_release) { +# print DOXYOUTPUT "INCLUDE_GRAPH = NO\n"; +# next; +# } elsif (/^INCLUDED_BY_GRAPH/ && $is_release) { +# print DOXYOUTPUT "INCLUDED_BY_GRAPH = NO\n"; +# next; + } elsif (/^GENERATE_MAN/ && /= YES/) { + $generate_man = 1; + } elsif (/^GENERATE_HTML/ && /= YES/) { + $generate_html = 1; + } elsif ($generate_html && /^HTML_OUTPUT/) { + my @field = split(' = '); + if ($#field >= 1) { + my $html_out_dir = "$html_output_dir/$field[1]"; + push @output_dirs, $html_out_dir; + print DOXYOUTPUT "HTML_OUTPUT = $html_out_dir\n"; + next; + } + } elsif ($generate_html && /^GENERATE_TAGFILE/) { + my @field = split(' = '); + if ($#field >= 1) { + my $html_out_dir = "$html_output_dir/$field[1]"; + print DOXYOUTPUT "GENERATE_TAGFILE = $html_out_dir\n"; + next; + } + } elsif ($generate_html && /^MAN_OUTPUT/) { + my @field = split(' = '); + if ($#field >= 1) { + push @output_dirs, $field[1]; + } + } + print DOXYOUTPUT $_, "\n"; + } + close (DOXYOUTPUT); + close (DOXYINPUT); + + foreach my $i (@output_dirs) { + File::Path::mkpath($i, 0, 0755); + } + + &run_doxy ($output); + + unlink $output; + } + + open(FIND, "find man -type f -print |") or die "Can't run find\n"; + while (<FIND>) { + chop; + my $name_with_whitespace = $_; + next unless ($name_with_whitespace =~ /\s/); + my $name_without_whitespace = $name_with_whitespace; + $name_without_whitespace =~ s/\s+//g; + rename $name_with_whitespace, $name_without_whitespace; + } + close FIND; +} + +sub run_doxy { + my $config = shift; + open(DOX,"doxygen $config 2>&1 |") + || die "cannot start ACE doxygen process\n"; + while (<DOX>) { + print $_; + } + close (DOX) + || die "error while running doxygen on $config\n"; +} + +######## +######## Retrieve version information from VERSION file(s). +######## +sub get_versions () { + my $KIT = shift; + my $VERSION_FILE = shift; + my ($major_version, $minor_version, $beta_version); + + open (VERSION, '<'.$VERSION_FILE) || + die "$0: unable to open VERSION\n"; + while (<VERSION>) { + chomp; + if (/$KIT version (\d+)\.(\d+)\.(\d+)/) { + $major_version = $1; + $minor_version = $2; + $beta_version = $3; + last; + } elsif (/$KIT version (\d+)\.(\d+)[^\.]/) { + #### Previous release was a minor. + $major_version = $1; + $minor_version = $2; + $beta_version = '0'; + last; + } elsif (/$KIT version (\d+)[^\.]/) { + #### Previous release was a major. + $major_version = $1; + $minor_version = '0'; + $beta_version = '0'; + last; + } + } + close VERSION; + + return ($major_version, $minor_version, $beta_version); +} diff --git a/ACE/bin/generate_export_file.pl b/ACE/bin/generate_export_file.pl new file mode 100755 index 00000000000..7349f816e4c --- /dev/null +++ b/ACE/bin/generate_export_file.pl @@ -0,0 +1,165 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# Replacement for the old trusty GenExportH.bat +# Creates the nice little *_export file which is used for +# importing and exporting of symbols in DLLs. +# (they are soooo cute!) + +use Getopt::Std; + +############################################################################## +# Grab the options + +$flags = join (" ", @ARGV); + +if (!getopts ('df:hsn') || $opt_h) { + print STDERR + "generate_export_file.pl [-d] [-f dependency] [-n] library_name\n", + "\n", + " -d Turn on debug mode\n", + " -f Adds a dependency to another *_HAS_DLL macro\n", + " -n Do not add in ACE_AS_STATIC_LIBS check\n", + "\n", + "generate_export_file creates the *_export files that are used\n", + "in exporting of symbols for DLLs (and not exporting them when\n", + "the library is static). If library_name is something like\n", + "\"Foo\", then the file will contain definitions for Foo_Export\n", + "and FOO_SINGLETON_DECLARE, etc. which will be controlled by\n", + "FOO_HAS_DLL, etc.\n"; + exit (1); +} + +if (defined $opt_d) { + print STDERR "Debugging Turned on\n"; + + if (defined $opt_f) { + print STDERR "Dependency to $opt_f\n"; + } + + if (defined $opt_n) { + print STDERR "ACE_AS_STATIC_LIBS turned off\n"; + } +} + + +if ($#ARGV < 0) { + print STDERR "No library_name specified, use -h for help\n"; + exit (1); +} + +$name = shift @ARGV; +$ucname = uc $name; + +############################################################################## +# Prologue + +$prologue = ' +// -*- C++ -*- +// ' . '$' . 'Id' . '$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl '."$flags".' +// ------------------------------'." +#ifndef -UC-_EXPORT_H +#define -UC-_EXPORT_H + +#include \"ace/config-all.h\" +"; + + +############################################################################## +# Static Stuff + +if (!defined $opt_n) +{ + $static_stuff = " +#if defined (ACE_AS_STATIC_LIBS) && !defined (-UC-_HAS_DLL) +# define -UC-_HAS_DLL 0 +#endif /* ACE_AS_STATIC_LIBS && -UC-_HAS_DLL */ +"; +} + +############################################################################## +# Dependencies + +if (defined $opt_f) +{ + $has_dll = " +#if defined ($opt_f) +# if !defined (-UC-_HAS_DLL) +# define -UC-_HAS_DLL 0 +# endif /* ! -UC-_HAS_DLL */ +#else +# if !defined (-UC-_HAS_DLL) +# define -UC-_HAS_DLL 1 +# endif /* ! -UC-_HAS_DLL */ +#endif +"; +} +else +{ + $has_dll = " +#if !defined (-UC-_HAS_DLL) +# define -UC-_HAS_DLL 1 +#endif /* ! -UC-_HAS_DLL */ +"; +} + +############################################################################## +# Epilogue + +$epilogue = " +#if defined (-UC-_HAS_DLL) && (-UC-_HAS_DLL == 1) +# if defined (-UC-_BUILD_DLL) +# define -NC-_Export ACE_Proper_Export_Flag +# define -UC-_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define -UC-_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* -UC-_BUILD_DLL */ +# define -NC-_Export ACE_Proper_Import_Flag +# define -UC-_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define -UC-_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* -UC-_BUILD_DLL */ +#else /* -UC-_HAS_DLL == 1 */ +# define -NC-_Export +# define -UC-_SINGLETON_DECLARATION(T) +# define -UC-_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* -UC-_HAS_DLL == 1 */ + +// Set -UC-_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (-UC-_NTRACE) +# if (ACE_NTRACE == 1) +# define -UC-_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define -UC-_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !-UC-_NTRACE */ + +#if (-UC-_NTRACE == 1) +# define -UC-_TRACE(X) +#else /* (-UC-_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define -UC-_TRACE(X) ACE_TRACE_IMPL(X) +# include \"ace/Trace.h\" +#endif /* (-UC-_NTRACE == 1) */ + +#endif /* -UC-_EXPORT_H */ + +// End of auto generated file. +"; + +############################################################################## +# Print the stuff out + +foreach $export ($prologue, $static_stuff, $has_dll, $epilogue) +{ +## -NC- stands for normal case, the name as it is +## -UC- stands for the name all upper case + map { s/-NC-/$name/g; s/-UC-/$ucname/g; } $export; + + print $export; +}; diff --git a/ACE/bin/generate_footprint_chart.sh b/ACE/bin/generate_footprint_chart.sh new file mode 100755 index 00000000000..49b783dde0a --- /dev/null +++ b/ACE/bin/generate_footprint_chart.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# +# $Id$ +# + +gnuplot <<_EOF_ >/dev/null 2>&1 + set xdata time + set timefmt '%Y/%m/%d-%H:%M' + set xlabel 'Date (MM/DD)' + set ylabel 'Size (KBytes)' + set terminal png small size 800,600 color + set output "$2" + plot '$1' using 1:(\$2/1024.0) title '$3' w l + exit +_EOF_ + diff --git a/ACE/bin/generate_performance_chart.sh b/ACE/bin/generate_performance_chart.sh new file mode 100755 index 00000000000..ebff5f13c96 --- /dev/null +++ b/ACE/bin/generate_performance_chart.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# +# $Id$ +# + +gnuplot <<_EOF_ >/dev/null 2>&1 + set xdata time + set timefmt '%Y/%m/%d-%H:%M' + set xlabel 'Date (YYYYMMDD)' + set ylabel 'Throughput (Requests/Second)' + set terminal png small size 800,600 color + set yrange [4000:25000] + set output "$2" + plot '$1' using 1:2 title '$3' w l + exit +_EOF_ diff --git a/ACE/bin/generate_rel_manpages b/ACE/bin/generate_rel_manpages new file mode 100755 index 00000000000..21af3f5c962 --- /dev/null +++ b/ACE/bin/generate_rel_manpages @@ -0,0 +1,123 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ + +use strict; +require Cwd; + + +########### +###### Sanity Checks +########## +my $hostname; +chomp ($hostname = $ENV{'HOSTNAME'} || `uname -n`); +unless ("$hostname" eq 'naboo') { + #### For efficiency sake . . . + die "$0: must run on host naboo.dre.vanderbilt.edu\n"; +} +my $perl_path = '/usr/bin/perl'; + +my $status= 0; + +&can_run($perl_path.' -V') || + die "$0: perl path is incorrect, please fix the script\n"; + +my $dot_path = '/usr/bin'; +&can_run($dot_path.'/dot -V') || + die "$0: dot path is incorrect, please fix the script\n"; + +my $doxy_path = '/usr/bin'; + +my $doxy_version = '1.4.7-1'; + +&can_run($doxy_path.'/doxygen --version | grep '.$doxy_version.' >/dev/null') || + die "$0: doxygen path or version incorrect, please fix the script\n"; + +$ENV{'PATH'} = $ENV{'PATH'}.':'.$doxy_path; + + + +print "Starting doxygen document generation \n"; + +my $chgrp = 'chgrp'; +my $cpio = 'cpio'; +my $cvs = 'cvs'; +my $date = 'date'; +my $egrep = 'egrep'; +my $find = 'find'; +my $gzip = 'gzip'; +my $bzip = 'bzip2'; +my $make = 'make -f Release -s'; +my $mv = 'mv -f'; +my $scp = 'scp '; +my $rm = 'rm -f'; +my $cp = 'cp -f'; +my $md5sum = 'md5sum'; +my $shell_cd = 'cd'; +my $cksum_ext = 'md5'; +my $redirect = '>'; +my $checksum = '$md5sum'; + +$SIG{'HUP'} = $SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'cleanup'; + +my $release_filter = '\\( -name CVS -o -name build \\) -prune -o ' . + '! -name \'.\#*\' ! -name \'\#*\' ! -name \'*~\' ' . + '! -name \'*.MAK\' -print'; + +my $bin_files = + "\"\\.dsp|\\.dsw|\\.mak|\\.mdp|\\.ide|\\.exe\|\\.ico\|\\.gz\|\\.zip\|" . + "\\.gif|\\.vcp|\\.vcproj|\\.vcw|\\.sln\""; + +my $dest = 'bugzilla@deuce.doc.wustl.edu:/project/deuce/ftp/pub/ACE+TAO-distribution'; +my $release_files = ''; + +chomp ($release_files = `$make show_release_files`); + +######## +######## Main execution thread. +######## +&ex ("bin/generate_doxygen.pl -is_release -perl_path $perl_path -dot_path $dot_path") + && die "$0: failed to generate ACE man pages\n"; + +my $build_command = + "$find html $release_filter | $cpio -o -H tar | " . + "$gzip -9 > ACE-html.tar.gz && ". + "$find html $release_filter | $cpio -o -H tar | " . + "$bzip -9 > ACE-html.tar.bz2 && ". + "$find html $release_filter | $egrep -v $bin_files | " . + "zip ACE-html.zip -q9@ &&" . + "$scp ACE-html.tar.gz ACE-html.tar.bz2 ACE-html.zip $dest;"; + +&ex ($build_command) + && die "$0: failed to move ACE man pages to $dest\n"; + +exit $status; + + +######## +######## Verify that a command can be executed, return 1 on sucess +######## +sub can_run { + my $command = shift; + + open (RUN, "$command 2>&1 |") + || return 0; + while (<RUN>) {} + close(RUN) + || return 0; + return 1; +} + +######## +######## Execute a command, unless -n had been specified. Return value +######## of 0 indicates success. +######## +sub ex () +{ + my ($command) = @_; + + print "Command is $command \n"; + system ("$command"); +} diff --git a/ACE/bin/generate_topinfo_charts.sh b/ACE/bin/generate_topinfo_charts.sh new file mode 100755 index 00000000000..09e2f0a1f51 --- /dev/null +++ b/ACE/bin/generate_topinfo_charts.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# +# $Id$ +# + +gnuplot <<_EOF_ >/dev/null 2>&1 + set xdata time + set timefmt '%Y/%m/%d-%H:%M' + set xlabel 'Date (MM/DD)' + set ylabel 'Size (KBytes) $4' + set terminal png small size 800,600 color + set output "$2" + plot '$1' using 1:2 title '$3' w l + exit +_EOF_ + diff --git a/ACE/bin/indent_macros.perl b/ACE/bin/indent_macros.perl new file mode 100755 index 00000000000..3429d746dba --- /dev/null +++ b/ACE/bin/indent_macros.perl @@ -0,0 +1,59 @@ +eval '(exit $?0)' && eval 'exec perl -i -S $0 ${1+"$@"}' + & eval 'exec perl -i -S $0 $argv:q' + if 0; + +# $Id$ + +# This perl script re-arrange the macro indentation so it's easier to +# see the layering relationship. + +$lineno = 0; +$indent = 0; + +sub inc_indent +{ + $indent += 2; +} + +sub dec_indent +{ + $indent -= 2; +} + +sub get_indent +{ + $retv = 0; + print STDERR "$0 (", $lineno, "): Unbalanced macro pairs\n" if ($indent < 0); + $retv = $indent - 1 if ($indent > 0); + $retv; +} + +while (<>) { + $lineno++; + if (/^[ \t]*\#[ \t]*((if|el|en|).*)/) + { + $cont = $1; + $temp = $2; + if ($temp =~ /if/) { + print "#", " " x &get_indent (), $cont,"\n"; + inc_indent (); + } + elsif ($temp =~ /el/) { + dec_indent (); + print "#", " " x &get_indent (), $cont,"\n"; + inc_indent (); + } + elsif ($temp =~ /en/) { + dec_indent (); + print "#", " " x &get_indent (), $cont,"\n"; + } + else { + print "#", " " x &get_indent (), $cont,"\n"; + } + } + else { + print $_; + } +} + +die ("$0 (EOF): Unbalanced macro pairs\n") if ($indent != 0); diff --git a/ACE/bin/libsize.pl b/ACE/bin/libsize.pl new file mode 100755 index 00000000000..3fd3a468b10 --- /dev/null +++ b/ACE/bin/libsize.pl @@ -0,0 +1,192 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# +# Provides size breakdown of ACE, TAO, or orbsvcs libs. +# +# Assumes (or builds) the lib with debug=0. Allows other make args, +# such as -j 4, to be passed on the command line. + +$usage = + "$0 [-h, for html output] [-s, for shared libs] [-v] [make arguments]\n"; + +#### +#### Configuration parameters. +#### +$build_args = + 'debug=0 optimize=1 static_libs_only=1 DEFFLAGS=-DACE_USE_RCSID=0'; +$ACE_COMPONENTS = + 'OS Utils Logging Threads Demux Connection Sockets IPC Svcconf ' . + 'Streams Memory Token Other'; +$TAO_COMPONENTS = + 'POA Pluggable_Protocols Default_Resources Interpretive_Marshaling ' . + 'IDL_Compiler ORB_Core Dynamic_Any'; +$ORBSVCS_COMPONENTS = + 'Naming ImplRepo Time Concurrency Property Trader LifeCycle Sched ' . + 'Event CosEvent Event2 AV'; + + +#### The following are only used for VxWorks libraries, and +#### only if the corresponding environment variable isn't set. +$default_toolenv = '386'; +$default_wind_base = '/project/doc/pkg/wind'; +$default_host_type = 'sun4-solaris2'; + +#### Use gmake if it's on the user's PATH, otherwise use make. Use +#### sh -c to avoid warning if gmake isn't found. +$make = + system ("sh -c \"gmake --version\" > /dev/null 2>&1") ? 'make' : 'gmake'; + +$ACE_ROOT = $ENV{'ACE_ROOT'} || + die "$0: ACE_ROOT was not set!\n"; + + +$html = $verbose = 0; +$lib_extension = 'a'; + +#### +#### Process command line args. +#### +while ($#ARGV >= $[ && $ARGV[0] =~ /^-/) { + if ($ARGV[0] eq '-h') { + $html = 1; + chop ($sysname = `uname -s`); + chop ($sysrev = `uname -r`); + shift; + } elsif ($ARGV[0] eq '-s') { + $lib_extension = 'so'; + $build_args =~ s/ static_libs_only=1//; + shift; + } elsif ($ARGV[0] eq '-v') { + $verbose = 1; + shift; + } elsif ($ARGV[0] eq '-?') { + print "$usage"; + exit; + } else { + #### Pass remaining args to make. + } +} + +$make_args = join (' ', @ARGV) . $build_args; + +chop ($pwd = `pwd`); + +if ($pwd =~ m%/ace$%) { + #### libACE + $COMPONENTS = "$ACE_COMPONENTS"; + $LIB_COMPONENTS = 'ACE_COMPONENTS'; + $libname = 'ACE'; +} elsif ($pwd =~ m%/tao$%) { + $COMPONENTS = "$TAO_COMPONENTS"; + $LIB_COMPONENTS = 'TAO_COMPONENTS'; + $libname = 'TAO'; +} elsif ($pwd =~ m%/orbsvcs/orbsvcs$%) { + $COMPONENTS = "$ORBSVCS_COMPONENTS"; + $LIB_COMPONENTS = 'TAO_ORBSVCS'; + $libname = 'orbsvcs'; +} else { + die "$0: unsupported directory; $pwd\n"; +} + +$lib = "lib${libname}.$lib_extension"; + + +#### +#### Select the size command based on ACE_ROOT setting. +#### +if ($ACE_ROOT =~ /vxworks/) { + $TOOLENV = $ENV{'TOOLENV'} || $default_toolenv; + $WIND_BASE = $ENV{'WIND_BASE'} || $default_wind_base; + $WIND_HOST_TYPE = $ENV{'WIND_HOST_TYPE'} || $default_host_type; + $size = "$WIND_BASE/host/$WIND_HOST_TYPE/bin/size$TOOLENV"; +} elsif ($ACE_ROOT =~ /lynx-ppc/) { + $size = '/usr/lynx/3.0.0/ppc/cdk/sunos-xcoff-ppc/bin/size'; +} elsif ($ACE_ROOT =~ /lynx/) { + $size = '/usr/lynx/3.0.0/x86/cdk/sunos-coff-x86/bin/size'; +} elsif ($ACE_ROOT =~ /chorus/) { + $size = '/project/doc/mvme/green68k/gnu/bin/size'; +} else { + $size = 'size'; +} + + +#### +#### Measure the size of the entire library. +#### +$sizeTotal = build_lib ("$LIB_COMPONENTS=\"$COMPONENTS\""); +$components = " <th>Platform\n <th>Component\n <th>Total"; +$componentSize = " <th>Size, bytes\n <td align=center>$sizeTotal"; +$componentPercentage = + " <th>Percentage of<br>total size\n <td align=center>100"; +print "Total $sizeTotal (100)\n" unless $html; + + +#### +#### Measure the size of each library component. +#### +foreach my $i (split (' ', $COMPONENTS)) { + $sizeLib = build_lib ("$LIB_COMPONENTS=\"$i\""); + $components .= "\n <th>$i"; + $componentSize .= "\n <td align=center>$sizeLib"; + $thisPercentage = percentage ($sizeLib, $sizeTotal); + $componentPercentage .= "\n <td align=center>$thisPercentage"; + print "$i $sizeLib ($thisPercentage)\n" unless $html; +} + +#### +#### Produce HTML output, if requested. +#### +if ($html) { + print '<center><table cellpadding=4 border=4>' . "\n"; + print ' <tr>' . "\n"; + print "$echoArgs $components\n"; + print ' <tr>' . "\n"; + print " <th rowspan=2>$sysname $sysrev $ACE_ROOT\n"; + print "$echoArgs $componentSize\n"; + print ' <tr>' . "\n"; + print "$echoArgs $componentPercentage\n"; + print '</table></center><p>' . "\n"; +} + + +#### +#### Build library with componnents specified in argument. +#### +sub build_lib () +{ + my ($lib_components) = @_; + + unlink "$lib"; + + print "$make $make_args $lib_components\n" if $verbose; + + system ("$make $make_args $lib_components >> make.log 2>&1") && + die "$0: command failed; $make $make_args $lib_components\n"; + + my $libSize = 0; + + open (SIZE, "$size $lib |") || + die "$0: unable to open $size\n"; + while (<SIZE>) { + my (@field) = split; + $libSize += $field[3] if $field[3] =~ /\d/; #### Skip size header line. + } + close (SIZE); + + $libSize; +} + + +#### +#### Return percentage of first argument as fraction of second. +#### Returns a string with two-decimal place precision. +#### +sub percentage () +{ + my ($size, $total) = @_; + + sprintf ("%.2f", $size * 100 / $total); +} diff --git a/ACE/bin/main2TMAIN.pl b/ACE/bin/main2TMAIN.pl new file mode 100755 index 00000000000..bbbb558194b --- /dev/null +++ b/ACE/bin/main2TMAIN.pl @@ -0,0 +1,16 @@ +eval '(exit $?0)' && eval 'exec perl -pi -S $0 ${1+"$@"}' + & eval 'exec perl -pi -S $0 $argv:q' + if 0; + +# $Id$ +# +# You may want to run the "find" command with this script, which maybe +# something like this: +# +# find . -type f \( -name "*.C" -o -name "*.cc" -o -name "*.c" -o -name "*.cpp" \) -print | xargs $ACE_ROOT/bin/auto_ptr.perl + +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +s/main( *\(int[ A-Za-z]*, *ACE_TCHAR)/ACE_TMAIN$1/g; diff --git a/ACE/bin/make-components b/ACE/bin/make-components new file mode 100755 index 00000000000..a2b9c782807 --- /dev/null +++ b/ACE/bin/make-components @@ -0,0 +1,17 @@ +#! /bin/sh +# $Id$ + +# Allow each ACE component to be built in a simple way, as follows: +# +# $ACE_ROOT/bin/make-components "your flags" +# +# to build libACE.$(SOEXT), libACE_OS.$(SOEXT), etc. + +flags="$*" +cd $ACE_ROOT/ace +make $flags +for component in `cat $ACE_ROOT/ace/ACE_COMPONENTS.list` +do + make $flags LIBACE=libACE_$component ACE_COMPONENTS=$component +done +exit 0 diff --git a/ACE/bin/make_release b/ACE/bin/make_release new file mode 100755 index 00000000000..ab2d1bd4efb --- /dev/null +++ b/ACE/bin/make_release @@ -0,0 +1,1061 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# +# Creates an ACE or TAO kit. Intended to be called from the +# ACE or TAO top-level GNUmakefiles. +# +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +use strict; +require Cwd; + +my $usage="usage: $0 [-?] [-i] [-k <kit>] [-n] [-v <version>] " . + "[-ta <ACE tag>] [-tt <TAO tag>] [-tc <CIAO tag>] " . + "[-u]\n"; +my $long_usage=" -? option prints this message\n" . + " -i to install to public web server directory\n" . + " -k <kit>, where <kit> is ace, tao, ciao or ace+tao+ciao \n" . + " -n option prints what would be done, but doesn't do it\n" . + " -v <version>, where <version> is major, minor, or beta (default)\n" . + " -ta <ACE tag>, to specify ACE tag to be use for checkout (export)\n" . + " -tt <TAO tag>, to specify TAO tag to be use for checkout (export)\n" . + " -tc <CIAO tag>, to specify CIAO tag to be use for checkout (export)\n" . + " -u to update versions\n"; + +######## +######## Sanity checks. +######## +$ENV{'SIGNATURE'} || + die "$0: must set your SIGNATURE environment variable\n"; + +$ENV{'MAILID'} || + die "$0: must set your MAILID environment variable\n"; + + +my $which_host = $ENV{'OSTYPE'}; + +my $release_host = substr ($which_host, 0, 5); + +## We are not going to use any Sun boxes for the release anymore.. + +if (! ($release_host eq 'linux')){ + die "$0: You are on the wrong OS ($release_host). Please move to a linux box.\n"; +} + +my $perl_path = '/usr/bin/perl'; + +&can_run($perl_path.' -V') || + die "$0: perl path is incorrect, please fix the script\n"; + +my $hostname; +chomp ($hostname = $ENV{'HOSTNAME'} || `uname -n`); +unless ("$hostname" eq 'deuce.doc.wustl.edu') { +#### For efficiency sake . . . + die "$0: must run on host deuce\n"; +} + + +$ENV{'CVSROOT'} || + die "$0: must set your CVSROOT environment variable\n"; + +$ENV{'ACE_ROOT'} || + die "$0: must set your ACE_ROOT environment variable\n"; + +######## +######## Configuration parameters. +######## +my $gnu = '/bin'; + +####### Add the path to /bin unconditionally.. + +$ENV{'PATH'} = "$gnu" . ':' . $ENV{'PATH'}; + +my $gnu2 = '/usr/local/bin:/usr/bin'; + +####### Add the path to /usr/bin unconditionally.. +$ENV{'PATH'} = "$gnu2" . ':' . $ENV{'PATH'}; + +my $export_dir = '/project/deuce/ftp/pub/ACE+TAO-distribution'; +my $old_versions_dir = '/project/deuce/ftp/pub/previous_versions'; +my $diffs_dir = "$export_dir/diffs"; +my $exec_prefix = ''; +my $install = 0; +my $kit = ''; +my $release_type = 'beta'; +my $ace_tag = my $tao_tag = my $ciao_tag = ''; +my $controlled_files = my $release_files = my $release_lib_files = ''; +my $release_tag_files = my $release_autoconf_files = ''; +my $release_filter = '\\( -name CVS -o -name build \\) -prune -o ' . + '! -name \'.\#*\' ! -name \'\#*\' ! -name \'*~\' ' . + '! -name \'*.MAK\' ! -name \'.cvsignore\' -print'; +my $update_versions = 0; +my $create_zips = 1; + +######## +######## Process command line args. +######## +while ($#ARGV >= $[ && $ARGV[0] =~ /^-/) { + if ($ARGV[0] eq '-i') { + $install = 1; + } elsif ($ARGV[0] eq '-k') { + if ($ARGV[1] =~ /^[^-]+/ && + ($ARGV[1] eq 'ace' || $ARGV[1] eq 'tao' || $ARGV[1] eq 'ciao' || $ARGV[1] eq 'ace+tao' || $ARGV[1] eq 'ace+tao+ciao')) { + $kit = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -k option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-n') { + $exec_prefix = 'echo '; + } elsif ($ARGV[0] eq '-v') { + if ($ARGV[1] =~ /^[^-]+/ && + ($ARGV[1] eq 'major' || $ARGV[1] eq 'minor' || + $ARGV[1] eq 'beta')) { + $release_type = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -v option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-ta') { + if ($ARGV[1] =~ /^[^-]+/) { + $ace_tag = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -ta option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-tt') { + if ($ARGV[1] =~ /^[^-]+/) { + $tao_tag = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -tt option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-tc') { + if ($ARGV[1] =~ /^[^-]+/) { + $ciao_tag = $ARGV[1]; shift; + } else { + print STDERR "$0: must provide argument for -tc option\n"; + die "$usage$long_usage"; + } + } elsif ($ARGV[0] eq '-u') { + $update_versions = 1; + } elsif ($ARGV[0] eq '-?') { + print "$usage$long_usage"; + exit; + } else { + print STDERR "$0: unknown option $ARGV[0]\n"; + die "$usage$long_usage"; + } + shift; + +} + +die "$0: must specify a -k option\n" unless "$kit"; +my $KIT; + +if ($kit eq 'ace') { + $KIT = 'ACE'; +} elsif ($kit eq 'tao') { + $KIT = 'TAO'; +} elsif ($kit eq 'ciao') { + $KIT = 'CIAO'; +} else { + #### Creating combined ACE+TAO kit. Don't use $KIT. +}; + + +my $chmod = 'chmod'; +# All of them had gnu suffixes. Removed them.. +my $chgrp = 'chgrp'; +my $cpio = 'cpio'; +my $cvs = 'cvs'; +my $date = 'date'; +my $egrep = 'egrep'; +my $find = 'find'; +my $gzip = 'gzip'; +my $bzip2 = 'bzip2'; +my $make = 'make -f Release -s'; +my $regmake = 'make -s'; +my $mv = 'mv -f'; +my $rm = 'rm -f'; +my $cp = 'cp -f'; +my $md5sum = 'md5sum'; +my $touch = 'touch'; +chop (my $now = `$date +"%a %b %d %T %Y"`); + +unless ("$controlled_files") { + chomp ($controlled_files = `$make show_controlled_files`); +} + +unless ("$release_files") { + chomp ($release_files = `$make show_release_files`); +} + +unless ("$release_lib_files") { + chomp ($release_lib_files = `$make show_release_lib_files`); +} + +unless ("$release_tag_files") { + chomp ($release_tag_files = `$make show_release_tag_files`); +} + +##### +##### Preparation for the release +##### +&ex ("$touch $export_dir/DON") && + die "$0: Write failures in $export_dir, access problems..\n"; + +&ex ("$touch $old_versions_dir/DON") && + die "$0: Write failures in $old_versions_dir, access problems..\n"; + +my $ace_root = $ENV{'ACE_ROOT'}; + +&ex ("$touch $ace_root/MPC/DON") && + die "$0: Read/Write failures in $ace_root/MPC/, access problems..\n"; + +&ex ("$rm -r $ace_root/MPC/DON") && + die "$0: Delete failures in $ace_root/MPC \n"; + +&ex ("$rm -r $export_dir/DON $export_dir/*.gz $export_dir/*.zip $export_dir/*.bz2") && + die "$0: failed to remove files in $export_dir\n"; + +&ex ("$rm -r $old_versions_dir/DON") && + die "$0: failed to remove file in $old_versions_dir\n"; + +######## +######## Setup signal handlers. +######## +my $status = 1; #### Must get set to 0 explicitly to indicate success. +$SIG{'HUP'} = $SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'cleanup'; + + +######## +######## Defend against fascist umasks. +######## +umask 022; + + +my $major_version = my $minor_version = my $beta_version = 0; +my $previous_version = my $version = ''; +my $ace_version = ''; +my $tao_version = ''; + +######## +######## Main execution thread. +######## +if ($update_versions && "$kit" ne 'ace+tao+ciao') { + #### Update versions and tag, but don't create the kit. + + $status = + &check_workspace () || + &get_versions () || + &update_version_files () || + &update_changelog () || + &tag (); +} else { + #### Create the kit. + + #### If a tag was specified, export using the tag from a staging area. + #### If not, create a kit from the current directory. + my $stage_dir = '..'; + if ("$ace_tag" || "$tao_tag" || "$ciao_tag") { + $stage_dir = "/tmp/ACE_wrappers_stage-$$/"; + unless ("$exec_prefix") { + mkdir "$stage_dir", 0755 || + die "$0: unable to mkdir $stage_dir\n"; + } + } + + if ("$exec_prefix") { + print "chdir $stage_dir\n"; + } else { + chdir $stage_dir || die "$0: unable to chdir $stage_dir\n"; + } + + if ("$ace_tag") { + &ex ("$cvs -q export -r$ace_tag -kv ACE_wrappers > /dev/null") && + die "$0: failed cvs export of $ace_tag in $stage_dir\n"; + &ex ("cd ACE_wrappers && $make ACE-INSTALL") && + die "$0: failed make ACE-INSTALL in $stage_dir/ACE_wrappers\n"; + } + + if ("$ace_tag") { + &ex ("$cvs -q export -r$ace_tag -kv ACE_MPC > /dev/null") && + die "$0: failed cvs export of ACE_MPC in $stage_dir\n"; + } + + if ("$tao_tag") { + chdir "ACE_wrappers" || die "$0: unable to chdir ACE_wrappers\n"; + &ex ("$cvs -q export -r$tao_tag -kv TAO > /dev/null") && + die "$0: failed cvs export of $tao_tag in $stage_dir\n"; + &ex ("cd TAO && $make TAO-INSTALL") && + die "$0: failed make INSTALL in " . + "$stage_dir/ACE_wrappers/TAO\n"; + } + + if ("$ciao_tag") { + chdir "TAO" || die "$0: unable to chdir ACE_wrappers/TAO\n"; + &ex ("$cvs -q export -r$ciao_tag -kv CIAO > /dev/null") && + die "$0: failed cvs export of $ciao_tag in $stage_dir\n"; + &ex ("cd CIAO && $make CIAO-INSTALL") && + die "$0: failed make INSTALL in " . + "$stage_dir/ACE_wrappers/TAO\n"; + } + + chdir "../../"; + + $status = &generate_makefiles (); + + if ($status != 0) { + die "$0: failed to generate GNUmakefiles\n"; + } + + $status = &create_kit (); + + if (! $status && $install) { + if ("$ace_tag") { + my $major_v = 0; + my $minor_v = 0; + my $beta_v = 0; + if ($ace_tag =~ /(\d+)_(\d+)_(\d+)/o) { + my $major_v = $1; + my $minor_v = $2; + my $beta_v = $3; + + if ($beta_v > 0) { + my $previous_beta = $beta_v - 1; + $previous_version = "$major_v.$minor_v.$previous_beta"; + +#### &diff ('ACE_wrappers', "ACE-$previous_version", "$ace_tag"); + } + } + } + + if ("$tao_tag") { + my $major_v = 0; + my $minor_v = 0; + my $beta_v = 0; + if ($tao_tag =~ /(\d+)_(\d+)_(\d+)/o) { + my $major_v = $1; + my $minor_v = $2; + my $beta_v = $3; + + #### $previous_version is used by diff (). + if ($beta_v > 0) { + my $previous_beta = $beta_v - 1; + $previous_version = "$major_v.$minor_v.$previous_beta"; + +#### &diff ('ACE_wrappers/TAO', "TAO-$previous_version", "$tao_tag"); + } + } + } + } + + if ("$ace_tag" || "$tao_tag") { + if ($install) { + chdir ".."; + &ex ("$rm -r $stage_dir") && + warn "$0: failed to remove $stage_dir\n"; + } else { + warn "$0: kits are in $stage_dir\n"; + } + } +} +&cleanup; + + +######## +######## Clean up when done or on signal. +######## +sub cleanup { + exit $status; +} + + +######## +######## Check that the workspace is up-to-date, if releasing from +######## the official release directory. +######## +sub check_workspace () { + my $module; + + if ($kit =~ /^ace/) { + chdir '..' || die "$0: unable to chdir ..\n"; + $module = 'ACE_wrappers'; + } elsif ($kit =~ /tao/) { + chdir '../' || die "$0: unable to chdir ../..\n"; + $module = 'TAO'; + } elsif ($kit =~ /ciao/) { + chdir '../' || die "$0: unable to chdir ../..\n"; + $module = 'CIAO'; + } + + my @out_of_date = (); + open (CVS, "$cvs -q checkout -P $module 2>&1 |") || + die "$0: unable to open $cvs\n"; + while (<CVS>) { + next if m%^U %; #### Allow others to update the repository. + next if m%^cvs server: New directory `.*' -- ignored$%; #### empty dirs. + next if m%^\? ACE_wrappers/include/makeinclude/platform_macros.GNU$%; + next if m%^\? ACE_wrappers/ace/config.h$%; + + push (@out_of_date, $_) if "$_"; + } + close CVS; + + if ($kit =~ /^ace/) { + chdir 'ACE_wrappers' || die "$0: unable to chdir ACE_wrappers\n"; + } elsif ($kit =~ /tao/) { + chdir 'TAO' || die "$0: unable to chdir ACE_wrappers/TAO\n"; + } elsif ($kit =~ /ciao/) { + chdir 'CIAO' || die "$0: unable to chdir ACE_wrappers/TAO/CIAO\n"; + } + + if (@out_of_date) { + warn "ERROR: workspace must be updated (with cvs -q up -d) or " . + "cleaned:\n " . + join ("\n ", @out_of_date) . "\n"; + return 1; + } + + 0; +} + + +######## +######## Retrieve version information from VERSION file(s). +######## +sub get_versions () { + open (VERSION, '< VERSION') || + die "$0: unable to open VERSION\n"; + while (<VERSION>) { + if (/$KIT version (\d+)\.(\d+)\.(\d+)/o) { + $major_version = $1; + $minor_version = $2; + $beta_version = $3; + last; + } elsif (/$KIT version (\d+)\.(\d+)[^\.]/o) { + #### Previous release was a minor. + $major_version = $1; + $minor_version = $2; + last; + } elsif (/$KIT version (\d+)[^\.]/o) { + #### Previous release was a major. + $major_version = $1; + last; + } + } + close VERSION; + + if ($release_type eq 'beta') { + ++$beta_version; + } elsif ($release_type eq 'minor' ) { + $beta_version = 0; + ++$minor_version; + } elsif ($release_type eq 'major' ) { + $minor_version = $beta_version = 0; + ++$major_version; + } + + if ($release_type eq 'beta') { + $version = "$major_version.$minor_version.$beta_version"; + } elsif ($release_type eq 'minor' ) { + $version = "$major_version.$minor_version"; + } + + print "new $KIT version: $version\n"; + + if ($KIT ne 'ACE') { + my $ace_major_version = my $ace_minor_version = my + $ace_beta_version = 0; + my $nfile = ''; + if ($KIT eq 'TAO') { + $nfile = "../VERSION"; + } elsif ($KIT eq 'CIAO') { + $nfile = "../../VERSION"; + } + open (ACE_VERSION, "$nfile") || + die "$0: unable to open $nfile\n"; + while (<ACE_VERSION>) { + if (/ACE version (\d+)\.(\d+)\.(\d+)/o) { + $ace_major_version = $1; + $ace_minor_version = $2; + $ace_beta_version = $3; + last; + } elsif (/ACE version (\d+)\.(\d+)[^\.]/o) { + #### ACE release was a minor. + $ace_major_version = $1; + $ace_minor_version = $2; + last; + } elsif (/ACE version (\d+)[^\.]/o) { + #### ACE release was a major. + $ace_major_version = $1; + last; + } + } + + close ACE_VERSION; + + if ($release_type eq 'beta') { + $ace_version = "$ace_major_version.$ace_minor_version.$ace_beta_version"; + } elsif ($release_type eq 'minor' ) { + $ace_version = "$ace_major_version.$ace_minor_version"; + } + } + + if ($KIT eq 'CIAO') { + my $tao_major_version = my $tao_minor_version = my $tao_beta_version = 0; + open (TAO_VERSION, '< ../VERSION') || + die "$0: unable to open ../VERSION\n"; + while (<TAO_VERSION>) { + if (/TAO version (\d+)\.(\d+)\.(\d+)/o) { + $tao_major_version = $1; + $tao_minor_version = $2; + $tao_beta_version = $3; + last; + } elsif (/TAO version (\d+)\.(\d+)[^\.]/o) { + #### TAO release was a minor. + $tao_major_version = $1; + $tao_minor_version = $2; + last; + } elsif (/TAO version (\d+)[^\.]/o) { + #### TAO release was a major. + $tao_major_version = $1; + last; + } + } + + close TAO_VERSION; + + if ($release_type eq 'beta') { + $tao_version = + "$tao_major_version.$tao_minor_version.$tao_beta_version"; + } elsif ($release_type eq 'minor' ) { + $tao_version = "$tao_major_version.$tao_minor_version"; + } + } + + 0; +} + + +######## +######## Update VERSION file(s). +######## +sub update_version_files () { + &ex ("perl -pi -e " . + "'s/$KIT version .*/$KIT version $version, released $now./' VERSION"); + return 1 if $? >> 8; + + &ex ("perl -pi -e 's/$KIT VERSION:.*/$KIT VERSION: $version/' " . + "PROBLEM-REPORT-FORM"); + return 1 if $? >> 8; + + if ($kit =~ /^ciao/) { + + # For CIAO we need to add ACE + TAO versions.. + &ex ("perl -pi -e 's/TAO VERSION :.*/TAO VERSION : $tao_version/' " . + "PROBLEM-REPORT-FORM"); + return 1 if $? >> 8; + + &ex ("perl -pi -e 's/ACE VERSION :.*/ACE VERSION : $ace_version/' " . + "PROBLEM-REPORT-FORM"); + return 1 if $? >> 8; + + if ("$exec_prefix") { + print "CIAO version ${major_version}.${minor_version}.${beta_version}\n"; + } else { +### &ex ("perl -pi -e 's/version =.*/version = $version/' " . +### "../../bin/MakeProjectCreator/config/ciaoversion.mpb"); +### return 1 if $? >> 8; + + open (CIAO_VERSION_H, "> ciao/Version.h") || + die "$0: unable to open ciao/Version.h\n"; + + print CIAO_VERSION_H + "// -*- C++ -*-\n" . + "// \$Id\$\n\n" . + "// This is file was automatically generated by \$ACE_ROOT/bin/make_release.\n\n" . + "\#define CIAO_MAJOR_VERSION ${major_version}\n" . + "\#define CIAO_MINOR_VERSION ${minor_version}\n" . + "\#define CIAO_BETA_VERSION ${beta_version}\n" . + "\#define CIAO_VERSION \"${version}\"\n"; + + close CIAO_VERSION_H; + } + } + + if ($kit =~ /^tao/) { + &ex ("perl -pi -e 's/ACE VERSION:.*/ACE VERSION: $ace_version/' " . + "PROBLEM-REPORT-FORM"); + return 1 if $? >> 8; + + if ("$exec_prefix") { + print "TAO version ${major_version}.${minor_version}.${beta_version}\n"; + } else { +### &ex ("perl -pi -e 's/version =.*/version = $version/' " . +### "../bin/MakeProjectCreator/config/taoversion.mpb"); +### return 1 if $? >> 8; + + open (TAO_VERSION_H, "> tao/Version.h") || + die "$0: unable to open tao/Version.h\n"; + + print TAO_VERSION_H + "// -*- C++ -*-\n" . + "// \$Id\$\n\n" . + "// This is file was automatically generated by \$ACE_ROOT/bin/make_release.\n\n" . + "\#define TAO_MAJOR_VERSION ${major_version}\n" . + "\#define TAO_MINOR_VERSION ${minor_version}\n" . + "\#define TAO_BETA_VERSION ${beta_version}\n" . + "\#define TAO_VERSION \"${version}\"\n"; + + close TAO_VERSION_H; + } + } + + if ($kit =~ /^ace/) { + if ("$exec_prefix") { + print "ACE version ${major_version}.${minor_version}.${beta_version}\n"; + } else { +## &ex ("perl -pi -e 's/version =.*/version = $version/' " . +## "bin/MakeProjectCreator/config/aceversion.mpb"); +## return 1 if $? >> 8; + + open (ACE_VERSION_H, "> ace/Version.h") || + die "$0: unable to open ace/Version.h\n"; + + print ACE_VERSION_H + "// -*- C++ -*-\n" . + "// \$Id\$\n\n" . + "// This is file was automatically generated by \$ACE_ROOT/bin/make_release.\n\n" . + "\#define ACE_MAJOR_VERSION ${major_version}\n" . + "\#define ACE_MINOR_VERSION ${minor_version}\n" . + "\#define ACE_BETA_VERSION ${beta_version}\n" . + "\#define ACE_VERSION \"${version}\"\n\n"; +## "\#include \"ace/Versioned_Namespace.h\"\n"; + + close ACE_VERSION_H; + } + } + + 0; +} + + +######## +######## Add ChangeLog entries, and make sure that they have proper +######## permissions. +######## +sub update_changelog () { + my $logname = $ENV{'MAILID'}; + if (! "$logname") { + chop ($logname = `/usr/ucb/whoami`); + } + my $signature = $ENV{'SIGNATURE'} || $logname; + my $message = "$now $signature <$logname>\n\n" . + " * $KIT version $version released.\n\n"; + + if ("$exec_prefix") { + print "Adding to ChangeLog: \n", $message, "\n"; + return 0; + } + open (NEW_CHANGELOG, ">ChangeLog.bak") + || return 1; + open (CHANGELOG, "ChangeLog") + || return 1; + print NEW_CHANGELOG $message; + while (<CHANGELOG>) { + print NEW_CHANGELOG $_; + } + close (CHANGELOG) + || return 1; + close (NEW_CHANGELOG) + || return 1; + rename "ChangeLog.bak", "ChangeLog" + || return 1; + + my $version_h = ''; + + if ($KIT eq 'ACE') { + $version_h = 'ace/Version.h'; + } elsif ($KIT eq 'TAO') { + $version_h = 'TAO/tao/Version.h'; + } elsif ($KIT eq 'CIAO') { + $version_h = 'TAO/CIAO/ciao/Version.h'; + } + +# Incase you are wondering what is all this about. We are trying to +# commit from ACE_wrappers and hence the mess. Why not commit from TAO +# and make lives simpler. Sorry it wouldnt work for taoversion.mpb! +# Using "cvs commit ../file" is not acceptable to CVS and is known bug +# from 1.10.X versions. Hence this maze of things. + + if ($KIT eq 'TAO') { + &ex ("cd ..; $cvs commit -m'$version' " . + "TAO/VERSION TAO/PROBLEM-REPORT-FORM TAO/ChangeLog $version_h && " . + "chmod 0644 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h; " . + "chgrp 1213 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h"); + } elsif ($KIT eq 'CIAO') { + &ex ("cd ../../; $cvs commit -m'$version' " . + "TAO/CIAO/VERSION TAO/CIAO/PROBLEM-REPORT-FORM TAO/CIAO/ChangeLog $version_h && " . + "chmod 0644 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h; " . + "chgrp 1213 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h"); + } else { + &ex ("$cvs commit -m'$version' " . + "VERSION PROBLEM-REPORT-FORM ChangeLog $version_h &&" . + "chmod 0644 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h; " . + "chgrp 1213 VERSION PROBLEM-REPORT-FORM ChangeLog $version_h"); + } + + return 1 if $? >> 8; + + 0; +} + + +######## +######## Tag the release. +######## +sub tag () { + my $tag = "$KIT-$version"; + #### cvs tag does not allow dots. + $tag =~ tr/./_/; + + print "start tagging $tag\n"; + if ($KIT eq "TAO" || + $KIT eq "CIAO") { + chdir ".."; + } + &ex ("$cvs -q tag $tag $controlled_files $release_tag_files > /dev/null"); + if ($KIT eq "TAO") { + chdir "TAO"; + } + if ($KIT eq "CIAO") { + chdir "CIAO"; + } + return 1 if $? >> 8; + print "finished tagging $tag\n"; + + 0; +} + + +######## +######## If building a beta, create a diff from the previous version. +######## +sub diff () { + my ($module, $previous_tag, $tag) = @_; + + if ("$previous_version") { + #### Only create a diff for a beta version. + + #### cvs tag does not allow dots. + $previous_tag =~ tr/./_/; + $tag =~ tr/./_/; + + &ex ("nice -15 $cvs -q rdiff -u -r $previous_tag -r $tag " . + "$module 2>/dev/null | " . + "nice -15 sed 's%ACE_wrappers-repository/%ACE_wrappers/%g' | " . + "nice -15 $gzip -9 > $diffs_dir/$previous_tag-$tag.diff.gz") + if -d "$diffs_dir"; + } + + #### Ignore return value. No promises on diffs. + 0; +} + + +######## +######## Generate GNUmakefiles and workspace/project files. +######## +sub generate_makefiles () { + + # The current ACE_ROOT setting is where this script started from, not + # the staging area we want to generate files in. So, we need to + # specifically set the -relative option on mwc to replace ACE_ROOT + # correctly in generated files. + # + # Need todo a common chmod on the file lists! + my $here = Cwd::getcwd(); + + print "My current wok in generate makefiles $here \n"; + my $exclude_option = '-exclude TAO/TAO_*.mwc,TAO/CIAO/CIAO_*.mwc'; + my $tmp_mpc_option = + '-recurse -hierarchy -relative ACE_ROOT='; + + my $mpc_option = $tmp_mpc_option.$here.'/ACE_wrappers'; + + my $tmp_static_option = + '-static -name_modifier *_Static -apply_project -exclude TAO/CIAO,TAO/TAO_*.mwc '; + + my $static_option = $tmp_static_option.$mpc_option; + + # Visual Studio 2005 (aka VC8) uses the same file suffixes as VC7.1, so + # append _vc8 to the names. + my $vc8_option = '-name_modifier *_vc8'; + + # Additionally, VC8 can do Windows CE builds and these can be + # configured in. However, the CE builds have uses_wchar turned on, + # so we don't mix them with the Win32 VC8 files. The complete list of + # available platforms known at this point is in + # $MPC_ROOT/template/vc8_platforms.mpt - since the default is Win32 + # and we're generating only CE builds, replace it instead of adding to it. + my $tmp_ce = '-value_template platforms=\'"Pocket PC 2003 (ARMV4)"\' '; + $tmp_ce = $tmp_ce.'-value_template platforms+=\'"Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"\''; + my $ce_option = '-name_modifier *_WinCE -features "uses_wchar=1,wince=1" '.$tmp_ce; + + &ex ("cd ACE_wrappers; \ + bin/mwc.pl $exclude_option $mpc_option; \ + find ./ -name 'GNUmake*' | /usr/bin/xargs chmod 0644"); + + &ex ("cd ACE_wrappers; \ + bin/mwc.pl -type vc8 $mpc_option $vc8_option; \ + bin/mwc.pl -type vc8 $mpc_option $exclude_option $ce_option; \ + bin/mwc.pl -type vc71 $mpc_option; \ + bin/mwc.pl -type borland $mpc_option $exclude_option; \ + bin/mwc.pl -type vc71 $static_option; \ + find ./ -name '*.bor' | /usr/bin/xargs chmod 0644;\ + find ./ -name '*.vcproj' | /usr/bin/xargs chmod 0644;\ + find ./ -name '*.sln' | /usr/bin/xargs chmod 0644"); +} + +sub generate_em3 () { + + my $here = Cwd::getcwd(); + + &ex ("cd ACE_wrappers; \ + bin/mwc.pl -type em3 -exclude TAO -recurse -hierarchy -relative ACE_ROOT=$here/ACE_wrappers;\ + find ./ -name '*.vc[p,w]' | /usr/bin/xargs chmod 0644"); +} + +######## +######## Bootstrap autotool support +######## +sub bootstrap_autotools () { + # Autotool (i.e. GNU autoconf, automake and libtool) support is + # currently only available in ACE. As such, only bootstrap autotool + # support into the ACE-only distribution to avoid potential + # confusion for TAO and CIAO users. For example, they may wonder + # why TAO and CIAO are not configured when ACE's configure script is + # run. + if ($kit =~ /^ace/) { + &ex ("cd ACE_wrappers && bin/bootstrap"); + } +} + +######## +######## Create the tar file(s) and move to their proper location. +######## +sub create_kit () { + + #### Create kits with group write permission. + umask 002; + + my $dest = $install ? "$export_dir" : 'created'; + my $dispose = $install ? "$mv" : 'echo'; + my $checksum = $install ? "$md5sum" : 'echo'; + my $cksum_ext = 'md5'; + my $redirect = $install ? '>' : '\>'; + my $shell_cd = $install ? 'cd' : 'echo cd'; + + (my $local_ace_tag = $ace_tag) =~ s|_|.|g; + (my $local_tao_tag = $tao_tag) =~ s|_|.|g; + (my $local_ciao_tag = $ciao_tag) =~ s|_|.|g; + + # These files don't get LF->CRLF conversions done when making the zip. + my $bin_files = + "\"\\.dsp|\\.dsw|\\.mak|\\.mdp|\\.ide|\\.exe\|\\.ico\|\\.gz\|\\.zip\|\\.xls\|" . + "\\.sxd|\\.gif|\\.vcp|\\.vcproj|\\.vcw|\\.sln\|\\.dfm\|\\.jpg\|\\.png\|\\.vsd\|\\.bz2\""; + + my $build_command; + my $archives; + + my $base_release_files = $release_files; + + if ($kit eq 'ace+tao+ciao') { + # Create a list of files that needs to be packed with CIAO + # including ACE+TAO. + my $tmp_rel_file = ''; + chomp ($tmp_rel_file = `$regmake -f ACE_wrappers/TAO/Release show_release_files`); + $release_files .= ' '; + $release_files .= $tmp_rel_file; + $tmp_rel_file = ''; + $release_files .= ' '; + chomp ($tmp_rel_file = `$regmake -f ACE_wrappers/TAO/CIAO/Release show_release_files`); + $release_files .= $tmp_rel_file; + + print "RELEASE FILES from CIAO are $release_files \n"; + + $build_command = + "$rm ACE+TAO+CIAO.zip; " . + "$find $release_files $release_filter | $egrep $bin_files | " . + "zip ACE+TAO+CIAO.zip -q9@ &&" . + "$find $release_files $release_filter | $egrep -v $bin_files | " . + "zip ACE+TAO+CIAO.zip -qlg9@ &&" . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$gzip -9 > ACE+TAO+CIAO.tar.gz && " . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$bzip2 > ACE+TAO+CIAO.tar.bz2 && " . + "$chmod 664 ACE+TAO+CIAO.tar.gz ACE+TAO+CIAO.zip ACE+TAO+CIAO.tar.bz2 && " . + "$chgrp 1213 ACE+TAO+CIAO.tar.gz ACE+TAO+CIAO.zip ACE+TAO+CIAO.tar.bz2 && " . + "$dispose ACE+TAO+CIAO.tar.gz ACE+TAO+CIAO.zip ACE+TAO+CIAO.tar.bz2 $dest &&" . + "$cp $dest/ACE+TAO+CIAO.zip $old_versions_dir/$local_ace_tag+$local_tao_tag+$local_ciao_tag.zip &&". + "$cp $dest/ACE+TAO+CIAO.tar.gz $old_versions_dir/$local_ace_tag+$local_tao_tag+$local_ciao_tag.tar.gz &&". + "$cp $dest/ACE+TAO+CIAO.tar.bz2 $old_versions_dir/$local_ace_tag+$local_tao_tag+$local_ciao_tag.tar.bz2; "; + $archives = " ACE+TAO+CIAO.tar.gz ACE+TAO+CIAO.zip ACE+TAO+CIAO.tar.bz2 "; + } + + # First dispose of ACE+TAO+CIAO. + my $checksum_command = + "$shell_cd $dest; " . + "for p in $archives; do " . + "$rm \${p}.${cksum_ext}; " . + "$checksum \$p $redirect \${p}.${cksum_ext}; " . + "done"; + + &ex ($build_command); + &ex ($checksum_command); + + if ($kit eq 'ace+tao' || $kit eq 'ace+tao+ciao') { + # Set the relese files once again + my $tmp_rel_file = ''; + $status = &bootstrap_autotools (); + + if ($status != 0) { + die "$0: failed to bootstrap autotools\n"; + } + + chomp ($tmp_rel_file = `$regmake -f ACE_wrappers/TAO/Release show_release_files`); + $release_files = $base_release_files; + $release_files .= ' '; + $release_files .= $tmp_rel_file; + + print "RELEASE FILES for TAO are $release_files \n"; + + $build_command = + "$rm ACE+TAO.zip; " . + "$find $release_files $release_filter | $egrep $bin_files | " . + "zip ACE+TAO.zip -q9@ &&" . + "$find $release_files $release_filter | $egrep -v $bin_files | " . + "zip ACE+TAO.zip -qlg9@ &&" . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$gzip -9 > ACE+TAO.tar.gz && " . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$bzip2 > ACE+TAO.tar.bz2 && " . + "$chmod 664 ACE+TAO.tar.gz ACE+TAO.zip ACE+TAO.tar.bz2 && " . + "$chgrp 1213 ACE+TAO.tar.gz ACE+TAO.zip ACE+TAO.tar.bz2 && " . + "$dispose ACE+TAO.tar.gz ACE+TAO.zip ACE+TAO.tar.bz2 $dest &&" . + "$cp $dest/ACE+TAO.zip $old_versions_dir/$local_ace_tag+$local_tao_tag.zip &&". + "$cp $dest/ACE+TAO.tar.gz $old_versions_dir/$local_ace_tag+$local_tao_tag.tar.gz &&". + "$cp $dest/ACE+TAO.tar.bz2 $old_versions_dir/$local_ace_tag+$local_tao_tag.tar.bz2; "; + $archives = " ACE+TAO.tar.gz ACE+TAO.zip ACE+TAO.tar.bz2 "; + } + + # Dispose of ACE+TAO now + $checksum_command = + "$shell_cd $dest; " . + "for p in $archives; do " . + "$rm \${p}.${cksum_ext}; " . + "$checksum \$p $redirect \${p}.${cksum_ext}; " . + "done"; + + &ex ($build_command); + &ex ($checksum_command); + + if ($kit eq 'ace' || $kit eq 'ace+tao' || $kit eq 'ace+tao+ciao') { + + $status = &generate_em3 (); + + if ($status != 0) { + die "$0: failed to generate em3 files\n"; + } + + # Reset it again with autoconf files + chomp ($release_files = `$regmake -f ACE_wrappers/Release show_release_files`); + + $build_command = + "$rm ACE.zip ACE-lib.zip; " . + "$find $release_files $release_filter | $egrep $bin_files | " . + "zip ACE.zip -q9@ &&" . + "$find $release_files $release_filter | $egrep -v $bin_files | " . + "zip ACE.zip -qlg9@ &&" . + "$find $release_lib_files $release_filter | $egrep $bin_files | " . + "zip ACE-lib.zip -q9@ &&" . + "$find $release_lib_files $release_filter | $egrep -v $bin_files | " . + "zip ACE-lib.zip -qlg9@ &&" . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$gzip -9 > ACE.tar.gz && " . + "$find $release_files $release_filter | $cpio -o -H ustar | " . + "$bzip2 > ACE.tar.bz2 && " . + "$find $release_lib_files $release_filter | $cpio -o -H ustar | " . + "$gzip -9 > ACE-lib.tar.gz && " . + "$find $release_lib_files $release_filter | $cpio -o -H ustar | " . + "$bzip2 > ACE-lib.tar.bz2 && " . + "$chmod 664 ACE.tar.gz ACE-lib.tar.gz ACE.tar.bz2 ACE-lib.tar.bz2 ". + "ACE.zip ACE-lib.zip && " . + "$chgrp 1213 ACE.tar.gz ACE-lib.tar.gz ACE.tar.bz2 ACE-lib.tar.bz2 ". + "ACE.zip ACE-lib.zip && " . + "$dispose ACE.zip ACE-lib.zip $dest && " . + "$dispose ACE.tar.gz ACE-lib.tar.gz ACE.tar.bz2 ACE-lib.tar.bz2 $dest && " . + "$cp $dest/ACE.zip $old_versions_dir/$local_ace_tag.zip &&". + "$cp $dest/ACE-lib.zip $old_versions_dir/$local_ace_tag-lib.zip &&". + "$cp $dest/ACE.tar.gz $old_versions_dir/$local_ace_tag.tar.gz &&". + "$cp $dest/ACE-lib.tar.gz $old_versions_dir/$local_ace_tag-lib.tar.gz &&". + "$cp $dest/ACE.tar.bz2 $old_versions_dir/$local_ace_tag.tar.bz2 &&". + "$cp $dest/ACE-lib.tar.bz2 $old_versions_dir/$local_ace_tag-lib.tar.bz2;"; + $archives = " ACE.tar.gz ACE-lib.tar.gz ". + "ACE.zip ACE-lib.zip ACE.tar.bz2 ACE-lib.tar.bz2 "; + } + + # Now dispose of ACE in all its glory + $checksum_command = + "$shell_cd $dest; " . + "for p in $archives; do " . + "$rm \${p}.${cksum_ext}; " . + "$checksum \$p $redirect \${p}.${cksum_ext}; " . + "done"; + + &ex ($build_command); + &ex ($checksum_command); +} + + +######## +######## Execute a command, unless -n had been specified. Return value +######## of 0 indicates success. +######## +sub ex () +{ + my ($command) = @_; + + if ("$exec_prefix") { + print $command . "\n"; + 0; + } else { + system ("$command"); + } +} + +######## +######## Verify that a command can be executed, return 1 on sucess +######## +sub can_run { + my $command = shift; + + open (RUN, "$command 2>&1 |") + || return 0; + while (<RUN>) {} + close(RUN) + || return 0; + return 1; +} + + +# Local Variables: +# mode:Perl +# End: diff --git a/ACE/bin/mpc.pl b/ACE/bin/mpc.pl new file mode 100755 index 00000000000..c9a7e37d796 --- /dev/null +++ b/ACE/bin/mpc.pl @@ -0,0 +1,89 @@ +eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' + & eval 'exec perl -w -S $0 $argv:q' + if 0; + +# ****************************************************************** +# Author: Chad Elliott +# Date: 6/17/2002 +# $Id$ +# ****************************************************************** + +# ****************************************************************** +# Pragma Section +# ****************************************************************** + +require 5.006; + +use strict; +use Config; +use FindBin; +use File::Spec; +use File::Basename; + +my($basePath) = $FindBin::Bin; +if ($^O eq 'VMS') { + $basePath = File::Spec->rel2abs(dirname($0)) if ($basePath eq ''); + $basePath = VMS::Filespec::unixify($basePath); +} +$basePath .= '/MakeProjectCreator'; +unshift(@INC, $basePath . '/modules'); + +my($mpcroot) = $ENV{MPC_ROOT}; +my($mpcpath) = (defined $mpcroot ? $mpcroot : + dirname(dirname($basePath)) . '/MPC'); +unshift(@INC, $mpcpath . '/modules'); + +if (defined $mpcroot) { + print STDERR "MPC_ROOT was set to $mpcroot.\n"; +} + +if (! -d "$mpcpath/modules") { + print STDERR "ERROR: Unable to find the MPC modules in $mpcpath.\n"; + if (defined $mpcroot) { + print STDERR "Your MPC_ROOT environment variable does not point to a ", + "valid MPC location.\n"; + } + else { + print STDERR "You can set the MPC_ROOT environment variable to the ", + "location of MPC.\n"; + } + exit(255); +} + +require MPC; + +# ************************************************************ +# Data Section +# ************************************************************ + +my(@creators) = ('GNUACEProjectCreator', + 'BorlandProjectCreator', + ); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub getBasePath { + return $mpcpath; +} + +# ************************************************************ +# Main Section +# ************************************************************ + +## Allocate a driver +my($driver) = new MPC(); + +## Add our creators to the front of the list +my($creators) = $driver->getCreatorList(); +unshift(@$creators, @creators); + +## Add the mpc path to the include paths, but preserve +## the original @ARGV as it is included in the output of +## most of the workspace creators. +my(@args) = ('-include', "$mpcpath/config", + '-include', "$mpcpath/templates", @ARGV); + +## Execute the driver +exit($driver->execute($basePath, basename($0), \@args)); diff --git a/ACE/bin/msvc_cidlc.pl b/ACE/bin/msvc_cidlc.pl new file mode 100755 index 00000000000..3d7283b3385 --- /dev/null +++ b/ACE/bin/msvc_cidlc.pl @@ -0,0 +1,151 @@ +# $Id$ +# Win32 auto_compile script. +if (!$ENV{CIAO_ROOT}) { + $CIAO_ROOT = getcwd ()."TAO\CIAO\\"; + warn "CIAO_ROOT not defined, defaulting to CIAO_ROOT=$CIAO_ROOT"; +} +else { + $ACE_ROOT = $ENV{ACE_ROOT}; + $CIAO_ROOT = $ENV{CIAO_ROOT}; +} + +use lib "$ENV{ACE_ROOT}/bin"; + +use File::Find; +use PerlACE::Run_Test; +use Cwd; + +@directories = (); + +$debug = 0; +$verbose = 0; +$print_status = 0; +$Ignore_errors = 0; # By default, bail out if an error occurs. +$Build_All = 1; +$Build_Cmd = "/BUILD"; +$use_custom_dir = 0; +$useenv = ''; +$vc7 = 0; +$Build_Debug = 1; + +# Build +sub Build ($$) +{ + my ($project, $config) = @_; + + if ($debug == 1) { + print "$project\n"; + return 0; + } + else { + print "Auto_compiling $project : $config\n"; + + print "Building $project $config\n" if $verbose; + + return system ("msdev.com $project /MAKE \"$config\" $Build_Cmd $useenv"); + } +} + +# Build +sub Build_VC7 ($$) +{ + my ($project, $config) = @_; + + if ($debug == 1) { + print "$project\n"; + return 0; + } + else { + print "Auto_compiling $project : $config\n"; + + print "Building $project $config\n" if $verbose; + + return system ("devenv.com $project $Build_Cmd $config $useenv"); + } +} + + + +sub Find_Sln (@) +{ + my (@dir) = @_; + @array = (); + + sub wanted_sln { + $array[++$#array] = + $File::Find::name if ($File::Find::name =~ /\.sln$/i); + } + + find (\&wanted_sln, @dir); + + print "List of sln's \n" if ($verbose == 1); + return @array; +} + +sub Build_All () +{ + my @configurations = Find_Sln (@directories); + + print STDERR "Building selected projects\n" if ($print_status == 1); + print "\nmsvc_cidlc: Building selected projects\n"; + + $count = 0; + foreach $c (@configurations) { + print STDERR "Configuration ".$count++." of ".$#configurations."\n" if ($print_status == 1); + if ($Build_Debug) { + $Status = Build_VC7 ($c, "debug"); + return if $Status != 0 && !$Ignore_errors; + } + } + print STDERR "ERROR: No configurations have been build\n" if ($count == 0); +} + + +## Parse command line argument +while ( $#ARGV >= 0 && $ARGV[0] =~ /^(-|\/)/ ) +{ + if ($ARGV[0] =~ '-vc7') { # Use VC7 project and solution files. + print "Using VC7 files\n" if ( $verbose ); + $vc7 = 1; + $proj_ext = '.vcproj'; + } + elsif ($ARGV[0] =~ '-vc8') { # Use VC8 project and solution files. + print "Using VC8 files\n" if ( $verbose ); + $vc7 = 1; # VC8 is like VC7 + $proj_ext = '.vcproj'; + } + elsif ($ARGV[0] =~ '-v') { # verbose mode + $verbose = 1; + } + elsif ($ARGV[0] =~ '-s') { # status messages + $print_status = 1; + } + elsif ($ARGV[0] =~ '-clean') { # Clean + print "Cleaning all\n" if ( $verbose ); + $Build_Cmd = "/CLEAN"; + } + elsif ($ARGV[0] =~ '-(\?|h)') { # Help information + print "Options\n"; + print "-vc7 = Use MSVC 7 toolset\n"; + print "-vc8 = Use MSVC 8 toolset\n"; + print "-clean = Clean\n"; + exit; + } + else { + warn "$0: unknown option $ARGV[0]\n"; + die -1; + } + shift; +} + +if ($#directories < 0) { + print "Using VC7 files\n" if ( $verbose ); + push @directories, ("$CIAO_ROOT\\CIDLC"); +} + +print "msvc_cidlc: Begin\n"; +print STDERR "Beginning CIDLC Build\n" if ($print_status == 1); +Build_All (); + +print "msvc_cidlc: End\n"; +print STDERR "End\n" if ($print_status == 1); diff --git a/ACE/bin/msvc_mpc_auto_compile.pl b/ACE/bin/msvc_mpc_auto_compile.pl new file mode 100755 index 00000000000..e8d33a815c3 --- /dev/null +++ b/ACE/bin/msvc_mpc_auto_compile.pl @@ -0,0 +1,363 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# Win32 auto_compile script. + +use File::Find; +use Cwd; + +if (!$ENV{ACE_ROOT}) { + $ACE_ROOT = getcwd ()."\\"; + warn "ACE_ROOT not defined, defaulting to ACE_ROOT=$ACE_ROOT"; +} +else { + $ACE_ROOT = $ENV{ACE_ROOT}; +} + +@directories = (); + + +@ace_core_dirs = ("$ACE_ROOT\\ace", + "$ACE_ROOT\\Kokyu", + "$ACE_ROOT\\ACEXML", + "$ACE_ROOT\\protocols", + "$ACE_ROOT\\examples", + "$ACE_ROOT\\tests"); + +@tao_core_dirs = ("$ACE_ROOT\\apps", + "$ACE_ROOT\\TAO\\TAO_IDL", + "$ACE_ROOT\\TAO\\tao", + "$ACE_ROOT\\TAO\\tests"); + +@ciao_core_dirs = ("$ACE_ROOT\\TAO\\orbsvcs\\orbsvcs", # CIAO dependancy + "$ACE_ROOT\\TAO\\CIAO"); + +$debug = 0; +$verbose = 0; +$print_status = 0; +$Ignore_errors = 0; # By default, bail out if an error occurs. +$Build_Debug = 0; +$Build_Release = 0; +$build_all = 0; +$Build_Cmd = "/BUILD"; +$use_custom_dir = 0; +$useenv = ''; +$vc7 = 0; + +# Build_Config takes in a string of the type "project--configuration" and +# runs msdev to build it. +# sub Build_Config ($) +#{ +# my ($arg) = @_; +# my ($project, $config) = split /--/, $arg; +# +# return Build ($project, $config); +#} + +# Build +sub Build ($$) +{ + my ($project, $config) = @_; + + if ($debug == 1) { + print "$project\n"; + return 0; + } + else { + print "Auto_compiling $project : $config\n"; + + print "Building $project $config\n" if $verbose; + + return system ("msdev.com $project /MAKE \"$config\" $Build_Cmd $useenv"); + } +} + +# Build +sub Build_VC7 ($$) +{ + my ($project, $config) = @_; + + if ($debug == 1) { + print "$project\n"; + return 0; + } + else { + print "Auto_compiling $project : $config\n"; + + print "Building $project $config\n" if $verbose; + + return system ("devenv.com $project $Build_Cmd $config $useenv"); + } +} + +sub Find_Dsw (@) +{ + my (@dir) = @_; + @array = (); + + sub wanted_dsw { + $array[++$#array] = + $File::Find::name if ($File::Find::name =~ /\.dsw$/i); + } + + find (\&wanted_dsw, @dir); + + print "List of dsw's \n" if ($verbose == 1); + return @array; +} + +sub Find_Sln (@) +{ + my (@dir) = @_; + @array = (); + + sub wanted_sln { + $array[++$#array] = + $File::Find::name if ($File::Find::name =~ /\.sln$/i); + } + + find (\&wanted_sln, @dir); + + print "List of sln's \n" if ($verbose == 1); + return @array; +} + +# Only builds the core libraries. +sub Build_Custom () +{ + print STDERR "Building Custom\n"; + print "Building Custom directories specified\n";# if ($verbose == 1); + + print "Build " if ($verbose); + print "Debug " if ($verbose) && ($Build_Debug); + print "Release " if ($verbose) && ($Build_Release); + print "\n" if ($verbose); + + my @custom_list = Find_Dsw (@directories); + + print "List now is @custom_list \n"; + foreach $c (@custom_list) { + print "List now is $c \n"; + if ($Build_Debug) { + $Status = Build ($c, "ALL - Win32 Debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build ($c, "ALL - Win32 Release"); + return if $Status != 0 && !$Ignore_errors; + } + } +} + +# Build all examples and directories +sub Build_All () +{ + push @directories, @ace_core_dirs; + push @directories, @tao_core_dirs; + push @directories, @ciao_core_dirs; + + print STDERR "First pass (libraries)\n" if ($print_status == 1); + print "\nmsvc_auto_compile: First Pass CORE (libraries)\n"; + + Build_Custom (); + + my @new_directory_search = "$ACE_ROOT"; + + my @configurations = Find_Dsw (@new_directory_search); + + print STDERR "Second pass (for other things)\n" if ($print_status == 1); + print "\nmsvc_mpc_auto_compile: Second Pass (rest of the stuff)\n"; + + foreach $c (@configurations) { + print "\nUsing $c for compilation\n"; + if ($Build_Debug) { + $Status = Build ($c, "ALL - Win32 Debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build ($c, "ALL - Win32 Release"); + return if $Status != 0 && !$Ignore_errors; + } + } +} + + +# Only builds the core libraries. +sub Build_Custom_VC7 () +{ + print STDERR "Building Custom\n"; + print "Building Custom directories specified\n";# if ($verbose == 1); + + print "Build " if ($verbose); + print "Debug " if ($verbose) && ($Build_Debug); + print "Release " if ($verbose) && ($Build_Release); + print "\n" if ($verbose); + + my @custom_list = Find_Sln (@directories); + + print "List now is @custom_list \n"; + foreach $c (@custom_list) { + print "List now is $c \n"; + if ($Build_Debug) { + $Status = Build_VC7 ($c, "debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build_VC7 ($c, "release"); + return if $Status != 0 && !$Ignore_errors; + } + } +} + +# Build all examples and directories +sub Build_All_VC7 () +{ + push @directories, @ace_core_dirs; + push @directories, @tao_core_dirs; + push @directories, @ciao_core_dirs; + + print STDERR "First pass (libraries)\n" if ($print_status == 1); + print "\nmsvc_auto_compile: First Pass CORE (libraries)\n"; + + Build_Custom_VC7 (); + + my @new_directory_search = "$ACE_ROOT"; + + my @configurations = Find_Sln (@new_directory_search); + + print STDERR "Second pass (for other things)\n" if ($print_status == 1); + print "\nmsvc_mpc_auto_compile: Second Pass (rest of the stuff)\n"; + + foreach $c (@configurations) { + print "\nUsing $c for compilation\n"; + if ($Build_Debug) { + $Status = Build_VC7 ($c, "debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build_VC7 ($c, "release"); + return if $Status != 0 && !$Ignore_errors; + } + } +} + +## Parse command line argument +while ( $#ARGV >= 0 && $ARGV[0] =~ /^(-|\/)/ ) +{ + if ($ARGV[0] =~ '-k') { # Ignore errors + print "Ignore errors\n" if ( $verbose ); + $Ignore_errors = 1; + } + elsif ($ARGV[0] =~ /^-d$/i) { # debug + $debug = 1; + } + elsif ($ARGV[0] =~ '-vc7') { # Use VC7 project and solution files. + print "Using VC7 files\n" if ( $verbose ); + $vc7 = 1; + } + elsif ($ARGV[0] =~ '-vc8') { # Use VC8 project and solution files. + print "Using VC8 files\n" if ( $verbose ); + $vc7 = 1; # vc8 is like vc7 + } + elsif ($ARGV[0] =~ '-v') { # verbose mode + $verbose = 1; + } + elsif ($ARGV[0] =~ '-s') { # status messages + $print_status = 1; + } + elsif ($ARGV[0] =~ '-u') { # USEENV + print "Using Environment\n" if ($verbose); + $useenv = '/USEENV'; + } + elsif ($ARGV[0] =~ '-ACE') {# Build ACE and its tests + print "Building ACE\n" if ( $verbose ); + $use_custom_dir = 1; + push @directories, @ace_core_dirs; + } + elsif ($ARGV[0] =~ '-TAO') {# Build TAO and its tests + print "Building TAO\n" if ( $verbose ); + $use_custom_dir = 1; + push @directories, @ace_core_dirs; + push @directories, @tao_core_dirs; + } + elsif ($ARGV[0] =~ '-CIAO') {# Build the CIAO and related + # libraries + print "Building only CIAO\n" if ( $verbose ); + $use_custom_dir = 1; + push @directories, @ace_core_dirs; + push @directories, @tao_core_dirs; + push @directories, @ciao_core_dirs; + } + elsif ($ARGV[0] =~ '-ALL') {# Build the CIAO and related + # libraries + print "Building ALL \n" if ( $verbose ); + $build_all = 1; + } + elsif ($ARGV[0] =~ '-dir') { # Compile only a specific directory + shift; + print "Adding directory $ARGV[0]\n" if ( $verbose ); + $use_custom_dir = 1; + push @directories, $ARGV[0]; + } + elsif ($ARGV[0] =~ '-rebuild') { # Rebuild all + print "Rebuild all\n" if ( $verbose ); + $Build_Cmd = "/REBUILD"; + } + elsif ($ARGV[0] =~ '-clean') { # Clean + print "Cleaning all\n" if ( $verbose ); + $Build_Cmd = "/CLEAN"; + } + elsif ($ARGV[0] =~ '-Debug') { # Debug versions + print "Building Debug Version\n" if ( $verbose ); + $Build_Debug = 1; + } + elsif ($ARGV[0] =~ '-Release') { # Release versions + print "Building Release Version\n" if ( $verbose ); + $Build_Release = 1; + } + elsif ($ARGV[0] =~ '-(\?|h)') { # Help information + print "Options\n"; + print "-d = Debug (only print out projects)\n"; + print "-k = Ignore Errors\n"; + print "-v = Script verbose Mode\n"; + print "-s = Print status messages to STDERR\n"; + print "-u = Tell MSVC to use the environment\n"; + print "-vc7 = Use MSVC 7 toolset\n"; + print "-vc8 = Use MSVC 8 toolset\n"; + print "\n"; + print "-CORE = Build ACE+TAO+CIAO core \n"; + print "-ACE = Build ACE and its tests\n"; + print "-TAO = Build TAO and its tests\n"; + print "-dir <dir> = Compile custom directories\n"; + print "\n"; + print "-rebuild = Rebuild All\n"; + print "-clean = Clean\n"; + print "-Debug = Compile Debug versions\n"; + print "-Release = Compile Release versions\n"; + exit; + } + else { + warn "$0: unknown option $ARGV[0]\n"; + die -1; + } + shift; +} + +if (!$Build_Debug && !$Build_Release) { + $Build_Debug = 1; + $Build_Release = 1; +} + +print "MPC version of msvc_mpc_auto_compile: Begin\n"; +if ($vc7) { + Build_All_VC7 if ($build_all && !$use_custom_dir); + Build_Custom_VC7 if $use_custom_dir; +} +else { + Build_All if ($build_all && !$use_custom_dir); + Build_Custom if $use_custom_dir; +} +print "msvc_mpc_auto_compile: End\n"; +print STDERR "End\n" if ($print_status == 1); diff --git a/ACE/bin/msvc_static_compile.pl b/ACE/bin/msvc_static_compile.pl new file mode 100755 index 00000000000..1580302d28e --- /dev/null +++ b/ACE/bin/msvc_static_compile.pl @@ -0,0 +1,410 @@ +# $Id$ +# Win32 auto_compile script. +if (!$ENV{ACE_ROOT}) { + $ACE_ROOT = getcwd ()."\\"; + warn "ACE_ROOT not defined, defaulting to ACE_ROOT=$ACE_ROOT"; +} +else { + $ACE_ROOT = $ENV{ACE_ROOT}; +} + +use lib "$ENV{ACE_ROOT}/bin"; + +use File::Find; +use PerlACE::Run_Test; +use Cwd; + +@directories = (); + +@ace_dirs = ("$ACE_ROOT\\ace", + "$ACE_ROOT\\ACEXML\\common", + "$ACE_ROOT\\ACEXML\\parser", + "$ACE_ROOT\\ACEXML\\apps", + "$ACE_ROOT\\ACEXML\\tests", + "$ACE_ROOT\\ACEXML\\examples", + "$ACE_ROOT\\apps", + "$ACE_ROOT\\ASNMP", + "$ACE_ROOT\\examples", + "$ACE_ROOT\\netsvcs", + "$ACE_ROOT\\performance-tests", + "$ACE_ROOT\\tests", + "$ACE_ROOT\\websvcs"); + +$debug = 0; +$verbose = 0; +$print_status = 0; +$Ignore_errors = 0; # By default, bail out if an error occurs. +$Build_LIB = 0; +$Build_Debug = 0; +$Build_Release = 0; +$Build_All = 1; +$build_core_only = 0; +$Build_Cmd = "/BUILD"; +$use_custom_dir = 0; +$useenv = ''; +$vc7 = 0; +$name_mod = ''; +$mod_name = 0; +$proj_ext = '.dsp'; + +# Build +sub Build ($$) +{ + my ($project, $config) = @_; + + if ($debug == 1) { + print "$project\n"; + return 0; + } + else { + print "Auto_compiling $project : $config\n"; + + print "Building $project $config\n" if $verbose; + + return system ("msdev.com $project /MAKE \"$config\" $Build_Cmd $useenv"); + } +} + +# Build +sub Build_VC7 ($$) +{ + my ($project, $config) = @_; + + if ($debug == 1) { + print "$project\n"; + return 0; + } + else { + print "Auto_compiling $project : $config\n"; + + print "Building $project $config\n" if $verbose; + + return system ("devenv.com $project $Build_Cmd $config $useenv"); + } +} + +sub Find_Dsw (@) +{ + my (@dir) = @_; + @array = (); + + sub wanted_dsw { + $array[++$#array] = + $File::Find::name if ($File::Find::name =~ /\.dsw$/i); + } + + find (\&wanted_dsw, @dir); + + print "List of dsw's \n" if ($verbose == 1); + return @array; +} + +sub Find_Sln (@) +{ + my (@dir) = @_; + @array = (); + + sub wanted_sln { + $array[++$#array] = + $File::Find::name if ($File::Find::name =~ /\.sln$/i); + } + + find (\&wanted_sln, @dir); + + print "List of sln's \n" if ($verbose == 1); + return @array; +} + +sub Rename_Files ($$) +{ + my ($target) = shift; + my ($newext) = shift; + my (@array) = (); + + sub wanted_file { + my ($text) = shift; + my ($next) = shift; + if ($File::Find::name =~ /^(.*)$text$/i) { + my ($newname) = $1 . $next; + rename ($File::Find::name, $newname); + } + } + + find (sub { wanted_file ($target, $newext) }, $ACE_ROOT); +} + +# Only builds the core libraries. +sub Build_Core () +{ + print STDERR "Building Core of ACE/TAO\n" if ($print_status == 1); + print "\nmsvc_static_compile: Building Core of ACE/TAO\n"; + + print "Build \n" if ($verbose); + print "Debug " if ($verbose) && ($Build_Debug); + print "Release " if ($verbose) && ($Build_Release); + print "LIB " if ($verbose) && ($Build_LIB); + print "\n" if ($verbose); + + my @core_list = (); + + if ($Build_LIB) { + push (@file_list, "/bin/msvc_static_order.lst"); + + foreach my$test_lst (@file_list) { + my $config_list = new PerlACE::ConfigList; + $config_list->load ($ACE_ROOT.$test_lst); + + foreach $test ($config_list->valid_entries ()) { + if ($mod_name) { + @plist = split (/\//, $test); + $fname = pop @plist; + $fname_mod = $name_mod; + $fname_mod =~ s/\*/$fname/; + push @plist,($fname_mod); + push (@core_list, join('/', @plist) . $proj_ext); + } + else { + push (@core_list, $test . $proj_ext); + } + } + } + + + if ( $vc7 ) { + foreach $c (@core_list) { + if ($Build_Debug) { + $Status = Build_VC7 ($c, "debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build_VC7 ($c, "release"); + return if $Status != 0 && !$Ignore_errors; + } + } + } + else { + foreach $c (@core_list) { + if ($Build_Debug) { + $Status = Build ($c, "ALL - Win32 Debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build ($c, "ALL - Win32 Release"); + return if $Status != 0 && !$Ignore_errors; + } + } + } + } +} + +sub Build_All () +{ + my @configurations = Find_Dsw (@directories); + + print STDERR "Building selected projects\n" if ($print_status == 1); + print "\nmsvc_static_compile: Building selected projects\n"; + + $count = 0; + foreach $c (@configurations) { + print STDERR "Configuration ".$count++." of ".$#configurations."\n" if ($print_status == 1); + if ($Build_Debug) { + $Status = Build ($c, "ALL - Win32 Debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build ($c, "ALL - Win32 Release"); + return if $Status != 0 && !$Ignore_errors; + } + } +} + +sub Build_All_VC7 () +{ + my @configurations = Find_Sln (@directories); + + print STDERR "Building selected projects\n" if ($print_status == 1); + print "\nmsvc_static_compile: Building selected projects\n"; + + $count = 0; + foreach $c (@configurations) { + print STDERR "Configuration ".$count++." of ".$#configurations."\n" if ($print_status == 1); + if ($Build_Debug) { + $Status = Build_VC7 ($c, "debug"); + return if $Status != 0 && !$Ignore_errors; + } + if ($Build_Release) { + $Status = Build_VC7 ($c, "release"); + return if $Status != 0 && !$Ignore_errors; + } + } +} + + +## Parse command line argument +while ( $#ARGV >= 0 && $ARGV[0] =~ /^(-|\/)/ ) +{ + if ($ARGV[0] =~ '-k') { # Ignore errors + print "Ignore errors\n" if ( $verbose ); + $Ignore_errors = 1; + } + elsif ($ARGV[0] =~ /^-d$/i) { # debug + $debug = 1; + } + elsif ($ARGV[0] =~ '-vc7') { # Use VC7 project and solution files. + print "Using VC7 files\n" if ( $verbose ); + $vc7 = 1; + $proj_ext = '.vcproj'; + } + elsif ($ARGV[0] =~ '-vc8') { # Use VC8 project and solution files. + print "Using VC8 files\n" if ( $verbose ); + $vc7 = 1; # VC8 is like VC7 + $proj_ext = '.vcproj'; + } + elsif ($ARGV[0] =~ '-v') { # verbose mode + $verbose = 1; + } + elsif ($ARGV[0] =~ '-name_modifier') { # use MPC name_modifier for project + shift; + print "Setting name_modifier $ARGV[0]\n" if ( $verbose ); + $name_mod = $ARGV[0]; + $mod_name = 1; + } + elsif ($ARGV[0] =~ '-s') { # status messages + $print_status = 1; + } + elsif ($ARGV[0] =~ '-u') { # USEENV + print "Using Environment\n" if ($verbose); + $useenv = '/USEENV'; + } + elsif ($ARGV[0] =~ '-CORE') { # Build the core of ace/tao + print "Building only Core\n" if ( $verbose ); + $build_core_only = 1; + } + elsif ($ARGV[0] =~ '-ACE') { # Build ACE and its programs + print "Building ACE\n" if ( $verbose ); + $use_custom_dir = 1; + push @directories, @ace_dirs; + } + elsif ($ARGV[0] =~ '-TAO') { # Build TAO and its programs + print "Building TAO\n" if ( $verbose ); + $use_custom_dir = 1; + # Other tests depend on the lib in this dir so we need to force it + # to the front of the build list. This is pretty ugly. + push @directories, ("$ACE_ROOT\\TAO\\orbsvcs\\tests\\Notify\\lib"); + push @directories, ("$ACE_ROOT\\TAO"); + } + elsif ($ARGV[0] =~ '-dir') { # Compile only a specific directory + shift; + print "Adding directory $ARGV[0]\n" if ( $verbose ); + $use_custom_dir = 1; + push @directories, $ARGV[0]; + } + elsif ($ARGV[0] =~ '-rebuild') { # Rebuild all + print "Rebuild all\n" if ( $verbose ); + $Build_Cmd = "/REBUILD"; + } + elsif ($ARGV[0] =~ '-clean') { # Clean + print "Cleaning all\n" if ( $verbose ); + $Build_Cmd = "/CLEAN"; + } + elsif ($ARGV[0] =~ '-Debug') { # Debug versions + print "Building Debug Version\n" if ( $verbose ); + $Build_Debug = 1; + $Build_All = 0; + } + elsif ($ARGV[0] =~ '-Release') { # Release versions + print "Building Release Version\n" if ( $verbose ); + $Build_Release = 1; + $Build_All = 0; + } + elsif ($ARGV[0] =~ '-LIB') { # Build LIB only + print "Build LIB only\n" if ( $verbose ); + $Build_LIB = 1; + $Build_All = 0; + } + elsif ($ARGV[0] =~ '-(\?|h)') { # Help information + print "Options\n"; + print "-d = Debug (only print out projects)\n"; + print "-k = Ignore Errors\n"; + print "-v = Script verbose Mode\n"; + print "-s = Print status messages to STDERR\n"; + print "-u = Tell MSVC to use the environment\n"; + print "-vc7 = Use MSVC 7 toolset\n"; + print "-vc8 = Use MSVC 8 toolset\n"; + print "-name_modifier <mod> = Use MPC name_modifier to match projects\n"; + print "\n"; + print "-CORE = Build the Core libraries\n"; + print "-ACE = Build ACE and its programs\n"; + print "-TAO = Build TAO and its programs\n"; + print "-dir <dir> = Compile custom directories\n"; + print "\n"; + print "-rebuild = Rebuild All\n"; + print "-clean = Clean\n"; + print "-Debug = Compile Debug versions\n"; + print "-Release = Compile Release versions\n"; + print "-LIB = Comple LIB Configurations\n"; + exit; + } + else { + warn "$0: unknown option $ARGV[0]\n"; + die -1; + } + shift; +} + +if (!$Build_DLL && !$Build_LIB) { + $Build_DLL = 1; + $Build_LIB = 1; +} + +if (!$Build_Debug && !$Build_Release) { + $Build_Debug = 1; + $Build_Release = 1; +} + +if ($#directories < 0) { + @directories = ($ACE_ROOT); +} + +print "msvc_static_compile: Begin\n"; +print STDERR "Beginning Core Build\n" if ($print_status == 1); +if (!$use_custom_dir || $build_core_only) { + if ($vc7) { + ## devenv is too smart for it's own good. When a .vcproj is specified, + ## as is done when building the CORE, it will find the solution to which + ## the .vcproj belongs and begin to build additional portions of the + ## solution. This is not what we want as dependencies are not set up + ## between library projects. + my($sln) = '.sln'; + my($core_sln) = $sln . '.build_core'; + + Rename_Files ($sln, $core_sln); + + foreach my $sig ('INT', 'TERM') { + $SIG{$sig} = sub { print STDERR "Renaming solution files, please be patient...\n"; + Rename_Files ($core_sln, $sln); + exit(1); }; + } + + Build_Core (); + + Rename_Files ($core_sln, $sln); + + foreach my $sig ('INT', 'TERM') { + $SIG{$sig} = 'DEFAULT'; + } + } + else { + Build_Core (); + } +} +print STDERR "Beginning Full Build\n" if ($print_status == 1); +if ( $vc7 ) { + Build_All_VC7 if !$build_core_only; +} +else { + Build_All if !$build_core_only; +} + +print "msvc_static_compile: End\n"; +print STDERR "End\n" if ($print_status == 1); diff --git a/ACE/bin/msvc_static_order.lst b/ACE/bin/msvc_static_order.lst new file mode 100644 index 00000000000..23815a851d3 --- /dev/null +++ b/ACE/bin/msvc_static_order.lst @@ -0,0 +1,140 @@ +# $Id$ +# +# This file lists the project files that must be build first in a static +# build using msvc_static_compile.pl + +ace/ace +Kokyu/Kokyu +ACEXML/parser/parser/ACEXML_Parser +ACEXML/common/ACEXML +apps/gperf/src/gperf +TAO/TAO_IDL/TAO_IDL_BE +TAO/TAO_IDL/TAO_IDL_FE +TAO/TAO_IDL/TAO_IDL_EXE +TAO/tao/TAO +TAO/tao/AnyTypeCode +TAO/tao/CodecFactory +TAO/tao/Codeset +TAO/tao/PI +TAO/tao/PortableServer +TAO/tao/PI_Server +TAO/tao/Valuetype +TAO/tao/ObjRefTemplate +TAO/tao/IORInterceptor +TAO/tao/DynamicAny +TAO/tao/IORManipulation +TAO/tao/IORTable +TAO/tao/Messaging +TAO/tao/DynamicInterface +TAO/tao/Strategies +TAO/tao/RTCORBA +TAO/tao/RTPortableServer +TAO/tao/Utils +TAO/tao/RTScheduler +TAO/tao/IFR_Client +TAO/tao/TypeCodeFactory +TAO/tao/ImR_Client +TAO/tao/CSD_Framework +TAO/tao/CSD_ThreadPool +TAO/orbsvcs/orbsvcs/Svc_Utils +TAO/orbsvcs/orbsvcs/CosNaming_IDL +TAO/orbsvcs/orbsvcs/CosNaming +TAO/orbsvcs/orbsvcs/CosNaming_Skel +TAO/orbsvcs/orbsvcs/CosNaming_Serv +TAO/orbsvcs/orbsvcs/CosProperty_IDL +TAO/orbsvcs/orbsvcs/CosProperty +TAO/orbsvcs/orbsvcs/CosProperty_Skel +TAO/orbsvcs/orbsvcs/CosProperty_Serv +TAO/orbsvcs/orbsvcs/CosTrading_IDL +TAO/orbsvcs/orbsvcs/CosTrading +TAO/orbsvcs/orbsvcs/CosTrading_Skel +TAO/orbsvcs/orbsvcs/CosTrading_Serv +TAO/orbsvcs/orbsvcs/HTIOP +TAO/orbsvcs/orbsvcs/AV +TAO/orbsvcs/orbsvcs/ETCL +TAO/orbsvcs/orbsvcs/RTCosScheduling +TAO/orbsvcs/orbsvcs/RTEvent +TAO/orbsvcs/orbsvcs/RTEvent_Skel +TAO/orbsvcs/orbsvcs/RTEvent_Serv +TAO/orbsvcs/orbsvcs/RTSched +TAO/orbsvcs/orbsvcs/RTSchedEvent +TAO/orbsvcs/orbsvcs/CosEvent_IDL +TAO/orbsvcs/orbsvcs/CosEvent +TAO/orbsvcs/orbsvcs/CosEvent_Skel +TAO/orbsvcs/orbsvcs/CosEvent_Serv +TAO/orbsvcs/orbsvcs/RTKokyuEvent +TAO/orbsvcs/orbsvcs/CosConcurrency_IDL +TAO/orbsvcs/orbsvcs/CosConcurrency +TAO/orbsvcs/orbsvcs/CosConcurrency_Skel +TAO/orbsvcs/orbsvcs/CosConcurrency_Serv +TAO/orbsvcs/orbsvcs/CosLifeCycle +TAO/orbsvcs/orbsvcs/CosTime +TAO/orbsvcs/orbsvcs/CosNotification_IDL +TAO/orbsvcs/orbsvcs/CosNotification +TAO/orbsvcs/orbsvcs/CosNotification_Skel +TAO/orbsvcs/orbsvcs/CosNotification_Serv +TAO/orbsvcs/orbsvcs/CosNotification_Persist +TAO/orbsvcs/orbsvcs/DsLogAdmin_IDL +TAO/orbsvcs/orbsvcs/DsLogAdmin +TAO/orbsvcs/orbsvcs/DsLogAdmin_Skel +TAO/orbsvcs/orbsvcs/DsLogAdmin_Serv +TAO/orbsvcs/orbsvcs/DsEventLogAdmin_IDL +TAO/orbsvcs/orbsvcs/DsEventLogAdmin +TAO/orbsvcs/orbsvcs/DsEventLogAdmin_Skel +TAO/orbsvcs/orbsvcs/DsEventLogAdmin_Serv +TAO/orbsvcs/orbsvcs/DsNotifyLogAdmin_IDL +TAO/orbsvcs/orbsvcs/DsNotifyLogAdmin +TAO/orbsvcs/orbsvcs/DsNotifyLogAdmin_Skel +TAO/orbsvcs/orbsvcs/DsNotifyLogAdmin_Serv +TAO/orbsvcs/orbsvcs/PortableGroup +TAO/orbsvcs/orbsvcs/FTORB_Utils +TAO/orbsvcs/orbsvcs/FT_ClientORB +TAO/orbsvcs/orbsvcs/FT_ServerORB +TAO/orbsvcs/orbsvcs/FtRtEvent +TAO/orbsvcs/orbsvcs/FaultTolerance +TAO/orbsvcs/orbsvcs/CosLoadBalancing +TAO/orbsvcs/orbsvcs/IFRService +TAO/orbsvcs/orbsvcs/RTCORBAEvent +TAO/orbsvcs/orbsvcs/RT_Notification +TAO/orbsvcs/orbsvcs/RTEventLogAdmin_IDL +TAO/orbsvcs/orbsvcs/RTEventLogAdmin +TAO/orbsvcs/orbsvcs/RTEventLogAdmin_Skel +TAO/orbsvcs/orbsvcs/RTEventLogAdmin_Serv +TAO/orbsvcs/orbsvcs/Security +TAO/orbsvcs/Naming_Service/Naming_Service +TAO/orbsvcs/ImplRepo_Service/ImR_Activator_IDL +TAO/orbsvcs/ImplRepo_Service/ImR_Locator_IDL +TAO/orbsvcs/ImplRepo_Service/ImR_Activator +TAO/orbsvcs/ImplRepo_Service/ImR_Activator_Service +TAO/orbsvcs/ImplRepo_Service/ImR_Locator +TAO/orbsvcs/ImplRepo_Service/ImR_Locator_Service +TAO/orbsvcs/ImplRepo_Service/tao_imr +TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager_Lib +TAO/orbsvcs/orbsvcs/FTRT_ClientORB +TAO/orbsvcs/tests/Concurrency/CC_client +TAO/orbsvcs/tests/Event/lib/Event_Test_Lib +TAO/orbsvcs/tests/Event/Mcast/Common/ECMcastTests_lib +TAO/orbsvcs/tests/Trading/Trading_Test_Lib +TAO/orbsvcs/examples/CosEC/RtEC_Based/lib/CosEC_RtEC_Based_lib +TAO/orbsvcs/performance-tests/RTEvent/lib/RTEC_Perf +TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test_Lib +TAO/tests/Smart_Proxies/Collocation/SP_Collocation_TestStubsLib +TAO/tests/Collocation/Collocation_Test_Stub +TAO/examples/POA/Generic_Servant/POA_Generic_Servant_Lib +TAO/examples/Simple/time-date/Simple_Time_Date_Lib +TAO/docs/tutorials/Quoter/idl/Quoter_Idl_Lib +TAO/performance-tests/RTCorba/Multiple_Endpoints/Common/RTCORBA_Common +tests/Test_Output +tests/DLL_Test_Parent +TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test_Lib +performance-tests/Synch-Benchmarks/Synch_Lib/Synch_Lib +examples/Service_Configurator/Misc/Service_Configurator_Misc_Timer +examples/Timer_Queue/Timer_Queue_Library +ASNMP/asnmp/asnmp_lib +netsvcs/lib/netsvcs +netsvcs/clients/Naming/Client/Netsvsc_Client_Test_Lib +netsvcs/clients/Naming/Dump_Restore/Netsvcs_Dump_Restore_Lib +websvcs/lib/websvcs +protocols/ace/HTBP/HTBP +protocols/ace/RMCast/RMCast +protocols/ace/TMCast/TMCast diff --git a/ACE/bin/mwc.pl b/ACE/bin/mwc.pl new file mode 100755 index 00000000000..607bccbb8bc --- /dev/null +++ b/ACE/bin/mwc.pl @@ -0,0 +1,89 @@ +eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' + & eval 'exec perl -w -S $0 $argv:q' + if 0; + +# ****************************************************************** +# Author: Chad Elliott +# Date: 6/17/2002 +# $Id$ +# ****************************************************************** + +# ****************************************************************** +# Pragma Section +# ****************************************************************** + +require 5.006; + +use strict; +use Config; +use FindBin; +use File::Spec; +use File::Basename; + +my($basePath) = $FindBin::Bin; +if ($^O eq 'VMS') { + $basePath = File::Spec->rel2abs(dirname($0)) if ($basePath eq ''); + $basePath = VMS::Filespec::unixify($basePath); +} +$basePath .= '/MakeProjectCreator'; +unshift(@INC, $basePath . '/modules'); + +my($mpcroot) = $ENV{MPC_ROOT}; +my($mpcpath) = (defined $mpcroot ? $mpcroot : + dirname(dirname($basePath)) . '/MPC'); +unshift(@INC, $mpcpath . '/modules'); + +if (defined $mpcroot) { + print STDERR "MPC_ROOT was set to $mpcroot.\n"; +} + +if (! -d "$mpcpath/modules") { + print STDERR "ERROR: Unable to find the MPC modules in $mpcpath.\n"; + if (defined $mpcroot) { + print STDERR "Your MPC_ROOT environment variable does not point to a ", + "valid MPC location.\n"; + } + else { + print STDERR "You can set the MPC_ROOT environment variable to the ", + "location of MPC.\n"; + } + exit(255); +} + +require MWC; + +# ************************************************************ +# Data Section +# ************************************************************ + +my(@creators) = ('GNUACEWorkspaceCreator', + 'BorlandWorkspaceCreator', + ); + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub getBasePath { + return $mpcpath; +} + +# ************************************************************ +# Main Section +# ************************************************************ + +## Allocate a driver +my($driver) = new MWC(); + +## Add our creators to the front of the list +my($creators) = $driver->getCreatorList(); +unshift(@$creators, @creators); + +## Add the mpc path to the include paths, but preserve +## the original @ARGV as it is included in the output of +## most of the workspace creators. +my(@args) = ('-include', "$mpcpath/config", + '-include', "$mpcpath/templates", @ARGV); + +## Execute the driver +exit($driver->execute($basePath, basename($0), \@args)); diff --git a/ACE/bin/performance_stats.sh b/ACE/bin/performance_stats.sh new file mode 100755 index 00000000000..85143de5d71 --- /dev/null +++ b/ACE/bin/performance_stats.sh @@ -0,0 +1,199 @@ +#!/bin/sh +# +# $Id$ +# + +if [ $# -lt 2 ]; then + echo "Usage: $0 <ACE_ROOT> <DEST>" + exit 0 +fi + +ACE_ROOT=$1 +DEST=$2 +DATE=`date +%Y/%m/%d-%H:%M` + +COMMON_TESTS="AMI DII DSI Deferred Single_Threaded Thread_Per_Connection Thread_Pool AMH_Single_Threaded" + +SEQUENCE_TESTS="AMI DII DSI Deferred Single_Threaded Thread_Per_Connection Thread_Pool AMH_Single_Threaded" + +SEQ_TEST_TYPE="octet long short char double longlong" + +cd $DEST/source + +/bin/sync +sleep 10 +( + cd $ACE_ROOT/performance-tests/TCP; + ./run_test.pl +) >tcp_test.log 2>&1 + +if grep -q 'Client throughput: ' tcp_test.log; then + ( + echo -n $DATE " "; + awk '/^Client throughput:/ {print $3}' tcp_test.log + ) >> TCP.txt; +fi + +/bin/sync +sleep 10 +( + cd $ACE_ROOT/TAO/performance-tests/Latency/Single_Threaded; + ./default_configuration.pl > $DEST/source/Default.log 2>&1 +) +if grep -q 'Total throughput: ' Default.log; then + ( + echo -n $DATE " "; + awk '/^Total throughput:/ {print $3}' Default.log + ) >> Default.txt +fi + +/bin/sync +sleep 2 +( + cd $ACE_ROOT/TAO/performance-tests/Sequence_Latency/Single_Threaded; + + for i in $SEQ_TEST_TYPE; do + ( + ./default_configuration.pl -t $i > $DEST/source/Sequence_Default_${i}.log 2>&1 + if grep -q 'Total throughput: ' $DEST/source/Sequence_Default_${i}.log; then + ( + echo -n $DATE " "; + awk '/^Total throughput:/ {print $3}' $DEST/source/Sequence_Default_${i}.log + ) >> $DEST/source/Sequence_Default_${i}.txt + fi + ) + done + +) + +for i in $COMMON_TESTS; do + /bin/sync + sleep 10 + ( + cd $ACE_ROOT/TAO/performance-tests/Latency/${i}; + ./run_test.pl > $DEST/source/${i}.log 2>&1 + ) + if grep -q 'Total throughput: ' ${i}.log; then + ( + echo -n $DATE " "; + awk '/^Total throughput:/ {print $3}' $DEST/source/${i}.log + ) >> ${i}.txt + fi +done + +for i in $SEQUENCE_TESTS; do + /bin/sync + sleep 10 + ( + cd $ACE_ROOT/TAO/performance-tests/Sequence_Latency/${i}; + for j in $SEQ_TEST_TYPE; do + ( + ./run_test.pl -t $j > $DEST/source/Sequence_${i}_${j}.log 2>&1 + + if grep -q 'Total throughput: ' $DEST/source/Sequence_${i}_${j}.log; then + ( + echo -n $DATE " "; + awk '/^Total throughput:/ {print $3}' $DEST/source/Sequence_${i}_${j}.log + ) >> $DEST/source/Sequence_${i}_${j}.txt + fi + ) + done + ) + +done + +for i in $COMMON_TESTS TCP Default; do + $ACE_ROOT/bin/generate_performance_chart.sh ${i}.txt ${i}.png "$i" + /bin/cp ${i}.png $DEST/images/${i}.png + /usr/bin/tac ${i}.txt > $DEST/data/${i}.txt + /usr/bin/tail -5 ${i}.txt > $DEST/data/LAST_${i}.txt +done + +for i in $SEQ_TEST_TYPE ; do + $ACE_ROOT/bin/generate_performance_chart.sh Sequence_Default_${i}.txt Sequence_Default_${i}.png "Default Configuration for $i sequences" + /bin/cp Sequence_Default_${i}.png $DEST/images/Sequence_Default_${i}.png + /usr/bin/tac $DEST/source/Sequence_Default_${i}.txt > $DEST/data/Sequence_Default_${i}.txt + /usr/bin/tail -5 $DEST/source/Sequence_Default_${i}.txt > $DEST/data/LAST_Sequence_Default_${i}.txt +done + +for i in $SEQUENCE_TESTS; do +for j in $SEQ_TEST_TYPE; do + $ACE_ROOT/bin/generate_performance_chart.sh Sequence_${i}_${j}.txt Sequence_${i}_${j}.png "Sequence_$i_$j" + /bin/cp Sequence_${i}_${j}.png $DEST/images/Sequence_${i}_${j}.png + /usr/bin/tac Sequence_${i}_${j}.txt > $DEST/data/Sequence_${i}_${j}.txt + /usr/bin/tail -5 Sequence_${i}_${j}.txt > $DEST/data/LAST_Sequence_${i}_${j}.txt +done +done + +gnuplot <<_EOF_ >/dev/null 2>&1 + set xdata time + set timefmt '%Y/%m/%d-%H:%M' + set xlabel 'Date (YYYYMMDD)' + set ylabel 'Throughput (Requests/Second)' + set yrange [0:] + set terminal png small size 800,600 color + set output "/dev/null" + plot 'AMI.txt' using 1:2 title 'AMI' w l + replot 'DII.txt' using 1:2 title 'DII' w l + replot 'DSI.txt' using 1:2 title 'DSI' w l + replot 'Deferred.txt' using 1:2 title 'Deferred' w l + replot 'Single_Threaded.txt' using 1:2 title 'Single_Threaded' w l + replot 'Default.txt' using 1:2 title 'Single_Threaded (Defaults)' w l + replot 'Thread_Per_Connection.txt' using 1:2 title 'Thread_Per_Connection' w l + replot 'Thread_Pool.txt' using 1:2 title 'Thread_Pool' w l + replot 'AMH_Single_Threaded.txt' using 1:2 title 'AMH' w l + replot 'TCP.txt' using 1:2 title 'TCP/IP' w l + set output "All.png" + replot + exit +_EOF_ + +gnuplot <<_EOF_ >/dev/null 2>&1 + set xdata time + set timefmt '%Y/%m/%d-%H:%M' + set xlabel 'Date (YYYYMMDD)' + set ylabel 'Throughput (Requests/Second)' + set yrange [0:35000] + set terminal png small size 800,600 color + set output "/dev/null" + plot 'AMI.txt' using 1:2 title 'AMI' w l + replot 'DII.txt' using 1:2 title 'DII' w l + replot 'DSI.txt' using 1:2 title 'DSI' w l + replot 'Deferred.txt' using 1:2 title 'Deferred' w l + replot 'Single_Threaded.txt' using 1:2 title 'Single_Threaded' w l + replot 'Default.txt' using 1:2 title 'Single_Threaded (Defaults)' w l + replot 'Thread_Per_Connection.txt' using 1:2 title 'Thread_Per_Connection' w l + replot 'Thread_Pool.txt' using 1:2 title 'Thread_Pool' w l + replot 'AMH_Single_Threaded.txt' using 1:2 title 'AMH' w l + set output "CORBA.png" + replot + exit +_EOF_ + +/bin/cp CORBA.png All.png $DEST/images/ + +MOGRIFY=/usr/local/bin/mogrify +if [ ! -x "$MOGRIFY" ]; then + MOGRIFY=/usr/X11R6/bin/mogrify +fi + +( + cd $DEST/images + /bin/cp *.png thumbnails + for i in *.png; do + $MOGRIFY -geometry '25%' thumbnails/$i + done +) + +cd $DEST/data +/bin/uname -a > uname.txt +/usr/bin/gcc -v > gcc.txt 2>&1 +/usr/bin/gcc -dumpversion > gccversion.txt 2>&1 +/lib/libc.so.6 | sed -e 's/</\</g' -e 's/>/\>/g' > libc.txt +cat /proc/cpuinfo > cpuinfo.txt +cat /proc/meminfo > meminfo.txt +cat /etc/SuSE-release > linuxversion.txt + +cat $ACE_ROOT/ace/config.h > config.h.txt +cat $ACE_ROOT/include/makeinclude/platform_macros.GNU > platform_macros.GNU.txt +cp $ACE_ROOT/html/Stats/* $DEST diff --git a/ACE/bin/pippen.pl b/ACE/bin/pippen.pl new file mode 100755 index 00000000000..8c8c55b8a04 --- /dev/null +++ b/ACE/bin/pippen.pl @@ -0,0 +1,419 @@ +# $Id$ + +BEGIN { + use Cwd; + if (!$ENV{ACE_ROOT}) { + $ACE_ROOT = getcwd ()."\\"; + print STDERR "Error: ACE_ROOT not defined\n"; + exit 1; + } + else { + $ACE_ROOT = $ENV{ACE_ROOT}; + } +} +use lib "$ACE_ROOT/bin"; +use PerlACE::MSProject::DSP; +use PerlACE::MSProject::VCP; +use File::DosGlob 'glob'; +use DirHandle; +use strict; + +################################################################################ + +my $extension; +my $recurse = 0; +my $list = 0; +my $verbose = 0; +my @arguments; +my @configs; +my @roots; +my $auto_compile = 0; +my $clean = 0; +my $debug = 0; + +my $aceroot = 0; + +################################################################################ + +# Parse command line arguments + +while ( $#ARGV >= 0) +{ + if ($ARGV[0] =~ m/^-list/i) { + $list = 1; + } + elsif ($ARGV[0] =~ m/^-evc3/i) { + $extension = "vcp"; + } + elsif ($ARGV[0] =~ m/^-msvc6/i) { + $extension = "dsp"; + } + elsif ($ARGV[0] =~ m/^-msvc7/i) { + $extension = "vcproj"; + } + elsif ($ARGV[0] =~ m/^-config/i) { + push @configs, $ARGV[1]; + shift; + } + elsif ($ARGV[0] =~ m/^-r/i) { + $recurse = 1; + } + elsif ($ARGV[0] =~ m/^-v/i) { + $verbose = 1; + } + elsif ($ARGV[0] =~ m/^-auto_compile/i) { + $auto_compile = 1; + } + elsif ($ARGV[0] =~ m/^-clean/i) { + $clean = 1; + } + elsif ($ARGV[0] =~ m/^-useroot/i) { + push @roots, $ARGV[1]; + shift; + } + elsif ($ARGV[0] =~ m/^-aceroot/i) { + $aceroot = 1; + } + elsif ($ARGV[0] =~ m/^-(\?|h)/i) { # Help information + print "Options\n"; + print "-list - Prints out the list of project files\n"; + print "-config <c> - Use <c> as a configuratoin\n"; + print "-evc3 - Looks for eMbedded Visual C++ 3.0 projects\n"; + print "-msvc6 - Looks for Visual C++ 5.0/6.0 projects\n"; + print "-msvc7 - Looks for Visual C++ 7.0 projects\n"; + print "-clean - Clean instead of building\n"; + print "-recurse - Recurse into directories\n"; + print "-verbose - Make some noise\n"; + print "-auto_compile - Print out auto_compile info during build\n"; + print "-useroot <dir> - Use <dir> as a root to look for dependencies\n"; + print "-aceroot - Use %ACE_ROOT% as a dependency root\n"; + exit; + } + elsif ($ARGV[0] =~ m/^-/) { + warn "$0: unknown option $ARGV[0]\n"; + exit 1; + } + else { + push @arguments, $ARGV[0]; + } + shift; +} + +if ($#configs < 0) { + if (defined $ENV{WINMAKE_CONFIGS}) { + @configs = split /:/, $ENV{WINMAKE_CONFIGS}; + } + elsif (defined $ENV{PIPPEN_CONFIGS}) { + @configs = split /:/, $ENV{PIPPEN_CONFIGS}; + } + else { + print STDERR "Error: No config specified\n"; + exit 1; + } +} + +if (!defined $extension) { + my $compiler = ''; + if (defined $ENV{WINMAKE_COMPILER}) { + $compiler = $ENV{WINMAKE_COMPILER}; + } + elsif (defined $ENV{PIPPEN_COMPILER}) { + $compiler = $ENV{PIPPEN_COMPILER}; + } + else { + print STDERR "Error: No compiler specified\n"; + exit 1; + } + + if ($compiler eq "evc3") { + $extension = "vcp"; + } + elsif ($compiler eq "msvc6") { + $extension = "dsp"; + } + elsif ($compiler eq "msvc7") { + $extension = "vcproj"; + } +} + +################################################################################ + +# I like these variables + +# %projects->{$file}->{BUILD} <- Are we supposed to build this file? +# ->{PROJ} <- MSProject object +# ->{CONFIGS}->{$config}->{DEPS} <- List of dependencies +# ->{DONE} <- Have we compiled it yet? + +my %projects; + +# %names->{$output} <- points to the $file used in the above %projects + +my %names; + +################################################################################ + +# Expand all the files/directories passed in on the command line + +sub ProjectSearch ($@) +{ + my $build = shift; + my @targets = @_; + + while ($#targets >= 0) { + my $target = $targets[0]; + if (-d $target) { + print " Reading Directory $target\n" if ($verbose); + if ($recurse) { + my $dh = new DirHandle ($target); + + if (defined $dh) { + foreach my $entry ($dh->read ()) { + if (-d "$target/$entry" && $entry ne "." && $entry ne "..") { + $entry =~ s/^.\\//; # / <- fix for color coding in devenv + push @targets, ($target . "\\". $entry); + } + } + } + else { + print STDERR "Error: Cannot read $target: $!\n"; + } + } + + foreach my $t (glob ($target . "\\*." . $extension)) { + print " Adding project $t\n" if ($verbose); + %projects->{$t}->{BUILD} = $build; + } + } + else { + foreach my $t (glob ($target)) { + print " Adding project $t\n" if ($verbose); + %projects->{$t}->{BUILD} = $build; + } + } + shift @targets; + } +} + +print "=== Expanding Command line Arguments\n" if ($verbose); + +if ($#arguments < 0) { + print " No files specified, defaulting to \".\"\n" if ($verbose); + push @arguments, ("."); +} + +ProjectSearch (1, @arguments); + +print "=== Expanding Root Arguments\n" if ($verbose); + +ProjectSearch (0, @roots); + +if ($aceroot == 1) { + my $oldrecurse = $recurse; + $recurse = 1; + my @aceroots = ($ENV{ACE_ROOT}."\\ace", + $ENV{ACE_ROOT}."\\apps\\gperf\\src", + $ENV{ACE_ROOT}."\\TAO\\TAO_IDL", + $ENV{ACE_ROOT}."\\TAO\\tao", + $ENV{ACE_ROOT}."\\TAO\\orbsvcs\\orbsvcs"); + ProjectSearch (0, @aceroots); + $recurse = $oldrecurse; +} + +################################################################################ + +# Read each project file to gather dependency and output information + +print "=== Reading Project Files\n" if ($verbose); + +foreach my $project (keys %projects) { + my $proj; + + if ($project =~ m/\.dsp$/i) { + $proj = new PerlACE::MSProject::DSP ($project); + } + elsif ($project =~ m/\.vcp$/i) { + $proj = new PerlACE::MSProject::VCP ($project); + } + elsif ($project =~ m/\.vcproj$/i) { + print STDERR "Error: MSVC7 not supported yet\n"; + } + else { + print STDERR "Error: Unrecognized file: $project\n"; + } + + print " Loading $project:" if ($verbose); + + $proj->Load (); + + foreach my $config (@configs) { + foreach my $proj_config ($proj->Configs ()) { + if ($proj_config =~ m/\Q$config\E/i) { + print " \"$proj_config\"" if ($verbose); + my $name = $proj->DepOutputFile ($proj_config); + + %names->{lc $name} = $project; + my @deps = split / /, $proj->Libs ($proj_config); + + foreach my $dep (@deps) { +# $dep =~ s/.*[\/\\]//g; + push (@{%projects->{$project}->{CONFIGS}->{$proj_config}->{DEPS}}, $dep); + } + if ($proj->UsesTAOIDL () == 1) { + push @{%projects->{$project}->{CONFIGS}->{$proj_config}->{DEPS}}, ("gperf.exe", "tao_idl.exe"); + } + } + } + } + + print "\n" if ($verbose); + + %projects->{$project}->{PROJ} = $proj; +} + +################################################################################ + +# Clean out the dependency lists, we only keep the libraries which we know +# how to generate + +print "=== Cleaning out Dependency Lists\n" if ($verbose); + +foreach my $project (keys %projects) { + foreach my $config (keys %{%projects->{$project}->{CONFIGS}}) { + print " Cleaning Dependencies: $project ($config)\n" if ($verbose); + print " Before:", join (" ", @{%projects->{$project}->{CONFIGS}->{$config}->{DEPS}}), "\n" if ($verbose); + my @newdeps; + foreach my $dep (@{%projects->{$project}->{CONFIGS}->{$config}->{DEPS}}) { + $dep =~ s/.*[\/\\]//g; + + if (defined %names->{lc $dep}) { + push @newdeps, $dep; + } + } + print " After:", join (" ", @newdeps), "\n" if ($verbose); + @{%projects->{$project}->{CONFIGS}->{$config}->{DEPS}} = @newdeps; + } +} + +################################################################################ + +# Make sure to build any dependencies found + +print "=== Walking Dependency Lists\n" if ($verbose); + +my $finished = 0; + +do { + $finished = 1; + foreach my $project (keys %projects) { + foreach my $config (keys %{%projects->{$project}->{CONFIGS}}) { + if (%projects->{$project}->{BUILD} == 1) { + foreach my $dep (@{%projects->{$project}->{CONFIGS}->{$config}->{DEPS}}) { + if (%projects->{%names->{lc $dep}}->{BUILD} != 1) { + %projects->{%names->{lc $dep}}->{BUILD} = 1; + $finished = 0; + } + } + } + } + } + +} while (!$finished); + + +################################################################################ + +# Output a list, if requested + +if ($debug) { + print "List of Dependencies\n"; + print "--------------------\n"; + foreach my $project (keys %projects) { + print "=== $project\n"; + foreach my $config (keys %{%projects->{$project}->{CONFIGS}}) { + print " Config: $config\n"; + print " Depends: ", join (" ", @{%projects->{$project}->{CONFIGS}->{$config}->{DEPS}}), "\n"; + } + } + + print "\n"; + print "List of Outputs\n"; + print "---------------\n"; + + foreach my $name (keys %names) { + print "$name\n"; + } +} + +################################################################################ + +# Loop through and + +print "=== Compiling\n" if ($verbose); + +my $compilations; # Keep track of the number of compiles done during a pass +my $unfinished; +my $loop = 1; + +do { + $compilations = 0; + $unfinished = 0; + + foreach my $project (keys %projects) { + if (%projects->{$project}->{BUILD} == 1) { + foreach my $config (keys %{%projects->{$project}->{CONFIGS}}) { + if (%projects->{$project}->{CONFIGS}->{$config}->{DONE} != 1) { + my $depsleft = 0; + foreach my $dep (@{%projects->{$project}->{CONFIGS}->{$config}->{DEPS}}) { + if (%projects->{%names->{lc $dep}}->{CONFIGS}->{$config}->{DONE} != 1) { + ++$depsleft; + } + } + + if ($depsleft == 0) { + ++$compilations; + print "Auto_compiling $project : $config\n" if ($auto_compile); + + if ($list == 1) { + if ($clean == 1) { + print "Cleaning "; + } + else { + print "Compiling "; + } + + print "$project : $config\n"; + } + elsif ($clean == 1) { + %projects->{$project}->{PROJ}->Clean ($config); + } + else { + %projects->{$project}->{PROJ}->Build ($config); + } + + %projects->{$project}->{CONFIGS}->{$config}->{DONE} = 1; + } + else { + ++$unfinished; + } + } + } + } + } + + print " === Loop $loop: $compilations compiles, $unfinished left\n" if ($verbose); + ++$loop; +} while ($compilations != 0); + +# Loop through and see if anything wasn't compiled. If so, this means either there is +# an error in the script or that there are circular dependencies + +foreach my $project (keys %projects) { + if (%projects->{$project}->{BUILD} == 1) { + foreach my $config (keys %{%projects->{$project}->{CONFIGS}}) { + if (%projects->{$project}->{CONFIGS}->{$config}->{DONE} != 1) { + print STDERR "Error: Project not compiled: $project - $config\n", + } + } + } +} diff --git a/ACE/bin/regenerate_exports.pl b/ACE/bin/regenerate_exports.pl new file mode 100755 index 00000000000..95e6bf67986 --- /dev/null +++ b/ACE/bin/regenerate_exports.pl @@ -0,0 +1,54 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# Goes through ACE/TAO and replaces + +use File::Find; +use Cwd; + +$args = ''; +$root = cwd.'/'; + +while ($#ARGV >= 0) { + $args = $args . ' ' . shift @ARGV; +} + +# wanted is only used for the File::Find +sub wanted +{ + my $file = $File::Find::name; + + $file =~ s/\.\//$root/; + + if ($File::Find::name =~ /\_export\.h$/i) { + my $flag = 0; + my $name = ''; + + if (!open (FILE, $file)) { + print STDERR "Error: Could not open $file\n"; + } + + while (<FILE>) { + $flag = 1 if ((/generate_export/ || /GenExportH/) && $flag == 0); + $name = $1 if (/define (\w*)_Export/); + } + + if ($flag == 1) { + print "Regenerating: $file\n"; + if ($OSNAME eq 'MSWIn32') { + $file =~ s/\//\\/g; + } + system ("perl -S generate_export_file.pl $args $name > $file"); + } + else { + print "Skipping: $file\n"; + } + close FILE; + } +} + + +find (\&wanted, "."); + diff --git a/ACE/bin/reverse_clean b/ACE/bin/reverse_clean new file mode 100755 index 00000000000..37d77daee50 --- /dev/null +++ b/ACE/bin/reverse_clean @@ -0,0 +1,25 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; +# -*- perl -*- +# $Id$ +# +# This script does a realclean of the list in the reverse order that +# is passed to this. This is just a utility script + +@ARGS = (); + +if ($ARGV[0] eq ''){ + print STDERR "$0: No directories provided\n"; + die "provide list of directories"; +} + +my $make = $ARGV[0]; +shift; + +@BUILD_LIST = @ARGV; + + +foreach $i (reverse (@BUILD_LIST)) { + system ("$make -k -C $i realclean"); +} diff --git a/ACE/bin/run_all.pl b/ACE/bin/run_all.pl new file mode 100755 index 00000000000..dfa4841262c --- /dev/null +++ b/ACE/bin/run_all.pl @@ -0,0 +1,224 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- +# $Id$ +# +# This script execute the test programs (usually, other scripts) in +# the RUN_LIST defined below. If it detects any problem it send email. +# +# This script requires ActivePerl for Win32 and libnet from CPAN. +# +# Usage: run_all.pl <log directory> <admin email address> +# +# For example: run_all.pl /tmp/log peter_pan@neverland.org + +use Net::SMTP; +use File::Basename; +use FileHandle; +require POSIX; + +push @INC, $ENV{'ACE_ROOT'}.'/bin'; +require run_all_list; + +# Find out the command name. +$CMD = basename($0); + +$single_threaded = 0; +$minimum_corba = 0; +$dont_run = 0; +$report_success = 0; +$debug = 0; +$ami=0 +@ARGS = (); +while ($#ARGV >= 0) { + if (!($ARGV[0] =~ m/-/)) { + push @ARGS, $ARGV[0]; + shift; + } elsif ($ARGV[0] eq "-single_threaded") { + $single_threaded = 1; + shift; + } elsif ($ARGV[0] eq "-minimum_corba") { + $minimum_corba = 1; + shift; + } elsif ($ARGV[0] eq "-ami") { + $ami = 1; + shift; + } elsif ($ARGV[0] eq "-report_success") { + $report_success = 1; + shift; + } elsif ($ARGV[0] eq "-debug") { + $debug = 1; + shift; + } +} + +# We obtain our revision to report errors. +$REVISION='$Revision$ '; + +# Extract configuration information from command line. + # TODO: Some validation and checking should be done here. +$LOGDIR = $ARGS[0]; +$ADMIN = $ARGS[1]; +$MAIL = "mail"; +if ($#ARGS >= 2) { + $MAIL = $ARGS[2]; +} + +$disable_file = $LOGDIR . '/.disable'; +$histfile = $LOGDIR . '/history'; +$LOGBASE = POSIX::strftime("%b%d_%Y.log", localtime); +$LOGFILE = $LOGDIR . '/' . $LOGBASE; +$HOST = `hostname`; +chop $HOST; +$LOG_NAME = $HOST . "_" . $BUILD . "_" . $LOGBASE; +$STATUS = "OK"; + +sub report_errors { + # Now send a summary of the errors to the ADMIN account... + local $to = $ADMIN; + + open (MAIL, "|".$MAIL.' -s [AUTO_COMPILE] '.$to) + || die "Cannot open mail pipe for: $_\n"; + + print MAIL 'The following message is brought to you by: ', "\n"; + print MAIL $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n"; + + local $m; + foreach $m (@_) { + print MAIL $m, "\n"; + } + + print MAIL "\nPlease check the following log for more info:\n\n"; + print MAIL 'http://www.cs.wustl.edu/~bugzilla/auto_compile_logs/', + $LOG_NAME, "\n\n"; + + close (MAIL); # Ignore errors.... + +# # Now send the complete log to bugzilla... +# local $bugs = 'bugzilla'.'@cs.wustl.edu'; +# open (MAIL, "|".$MAIL.' -s AUTO_COMPILE_LOG='.$LOG_NAME.' '.$bugs) +# || die "Cannot open mail pipe for: $LOG_NAME\n"; + +# print MAIL 'This is the log for: ', "\n"; +# print MAIL $CMD, ' [', $REVISION, "] for $BUILD on $CHECKOUT\n"; + +# print MAIL "\n================================================================\n"; + +# if (open (THELOG, "$LOGFILE")) +# { +# while (<THELOG>) { +# print MAIL $_; +# } +# close (THELOG); +# } +# close (MAIL); # Ignore errors.... +} + +### MAIN FUNCTION + +$histfile = $LOGDIR . '/history'; +open(HIST, '>>' . $histfile) + # Do not use 'die' to report the problem, it tries to use HIST.... + || die "cannot open history file \"$histfile\"\n"; + +$date = localtime; + +print HIST $CMD, ': running at ', $date, ' '; + +if (-f $disable_file) { + print HIST "DISABLED\n"; + exit 0; +} + +open (DISABLE, '>' . $disable_file) + || die "cannot open disable file"; +print DISABLE "auto_compile <$date> is running\n"; +close (DISABLE) + || die "cannot close disable file"; + +$LOGFILE = $LOGDIR . '/' . POSIX::strftime("%b%d_%Y.log", localtime); +open(LOG, '>' . $LOGFILE) + || die "cannot open log file"; + +LOG->autoflush (); + +@failures = (); + +if ($dont_run == 0) { + @LIST = @RUN_LIST; + if ($single_threaded) { + @LIST = @SINGLE_THREADED_LIST; + } elsif ($minimum_corba) { + @LIST = @MINIMUM_CORBA_LIST; + } elsif ($ami) { + @LIST = @AMI_CORBA_LIST; + } + + $DIR = $ENV{'PWD'}; + foreach $i (@LIST) { + local @test_info = split (/\ \,\ /, $i); + local $directory = $test_info[0]; + local $program = $test_info[1]; + + $date = localtime; + print LOG "$CMD: =============================================\n"; + print LOG "$CMD: running $program in $directory at ", $date, "\n"; + local $subdir = $DIR . '/' . $directory; + chdir ($subdir) + || die "cannot chdir to $subdir"; + + $run_error = 0; + if (open(RUN, "perl $program 2>&1 |") == 0) { + push @failures, "cannot run $program in $directory"; + next; + } + while (<RUN>) { + print LOG $_; + if (m/Error/ + || m/FAILED/ + || m/EXCEPTION/ + || m/pure virtual /i) { + if ($STATUS eq "OK") { + $STATUS = "RUNTIME ERROR"; + } + $run_error = 1; + } + } + if (close(RUN) == 0) { + if ($STATUS eq "OK") { + $STATUS = "RUNTIME ERROR"; + } + push @failures, "Error when closing pipe for $program in $directory"; + next; + } + $date = localtime; + print LOG "$CMD: $program finished ", $date, "\n"; + + if ($run_error != 0) { + push @failures, + "errors detected while running $program in $directory"; + } + } +} + +if ($#failures >= 0) { + report_errors @failures; +} + +close(LOG) + || die "cannot close LOGFILE"; + +print HIST "$STATUS\n"; +close(HIST) + || die "cannot close history file"; + +unlink $disable_file + || die "cannot unlink disable file"; + +if ($report_success) { + report_errors "Congratulations: No errors or warnings detected\n"; +} + +exit 0; diff --git a/ACE/bin/run_all_win32.pl b/ACE/bin/run_all_win32.pl new file mode 100755 index 00000000000..84021c3a8d9 --- /dev/null +++ b/ACE/bin/run_all_win32.pl @@ -0,0 +1,180 @@ +# -*- perl -*- +# $Id$ +# +# This script execute the test programs (usually, other scripts) in +# the RUN_LIST defined below. If it detects any problem it send email. +# +# This script requires ActivePerl for Win32 and libnet from CPAN. +# +# Usage: run_all_win32.pl <log directory> <admin email address> +# +# For example: run_all_win32.pl c:\log peter_pan@neverland.org + +use Net::SMTP; +use File::Basename; +use FileHandle; +require POSIX; + +use lib "$ENV{ACE_ROOT}/bin"; +require run_all_list; + +# This is the module we will checkout, someday someone could define a +# smaller module. +$MODULE='ACE_wrappers'; + +# The following are for redirecting execution results to temporary files. +$exe_log_name='run_test.log'; # Name of the tempfile used. + +# If using 'sh'. +$sh_cmd="c:/bin/sh "; +$sh_redirection=" > $exe_log_name 2>&1"; + +#if using '4nt', 4nt is not quite working yet. +$four_nt_cmd="d:/Utils/4NT301/4NT.EXE "; +$four_nt_redirection=" >& $exe_log_name"; + +# Pick the one your like. +$shell_invoke = $sh_cmd; +$redirect_output = $sh_redirection; + +# We obtain our revision to report errors. +#$REVISION='$Revision$'; + +# Find out the command name. +$CMD = basename($0); + +# Extract configuration information from command line. +# TODO: Some validation and checking should be done here. +$LOGDIR = $ARGV[0]; +$ADMIN = $ARGV[1]; + +# When an error is found we try to die gracefully and send some email +# to ADMIN. + +$disable_file = $LOGDIR . '/.disable'; + +sub mywarn { + local @msg = @_; + + # Need more error checking here. + + $smtp = Net::SMTP->new('mail.cs.wustl.edu'); + $smtp->mail( "$ADMIN" ); # sender's address + $smtp->to("$ADMIN"); # recipient's address + $smtp->data(); # Start the mail + + # Mail Header + $smtp->datasend("To: $ADMIN\n"); + $smtp->datasend("Subject: Auto run results\n"); + $smtp->datasend("From: $ADMIN\n"); + $smtp->datasend("\n"); + + # Now the message body + $smtp->datasend ('The following message is brought to you by: ', "\n"); + $smtp->datasend ("$CMD, [ $REVISION ] for $BUILD on $CHECKOUT\n\n"); + + local $m; + foreach $m (@msg) { + $smtp->datasend ("$m \n"); + } + + $smtp->datasend ("\nPlease check log files for more info\n"); + + $smtp->dataend(); # Finish sending the mail + $smtp->quit; # Close the SMTP connection +} + +sub mydie { + mywarn @_; + print HIST 'FAILED', "\n"; + unlink $disable_file + || die "cannot unlink disable file"; + exit 0; +} + +### MAIN FUNCTION + +### MAIN FUNCTION + +$histfile = $LOGDIR . '/history'; +open(HIST, '>>' . $histfile) + # Do not use 'mydie' to report the problem, it tries to use HIST.... + || die "cannot open history file \"$histfile\"\n"; + +$date = localtime; + +print HIST $CMD, ': running at ', $date, ' '; + +if (-f $disable_file) { + print HIST "DISABLED\n"; + exit 0; +} + +open (DISABLE, '>' . $disable_file) + || mydie "cannot open disable file"; +print DISABLE "auto_compile <$date> is running\n"; +close (DISABLE) + || mydie "cannot close disable file"; + +$LOGFILE = $LOGDIR . '/' . POSIX::strftime("%b%d_%Y.log", localtime); +open(LOG, '>' . $LOGFILE) + || mydie "cannot open log file"; + +LOG->autoflush (); + +foreach $i (@RUN_LIST) { + local @test_info = split (/\ \,\ /, $i); + local $directory = $test_info[0]; + local $program = $test_info[1]; + print "$directory, $program\n"; + + $date = localtime; + print LOG "$CMD: =============================================\n"; + print LOG "$CMD: running $program in $directory at ", $date, "\n"; + local $subdir = + $ENV{ACE_ROOT} . '/'. $directory; + chdir ($subdir) + || mydie "cannot chdir to $subdir"; + + $run_error = 0; + + system ($shell_invoke . " " . $program . " " . $redirect_output); + + open (RUN, "$exe_log_name") || push @failures, "Can't open execution log file $exe_log_name\n"; + + while (<RUN>) { + print LOG $_; + if (m/^Error/ || m/FAILED/ || m/EXCEPTION/) { + $run_error = 1; + } + } + if (close(RUN) == 0) { + push @failures, "Error when closing log file $program in $directory"; + next; + } + $date = localtime; + print LOG "$CMD: $program finished ", $date, "\n"; + + if ($run_error != 0) { + push @failures, + "errors detected while running $program in $directory"; + } + + unlink ("$exe_log_name"); +} + +if ($#failures >= 0) { + mydie @failures; +} + +close(LOG) + || mydie "cannot close LOGFILE"; + +print HIST "OK\n"; +close(HIST) + || mydie "cannot close history file"; + +unlink $disable_file + || mydie "cannot unlink disable file"; + +exit 0; diff --git a/ACE/bin/sandbox.cpp b/ACE/bin/sandbox.cpp new file mode 100644 index 00000000000..fce69dedcb6 --- /dev/null +++ b/ACE/bin/sandbox.cpp @@ -0,0 +1,167 @@ +// +// $Id$ +// +#include <stdio.h> +#include <stdlib.h> + +#include <unistd.h> +#include <signal.h> +#include <sys/wait.h> +#include <sys/types.h> + +/// Run by the child process +static int child(int argc, char* argv[]); + +static int max_child_time = 300; +const char *child_name = 0; + +static int parse_args(int& argc, char* argv[]); + +int +main(int argc, char* argv[]) +{ + if (parse_args(argc, argv) != 0) + return 1; + + pid_t pid = fork(); + if (pid == -1) { + fprintf(stderr, "Error in fork\n"); + return 1; + } + + if (pid == 0) { + // In the child... + return child(argc, argv); + } + + int status; + pid_t child = waitpid(pid, &status, 0); + if (child == -1) { + fprintf(stderr, "sandbox: error waiting for child\n"); + return 1; + } + // Return whatever status the child has... + return status; +} + +sig_atomic_t child_died = 0; + +extern "C" void +sigchld_handler(int signal) +{ + child_died = 1; +} + + +static int +child (int /* argc */, char* argv[]) +{ + // The child becomes its own session, implicitly this turns the + // child process into its own process group leader, allowing us to + // terminate a hierarchy of children easily. + pid_t sid = setsid(); + if (sid == -1) + { + fprintf(stderr, "sandbox: error in setid\n"); + return 1; + } + + // Setup the signal handler to receive SIGCHLD signals: + (void) signal(SIGCHLD, sigchld_handler); + + // Now we must fork again to wait for the grandchild process... + + pid_t grandchild = fork(); + if (grandchild == 0) { + // Exec the arguments... + int r = execvp(child_name, argv); + if (r == -1) { + fprintf(stderr, "sandbox: error in execvp()\n"); + return 1; + } + } + + // As the process leader we wait until the child returns or there is + // a timeout... + + int status; + int remaining_time = max_child_time; + + while (remaining_time != 0) + { + // We use the signal handler to return from sleep before all the + // time expires + remaining_time = sleep(remaining_time); + + // We could exit + if (child_died) + { + pid_t child = waitpid(grandchild, &status, WNOHANG); + if (child == -1) + { + fprintf(stderr, + "sandbox: no grandchild process (%d), panic\n", + grandchild); + return 1; + } + if (child != 0) + { + //printf("sandbox: grandchild %d exits with status %d\n", + // child, status); + return status; + } + } + } + + printf("sandbox: timeout for grandchild %d\n", grandchild); + + // timeout, try to kill the child + (void) kill(grandchild, SIGTERM); + + // Second chance, if the child does not die, then really kill it: + pid_t killed = waitpid(grandchild, &status, WNOHANG); + if (killed == 0) + { + // TERM did not work, use the heavy duty signal + (void) kill(grandchild, SIGQUIT); sleep(1); + killed = waitpid(grandchild, &status, WNOHANG); + } + if (killed == -1) + { + fprintf(stderr, "No such child (%d), panic\n", + grandchild); + return 1; + } + sleep(1); + + printf("sandbox: killing session %d\n", sid); + + // OK, now commit suicide, kill the session ID and all their friends + (void) killpg(sid, SIGQUIT); + fprintf(stderr, "sandbox: ooops! I should be dead!\n"); + + return 1; +} + +static int +parse_args(int &argc, char* argv[]) +{ + if (argc < 3) { + fprintf(stderr, "Usage: sandbox max_time program arguments\n"); + return 1; + } + + max_child_time = atoi(argv[1]); + child_name = argv[2]; + argc -= 2; + for (int i = 0; i != argc; ++i) + { + argv[i] = argv[i + 2]; + } + argv[argc] = 0; + + if (child_name == 0) + return 1; + + return 0; +} diff --git a/ACE/bin/sets-manager.py b/ACE/bin/sets-manager.py new file mode 100755 index 00000000000..73c922239f3 --- /dev/null +++ b/ACE/bin/sets-manager.py @@ -0,0 +1,180 @@ +#!/opt/local/bin/python + +""" This script implements branching and tagging in the DOC group +repository, and automates the process of creating sets. """ + +import os + +def parse_args (): + from optparse import OptionParser + + parser = OptionParser ("usage: %prog [optoins] name") + parser.add_option ("-A", "--ACE", dest="project", action="store_const", + help="Branch/tag only ACE", default=None, const="ace") + parser.add_option ("-T", "--TAO", dest="project", action="store_const", + help="Branch/tag ACE and TAO", default=None, const="tao") + parser.add_option ("-C", "--CIAO", dest="project", action="store_const", + help="Branch/tag ACE, TAO, and CIAO", default=None, const="ciao") + parser.add_option ("-t", "--tag", dest="action", + help="Create a tag", action="store_true", default=None) + parser.add_option ("-b", "--branch", dest="action", action="store_false", + help="Create a branch", default=None) + parser.add_option ("-v", "--verbose", dest="verbose", action="store_true", + help="Print out verbose debugging output", default=False) + parser.add_option ("-s", "--svn", dest="svn", default="svn", + help="Full path to svn binary, if not in path") + parser.add_option ("-r", "--repo", dest="repo", + default="https://svn.dre.vanderbilt.edu/DOC/ACE/", + help="Repository to use, defaults to s.d.v.e/DOC/ACE.") + parser.add_option ("--src", dest="source", default="trunk/", + help="Path in repository from which to branch, defaults to trunk") + parser.add_option ("--dest", dest="dest", default="", + help="Specifies a subdirectory of branches or tags in which " + + "to place the new branch/tag. dest must already exist.") + parser.add_option ("-n", dest="take_action", action="store_false", default=True, + help="Take no action") + (opts, args) = parser.parse_args () + + if len(args) != 1: + parser.error ("must specify exactly one branch or tag name") + + if opts.action is None: + parser.error ("must specify either a branch or tag action") + + if opts.project is None: + parser.error ("must specity a project to branch") + + return (opts, args) + +def execute (command): + from os import system + + if opts.verbose: + print "executing " + command + if opts.take_action and os.system (command) != 0: + raise Exception ("Command failed: " + command) + +def svn_copy (source, dest): + command = " ".join ([opts.svn, + "copy", + '-m "branching/tagging"', + source, + dest]) + execute (command) + +def svn_propset (path, prop, value): + command = " ".join ([opts.svn, + "propset", + prop, + "'" + value + "'", + path]) + execute (command) + +def svn_mkdir (path): + command = " ".join ([opts.svn, + "mkdir", + '-m "branching/tagging"', + path]) + execute (command) + +def svn_mkdir_local (path): + command = " ".join ([opts.svn, + "mkdir", + path]) + execute (command) + +def branch_ACE (): + # Perform branching + destination = opts.repo + opts.dest + svn_copy (opts.repo + opts.source + "/ACE", + destination + "modules/ACE") + #Create the set + svn_mkdir_local ("sets/ACE") + svn_propset ("sets/ACE", + "svn:externals", + "%s\t%s" % ("ACE_wrappers", + destination + "modules/ACE")) + +def branch_TAO (): + branch_ACE () + + # Perform branching + destination = opts.repo + opts.dest + svn_copy (opts.repo + opts.source + "/TAO", + destination + "modules/TAO") + + #Create the set + svn_mkdir_local ("sets/ACE+TAO") + svn_propset ("sets/ACE+TAO", + "svn:externals", + "%s\t%s\n%s\t%s" % ("ACE_wrappers", + destination + "modules/ACE", + "ACE_wrappers/TAO", + destination + "modules/TAO")) + +def branch_CIAO (): + branch_TAO () + + #Perform branching + destination = opts.repo + opts.dest + svn_copy (opts.repo + opts.source + "/CIAO", + destination + "modules/CIAO") + + # Create the set + svn_mkdir_local ("sets/ACE+TAO+CIAO") + svn_propset ("sets/ACE+TAO+CIAO", + "svn:externals", + "%s\t%s\n%s\t%s\n%s\t%s" % + ("ACE_wrappers", + destination + "modules/ACE", + "ACE_wrappers/TAO", + destination + "modules/TAO", + "ACE_wrappers/TAO/CIAO", + destination + "modules/CIAO")) + +def main (opts, args): + # Lets make opts global + globals ()['opts'] = opts + + path = str () + if opts.action: + # True for tag + path = "tags/" + else: # Branch + path = "branches/" + + path += "%s/%s" % (opts.dest, args[0]) + # Make branch/tag directory + svn_mkdir (opts.repo + path) + + # Make modules and sets subdirectory + svn_mkdir (opts.repo + path + "/modules") + svn_mkdir (opts.repo + path + "/sets") + + # We need a local copy of the sets directory, as svn:externals + # can only be modified locally + execute ("svn co " + opts.repo + path + "/sets") + + # opts.dest should now be set to path, all of the branching + # functions assume dest now points to the branch/tag in which + # the copies should be places + opts.dest = path + '/' + + {'ace': branch_ACE, + 'tao': branch_TAO, + 'ciao': branch_CIAO}[opts.project] () + + # Commit the sets directory + execute ('svn commit -m "branching/tagging" sets') + + # remove the sets directory + for root, dirs, files in os.walk ('sets', False): + for name in files: + os.remove (os.path.join (root, name)) + for name in dirs: + os.rmdir (os.path.join (root, name)) + +if __name__ == "__main__": + opts, args = parse_args () + main (opts, args) + diff --git a/ACE/bin/show_unused_macros.pl b/ACE/bin/show_unused_macros.pl new file mode 100755 index 00000000000..820b22e602d --- /dev/null +++ b/ACE/bin/show_unused_macros.pl @@ -0,0 +1,224 @@ +eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' + & eval 'exec perl -w -S $0 $argv:q' + if 0; + +# ************************************************************ +# Description : Find macros in specified config files that +# are not referenced in other config files, +# but are referenced in the rest of the source +# files. +# Author : Chad Elliott +# Create Date : 12/22/2004 +# $Id$ +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; +use Cwd; +use FileHandle; +use File::Basename; + +# ************************************************************ +# Data Section +# ************************************************************ + +my($in_comment) = undef; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub getline { + my($fh) = shift; + my($line) = $fh->getline(); + + if (defined $line) { + ## Remove the line feed + $line =~ s/\n//; + + ## Remove one line c comments + $line =~ s/\/\*.*\*\///; + + ## Check for multi lined c comments + if ($line =~ s/\/\*.*//) { + $in_comment = 1; + } + elsif ($line =~ s/.*\*\///) { + $in_comment = 0; + } + elsif ($in_comment) { + $line = ''; + } + else { + ## Remove c++ comments + $line =~ s/\/\/.*//; + + ## Concatenate lines + if ($line =~ s/\\\s*$//) { + $line .= getline($fh); + } + } + } + + return $line; +} + + +sub findMacros { + my($defines) = shift; + my($macros) = shift; + my(@files) = @_; + foreach my $file (@files) { + my($fh) = new FileHandle(); + + if (open($fh, $file)) { + $in_comment = undef; + while(defined($_ = getline($fh))) { + if (($defines & 1) == 1 && /^\s*#\s*define\s*([^\s]+)/) { + my($word) = $1; + $word =~ s/\(.*//; + if (!defined $$macros{$word}) { + $$macros{$word} = $file; + } + } + elsif (($defines & 2) == 2 && /^\s*#\s*if/) { + foreach my $word (split(/[^\w]/, $_)) { + if ($word =~ /^[^\d]\w+$/ && + $word !~ /^if([n]?def)?$/ && + $word !~ /^define[d]?/ && + $word !~ /^els(e|if)$/ && !defined $$macros{$word}) { + $$macros{$word} = $file; + } + } + } + } + + close($fh); + } + else { + print STDERR "Unable to open $file\n"; + exit(2); + } + } +} + + +sub usageAndExit { + my($msg) = shift; + + if (defined $msg) { + print STDERR "ERROR: $msg\n"; + } + + print STDERR 'Usage: ', basename($0), " [-I <directory>] <config headers>\n\n", + "This script will provide a set of macros that may possibly\n", + "be removed from ACE.\n\n", + "It should be run under ACE_wrappers/ace and the input should\n", + "be the config header file or files planned for removal.\n"; + exit(1); +} + + +# ************************************************************ +# Main Section +# ************************************************************ + +my(@files) = (); +my(@dirs) = ('.', 'os_include', 'os_include/sys', + 'os_include/netinet', 'os_include/net', + 'os_include/arpa', + ); + +for(my $i = 0; $i <= $#ARGV; ++$i) { + my($arg) = $ARGV[$i]; + if ($arg =~ /^-/) { + if ($arg eq '-h') { + usageAndExit(); + } + elsif ($arg eq '-I') { + ++$i; + if (defined $ARGV[$i]) { + push(@dirs, $ARGV[$i]); + } + else { + usageAndExit('-I requires a directory parameter'); + } + } + else { + usageAndExit("$arg is an unknown option"); + } + } + else { + push(@files, $arg); + } +} + +if (!defined $files[0]) { + usageAndExit(); +} + +## First find all of the control macros +my(%control) = (); +findMacros(3, \%control, @files); + +## Now find all of the macros from the other config files +my(@other) = grep(!/config-all\.h|config-lite\.h/, <config-*.h>); + +for(my $i = 0; $i <= $#other; ++$i) { + foreach my $file (@files) { + if ($other[$i] eq $file) { + splice(@other, $i, 1); + --$i; + last; + } + } +} +my(%other) = (); +findMacros(3, \%other, @other); + + +my(%notreferenced) = (); +foreach my $macro (keys %control) { + if (!defined $other{$macro}) { + $notreferenced{$macro} = $control{$macro}; + } +} + + +## Find all other macros +my(@all) = (); +foreach my $dir (@dirs) { + my($orig) = getcwd(); + if (chdir($dir)) { + my(@more) = <*.h *.i* *.cpp>; + if ($dir ne '.') { + foreach my $file (@more) { + $file = "$dir/$file"; + } + } + push(@all, @more); + chdir($orig); + } +} + +for(my $i = 0; $i <= $#all; ++$i) { + foreach my $file (@files, @other) { + if ($all[$i] eq $file) { + splice(@all, $i, 1); + --$i; + last; + } + } +} + +my(%all) = (); +findMacros(2, \%all, @all); + +foreach my $macro (sort keys %notreferenced) { + if (defined $all{$macro}) { + print "$macro\n"; + } +} diff --git a/ACE/bin/split-cpp b/ACE/bin/split-cpp new file mode 100755 index 00000000000..513c52a946c --- /dev/null +++ b/ACE/bin/split-cpp @@ -0,0 +1,422 @@ +eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' + & eval 'exec perl -w -S $0 $argv:q' + if 0; + +# Splits C++ source files into one file per function or data item. +# +# Author: David L. Levine, with much help and encouragment from +# Umar Syyid and Gonzalo A. Diethelm. +# Completed by Andrew Gilpin, July 2000 +# Date: 10 November 1998 +# +# For each C++ source file: +# 1) Extracts the "intro" code, i.e., #includes and declarations. +# 2) Identifies function definitions, relying on {, and } at the +# beginning of a line, to delineate the function begin and +# end. +# +# Assumptions: (applies only to the files being split, i.e. .cpp files) +# * Function definition bodies are terminated with } appearing at +# the beginning of a line. +# * Free-standing (outside of functions) macro invocations must be +# followed by a blank line, or terminated with a semicolon. +# * A function must not have a blank line between its header +# (signature) and its body. +# * There aren't multiple C-style comments on one line, with code +# between them. +# * typedefs are on a single line +# * A #endif doesn't have a multi-line C comment starting on that line. + +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +# Changes made by Andrew Gilpin (June - July 2000) +# * Added option -c to use .c extension instead of .cpp extension +# * Prints message when no filenames are specified on the command line +# * Changed -? option to -h so that it works properly in most shells +# * Added option -s to skip certain files, but copy them to $split_dir, +# renaming them. (filename.cpp -> $split_dir/filename_S1.cpp). This is +# here so that ACE can selectively not split certain files (namely those +# that this script doesn't work with :) +# * Added support for classes declared in the .cpp file. + +$usage="usage: $0 [-h] [-d] [-v] [-c] [-s filename] filenames\n"; + +#### Configuration parameters. +$verbose = 0; +$debug = 0; +$split_dir = 'SPLIT'; +$extension = 'cpp'; +@files_to_skip = (); + +#### Constants. +$DIR_SEPARATOR = $^O eq "MSWin32" ? '\\' : '/'; + + +#### +#### Process command line args. +#### +while ( $#ARGV >= $[ && $ARGV[0] =~ /^-/ ) { + if ( $ARGV[0] eq '-d' ) { + $debug = 1; + } elsif ( $ARGV[0] eq '-v' ) { + $verbose = 1; + } elsif ( $ARGV[0] eq '-c' ) { + $extension = 'c'; + } elsif ( $ARGV[0] eq '-s' ) { + push @files_to_skip, $ARGV[1]; + shift; + } elsif ( $ARGV[0] eq '-h' ) { + print "$usage"; + exit; + } else { + print STDERR "$0: unknown option $ARGV[0]\n"; + die $usage; + } + shift; +} + + +&main (); + + +#### +#### Reset state, to process a new file starting with a clean slate. +#### +sub reset { + #### Working data buffers. + @intro = (); + @current_comments = (); + @current_code = (); + @if = (); + @save_if = (); + @endif = (); + @unknown = (); + ####@unknown_s = (); + + #### State variables. + $current_file_number = 0; + $top_of_file = 1; + $in_braces = 0; + $in_nonfunction_code = 0; + $in_C_comment = 0; + $intro_length = 0; + $preprocessor_continuation = 0; + $preserved_ifs = 0; +} + + +sub main { + #### Print error message if no files are specified. + #### We need to do this before we modify anything on disk. + die "No files specified!\n$usage" if (@ARGV == 0); + + #### Remove the destination subdirectory, if it exists. + #### Attempts to clean it out using unlink may fail because + #### it can have many files. + if (-d "$split_dir") { + system ("/bin/rm -r $split_dir") << 256 && + die "$0: unable to rm \"$split_dir\"\n"; + } + + #### Create the destination subdirectory. + mkdir "$split_dir", 0755 || + die "$0: unable to create $split_dir directory: $!\n"; + + MAIN_LOOP: foreach $file (@ARGV) { + #### Strip off filename extension. + ($basename = $file) =~ s/\.[^\.]+$//; + + foreach $skip_file (@files_to_skip) { + if ($skip_file eq $file) { + system ("/bin/cp $file $split_dir/" . $basename. "_S1\.$extension"); + next MAIN_LOOP; + } + } + + &reset (); + + print "FILE: $file\n" if $verbose; + open INPUT, "$file" || die "$0: unable to open \"$file\"\n"; + + while (<INPUT>) { + #### Strip comments from $line and use that for processing. + #### But, use $_ for output, so that comments will be preserved. + my $line = $_; + + #### If we're in the midst of a multiline C comment, see + #### if it's finished on this line. + if ($in_C_comment) { + if ($line =~ s%^.*\*/%%) { + #### End C-style comment. + $in_C_comment = 0; + + if ($line =~ /^\s*$/ && ! $in_braces) { + #### No code on the line. + #&save_comment ($_); + next; + } + } else { + unless ($in_braces) { + #&save_comment ($_); + next; + } + } + } + + #### Strip C++-style comments. + if ($line =~ s%\s*//.*$%%) { + if ($line =~ /^\s*$/ && ! $in_braces) { + #### C++-style comment, without any code on the line. + #&save_comment ($_); + next; + } + } + + #### And C-style comments. + if ($line =~ m%/\*%) { + #### Begin C-style comment. Strip any complete comment(s), + #### then see what's left. + + $line =~ s%\s*/\*.*\*/\s*%%g; + + #### check to see if a preprocessor is on this line + if (! $in_braces) { + if ($line eq '') { + #### The line just had comment(s). Save it. + #&save_comment ($_); + next; + } else { + #### There's other text on the line. See if it's just the + #### start of a comment. + if ($line =~ m%/\*% && $line !~ m%\*/%) { + #### The C-style comment isn't terminated on this line. + $in_C_comment = 1; + #&save_comment ($_); + next; + } + } + } + } + + #### For now, skip ACE_RCSID's. Eventually, we might want to + #### consider putting them in _every_ file, if they're enabled. + next if $line =~ /^ACE_RCSID/; + + if ($in_braces) { + push @unknown, $_; + if ($line =~ /{/) { + ++$in_braces; + } elsif ($line =~ /^};/) { + #### }; at beginning of line could signify end of class + --$in_braces; + if ($in_braces == 0) { + push @intro, @unknown; + @unknown = (); + } + } elsif ($line =~ /^}/) { + #### } at beginning of line signifies end of function. + --$in_braces; + push @current_code, @unknown; + @unknown = (); + &finish_current ($basename, ++$current_file_number); + } elsif ($line =~ /};/) { + #### end of multi-line data delcaration + --$in_braces; + if ($in_braces == 0) { + push @current_code, @unknown; + @unknown = (); + &finish_current ($basename, ++$current_file_number); + } + } + } else { + #### Not in braces. + if (($line =~ m%[^/]*{%) && (! $preprocessor_continuation)) { + #### { signifies beginning of braces (obviously :). + if ($line =~ /};/) { + #### braces end on this line + push @unknown, $_; + push @current_code, @unknown; + @unknown = (); + &finish_current ($basename, ++$current_file_number); + } else { + push @unknown, $_; + $in_braces = 1; + $in_nonfunction_code = $top_of_file = 0; + } + } elsif ($line =~ /^}/) { + warn "$0: skipping unexpected } on line $. of \"$file\"\n"; + next; + } elsif ($line =~ /^typedef/) { + push @intro, $_; + } elsif ($line =~ /^\s*#/ || $preprocessor_continuation) { + #### Preprocessor directive. + if ($in_nonfunction_code) { + push @unknown, $_; + } else { + push @intro, $_; + } + $top_of_file = 0; + $preprocessor_continuation = /\\$/ ? 1 : 0; + + if ($line =~ m%^\s*#\s*if\s*(.*)(/.*)*$%) { + push @save_if, $_; + unshift @endif, "#endif /* $1 [Added by split-cpp.] */\n"; + + } elsif ($line =~ /^\s*#\s*endif/) { + #### End an #if/#else block. + unless (defined pop @save_if) { + pop @if; + if ($preserved_ifs > 0) { + --$preserved_ifs; + } + } + shift @endif; + + #### } elsif ($line =~ /^\s*#/) { + #### Any other preprocessor directive. + } + + } elsif ($line =~ /^\s*$/) { + #### Whitespace only, or empty line.. + push @current_code, "\n"; + if ($in_nonfunction_code) { + #### In the midst of non-function code, we reached a + #### blank line. Assume that we're done with it. + &finish_current ($basename, ++$current_file_number); + } else { + #### Not in a function, so add to intro. Just in case data or + #### a function follow it, flush now. + $preserved_ifs += $#save_if + 1; + &flush_current (\@intro); + } + + } elsif ($line =~ /;/) { + #### Data definition or semicolon-terminated macro invocation. + push @unknown, $_; + $top_of_file = 0; + + #### Is it file-static? Squash newlines out of @current_code. + my $statement = join (' ', @current_code); + if ($statement =~ /([^=[(]+)[=[(](.*)/) { + if ($1 =~ /static/) { + #### Move code to the intro. + push @intro, @current_comments; + @current_comments = (); + &flush_current (\@intro); + + #### Not separate code. + $in_nonfunction_code = 0; + + #### ???? Extract name from the left side and save for + #### later matching. + } else { + if ($statement =~ /^USEUNIT\s*\(/) { + #### Special-case those Borland USEUNIT things. + &flush_current (\@intro); + } else { + #### Non-static entity, with semicolon. Wrap it up. + push @current_code, @unknown; + @unknown = (); + &finish_current ($basename, ++$current_file_number); + } + } + } else { + #### Dunno. Wrap it up, anyways. + push @current_code, @unknown; + @unknown = (); + &finish_current ($basename, ++$current_file_number); + } + } else { + #### Beginning of data definition or function or class. + push @unknown, $_; + $in_nonfunction_code = 1; + $top_of_file = 0; + } + } + + if (eof) { + close (ARGV); #### To reset line number counter. + if ($#intro > $intro_length) { + #### Leftover prepreprocessor statement(s), such as #pragma + #### instantiate. + &finish_current ($basename, ++$current_file_number); + } + } + } + + close INPUT; + } +}; + + +#### +#### Save a comment in the appropriate array. +#### +#sub save_comment { +# my ($comment) = @_; +# +# if ($top_of_file) { +# push @intro, $comment; +# } else { +# push @current_comments, $comment; +# } +#} + + +#### +#### Flush the contents of the @current_code array to the destination +#### argument array. It is passed by reference. +#### +sub flush_current { + my ($destination) = @_; + + push @$destination, @current_code; + @current_code = (); +} + + +#### +#### Flush what we've got now to an output (split) file. +#### +sub finish_current { + my ($basename, $current_file_number) = @_; + + my $current_file_name = + sprintf "$split_dir$DIR_SEPARATOR${basename}_S%d.$extension", + $current_file_number++; + + if ($verbose) { + print "CURRENT OUTPUT FILE: $current_file_name\n"; + print "INTRO:\n"; + print @intro; + print @if; + print @current_comments; + print "CURRENT CODE:\n"; + print @current_code; + print @endif; + } + + open OUTPUT, "> $current_file_name" || + die "unable to open $current_file_name\n"; + + print OUTPUT "// Automatically generated by ACE's split-cpp.\n" . + "// DO NOT EDIT!\n\n"; + if ($debug) { + print OUTPUT "INTRO:\n", @intro, "IF:\n", @if, + "COMMENTS:\n", @current_comments, + "CURRENT:\n", @current_code, "ENDIF:\n", @endif; + } else { + print OUTPUT @intro, @if, @current_comments, @current_code, @endif; + } + + close OUTPUT; + + #### For detection of leftover preprocessor statements and + #### comments at end of file. + $intro_length = $#intro; + + @current_comments = @current_code = @save_if = (); + $in_braces = $in_nonfunction_code = 0; +} diff --git a/ACE/bin/subst_env.pl b/ACE/bin/subst_env.pl new file mode 100755 index 00000000000..be4007b7a61 --- /dev/null +++ b/ACE/bin/subst_env.pl @@ -0,0 +1,67 @@ +#!/usr/bin/perl +# +# $Id$ +# +# This script eases the transition from the CORBA::Environment& ACE_TRY_ENV +# declarations and method parameters to the ACE_ENV_ARG macros. +# It was used for converting TAO between versions 1.2.1 and 1.2.2. +# The converted output is written to stdout. +# Typical usage would be as follows: +# perl subst_env.pl file_with_acetryenv.cpp >file_with_taoenvarg.cpp +# +$linenum = 0; +$last=""; +$corbaenv = 'CORBA(::|_)Environment'; +$envdecl = 'CORBA(::|_)Environment *& *\w*[Ee][Nn][Vv]\w*'; +$default = '(TAO_|CORBA\::Environment\::)default_environment *\(\)'; +$envvar = '(ACE|TAO)_TRY_ENV'; +while (($l = <>)) { + $linenum++; + if ($l =~ /$corbaenv/) { + my $single = "SINGLE_"; + if ($last =~ /,\s*$/) { + $last =~ s/,\s*$/\n/; + $single = ""; + } elsif ($l =~ /,\s*$corbaenv/) { + $l =~ s/,\s*$corbaenv/ CORBA_Environment/; # Preparation. + $single = ""; + } + unless ($l =~ /${corbaenv}.*\)/) { # Need the method's closing paren. + chop $l; + my $nxt = <>; + $linenum++; + $nxt =~ s/^\s+//; + $l .= $nxt; + } + if ($l =~ /$envdecl/) { + if ($l =~ /$envdecl *= *$default/) { + $l =~ s/$envdecl *= *$default/ACE_ENV_${single}ARG_DECL_WITH_DEFAULTS/; + } else { + $l =~ s/$envdecl/ACE_ENV_${single}ARG_DECL/; + } + } else { + $l =~ s/$corbaenv *& */ACE_ENV_${single}ARG_DECL_NOT_USED/; + } + print $last; + print $l; + $last = ""; + } elsif ($l =~ /$envvar/) { + my $single = "SINGLE_"; + if ($last =~ /,\s*$/) { + $last =~ s/,\s*$/\n/; + $single = ""; + } elsif ($l =~ /,\s*$envvar/) { + $l =~ s/,\s*$envvar/ ACE_TRY_ENV/; # Preparation. + $single = ""; + } + $l =~ s/$envvar/ACE_ENV_${single}ARG_PARAMETER/; + print $last; + print $l; + $last = ""; + } else { + print $last; + $last = $l; + } +} +print $last; + diff --git a/ACE/bin/svcconf-convert.pl b/ACE/bin/svcconf-convert.pl new file mode 100755 index 00000000000..650bf1aae6d --- /dev/null +++ b/ACE/bin/svcconf-convert.pl @@ -0,0 +1,300 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# +# File: svcconf-convert.pl: +# Purpose: This perl script convert classic svc.conf file into XML svc.conf file format. +# Usage: svcconf-convert.pl [-i infile] [-o outfile] [-verbose] [-nocomment] +# -i: Specify the input classic svc.conf filename. +# If omitted, the default input filename is "svc.conf". +# -o: Specify the output XML svc.conf filename. +# If this argument is omitted, the resulting XML file will be written +# to file called <input filename>.xml. +# -verbose: Verbose output. +# -nocomment: Remove all comments. Use this argument if you have comments +# mixing in the middle of a classic svc.conf directive. + +$indent = 0; + +sub inc_indent +{ + $indent += 2; +} + +sub dec_indent +{ + $indent -= 2; +} + +sub get_indent +{ + $retv = 0; + print STDERR "$0 (", $lineno, "): Unbalanced macro pairs\n" if ($indent < 0); + $retv = $indent - 1 if ($indent > 0); + $retv; +} + +sub acexml_comment +{ + my $comment = shift; + print OUT " " x &get_indent (), "<!-- $comment -->\n"; +} + +sub acexml_start +{ + my $name = shift; + my $standalone = shift; + + print OUT " " x &get_indent (), "<$name"; + + + while (@attnames) + { + print OUT " ", pop (@attnames), '="', pop (@attvalues), '"'; + } + + if ($standalone != 0) + { + print OUT "/>\n"; + } + else + { + print OUT ">\n"; + inc_indent (); + } +} + +sub acexml_end +{ + my $name = shift; + + dec_indent (); + print OUT " " x &get_indent (), "</$name>\n"; +} + +$verbose = 0; +$nocomment = 0; +@attvalues = (); +@attnames = (); +$stream = ""; +$infile = ""; +$outfile = ""; + +while ( $#ARGV >= 0) +{ + if ($ARGV[0] =~ m/^-i/i) { + shift; + $infile = "$ARGV[0]"; + } + elsif ($ARGV[0] =~ m/^-o/i) { + shift; + $outfile = "$ARGV[0]"; + } + elsif ($ARGV[0] =~ m/^-verbose/i) { + $verbose = 1; + } + elsif ($ARGV[0] =~ m/^-nocomment/i) { + $nocomment = 1; + } + elsif ($ARGV[0] =~ m/^-(\?|h|help)/i) { # Help information + print +" Usage: svcconf-convert.pl [-i infile] [-o outfile] [-verbose] [-nocomment] + -i: Specify the input classic svc.conf filename. + If omitted, the default input filename is 'svc.conf'. + -o: Specify the output XML svc.conf filename. + If this argument is omitted, the resulting XML file will + be written to file called <input filename>.xml. + -verbose: Verbose output. + -nocomment: Remove all comments. Use this argument if you + have comments mixing in the middle of a classic + svc.conf directive. +"; + exit; + } + elsif ($ARGV[0] =~ m/^-/) { + warn "$0: unknown option $ARGV[0]\n"; + exit 1; + } + else { + die "unknow argument\n"; + } + shift; +} + +if ($infile eq "") { + print "Using default svc.conf name\n" if ($verbose != 0); + $infile = "svc.conf"; +} + + +if ($outfile eq "") { + $outfile = "$infile.xml"; +} +print "OUTFILE = $outfile \n"; + +open (OUT, "> $outfile") or die "Unable to open $outfile\n"; + +undef $/; +open (FH, "< $infile"); +$_ = <FH>; + +if ($nocomment) { + if (s/^\#(.*)$//mg) { + print "ts = $_\n" if ($verbose != 0); + } +} + +print "------------------------------------------------------------\n" if ($verbose != 0); + +print OUT "<?xml version='1.0'?>\n"; +print OUT "<!-- Converted from $infile by svcconf-convert.pl -->\n"; +acexml_start ("ACE_Svc_Conf", 0); + +while (length ($_) != 0) { + s/^\s*$//mg; + + print "INPUT =\n$_\n" if ($verbose); + PARSE: { + if (s/^\s*\#(.*)//) { + acexml_comment ($1); + print "# $1\n" if ($verbose); + } + if (s/^\s*{//) { + acexml_start ("module", 0); + print "open module\n" if ($verbose); + } + + if (s/^\s*}//) { + acexml_end ("module"); + acexml_end ($stream); + print "close module\n" if ($verbose); + } + + if (s/^\s*stream\s+dynamic\s+(\w+)\s+(\w+)\s*\*\s*(\S+):(\S+)\s*\(\s*\)(\s+(active|inactive))?(\s+"([^"]*)")?//) { + $name = $1; + $type = $2; + $path = $3; + $init = $4; + $state = $6; + $param = $8; + acexml_start ("streamdef"); + if ($status ne "") { + push @attnames, ("status"); + push @attvalues, ("$state"); + } + push @attnames, ("type"); + push @attvalues, ("$type"); + push @attnames, ("id"); + push @attvalues, ("$name"); + acexml_start ("dynamic", 0); + if ($param ne "") { + push @attnames, ("params"); + push @attvalues, ("$param"); + } + push @attnames, ("init"); + push @attvalues, ("$init"); + push @attnames, ("path"); + push @attvalues, ("$path"); + acexml_start ("initializer", 1); + acexml_end ("dynamic"); + $stream = "streamdef"; + print "stream dynamic $name $type * $init:$path \"$param\" $state\n" if ($verbose); + } + + if (s/^\s*stream\s+static\s+(\w+)(\s+("(.*)"))?//) { + $name = $1; + $param = $4; + acexml_start ("streamdef", 0); + if ($param ne "") { + push @attnames, ("params"); + push @attvalues, ("$param"); + } + push @attnames, ("id"); + push @attvalues, ("$name"); + acexml_start ("static", 1); + $stream = "streamdef"; + print "static $name \"$param\"\n" if ($verbose); + } + + if (s/^\s*stream\s+(\w+)//) { + $name = $1; + push @attnames, ("id"); + push @attvalues, ("$name"); + acexml_start ("stream", 0); + $stream = "stream"; + print "stream $name\n" if ($verbose); + } + + if (s/^\s*dynamic\s+(\w+)\s+(\w+)\s*\*\s*(\S+):(\S+)\s*\(\s*\)(\s+(active|inactive))?(\s+"([^"]*)")?//) { + $name = $1; + $type = $2; + $path = $3; + $init = $4; + $state = $6; + $param = $8; + if ($status ne "") { + push @attnames, ("status"); + push @attvalues, ("$state"); + } + push @attnames, ("type"); + push @attvalues, ("$type"); + push @attnames, ("id"); + push @attvalues, ("$name"); + acexml_start ("dynamic", 0); + if ($param ne "") { + push @attnames, ("params"); + push @attvalues, ("$param"); + } + push @attnames, ("init"); + push @attvalues, ("$init"); + push @attnames, ("path"); + push @attvalues, ("$path"); + acexml_start ("initializer", 1); + acexml_end ("dynamic"); + print "dynamic $name $type * $init:$path \"$param\" $state\n" if ($verbose); + } + + if (s/^\s*static\s+(\w+)(\s+("(.*)"))?//) { + $name = $1; + $param = $4; + if ($param ne "") { + push @attnames, ("params"); + push @attvalues, ("$param"); + } + push @attnames, ("id"); + push @attvalues, ("$name"); + acexml_start ("static", 1); + print "static $name \"$param\"\n" if ($verbose); + } + + if ( s/^\s*resume\s+(\w+)//) { + $name = $1; + push @attnames, ("id"); + push @attvalues, ("$name"); + acexml_start ("resume", 1); + print "resume $name\n" if ($verbose); + } + + if ( s/^\s*remove\s+(\w+)//) { + $name = $1; + push @attnames, ("id"); + push @attvalues, ("$name"); + acexml_start ("remove", 1); + print "remove $name\n" if ($verbose); + } + + if ( s/^\s*suspend\s+(\w+)//) { + $name = $1; + push @attnames, ("id"); + push @attvalues, ("$name"); + acexml_start ("suspend", 1); + print "suspend $name\n" if ($verbose); + } + + $nothing = 1; + } +} + +acexml_end ("ACE_Svc_Conf"); diff --git a/ACE/bin/tao_env.pl b/ACE/bin/tao_env.pl new file mode 100755 index 00000000000..0ac889ef308 --- /dev/null +++ b/ACE/bin/tao_env.pl @@ -0,0 +1,17 @@ +eval '(exit $?0)' && eval 'exec perl -pi -S $0 ${1+"$@"}' + & eval 'exec perl -pi -S $0 $argv:q' + if 0; + +# $Id$ +# +# You may want to run the "find" command with this script, which maybe +# something like this: +# +# find . -type f \( -name "*.i" -o -name "*.h" -o -name "*.C" -o -name "*.cc" -o -name "*.c" -o -name "*.cpp" -o -name "*.hpp" -o -name "*.ipp" \) -print | xargs $ACE_ROOT/bin/auto_ptr.perl + +# The first three lines above let this script run without specifying the +# full path to perl, as long as it is in the user's PATH. +# Taken from perlrun man page. + +s/^_env/TAO_IN_ENV/; +s/([^_A-Za-z])_env/$1TAO_IN_ENV/g; diff --git a/ACE/bin/tao_orb_tests.lst b/ACE/bin/tao_orb_tests.lst new file mode 100644 index 00000000000..3d797d07886 --- /dev/null +++ b/ACE/bin/tao_orb_tests.lst @@ -0,0 +1,259 @@ +# $Id$ +# +# This is the list of run_test.pl's that need to be run by +# auto_run_tests.pl. +# Each line has its own test, and a test can be followed by a +# list of configurations it does _not_ run on. +# +# Example: TAO\examples\foo\run_test.pl: !MINIMUM !ST +# +# NOTE: This file contains tests only for TAO's ORB. Please do not +# include things like performance-tests, and examples here. + +TAO/tests/ORB_Local_Config/Bunch/run_test.pl: +TAO/tests/ORB_Local_Config/Bug_1459/run_test.pl: SSL !STATIC +TAO/tests/ORB_Local_Config/Separation/run_test.pl: +TAO/tests/ORB_Local_Config/Service_Dependency/run_test.pl: !ST !STATIC +TAO/tests/ORB_Local_Config/Shared/run_test.pl: +TAO/tests/ORB_Local_Config/Simple/run_test.pl: +TAO/tests/ORB_Local_Config/Two_DLL_ORB/run_test.pl: !ST !STATIC +TAO/tests/Param_Test/run_test.pl: !MINIMUM !ACE_FOR_TAO +TAO/tests/Param_Test/run_test_dii.pl: !MINIMUM !ACE_FOR_TAO +TAO/tests/AMI/run_test.pl: !MINIMUM +TAO/tests/AMI_Timeouts/run_test.pl: !MINIMUM !ST +TAO/tests/AMH_Exceptions/run_test.pl: !MINIMUM !DISABLE_ToFix_LynxOS_x86 !ACE_FOR_TAO +TAO/tests/AMH_Oneway/run_test.pl: !MINIMUM !DISABLE_ToFix_LynxOS_x86 !ACE_FOR_TAO +TAO/tests/Collocation/run_test.pl: !ACE_FOR_TAO +TAO/tests/Collocation_Tests/run_test.pl: !ST +TAO/tests/Collocation_Opportunities/run_test.pl: !ST +TAO/tests/Collocation_Oneway_Tests/run_test.pl: !ST !NO_MESSAGING +TAO/tests/Collocation_Exception_Test/run_test.pl: !ST +TAO/tests/CollocationLockup/run_test.pl: !ST !DISABLE_ToFix_LynxOS_x86 +TAO/tests/OctetSeq/run_test.pl: !ACE_FOR_TAO +TAO/tests/OctetSeq/run_test1.pl: !STATIC !ACE_FOR_TAO +TAO/tests/OctetSeq/run_test2.pl: !STATIC !ACE_FOR_TAO +TAO/tests/BiDirectional/run_test.pl: !MINIMUM !GIOP10 !DISABLE_BIDIR !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 +TAO/tests/BiDirectional/run_test_ipv6.pl: IPV6 !MINIMUM !GIOP10 !DISABLE_BIDIR +TAO/tests/BiDirectional_NestedUpcall/run_test.pl: !MINIMUM !STATIC !GIOP10 !DISABLE_BIDIR !DISABLE_ToFix_LynxOS_PPC +TAO/tests/BiDirectional_DelayedUpcall/run_test.pl: !MINIMUM !STATIC !GIOP10 !DISABLE_BIDIR !DISABLE_ToFix_LynxOS_PPC +TAO/tests/Leader_Followers/run_test.pl: !ST !ACE_FOR_TAO +TAO/tests/Leader_Followers/run_test_mt.pl: !ST !ACE_FOR_TAO +TAO/tests/Multiple_Inheritance/run_test.pl: +TAO/tests/Bug_1269_Regression/run_test.pl: !Win32 !MINIMUM +TAO/tests/Bug_1495_Regression/run_test.pl: !MINIMUM !ST !DISABLE_INTERCEPTORS +TAO/tests/Bug_1568_Regression/run_test.pl: !NO_MESSAGING +TAO/tests/Bug_1670_Regression/run_test.pl: !NO_MESSAGING +TAO/tests/Bug_1270_Regression/run_test.pl: !Win32 !MINIMUM !DISABLE_ToFix_LynxOS_PPC +TAO/tests/Bug_1020_Basic_Regression/run_test.pl: !Win32 !MINIMUM !ST +TAO/tests/Bug_1020_Regression/run_test.pl: !MINIMUM !ST !Win32 +TAO/tests/Bug_1254_Regression/run_test.pl: +TAO/tests/Bug_1361_Regression/run_test.pl: !MINIMUM !ST !Win32 !IRIX +TAO/tests/Bug_1482_Regression/run_test.pl: !VxWorks !MINIMUM !ST !DISABLE_ToFix_LynxOS_PPC +TAO/tests/Bug_1551_Regression/run_test.pl: !VxWorks !MINIMUM !ST !IRIX +TAO/tests/Bug_1676_Regression/run_test.pl: +TAO/tests/Bug_2084_Regression/run_test.pl: !ST +TAO/tests/Bug_2134_Regression/run_test.pl: !MINIMUM +TAO/tests/Bug_2174_Regression/run_test.pl: !MINIMUM +TAO/tests/Bug_2183_Regression/run_test.pl: !ACE_FOR_TAO +TAO/tests/Bug_2186_Regression/run_test.pl: !MINIMUM !ACE_FOR_TAO +TAO/tests/Bug_2201_Regression/run_test.pl: +TAO/tests/Bug_2234_Regression/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Bug_2289_Regression/run_test.pl: +TAO/tests/Bug_2319_Regression/run_test.pl: !MINIMUM !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 +TAO/tests/Bug_2328_Regression/run_test.pl: +TAO/tests/Bug_2345_Regression/run_test.pl: !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 +TAO/tests/Bug_2349_Regression/run_test.pl: !DISABLE_ToFix_LynxOS_x86 +TAO/tests/Bug_2417_Regression/run_test.pl: !MINIMUM !ST +TAO/tests/Bug_2429_Regression/run_test.pl: !MINIMUM +TAO/tests/Bug_2494_Regression/run_test.pl: !ST +TAO/tests/Bug_2503_Regression/run_test.pl: !ST +TAO/tests/Bug_2542_Regression/run_test.pl: +TAO/tests/Bug_2593_Regression/run_test.pl: !MINIMUM !STATIC !ACE_FOR_TAO +TAO/tests/Bug_2595_Regression/run_test.pl: +TAO/tests/RTCORBA/Banded_Connections/run_test.pl: !MINIMUM !ST +TAO/tests/RTCORBA/Client_Propagated/run_test.pl: !MINIMUM !ST +TAO/tests/RTCORBA/Client_Protocol/run_test.pl: !MINIMUM !IPV6 !ACE_FOR_TAO +TAO/tests/RTCORBA/Collocation/run_test.pl: !MINIMUM !ST +TAO/tests/RTCORBA/Destroy_Thread_Pool/run_test.pl: !MINIMUM !ST +TAO/tests/RTCORBA/Explicit_Binding/run_test.pl: !VxWorks !MINIMUM !IPV6 !ACE_FOR_TAO +TAO/tests/RTCORBA/Linear_Priority/run_test.pl: !MINIMUM !ST !DISABLE_ToFix_LynxOS_PPC +TAO/tests/RTCORBA/MT_Client_Protocol_Priority/run_test.pl: !MINIMUM !ST !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/tests/RTCORBA/ORB_init/run_test.pl: !MINIMUM +TAO/tests/RTCORBA/Persistent_IOR/run_test.pl: !MINIMUM !ST +TAO/tests/RTCORBA/Policies/run_test.pl: !MINIMUM !ST +TAO/tests/RTCORBA/Policy_Combinations/run_test.pl: !MINIMUM !ST !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 +TAO/tests/RTCORBA/Priority_Inversion_With_Bands/run_test.pl: !MINIMUM !ST !ACE_FOR_TAO +TAO/tests/RTCORBA/Private_Connection/run_test.pl: !MINIMUM +TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/run_test.pl: !VxWorks !MINIMUM !ST !IPV6 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/tests/RTCORBA/RTMutex/run_test.pl: !MINIMUM !ST +TAO/tests/RTCORBA/Server_Declared/run_test.pl: !MINIMUM !ST +TAO/tests/RTCORBA/Server_Protocol/run_test.pl: !VxWorks !MINIMUM !IPV6 !ACE_FOR_TAO +TAO/tests/RTCORBA/Thread_Pool/run_test.pl: !MINIMUM !ST !ACE_FOR_TAO +TAO/tests/RTScheduling/VoidData/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/RTScheduling/Thread_Cancel/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST +TAO/tests/RTScheduling/DT_Spawn/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/RTScheduling/Current/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST +TAO/tests/RTScheduling/Scheduling_Interceptor/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !STATIC +TAO/tests/OBV/Any/run_test.pl: +TAO/tests/OBV/Collocated/Forward/run_test.pl: !ST !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 +TAO/tests/OBV/Factory/run_test.pl: +TAO/tests/OBV/Forward/run_test.pl: +TAO/tests/OBV/TC_Alignment/run_test.pl: +TAO/tests/OBV/ValueBox/run_test.pl: +TAO/tests/OBV/Truncatable/run_test.pl: +TAO/tests/OBV/Simple/run_test.pl: +TAO/tests/Hello/run_test.pl: +TAO/tests/IPV6/run_test.pl: IPV6 +TAO/tests/AlternateIIOP/run_test.pl: +TAO/tests/Optimized_Connection/run_test.pl: !DISABLE_ToFix_LynxOS_x86 !ACE_FOR_TAO +TAO/tests/Cache_Growth_Test/run_test.pl: +TAO/tests/Muxing/run_test.pl: !ST +TAO/tests/Muxed_GIOP_Versions/run_test.pl: !VxWorks !ST !DISABLE_ToFix_LynxOS_PPC +TAO/tests/MT_Client/run_test.pl: !ST +TAO/tests/MT_BiDir/run_test.pl: !ST !MINIMUM !GIOP10 !DISABLE_BIDIR +TAO/tests/File_IO/run_test.pl: !ST !MINIMUM +TAO/tests/MT_Server/run_test.pl: !ST +TAO/tests/No_Server_MT_Connect_Test/run_test.pl: !ST !MINIMUM +TAO/tests/Connect_Strategy_Test/run_test.pl: +# DISABLED TAO/tests/Client_Leaks/run_test.pl: !VxWorks !ST !Tru64 +TAO/tests/Server_Leaks/run_test.pl: !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 +TAO/tests/Smart_Proxies/Policy/run_test.pl: !VxWorks +TAO/tests/Smart_Proxies/run_test.pl: +TAO/tests/Smart_Proxies/dtor/run_test.pl: +TAO/tests/Stack_Recursion/run_test.pl: !ST !DISABLE_ToFix_LynxOS_PPC +TAO/tests/Faults/run_test.pl: !VxWorks !MINIMUM !ST +TAO/tests/CallbackTest/run_test.pl: !MINIMUM +TAO/tests/CallbackTest/run_test_ipv6.pl: IPV6 !MINIMUM +TAO/tests/CallbackTest/run_test_mixed_ip.pl: IPV6 !MINIMUM +TAO/tests/Crashed_Callback/run_test.pl: !MINIMUM +# Disabled Crash On Write on Win32, see bugzilla 959 why +TAO/tests/Crash_On_Write/run_test.pl: !VxWorks !ST !Win32 +TAO/tests/Nested_Upcall_Crash/run_test.pl: !MINIMUM +TAO/tests/NestedUpcall/Simple/run_test.pl: !ST +TAO/tests/NestedUpcall/MT_Client_Test/run_test.pl: !ST +TAO/tests/NestedUpcall/Triangle_Test/run_test.pl: +TAO/tests/Nested_Event_Loop/run_test.pl: !ACE_FOR_TAO +TAO/tests/POA/Identity/run_test.pl: !MINIMUM +TAO/tests/POA/Policies/run_test.pl: +TAO/tests/POA/Excessive_Object_Deactivations/run_test.pl: +TAO/tests/POA/Persistent_ID/run_test.pl: +TAO/tests/POA/Etherealization/run_test.pl: !MINIMUM +TAO/tests/POA/Object_Reactivation/run_test.pl: !ST +TAO/tests/POA/POA_Destruction/run_test.pl: +TAO/tests/POA/Default_Servant/run_test.pl: !MINIMUM +TAO/tests/POA/Single_Threaded_POA/run_test.pl: !MINIMUM !ST +TAO/tests/POA/Non_Servant_Upcalls/run_test.pl: !SUNCC5_1 +TAO/tests/POA/MT_Servant_Locator/run_test.pl: !MINIMUM !ST +TAO/tests/POA/Bug_2511_Regression/run_test.pl: !MINIMUM +TAO/tests/POA/Nested_Non_Servant_Upcalls/run_test.pl: !MINIMUM !ST +TAO/tests/POA/Deactivate_Object/run_test.pl +TAO/tests/POA/Reference_Counting/run_test.pl +TAO/tests/POA/Current/run_test.pl: +TAO/tests/POA/wait_for_completion/run_test.pl: +TAO/tests/POA/POAManagerFactory/run_test.pl: +TAO/tests/POA/EndpointPolicy/run_test.pl: +TAO/tests/IORManipulation/run_test.pl: +TAO/tests/Policies/run_test.pl: !MINIMUM !ST +TAO/tests/Timeout/run_test.pl: !MINIMUM +TAO/tests/MT_Timeout/run_test.pl: !MINIMUM !ST +TAO/tests/Timed_Buffered_Oneways/run_test.pl: !MINIMUM +TAO/tests/Single_Read/run_test.pl: +TAO/tests/Connection_Timeout/run_test.pl: !VxWorks !MINIMUM !ACE_FOR_TAO +#TAO/tests/Connection_Failure/run_test.pl ! Timesout for good reasons +TAO/tests/MProfile_Connection_Timeout/run_test.pl: !MINIMUM !ACE_FOR_TAO +TAO/tests/Codec/run_test.pl: +TAO/tests/Bug_1693_Test/run_test.pl: +TAO/tests/IDL_Test/run_test.pl: !NO_MESSAGING +TAO/tests/ORB_init/run_test.pl: +TAO/tests/ORB_destroy/run_test.pl: +TAO/tests/ORB_shutdown/run_test.pl: +TAO/tests/DSI_Gateway/run_test.pl: !MINIMUM +TAO/tests/DynAny_Test/run_test.pl: !MINIMUM +TAO/tests/Connection_Purging/run_test.pl: !VxWorks !ST !ACE_FOR_TAO +TAO/tests/Server_Connection_Purging/run_test.pl: !VxWorks !Win32 +TAO/tests/LongUpcalls/run_test.pl: !VxWorks !MINIMUM +TAO/tests/Reliable_Oneways/run_test.pl: !MINIMUM +TAO/tests/Blocking_Sync_None/run_test.pl: !MINIMUM +TAO/tests/Oneway_Buffering/run_message_count.pl: !MINIMUM +TAO/tests/Oneway_Buffering/run_buffer_size.pl: !MINIMUM +TAO/tests/Oneway_Buffering/run_timeout.pl: !MINIMUM +TAO/tests/Oneway_Buffering/run_timeout_reactive.pl: !MINIMUM +TAO/tests/AMI_Buffering/run_message_count.pl: !MINIMUM !ST +TAO/tests/AMI_Buffering/run_buffer_size.pl: !MINIMUM !ST +TAO/tests/AMI_Buffering/run_timeout.pl: !MINIMUM !ST +TAO/tests/AMI_Buffering/run_timeout_reactive.pl: !MINIMUM !ST +TAO/tests/Big_AMI/run_test.pl: !MINIMUM +TAO/tests/Big_Oneways/run_test.pl: !ST +TAO/tests/Big_Twoways/run_test.pl: !ST +TAO/tests/Big_Reply/run_test.pl: !ST +TAO/tests/Big_Request_Muxing/run_test.pl: !ST !MINIMUM +TAO/tests/Oneways_Invoking_Twoways/run_test.pl: !ST +TAO/tests/Queued_Message_Test/run_test.pl: +TAO/tests/DLL_ORB/run_test.pl: !STATIC +TAO/tests/InterOp-Naming/run_test.pl: !MINIMUM +TAO/tests/Multiple/run_test.pl: !VxWorks !SUNCC5_1 +TAO/tests/Exposed_Policies/run_test.pl: !MINIMUM !ST !ACE_FOR_TAO +TAO/tests/Portable_Interceptors/Bug_1559/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/Bug_2510_Regression/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/Collocated/Dynamic/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST +TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST +TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST +TAO/tests/Portable_Interceptors/Collocated/Service_Context_Manipulation/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST +TAO/tests/Portable_Interceptors/Dynamic/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/IORInterceptor/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !GIOP10 +TAO/tests/Portable_Interceptors/ForwardRequest/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/Service_Context_Manipulation/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/Request_Interceptor_Flow/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !HAS_EXTENDED_FT_INTERCEPTORS +TAO/tests/Portable_Interceptors/PICurrent/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/AMI/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/ORB_Shutdown/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/PolicyFactory/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/Bug_2088/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/Recursive_ORBInitializer/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/Register_Initial_References/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/Slot/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/AdvSlot/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/AdvSlotDblCpy/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Portable_Interceptors/AdvSlotExt/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/ORT/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS +TAO/tests/Object_Loader/run_test.pl: !VxWorks !STATIC +TAO/tests/Two_Objects/run_test.pl: !ST +TAO/tests/UNKNOWN_Exception/run_test.pl: Exceptions +TAO/tests/Native_Exceptions/run_test.pl: Exceptions +TAO/tests/Servant_To_Reference_Test/run_test.pl: !MINIMUM !ST +TAO/tests/Sequence_Unit_Tests/run_test.pl: +TAO/tests/Typedef_String_Array/run_test.pl: +TAO/tests/Bug_1535_Regression/run_test.pl: !MINIMUM +TAO/tests/GIOP_Fragments/PMB_With_Fragments/run_test.pl: +TAO/tests/CodeSets/simple/run_test.pl: !VxWorks !GIOP10 !STATIC +TAO/tests/Hang_Shutdown/run_test.pl: !ST !ACE_FOR_TAO +TAO/tests/Any/Recursive/run_test.pl: +TAO/tests/CSD_Strategy_Tests/TP_Test_1/run_test.pl: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl remote: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl collocated: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl remote_orbthreads: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl remote_servants: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl remote_csdthreads: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl remote_big: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl big: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl remote: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl collocated: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl remote_orbthreads: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl remote_servants: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl remote_csdthreads: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl remote_big: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl big: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl remote: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl collocated: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl remote_orbthreads: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl remote_servants: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl remote_csdthreads: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl remote_big: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl big: !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/run_test.pl: !STATIC !ST !VxWorks +TAO/tests/CSD_Strategy_Tests/TP_Test_Static/run_test.pl: !ST !VxWorks +TAO/tests/Permanent_Forward/run_test.pl: +TAO/tests/Parallel_Connect_Strategy/run_test.pl: diff --git a/ACE/bin/tao_other_tests.lst b/ACE/bin/tao_other_tests.lst new file mode 100644 index 00000000000..04517a0c6b7 --- /dev/null +++ b/ACE/bin/tao_other_tests.lst @@ -0,0 +1,159 @@ +# $Id$ +# +# This is the list of run_test.pl's that need to be run by +# auto_run_tests.pl. +# Each line has its own test, and a test can be followed by a +# list of configurations it does _not_ run on. +# +# Example: TAO\examples\foo\run_test.pl: !MINIMUM !ST +# +# NOTE: This file contains examples and other service level test for +# TAO's. Please do not include regular tests here. +TAO/performance-tests/Cubit/TAO/IDL_Cubit/run_test.pl: !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 !MINIMUM !ST !Win32 !ACE_FOR_TAO +#TAO/performance-tests/Cubit/TAO/IDL_Cubit/run_test_lite.pl: !MINIMUM !ST !STATIC !Win32 !ACE_FOR_TAO +TAO/performance-tests/Cubit/TAO/MT_Cubit/run_test.pl: !ST !OpenBSD !Win32 !ACE_FOR_TAO +TAO/performance-tests/Latency/Single_Threaded/run_test.pl -n 1000: !Win32 !ACE_FOR_TAO +TAO/performance-tests/Latency/Thread_Pool/run_test.pl -n 1000: !ST !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Latency/Thread_Per_Connection/run_test.pl -n 1000: !ST !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Latency/AMI/run_test.pl: !DISABLE_ToFix_LynxOS_PPC !MINIMUM !ST !Win32 !ACE_FOR_TAO +TAO/performance-tests/Latency/DSI/run_test.pl: !DISABLE_ToFix_LynxOS_PPC !MINIMUM !Win32 !ACE_FOR_TAO +TAO/performance-tests/Latency/DII/run_test.pl: !DISABLE_ToFix_LynxOS_PPC !MINIMUM !Win32 !ACE_FOR_TAO +TAO/performance-tests/Latency/Deferred/run_test.pl: !DISABLE_ToFix_LynxOS_PPC !MINIMUM !Win32 !ACE_FOR_TAO +TAO/performance-tests/Sequence_Latency/Single_Threaded/run_test.pl: !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Sequence_Latency/Thread_Pool/run_test.pl: !ST !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Sequence_Latency/Thread_Per_Connection/run_test.pl: !ST !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Sequence_Latency/AMI/run_test.pl: !MINIMUM !ST !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Sequence_Latency/DSI/run_test.pl: !MINIMUM !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Sequence_Latency/DII/run_test.pl: !MINIMUM !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Sequence_Latency/Deferred/run_test.pl: !MINIMUM !Win32 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/performance-tests/Throughput/run_test.pl: !Win32 !ACE_FOR_TAO +TAO/performance-tests/POA/Object_Creation_And_Registration/run_test.pl: !Win32 !ACE_FOR_TAO +TAO/performance-tests/RTCorba/Oneways/Reliable/run_test.pl: !MINIMUM !Win32 +TAO/performance-tests/Protocols/run_test.pl: !MINIMUM !STATIC !Win32 !ACE_FOR_TAO +TAO/examples/POA/Adapter_Activator/run_test.pl: !MINIMUM !SUNCC5_1 !ACE_FOR_TAO +TAO/examples/POA/POA_BiDir/run_test.pl: !MINIMUM !DISABLE_BIDIR +TAO/examples/POA/DSI/run_test.pl: !MINIMUM +TAO/examples/POA/Default_Servant/run_test.pl: !MINIMUM +TAO/examples/POA/Explicit_Activation/run_test.pl: !MINIMUM !ACE_FOR_TAO +TAO/examples/POA/FindPOA/run_test.pl: !MINIMUM +TAO/examples/POA/Forwarding/run_test.pl: !MINIMUM +TAO/examples/POA/NewPOA/run_test.pl: !MINIMUM +TAO/examples/POA/On_Demand_Activation/run_test.pl: !MINIMUM !STATIC !ACE_FOR_TAO +TAO/examples/POA/On_Demand_Loading/run_test.pl: !MINIMUM !STATIC !KCC_Linux !ACE_FOR_TAO +TAO/examples/POA/Reference_Counted_Servant/run_test.pl: !SUNCC5_1 !MINIMUM !ACE_FOR_TAO +TAO/examples/POA/Loader/run_test.pl: !MINIMUM !STATIC !KCC_Linux !ACE_FOR_TAO +TAO/examples/POA/RootPOA/run_test.pl +TAO/examples/Simple/bank/run_test.pl: !NO_MESSAGING +TAO/examples/Simple/grid/run_test.pl: !NO_MESSAGING +TAO/examples/Simple/time-date/run_test.pl: !ST !STATIC !NO_MESSAGING !Win32 +TAO/examples/Simple/time/run_test.pl: !NO_MESSAGING !Win32 +TAO/examples/Quoter/run_test.pl: !DISABLE_ToFix_LynxOS_PPC !MINIMUM !Win32 +TAO/examples/Load_Balancing/run_test.pl: !MINIMUM !SUNCC5_1 !ACE_FOR_TAO +TAO/examples/PluggableUDP/tests/Basic/run_test.pl: !STATIC !ST !NO_DIOP !ACE_FOR_TAO +TAO/examples/PluggableUDP/tests/SimplePerformance/run_test.pl: !NO_DIOP !ACE_FOR_TAO +TAO/examples/AMH/Sink_Server/run_test.pl: !MINIMUM !Win32 !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Pluggable/run_test.pl -p TCP,UDP,RTP_UDP: !MINIMUM !DISABLE_ToFix_LynxOS_x86 !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Pluggable/run_test.pl -p SCTP_SEQ: !MINIMUM SCTP !DISABLE_ToFix_LynxOS_x86 !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Full_Profile/run_test.pl: !MINIMUM !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 +TAO/orbsvcs/tests/AVStreams/Multicast/run_test.pl: !MINIMUM !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_PPC !DISABLE_ToFix_LynxOS_x86 +#TAO/orbsvcs/tests/AVStreams/Multicast_Full_Profile/run_test.pl: !MINIMUM !ACE_FOR_TAO +#TAO/orbsvcs/tests/AVStreams/Latency/run_test.pl: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Simple_Two_Stage/run_test.pl -p TCP,UDP,RTP_UDP: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Simple_Two_Stage/run_test.pl -p SCTP_SEQ: !MINIMUM SCTP !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Simple_Two_Stage_With_QoS/run_test.pl -p TCP,UDP,RTP_UDP: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Simple_Two_Stage_With_QoS/run_test.pl -p SCTP_SEQ: !MINIMUM SCTP !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Simple_Three_Stage/run_test.pl: !MINIMUM !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_x86 +TAO/orbsvcs/tests/AVStreams/Asynch_Three_Stage/run_test.pl: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/AVStreams/Component_Switching/run_test.pl: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_1334_Regression/run_test.pl: !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_1393_Regression/run_test.pl: !MINIMUM !NO_IFR !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_1395_Regression/run_test.pl: !LynxOS !MINIMUM !NO_MESSAGING !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_1436_Regression/run_test.pl: !MINIMUM !NO_IFR !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_1437_Regression/run_test.pl: !MINIMUM !NO_MESSAGING !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_1630_Regression/run_test.pl: !NO_IFR !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_2074_Regression/run_test.pl: !MINIMUM !ST !NO_MESSAGING +TAO/orbsvcs/tests/Bug_2247_Regression/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_2248_Regression/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_2285_Regression/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_2285_Regression/run_test2.pl: !MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_2287_Regression/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_2316_Regression/run_test.pl: !MINIMUM !STATIC !SUNCC5_1 +TAO/orbsvcs/tests/Bug_2377_Regression/run_test.pl: !MINIMUM !STATIC +TAO/orbsvcs/tests/CosEvent/Basic/run_test.pl: !ST !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Simple_Naming/run_test.pl: !ST !SUNCC5_1 !NO_MESSAGING !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_x86 !DISABLE_ToFix_LynxOS_PPC +TAO/orbsvcs/tests/Simple_Naming/run_test_ffp.pl: !ST !SUNCC5_1 !MINIMUM !NO_MESSAGING !ACE_FOR_TAO +TAO/orbsvcs/tests/Redundant_Naming/run_test.pl: !ST !SUNCC5_1 !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Trading/run_test.pl: !MINIMUM !SUNCC5_1 +TAO/orbsvcs/tests/Event/Basic/run_test.pl: !ST !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Event/Performance/run_test.pl: !ST !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/EC_Custom_Marshal/run_test.pl: !ST !MINIMUM !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_x86 +TAO/orbsvcs/tests/EC_Throughput/run_test.pl: !ST !MINIMUM !DISABLE_ToFix_LynxOS_x86 !ACE_FOR_TAO +TAO/orbsvcs/tests/EC_MT_Mcast/run_test.pl:!ST !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Event/Mcast/RTEC_MCast_Federated/run_test.pl:!ST !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/FaultTolerance/GroupRef_Manipulation/run_test.pl:!MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/FaultTolerance/IOGR/run_test.pl:!MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/FaultTolerance/IOGRManipulation/run_test.pl:!MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Bug_2137_Regression/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/InterfaceRepo/Application_Test/run_test.pl: !MINIMUM !NO_IFR !STATIC !ACE_FOR_TAO +TAO/orbsvcs/tests/InterfaceRepo/IDL3_Test/run_test.pl: !MINIMUM !NO_IFR !ACE_FOR_TAO +TAO/orbsvcs/tests/InterfaceRepo/IFR_Test/run_test.pl: !MINIMUM !NO_IFR !ACE_FOR_TAO +TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/run_test.pl: !MINIMUM !NO_IFR !ACE_FOR_TAO +TAO/orbsvcs/tests/InterfaceRepo/Latency_Test/run_test.pl: !MINIMUM !NO_IFR !ACE_FOR_TAO +TAO/orbsvcs/tests/InterfaceRepo/Persistence_Test/run_test.pl: !MINIMUM !NO_IFR !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/run_test.pl both_ir: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/run_test.pl nestea_ir: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/run_test.pl airplane_ir: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/run_test.pl persistent_ir: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/run_test.pl nt_service_ir: !MINIMUM Win32 !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/run_test.pl shutdown: !MINIMUM !DISABLE_ToFix_LynxOS_x86 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/run_test.pl perclient: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/NameService/run_test.pl: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/locked/run_test.pl: !MINIMUM !DISABLE_ToFix_LynxOS_x86 !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +TAO/orbsvcs/tests/ImplRepo/scale/run_test.pl -servers 5 -objects 5: !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/examples/ImR/Combined_Service/run_test.pl: !MINIMUM !STATIC !ST !ACE_FOR_TAO +TAO/orbsvcs/examples/CosEC/TypedSimple/run_test.pl: !MINIMUM !NO_IFR !ACE_FOR_TAO +TAO/orbsvcs/tests/CosEvent/Timeout/run_test.pl: !MINIMUM !ST !NO_MESSAGING !ACE_FOR_TAO +TAO/orbsvcs/tests/Log/Basic_Log_Test/run_test.pl: !NO_MESSAGING !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Basic/run_test.pl notify.reactive.conf: !ST !NO_MESSAGING !STATIC !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Basic/run_test_ipv6.pl notify.reactive.conf: IPV6 !ST !NO_MESSAGING !STATIC !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Basic/run_test.pl notify.mt.conf: !ST !NOTIFY !NO_MESSAGING !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Basic/run_test_ipv6.pl notify.mt.conf: IPV6 !ST !NOTIFY !NO_MESSAGING !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Basic/run_test.pl notify.rt.conf: !ST !STATIC !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Basic/run_test_ipv6.pl notify.rt.conf: IPV6 !ST !STATIC !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Blocking/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_x86 +TAO/orbsvcs/tests/Notify/Discarding/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_x86 +TAO/orbsvcs/tests/Notify/MT_Dispatching/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Ordering/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_x86 +TAO/orbsvcs/tests/Notify/performance-tests/Filter/run_test.pl: !ST !NO_MESSAGING !MINIMUM !IRIX !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/performance-tests/RedGreen/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Sequence_Multi_Filter/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Structured_Filter/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO !DISABLE_ToFix_LynxOS_x86 +TAO/orbsvcs/tests/Notify/Structured_Multi_Filter/run_test.pl: !ST !NO_MESSAGING !MINIMUM !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/Reconnecting/run_test.pl: !ST !NO_MESSAGING !MINIMUM !STATIC !ACE_FOR_TAO +TAO/orbsvcs/tests/Notify/XML_Persistence/run_test.pl: !ST !NO_MESSAGING !MINIMUM !STATIC !ACE_FOR_TAO +TAO/orbsvcs/tests/EC_Mcast/run_test.pl: !NO_MCAST !NO_MESSAGING !DISABLE_ToFix_LynxOS_PPC !ACE_FOR_TAO +# FAILS 'TAO/orbsvcs/tests/EC_Multiple/run_test.pl +# NO REDIRECTION TAO/examples/Simple/echo/run_test.pl < Echo.idl +TAO/orbsvcs/tests/Property/run_test.pl: !NO_MESSAGING !ACE_FOR_TAO +#HANGS TAO/orbsvcs/tests/ImplRepo/run_test.pl airplane +#HANGS'TAO/orbsvcs/tests/ImplRepo/run_test.pl airplane_ir +TAO/orbsvcs/tests/Security/Big_Request/run_test.pl: SSL !STATIC !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Security/Callback/run_test.pl: SSL !STATIC !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test.pl: !ST SSL !STATIC !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Security/MT_IIOP_SSL/run_test.pl: !ST SSL !STATIC !DISABLE_INTERCEPTORS !ACE_FOR_TAO +#Bug 1647. run_test_harsh.pl takes 5 minutes; but there aren't many SSL builds +TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_harsh.pl: !ST SSL !STATIC !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Security/Crash_Test/run_test.pl: SSL !STATIC !DISABLE_INTERCEPTORS !ACE_FOR_TAO +TAO/orbsvcs/tests/Miop/McastHello/run_test.pl: !MINIMUM !STATIC !SUNCC5_1 !NO_MCAST +# The following 2 tests use dynamic loading to change the default reactor on Windows +TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !STATIC !ACE_FOR_TAO +TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !STATIC !ACE_FOR_TAO +TAO/orbsvcs/tests/LoadBalancing/LoadMonitor/CPU/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !NO_LOADAVG !DISABLE_ToFix_LynxOS_x86 +TAO/examples/RTCORBA/Activity/run_test.pl: !MINIMUM !ST !ACE_FOR_TAO +TAO/examples/RTScheduling/Fixed_Priority_Scheduler/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !STATIC !ST !ACE_FOR_TAO +TAO/examples/RTScheduling/MIF_Scheduler/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !STATIC !ST !ACE_FOR_TAO +TAO/examples/ior_corbaloc/run_test.pl: !NO_MESSAGING !ACE_FOR_TAO +TAO/utils/nslist/run_test.pl: !ST !SUNCC5_1 !NO_MESSAGING !ACE_FOR_TAO +TAO/orbsvcs/tests/BiDir_CORBALOC/run_test.pl: !NO_MESSAGING !ACE_FOR_TAO +TAO/orbsvcs/tests/IOR_MCast/run_test_ipv6.pl: IPV6 !MINIMUM diff --git a/ACE/bin/tao_svcconf.pl b/ACE/bin/tao_svcconf.pl new file mode 100755 index 00000000000..56d05830f59 --- /dev/null +++ b/ACE/bin/tao_svcconf.pl @@ -0,0 +1,15 @@ +eval '(exit $?0)' && eval 'exec perl -pi -S $0 ${1+"$@"}' + & eval 'exec perl -pi -S $0 $argv:q' + if 0; + +# $Id$ +# +# This script can help you convert TAO svc.conf using dynamic services +# to use static services. +# +# You may want to run the "find" command with this script, which maybe +# something like this: +# +# find . -name svc.conf -print | xargs $ACE_ROOT/bin/tao_svcconf.pl + +s/^ *dynamic *([A-Za-z_]+) [^\"]+(\"[^\"]+\").*/static $1 $2/; diff --git a/ACE/bin/topinfo_iorsize_stats.sh b/ACE/bin/topinfo_iorsize_stats.sh new file mode 100755 index 00000000000..86088779c0b --- /dev/null +++ b/ACE/bin/topinfo_iorsize_stats.sh @@ -0,0 +1,78 @@ +#!/bin/sh +# +# $Id$ +# + +if [ $# -lt 4 ]; then + echo "Usage: $0 [ROOT] [DEST] [USER] [OPTIMIZED]" + exit 0 +fi + +ROOT=$1 +DEST=$2 +US=$3 +OPT=$4 + +DATE=`date +%Y/%m/%d-%H:%M` +cd $ROOT +ACE_ROOT=$ROOT +export ACE_ROOT +LD_LIBRARY_PATH=$ACE_ROOT/ace +export LD_LIBRARY_PATH +PATH=/usr/bin:/bin:$PATH +export PATH +cd TAO/performance-tests/Memory/IORsize + +# start the server. If OPT == 1 then start the optimized version, else +# the non-optimized version + +if test $OPT == 1 + then ./server -ORBSvcConf server.conf & + else ./server & +fi + +s_id=$!; + +server_start_size=`cat /proc/$s_id/status | grep VmRSS | awk '{print $2}'`; + +# Just sleep for 2 seconds. +sleep 2; +# Check whether the server has started +file="test.ior" +if test -f $file + then + # start the client + ./client & + c_id=$!; + # Wait till all the invocations are done + sleep 30; + # Get the size once the client has made sufficient invocations. + s_invocations=`cat /proc/$s_id/status | grep VmRSS | awk '{print $2}'`; + let "actual_server_growth=${s_invocations}-${server_start_size}"; + if test $OPT == 1 + then + echo $DATE $s_invocations >> $DEST/source/server_opt_ior_size.txt + echo $DATE $actual_server_growth >> $DEST/source/opt_ior_size.txt + else + echo $DATE $s_invocations >> $DEST/source/server_ior_size.txt + echo $DATE $actual_server_growth >> $DEST/source/actual_ior_size.txt + fi + + # Kill the server and client. We will look at better ways of doing + # this later. + kill -9 $c_id; + kill -9 $s_id; + rm -f $file +else + echo $file doesnt exist +fi + + +cd $DEST/source +STRING="for 50000 IORs" +FILES="server_opt opt server actual" +for i in $FILES ; do +/usr/bin/tac ${i}_ior_size.txt > $DEST/data/${i}_ior_size.txt +/usr/bin/tail -5 ${i}_ior_size.txt > $DEST/data/LAST_${i}_ior_size.txt +$ROOT/bin/generate_topinfo_charts.sh ${i}_ior_size.txt $DEST/images/${i}_ior_size.png ${i}_ior_size.txt +done diff --git a/ACE/bin/topinfo_simple_stats.sh b/ACE/bin/topinfo_simple_stats.sh new file mode 100755 index 00000000000..dab12934160 --- /dev/null +++ b/ACE/bin/topinfo_simple_stats.sh @@ -0,0 +1,78 @@ +#!/bin/sh +# +# $Id$ +# + + +if [ $# -lt 3 ]; then + echo "Usage: $0 [ROOT] [DEST] [USER]" + exit 0 +fi + +ROOT=$1 +DEST=$2 +US=$3 + +DATE=`date +%Y/%m/%d-%H:%M` +cd $ROOT +ACE_ROOT=$ROOT +export ACE_ROOT +LD_LIBRARY_PATH=$ACE_ROOT/ace +export LD_LIBRARY_PATH +PATH=/usr/bin:/bin:$PATH +export PATH +cd TAO/performance-tests/Memory/Single_Threaded +# start the server +./server & +s_id=$!; +# Just sleep for 2 seconds. +sleep 2; +# Check whether the server has started +file="test.ior" +if test -f $file + then + # Just get the size as soon the server is started, ie. the vanilla + # server. + s_up=`cat /proc/$s_id/status | grep VmRSS | awk '{print $2}'`; + + # Write it a file + echo $DATE $s_up >> $DEST/source/st_start_size.txt + # start the client + ./client & + c_id=$!; + # Wait till all the invocations are done + sleep 10; + # Get the size once the client has made sufficient invocations. + s_invocations=`cat /proc/$s_id/status | grep VmRSS| awk '{print $2}'`; + + echo $DATE $s_invocations >> $DEST/source/st_after_invoke_size.txt + + # Get teh size of the client after all the invocations + c_invocations=`cat /proc/$c_id/status | grep VmRSS | awk '{print $2}'`; + echo $DATE $c_invocations >> $DEST/source/st_client_size.txt + + # Kill the server and client. We will look at better ways of doing + # this later. + kill -9 $c_id; + + # Just sleep for the server to release memory etc. + sleep 5; + + # Get the size once the client is killed or crashed + s_client_death=`cat /proc/$s_id/status | grep VmRSS | awk '{print $2}'`; + echo $DATE $s_client_death >> $DEST/source/st_after_peer_death_size.txt + kill -9 $s_id; + rm -f $file +else + echo $file doesnt exist +fi + + +cd $DEST/source + +FILES="start after_invoke client after_peer_death" +for i in $FILES ; do +/usr/bin/tac st_${i}_size.txt > $DEST/data/st_${i}_size.txt +/usr/bin/tail -5 st_${i}_size.txt > $DEST/data/LAST_st_${i}_size.txt +$ROOT/bin/generate_topinfo_charts.sh st_${i}_size.txt $DEST/images/st_${i}_size.png st_${i}_size.txt +done diff --git a/ACE/bin/topinfo_stats.sh b/ACE/bin/topinfo_stats.sh new file mode 100755 index 00000000000..5e572f357b9 --- /dev/null +++ b/ACE/bin/topinfo_stats.sh @@ -0,0 +1,74 @@ +#!/bin/sh +# +# $Id$ +# + + +if [ $# -lt 3 ]; then + echo "Usage: $0 [ROOT] [DEST] [USER]" + exit 0 +fi + +ROOT=$1 +DEST=$2 +US=$3 + +DATE=`date +%Y/%m/%d-%H:%M` +cd $ROOT +ACE_ROOT=$ROOT +export ACE_ROOT +LD_LIBRARY_PATH=$ACE_ROOT/ace +export LD_LIBRARY_PATH +PATH=/usr/bin:$PATH +export PATH +cd TAO/performance-tests/Memory/Single_Threaded +# start the server +./server & +s_id=$!; +# Just sleep for 2 seconds. +sleep 2; +# Check whether the server has started +file="test.ior" +if test -f $file + then + # Just get the size as soon the server is started, ie. the vanilla + # server. + s_up=`top -p $s_id -n 1 -b | grep $US| awk '{print $5}'`; + + # Write it a file + echo $DATE $s_up >> $DEST/source/st_start_size.txt + # start the client + ./client & + c_id=$!; + # Wait till all the invocations are done + sleep 10; + # Get the size once the client has made sufficient invocations. + s_invocations=`top -p $s_id -n 1 -b | grep $US| awk '{print $5}'`; + + echo $DATE $s_invocations >> $DEST/source/st_after_invoke_size.txt + + # Kill the server and client. We will look at better ways of doing + # this later. + kill -9 $c_id; + + # Just sleep for the server to release memory etc. + sleep 5; + + # Get the size once the client is killed or crashed + s_client_death=`top -p $s_id -n 1 -b | grep $US| awk '{print $5}'`; + echo $DATE $s_client_death >> $DEST/source/st_after_peer_death_size.txt + kill -9 $s_id; + rm -f $file +else + echo $file doesnt exist +fi + + +cd $DEST/source +STRING="" +FILES="start after_invoke after_peer_death" +for i in $FILES ; do +/usr/bin/tac st_${i}_size.txt > $DEST/data/st_${i}_size.txt +/usr/bin/tail -5 st_${i}_size.txt > $DEST/data/LAST_st_${i}_size.txt +$ROOT/bin/generate_topinfo_charts.sh st_${i}_size.txt $DEST/images/st_${i}_size.png st_${i}_size.txt $STRING +done diff --git a/ACE/bin/update-ace+tao.sh b/ACE/bin/update-ace+tao.sh new file mode 100755 index 00000000000..9956eb8bb0e --- /dev/null +++ b/ACE/bin/update-ace+tao.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# Update ACE/TAO source tree to the latest numeric-assigned version. +# $Id$ + +# Define helper function to extract version number into tag format +d='\([0-9]*\)' +version() { sed -n -e "s,.*$1 version $d\.$d\.$d.*,$1-\1_\2_\3,p" \ + -e "s,.*$1 version $d\.$d.*,$1-\1_\2,p"; } + +# Use ccvs instead of cvs since it supports SOCKS5, if that environment found. +if [ ! -z "$SOCKS5_USER" ]; then cvs () { ccvs $*; } fi + +old_ace_version=`version <VERSION ACE` +old_tao_version=`version <TAO/VERSION TAO` + +# Abort with message if no values in variables +if [ -z $old_ace_version ]; then echo No existing ACE version; exit 1; fi +if [ -z $old_tao_version ]; then echo No existing TAO version; exit 1; fi + +cvs update -A VERSION TAO/VERSION GNUmakefile + +ace_version=`version <VERSION ACE` +tao_version=`version <TAO/VERSION TAO` + +# Abort with message if no values in variables +if [ -z $ace_version ]; then echo No ACE version after update; exit 1; fi +if [ -z $tao_version ]; then echo No TAO version after update; exit 1; fi + +echo Old software version tags: $old_ace_version $old_tao_version +echo New software version tags: $ace_version $tao_version + +# Conserve net bandwidth if no change was observed +if [ $old_ace_version != $ace_version ] || [ x"$1"x = x"force"x ]; then + cvs -q update -Pd -r $ace_version `make -s show_controlled_files` +fi +if [ $old_tao_version != $tao_version ] || [ x"$1"x = x"force"x ]; then + cvs -q update -Pd -r $tao_version TAO +fi + diff --git a/ACE/bin/vxworks_modify.pl b/ACE/bin/vxworks_modify.pl new file mode 100755 index 00000000000..75d4537b6be --- /dev/null +++ b/ACE/bin/vxworks_modify.pl @@ -0,0 +1,578 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# ****************************************************************** +# Author: Chad Elliott (elliott_c@ociweb.com) +# Date: 8/14/2000 +# $Id$ +# Description: Modify c++ source for combination with other source +# files into a VxWorks module. +# ****************************************************************** + +# ****************************************************************** +# Pragma Section +# ****************************************************************** + +use strict; +use File::Basename; + +# ****************************************************************** +# Data Section +# ****************************************************************** + +my($name) = ""; +my(@types) = ("short", "int", "long", "unsigned", "size_t", + "char", "float", "double", "void", + "CORBA::Boolean", "CORBA::Short", "CORBA::UShort", + "CORBA::Long", "CORBA::ULong", "CORBA::Octet", + "CORBA::Char", "CORBA::WChar", "CORBA::LongLong", + "CORBA::ULongLong", "CORBA::Float", "CORBA::Double", + "CORBA::LongDouble", "CORBA::Environment", + ); + +# ************************************************************** +# Subroutine Section +# ************************************************************** + +sub needsToBeStatic { + my($line) = shift; + $line =~ s/^\s+//; + $line =~ s/\s+$//; + + if ($line !~ /\s*static\s+/) { + foreach my $type (@types) { + if ($line =~ /^(const\s+)?$type\s*[\*]*[\&]*\s*[^:]+/ || + $line =~ /^(const\s+)?$type\s*[\*]*[\&]*$/) { + return 1; + } + } + } +} + + +sub countChar { + my($line) = shift; + my($char) = shift; + my($len) = length($line); + my($count) = 0; + my($indouble) = 0; + my($insingle) = 0; + + for(my $i = 0; $i < $len; $i++) { + my($ch) = substr($line, $i, 1); + if ($char ne '"' && $ch eq '"') { + $indouble ^= 1; + } + elsif ($char ne '\'' && $ch eq '\'') { + $indouble ^= 1; + } + elsif ($ch eq $char && !$indouble && !$insingle) { + $count++; + } + } + return $count; +} + + +my($orbManager) = undef; +sub lookForOrbRun { + my($line) = shift; + my($status) = 0; + + if ($line =~ /([\w:\-\>\.\(\)]+)->run\s*\(.*\)/ || + $line =~ /.*orb.*\.run/ || + (defined $orbManager && ($line =~ /$orbManager.run/ || + $line =~ /$orbManager->run/))) { + $status = 1; + } + return $status; +} + + +sub modifyOrbRun { + my($line) = shift; + if (defined $orbManager && $line =~ /$orbManager/ && + $line =~ /(.*->run\s*\()([^\)]*)(\).*)/) { + my($p1) = $1; + my($p2) = $2; + my($p3) = $3; + + $p2 =~ s/^\s+//; + $p2 =~ s/\s+$//; + + # I am relying on convention here + if ($p2 !~ /\s/) { + $line = "$p1" . "TAO_TestCombinedThreads::getTimeout() " . + "ACE_ENV_ARG_PARAMETER$p3\n"; + } + } + elsif ($line =~ /(.*->run\s*\()([^\)]*)(\).*)/) { + my($p1) = $1; + my($p2) = $2; + my($p3) = $3; + + $p2 =~ s/^\s+//; + $p2 =~ s/\s+$//; + + # I am relying on convention here + if ($p2 !~ /\s/ && $p2 =~ /env/i) { + $p3 = " ACE_ENV_ARG_PARAMETER$p3"; + $p2 = ""; + } + + if ($p2 eq "") { + $line = $p1 . "TAO_TestCombinedThreads::getTimeout()" . "$p3\n"; + } + } + elsif ($line =~ /(.*\.run\s*\()([^\)]*)(\).*)/) { + my($p1) = $1; + my($p2) = $2; + my($p3) = $3; + + $p2 =~ s/^\s+//; + $p2 =~ s/\s+$//; + + # I am relying on convention here + if ($p2 !~ /\s/ && $p2 =~ /env/i) { + $line = "$p1" . "TAO_TestCombinedThreads::getTimeout() ". + "ACE_ENV_ARG_PARAMETER$p3\n"; + } + } + return $line; +} + + +sub lookForActivate { + my($line) = shift; + my($taskBase) = shift; + if ($line =~ /(\w+)\.activate/) { + $$taskBase = $1; + } +} + +my($orbInitArg) = 0; +sub lookForOrbInit { + my($line) = shift; + my($status) = 0; + if ($line =~ /CORBA::ORB_init\s*\(/) { + $orbInitArg = 0; + $status = 1; + } + return $status; +} + + +sub replaceOrbName { + my($line) = shift; + if ($orbInitArg < 3) { + if ($line =~ /ACE_ENV_ARG_PARAMETER/) { + $line =~ s/ACE_ENV_ARG_PARAMETER/,ACE_ENV_ARG_PARAMETER/; + } + my($length) = length($line); + my($previous) = 0; + for(my $i = 0; $i < $length; $i++) { + my($ch) = substr($line, $i, 1); + ## Add the substr check because the ACE_ENV_ARG_PARAMETER doesn't + ## have a comma before it and the above search and replace doesn't + ## work for multi-lined ORB_init's + if ($ch eq "," || $ch eq ")" || + ($orbInitArg == 2 && $i == $length - 1 && + substr($line, $previous) !~ /^\s+$/)) { + $orbInitArg++; + if ($ch eq ")" && $orbInitArg == 2) { + $orbInitArg = 3; + $previous = $i; + } + if ($orbInitArg == 3) { + my($size) = $i - $previous; + my($part) = substr($line, $previous, $size); + $part =~ s/^\s+//; + $part =~ s/\s+$//; + if ($part eq '""' || $part eq '0') { + substr($line, $previous, $size) = " \"$name\""; + } + elsif ($part eq '') { + substr($line, $previous, $size) = ", \"$name\""; + } + last; + } + $previous = $i + 1; + } + } + if ($line =~ /,ACE_ENV_ARG_PARAMETER/) { + $line =~ s/,ACE_ENV_ARG_PARAMETER/ ACE_ENV_ARG_PARAMETER/; + } + } + return $line; +} + + +my($initChildPOAArg) = 0; +sub lookForInitChildPOA { + my($line) = shift; + my($status) = 0; + if ($line =~ /init_child_poa\s*\(/) { + $initChildPOAArg = 0; + $status = 1; + } + return $status; +} + + +sub replaceChildOrbName { + my($line) = shift; + if ($initChildPOAArg < 4) { + if ($line =~ /ACE_ENV_ARG_PARAMETER/) { + $line =~ s/ACE_ENV_ARG_PARAMETER/,ACE_ENV_ARG_PARAMETER/; + } + my($length) = length($line); + my($previous) = 0; + my($replace) = " TAO_TestCombinedThreads::getRandomString(" . + "\"$name\").c_str()"; + + for(my $i = 0; $i < $length; $i++) { + my($ch) = substr($line, $i, 1); + ## Add the substr check because the ACE_ENV_ARG_PARAMETER doesn't + ## have a comma before it and the above search and replace doesn't + ## work for multi-lined ORB_init's + if ($ch eq "," || $ch eq ")" || + ($orbInitArg == 2 && $i == $length - 1 && + substr($line, $previous) !~ /^\s+$/)) { + $initChildPOAArg++; + if ($initChildPOAArg == 4) { + my($size) = $i - $previous; + my($part) = substr($line, $previous, $size); + # I am relying on convention here + if ($part !~ /env/i) { + substr($line, $previous, $size) = $replace; + } + else { + substr($line, $previous, 0) = "$replace,\n"; + } + last; + } + $previous = $i + 1; + } + } + if ($line =~ /,ACE_ENV_ARG_PARAMETER/) { + $line =~ s/,ACE_ENV_ARG_PARAMETER/ ACE_ENV_ARG_PARAMETER/; + } + } + return $line; +} + + +sub usageAndExit { + my($str) = shift; + if (defined $str) { + print STDERR "$str\n"; + } + print STDERR "Usage: " . basename($0) . + " [-orbcore] [-unix] [-notimeout] [-main <main prefix>]\n" . + " <input file> <output file>\n"; + exit(1); +} + + +sub modifyFileAttributes { + my($orig) = shift; + my($new) = shift; + my(@buf) = stat($orig); + + if (defined $buf[0]) { + utime($buf[8], $buf[9] + 1, $new); + } +} + + +# ************************************************************** +# Main Section +# ************************************************************** + +my($useORBCore) = 0; +my($useThreadM) = 0; +my($unixDefines) = 0; +my($useTimeouts) = 1; + +while(defined $ARGV[0] && $ARGV[0] =~ /^-/) { + if ($ARGV[0] eq '-threadmanager') { + $useThreadM = 1; + shift; + } + elsif ($ARGV[0] eq '-orbcore') { + $useORBCore = 1; + shift; + } + elsif ($ARGV[0] eq '-unix') { + $unixDefines = 1; + shift; + } + elsif ($ARGV[0] eq '-main') { + shift; + if (defined $ARGV[0]) { + $name = $ARGV[0]; + shift; + } + else { + usageAndExit("-main requires a parameter"); + } + } + elsif ($ARGV[0] eq '-notimeout') { + $useTimeouts = 0; + shift; + } + else { + usageAndExit("Unknown option: $ARGV[0]"); + } +} + +## We should have an input and output file name at this point. +if ($#ARGV != 1) { + usageAndExit(); +} + + +# ************************************************************** +# Get the basename and remove the .cpp +# We will use this as the prefix to our main function +# ************************************************************** + +if ($name eq "") { + $name = basename($ARGV[0]); + $name =~ s/\.cpp//; + $name =~ s/\-/_/g; +} + +# ************************************************************** +# Read in the file and push it into an array. Then, print it +# out when we are done modifying it. +# ************************************************************** + +my($status) = 0; +if (open(IN, $ARGV[0])) { + if (open(OUT, ">$ARGV[1]")) { + my(@lines) = (); + my($line) = ""; + if ($useThreadM) { + while(<IN>) { + $line = $_; + $line =~ s/ACE_Thread\s*::\s*join/TAO_TestCombinedThreads::thr_join/g; +# $line =~ s/^\s*template\s*class\s*.*;\s*$//g; + push(@lines, $line); + } + unshift(@lines, "#include <tests/TestUtils/TestCombinedThreads.h>\n"); + } + elsif ($useORBCore) { + my($insideInstance) = 0; + while(<IN>) { + $line = $_; +# $line =~ s/^\s*template\s*class\s*.*;\s*$//g; + if ($line =~ /^TAO_ORB_Core_instance\s*\(.*\)/) { + $insideInstance = 1; + } + if ($insideInstance && $line =~ /return\s+/) { + $line = " // Find the orb for the thread that " . + "registered the ORB id\n" . + " TAO_ORB_Core* hack = orb_table->find(" . + "TAO_TestCombinedThreads::getORBId());\n" . + " if (hack != 0) {\n" . + " return hack;\n" . + " }\n\n" . $line; + $insideInstance = 0; + } + push(@lines, $line); + } + unshift(@lines, "#include <tests/TestUtils/TestCombinedThreads.h>\n"); + } + else { + my($insideComment) = 0; + my($insideParens) = 0; + my($scope) = 0; + my($orbrunFound) = 0; + my($insideORB_init) = 0; + my($insideInitChildPOA) = 0; + my($taskBase) = ""; + while(<IN>) { + $line = $_; + + my($lookForClosingParens) = 1; + ## Remove comments + if ($line =~ /(.*)(\/\/[\/]+.*)/ || $line =~ /(.*)(\/\/.*)/) { + my($qcount) = countChar($1, '"'); + $line = "$1"; + if (($qcount & 1) == 1) { + $line .= $2; + } + $line .= "\n"; + } + if ($line =~ /(.*)(\/\*.*\*\/)(.*)/) { + $line = "$1$3\n"; + } + elsif ($line =~ /(.*)(\/\*.*)/) { + $insideComment = 1; + $line = "$1\n"; + } + elsif ($insideComment && $line =~ /(.*\*\/)(.*)/) { + $insideComment = 0; + $line = $2; + } + elsif ($insideComment) { + $line = "\n"; + } + + if ($line =~ /TAO_ORB_Manager[\*\s]*\s+(\w+)/) { + $orbManager = $1; + } + + lookForActivate($line, \$taskBase); + if ($taskBase ne "" && $line =~ /thr_mgr\s*\(\)\->wait\s*\(\)/) { + $line =~ s/\->wait\s*\(.*\)/\->wait_grp \($taskBase.grp_id\(\)\)/; + } + + $insideInitChildPOA = ($insideInitChildPOA ? 1 : + lookForInitChildPOA($line)); + if ($insideInitChildPOA) { + $line = replaceChildOrbName($line); + if ($line =~ /\)\s*;/) { + $insideInitChildPOA = 0; + } + } + + $insideORB_init = ($insideORB_init ? 1 : lookForOrbInit($line)); + if ($insideORB_init) { + $line = replaceOrbName($line); + if ($line =~ /\)\s*;/) { + $insideORB_init = 0; + } + } + + + if (!$orbrunFound && $useTimeouts) { + if ($orbrunFound = lookForOrbRun($line)) { + $line = modifyOrbRun($line); + } + } + + ## Check the scope + if ($line =~ /{/) { + $scope += countChar($line, '{'); + } + ## Check for parens + if ($line =~ /\(/) { + $insideParens += countChar($line, '('); + ## This takes care of things like + ## int parse_args(...), but allows things like + ## int parse_args(..., + ## ...) to pass through which is what we want + if ($line =~ /\)/) { + $insideParens -= countChar($line, ')'); + $lookForClosingParens = 0; + } + } + + if ($scope == 0) { + ## This section is for forward declarations + if ($line =~ /;$/) { + my($forward_done) = 0; + my($counter) = $#lines; + while(!$forward_done) { + if ($lines[$counter] =~ /,$/) { + if ($lines[$counter] =~ /\s+\w+\s*\(.*,$/ && + needsToBeStatic($lines[$counter])) { + $lines[$counter] = "static $lines[$counter]"; + $forward_done = 1; + } + } + else { + $forward_done = 1; + } + $counter--; + } + } + if (!$insideParens && needsToBeStatic($line)) { + my($test) = $lines[$#lines]; + $test =~ s/^\s+//; + $test =~ s/\s+$//; + if ($test ne "static") { + $line = "static $line"; + } + } + } + + if ($scope == 1 && $orbrunFound && + ($line =~ /\s*return/ || $line =~ /\s*ACE_RETURN/)) { + $orbrunFound = 0; + } + + # Going down in scope + if ($line =~ /}/) { + $scope -= countChar($line, '}'); + if ($orbrunFound && $scope == 1) { + $orbrunFound = 0; + } + } + if ($lookForClosingParens && $line =~ /\)/) { + $insideParens -= countChar($line, ')'); + } + + ## Work backwards to remove the static from + ## the main or a method body + if ($scope == 0 && + ($line =~ /(main\s*(\()?)/ || $line =~ /\w+\s*::\s*\w+\s*\(/)) { + if ($line =~ /^static\s+/) { + $line =~ s/static\s+//; + } + else { + if ($lines[$#lines] =~ /static\s+/) { + $lines[$#lines] =~ s/static\s+//; + } + } + } + + push(@lines, $line); + if ($line =~ /(\smain\s*(\()?)/ || $line =~ /(^main\s*(\()?)/) { + my($saved) = pop(@lines); + if ($1 !~ /^\s*int/) { + my($below) = pop(@lines); + $saved = "$below$saved"; + } + if ($unixDefines) { + push(@lines, "#define main $name" . "_main\n\n"); + } + else { + push(@lines, "#define ace_main $name" . "_main\n" . + "#define ace_main_i $name" . "_main_i\n\n"); + } + push(@lines, $saved); + } + } + ## Look for last include and append include statement + for(my $i = $#lines; $i >= 0; $i--) { + if ($lines[$i] =~ /#include\s+/) { + $lines[$i] .= "#include <tests/" . + "TestUtils/TestCombinedThreads.h>\n"; + last; + } + } + unshift(@lines, "// \$Id\$\n\n"); + } + print OUT @lines; + close(OUT); + + if ($useThreadM || $useORBCore) { + modifyFileAttributes($ARGV[0], $ARGV[1]); + } + } + else { + print STDERR "Unable to open $ARGV[1] for output\n"; + $status = 1; + } + close(IN); +} +else { + print STDERR "Unable to open $ARGV[0] for input\n"; + $status = 1; +} + +exit($status); |