mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-08-28 12:39:14 +08:00
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 <source-tree>
patch -p1 -E < <path-to-patch>/rtems-rc-19990318-1.diff
tar xzvf <path-to>/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.
160 lines
3.2 KiB
Perl
Executable File
160 lines
3.2 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
#
|
|
# Perl script to beautify and enhance RTEMS autoconf Makefile.ins
|
|
#
|
|
# Reads from stdin and writes to stdout
|
|
#
|
|
# usage:
|
|
# acpolish <Makefile.in >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
|