#/***************************************************************************** ## Copyright (C) 1994-2008 by David Gordon. ## All rights reserved. ## ## This software is part of a beta-test version of the Consed/Autofinish ## package. It should not be redistributed or ## used for any commercial purpose, including commercially funded ## sequencing, without written permission from the author and the ## University of Washington. ## ## This software is provided ``AS IS'' and any express or implied ## warranties, including, but not limited to, the implied warranties of ## merchantability and fitness for a particular purpose, are disclaimed. ## In no event shall the authors or the University of Washington be ## liable for any direct, indirect, incidental, special, exemplary, or ## consequential damages (including, but not limited to, procurement of ## substitute goods or services; loss of use, data, or profits; or ## business interruption) however caused and on any theory of liability, ## whether in contract, strict liability, or tort (including negligence ## or otherwise) arising in any way out of the use of this software, even ## if advised of the possibility of such damage. ## ## Building Consed from source is error prone and not simple which is ## why I provide executables. Due to time limitations I cannot ## provide any assistance in building Consed. Even if you do not ## modify the source, you may introduce errors due to using a ## different version of the compiler, a different version of motif, ## different versions of other libraries than I used, etc. For this ## reason, if you discover Consed bugs, I can only offer help with ## those bugs if you first reproduce those bugs with an executable ## provided by me--not an executable you have built. ## ## Modifying Consed is also difficult. Although Consed is modular, ## some modules are used by many other modules. Thus making a change ## in one place can have unforeseen effects on many other features. ## It may takes months for you to notice these other side-effects ## which may not seen connected at all. It is not feasable for me to ## provide help with modifying Consed sources because of the ## potentially huge amount of time involved. ## ##*****************************************************************************/ #!/usr/bin/perl -w # PURPOSE: modify consed source files to conform with g++ 3.4 # (changing an existing language--the jerks) # How to use it: makeNewG++.perl (without any arguments) changes # all files ending in .h or .cpp # makeNewG++.perl (filename) ... # changes all files in the argument list if ( $#ARGV == -1 ) { opendir( dirBuild, "." ) || die "couldn't open . directory"; while ( defined( $szNextFile = readdir( dirBuild ) ) ) { if ( $szNextFile =~ /\.cpp$/ ) { ( $szOldFile = $szNextFile ) =~ s/\.cpp$/.cpp_old/; $bChange = 1; } elsif ( $szNextFile =~ /\.h$/ ) { ( $szOldFile = $szNextFile ) =~ s/\.h$/.h_old/; $bChange = 1; } else { $bChange = 0; } if ( $bChange ) { if ( ! -e $szOldFile ) { rename( $szNextFile, $szOldFile ); } push( @aFilesToChangeOldName, $szOldFile ); push( @aFilesToChangeNewName, $szNextFile ); } } closedir( dirBuild ); } else { foreach $szFileInCommandLine ( @ARGV ) { if ( $szFileInCommandLine =~ /_old$/ ) { $szOldFileName = $szFileInCommandLine; ( $szNewFileName = $szFileInCommandLine ) =~ s/_old$//; } else { $szNewFileName = $szFileInCommandLine; $szOldFileName = $szNewFileName . "_old"; } if ( ! -e $szOldFileName ) { rename( $szNewFileName, $szOldFileName ); } push( @aFilesToChangeOldName, $szOldFileName ); push( @aFilesToChangeNewName, $szNewFileName ); } } for( $nFile = 0; $nFile <= $#aFilesToChangeNewName; ++$nFile ) { $szNewName = $aFilesToChangeNewName[$nFile ]; $szOldName = $aFilesToChangeOldName[$nFile ]; if ( -e $szNewName ) { unlink( $szNewName ) || die "couldn't delete $szNewName"; } open( filOld, "$szOldName" ) || die "couldn't open $szOldName for read"; open( filNew, ">$szNewName" ) || die "couldn't open $szNewName for write"; while( ) { if ( // ) { s///; } if ( // ) { s///; } if ( // ) { s///; } if ( // ) { s///; } if ( // ) { s///; } if ( // ) { s///; } if ( // ) { s///; } if ( // ) { s///; } if ( // ) { s///; } if ( // ) { s///; } if ( /\sostringstream/ ) { s/ostringstream/ostrstream/; } if ( /\.str\(\)\.c_str\(\)/ ) { s/\.str\(\)\.c_str\(\)/.str()/; } if ( /::str\(\)\.c_str\(\)/ ) { s/::str\(\)\.c_str\(\)/::str()/; } if ( /using namespace std;/ ) { $_= ""; } print filNew; } close( filOld ); close( filNew ); $szCommand = "chmod a-w $szNewName"; !system( $szCommand ) || die "couldn't execute $szCommand"; }