From 789a2de6f88a737c50f70e50d486b55ff0a36e1b Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Sun, 19 Oct 2003 17:42:51 -0700 Subject: [PATCH] Check in a first stab at a script to sort the #include lines in a source file. Nate thought this would be cool, and I started on it, but lost interest. I'm mostly committing this so bk stops bugging me about it. Nate, don't start hacking on this until after the ISCA deadline! --HG-- extra : convert_revision : e0ecc54b118ee99d254e9707b1bba11d4078d7e0 --- util/sort-includes | 91 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 util/sort-includes diff --git a/util/sort-includes b/util/sort-includes new file mode 100755 index 000000000..8ae40be52 --- /dev/null +++ b/util/sort-includes @@ -0,0 +1,91 @@ +#! /usr/bin/env perl +# Copyright (c) 2003 The Regents of The University of Michigan +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "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 COPYRIGHT +# OWNER OR CONTRIBUTORS 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. +# +# Authors: Steve Reinhardt + +open (FOO, "<$ARGV[0]") or die; + +# Suck in everything before the first include +# (line-by-line into @before list). +while (($_ = ) && !/^#include/) { + push @before, $_; +} + +#print join("", @before); +#print "##########################\n"; + +# Suck in include lines into @includes list. +# Skip blank lines (keep processing, but don't put in @includes). +# End on first non-blank, non-include line. +# Note that this means that files with comments or #ifdefs +# interspersed among their #includes will only get the initial +# set of #includes sorted. +do { + push @includes, $_ unless /^\s*$/; +} while (($_ = ) && /^#include|^\s*$/); + +# Now sort the includes. This simple ordering function +# puts system includes first, followed by non-system includes. +# Within each group the sort is alphabetical. +# We may want something a little more sophisticated. +# Personally, I'd like to see something like: +# - header files from sys subdir +# <*.h> - other system headers +# <*> - STL headers +# "base/*" - M5 base headers +# "sim/*" - M5 sim headers +# "*" - other M5 headers +# ...but I didn't have the energy to code that up. +sub sortorder { + my $sysa = ($a =~ /<.*>/); + my $sysb = ($b =~ /<.*>/); + return -1 if ($sysa && !$sysb); + return 1 if ($sysb && !$sysa); + return $a cmp $b; +} + +@includes = sort sortorder @includes; +#print join("", @includes); +#print "##########################\n"; + +# Put everything after the includes in the @after list. +do { + push @after, $_; + if (/^#include/) { + print "$ARGV[0]: "; + print $after[0]; + exit 0; + } +} while ($_ = ); + +#print join("", @after); +#print "##########################\n"; + +# Print out the file with sorted includes. + +print join("", @before, @includes, @after); + -- 2.30.2