#!/bin/sh # -*-Perl-*- #======================================================================# # Run the right perl version: if [ -x /usr/local/bin/perl ]; then perl=/usr/local/bin/perl elif [ -x /usr/bin/perl ]; then perl=/usr/bin/perl else perl=`which perl| sed 's/.*aliased to *//'` fi exec $perl -x -S $0 "$@" # -x: start from the following line #======================================================================# #! /Good_Path/perl -w # line 17 # Name: adapt-mkfile # Author: wd (Wolfgang.Dobler@ncl.ac.uk) # Date: 27-May-2000 # Version: 0.21 # Description: # Transform a makefile with machine-dependent information into one that # is adapted to the machine we're running on. # Syntax: # - The source file is copied from input to output and only the block # between $start_tag and $end_tag (currently `### Begin machine dependent' # and `### End machine dependent') is processed. # - The tags in the `## :' lines are matched against the output # from `uname -s'. # - An empty line closes the block referring to your machine # if a line ends in `#()', it is only activated for this host, # even if matches # - can contain any Perl regular expression and will be matched # against the output from `uname -n`. Thus, `mhd.' will match mhd0, # mhd1, mhd2, .. Alternatively, you can put something like # `#(mhd0|mhd1)' # - An example is probably best to illustrate how an input file can look # like: # ### Begin machine dependent # # ## IRIX64: # #FC=f90 # #FFLAGS= -64 -O3 -C -macro_expand #(Antares) # #FFLAGS= -pfalist -64 -O3 -mips4 -r10000 -C -macro_expand #(Grand) # # ## Linux: # #FC=f95 # #FFLAGS= -O4 -C -gline -Wc,-malign-double # # ## SunOS: # FC=pghpf # FFLAGS= -Msmp -O4 #(Lomond) # # ### End machine dependent use strict; my ($infile,$outfile,$progname); my ($activate,$hosttag); my $start_tag = '^\s*###\s*begin\s*machine\s*dependent'; my $end_tag = '^\s*###\s*end\s*machine\s*dependent'; my $os = `uname -s`; chomp($os); my $host = `uname -n`; chomp($host); my $myostag = "\#\#\\s$os:\\s*\$"; # Beginning.. my $end_ostag = '^\s*$'; # and end of block for my OS my $anyhosttag = '\#\s*\(.*\)\s*$'; # ' Any explicit #(host) entry ($progname = $0) =~ s|.*/||; my $usage = "Usage: $progname [file1 [file2]] Processes the makefile file1 (or stdin) and writes the locally adapted makefile to file2 (or stdout). " ; my $message = " # Caution: # This file has been created from `" . ($ARGV[0] || '') . "' and will be overwritten the # next time `$progname' is called. If you're about to make non-trivial # changes, you probably want to edit the master file instead.\n"; # Process arguments if ((@ARGV > 0) && ($ARGV[0] =~ /^(-h|--help)/)) { die $usage; } $infile = ($ARGV[0] || '-'); $outfile = ($ARGV[1] || '- '); if ($infile eq $outfile) { die "$progname: Input and output files must differ.\n"; } open(INPUT,"< $infile") || die "Can't open $infile for reading"; open(OUTPUT,"> $outfile") || die "Can't open $outfile for writing"; # Process loop Process: while () { if ((/^\s*$/ || /$start_tag/i) && $message) { # Issue message once $_ = $message . $_; $message = ''; } if (/$start_tag/i .. /$end_tag/i) { # Modify only between these tags if (/$myostag/i .. /$end_ostag/i) { # Directives for the given OS $activate = 1; if (/$anyhosttag/i) { # Extract the host tag (retaining the outer brackets): $hosttag = ($_ =~ /\#\s*(\(.*\))\s*$/)[0]; if ($host !~ /$hosttag/i) { $activate = 0; } else { $hosttag = ($_ =~ /\#\s*PACX\s*\#\s*(\(.*\))\s*$/)[0]; if ($hosttag && ($host =~ $hosttag)) { $activate=1; }else{ $activate=0; } } } } else { # Different OS $activate = 0; } # Uncomment singly commented lines if ($activate) { $_ =~ s/^\s*\#([^\#\n])/$1/; } else { # Wrong OS or host ==> comment out # uncommented lines $_ =~ s/^(\s*[^\#\n])/\#$1/m; } } print OUTPUT $_; } # End of file adapt-mkfile