From d8ff79366bb0f4646436e4c298e4f5505a51c007 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 19 Mar 1999 22:27:02 +0000 Subject: Towards automake XI patch from Ralf Corsepius : This patch is the most scary of all proposals I've been mailing to you this week until now. It consists of 3 parts: 1. a patch 2. a perl script (acpolish) 3. a shell script wrapper to invoke the perl-script. The perl-script reads in each Makefile.in and modifies them ("polishes/beautifies" them :-). These modifications are not easy to describe: Basically, it hard-codes some automake Makefile-variables and rules into RTEMS autoconf-Makefile.ins (Note: autoconf vs. automake!!) and converts some settings/variables to configure scripts' requirements (Yes, plural). E.g. it adds the automake standard variables $top_builddir and $subdir, adds dependency rules for automatic re-generation of Makefiles from Makefile.in, adds support variables for relative paths to multiple configure scripts etc. The patch is a one-line patch to enable the support of the new features added by acpolish. The shell script is a wrapper which pokes around inside of the source tree for Makefile.ins and invokes acpolish on all autoconf-Makefile.ins. acpolish is designed to be able to run several times on the same Makefile.in and may once become a more general tool to convert RTEMS Makefile.in to automake. Therefore, I'd like to keep it inside of source tree. (e.g. as contrib/acpolish or c/update-tools/acpolish). However, it doesn't make sense to export it outside of RTEMS. To apply this: cd patch -p1 -E < /rtems-rc-19990318-1.diff tar xzvf /rtems-rc-polish.tar.gz ./rtems-polish.sh ./autogen Note: The path contrib/acpolish is hard-coded into rtems-polish.sh, if you decide to put it in an alternative place, please modify rtems-polish.sh to reflect this change. Later: cvs rm make/rtems.cfg (It isn't used anymore) cvs add contrib cvs add contrib/acpolish cvs commit I've tested this intensively, but naturally I can't exclude bugs. Ralf. PS.: Most probably, this is the last "Towards automake" patch. The next one probably will be a real automake patch. --- c/update-tools/acpolish | 159 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 c/update-tools/acpolish (limited to 'c/update-tools/acpolish') diff --git a/c/update-tools/acpolish b/c/update-tools/acpolish new file mode 100644 index 0000000000..485ba2131c --- /dev/null +++ b/c/update-tools/acpolish @@ -0,0 +1,159 @@ +#!/usr/bin/perl + +# +# Perl script to beautify and enhance RTEMS autoconf Makefile.ins +# +# Reads from stdin and writes to stdout +# +# usage: +# acpolish Makefile.in~ +# mv Makefile.in~ Makefile.in +# +# ATTENTION: This file contains embedded tabs + +if ( -f "Makefile.am" ) +{ + # Refuse to work on autoconfiscated Makefile.ins; + # redirecting STDOUT to Makefile.in will trash the Makefile.in ;- + + die "acpolish must not be run in autoconfiscated directories" ; +} + + +my $build_pgms_seen = "" ; +my $top_builddir = ""; +my $subdir = ""; + +sub find_root +{ + $top_builddir = "." ; + $subdir=""; + my $pwd = `pwd`; chomp $pwd; + $pwd .= "/" ; + my $len ; + + if ( -f "configure.in" ) { return $top_builddir ; } + my $i = rindex($pwd,'/'); + + $len = $i; + $pwd = substr($pwd,0,$len); + $i = rindex($pwd,'/'); + $subdir = substr($pwd,$i+1,$len - 1); + $top_builddir = ".." ; + + while( -d "$top_builddir" ) + { + if ( -f "${top_builddir}/configure.in" ) + { + return $top_builddir ; + } + $len=$i; + $pwd = substr($pwd,0,$len); + $i = rindex($pwd,'/'); + $subdir = substr($pwd,$i+1,$len - 1) . "/$subdir"; + $top_builddir .= "/.." ; + } ; + die "Can't find configure.in\n" ; +} + +find_root(); + +my $nl_seen = 0 ; + +while( <> ) +{ + if ( /^[ ]*$/o ) + { + $nl_seen = $nl_seen+1; + } + + if ( /^[ ]*srcdir[ ]*=.*$/o ) + { + print "\@SET_MAKE\@\n" ; + print "$_" ; + print "top_srcdir = \@top_srcdir\@\n" ; + print "top_builddir = $top_builddir\n" ; + print "subdir = $subdir\n" if "$subdir" ; + print "\nINSTALL = \@INSTALL\@\n\n"; + print "RTEMS_ROOT = \$(top_srcdir)/\@RTEMS_TOPdir\@\n" ; + print "PROJECT_ROOT = \@PROJECT_ROOT\@\n\n" ; + $nl_seen=1; + } + elsif ( /^[ ]*top_srcdir[ ]*=.*$/o ) + { + # remove the line + } + elsif ( /^[ ]*top_builddir[ ]*=.*$/o ) + { + # remove the line + } + elsif ( /^[ ]*Makefile:.*/o ) + { # consume the block + while( <> ) { last if /^[ ]*$/o ; } + } + elsif ( /^[ ]*%:[ ]\$\(srcdir\)\/%\.in.*$/o ) + { # consume the block + while( <> ) { last if /^[ ]*$/o ; } + } + elsif ( /^[ ]*RTEMS_ROOT[ ]*=.*$/o ) + { + # remove the line + } + elsif ( /^[ ]*PROJECT_ROOT[ ]*=.*$/o ) + { + # remove the line + } + elsif ( /^[ ]*INSTALL[ ]*=[ ]*\@INSTALL\@.*$/o ) + { + # remove the line + } + elsif ( /^[ ]*subdir[ ]*=.*$/o ) + { + # remove the line + } + elsif ( /^[ ]*\@SET_MAKE\@.*$/o ) + { + # remove the line + } + elsif ( /^include[ ]*.*rtems\.cfg.*$/o ) + { + # remove the line + } + elsif ( /^[ ]*BUILD_PGMS.*=.*$/o ) + { + $build_pgms_seen = "true" ; + print "$_" ; + $nl_seen=0; + } + elsif ( /^[ ]*$/o ) + { + print "$_" if $nl_seen < 2 ; + } + else + { + print "$_" ; + $nl_seen = 0; + } +} # while + +print "\n" if $nl_seen < 1 ; + +# Add rules for config.status generated files +if ( "$build_pgms_seen" ) +{ +print "%: \$(srcdir)/%.in \$(top_builddir)/config.status\n" ; +print " cd \$(top_builddir) \\\n" ; +print " && CONFIG_FILES=" ; +print "\$(subdir)/" if ( "$subdir" ); +print "\$@ CONFIG_HEADERS= \$(SHELL) ./config.status\n"; +} +else +{ +print "Makefile: \$(srcdir)/Makefile.in \$(top_builddir)/config.status\n" ; +print " cd \$(top_builddir) \\\n" ; +print " && CONFIG_FILES=" ; +print "\$(subdir)/" if ( "$subdir" ); +print "\$@ CONFIG_HEADERS= \$(SHELL) ./config.status\n"; +} + +;1 -- cgit v1.2.3