1#!/usr/bin/perl 2 3# This script reorders config_h.SH after metaconfig 4# Changing metaconfig is too complicated 5# 6# This script is run just after metaconfig, and it 7# is run ONLY ONCE. Not to be used afterwards 8# 9# Copyright (C) 2005-2012 by H.Merijn Brand (m)'12 [22-09-2012] 10# 11# You may distribute under the terms of either the GNU General Public 12# License or the Artistic License, as specified in the README file. 13 14use strict; 15use warnings; 16 17my ($cSH, $ch, @ch, %ch) = ("config_h.SH"); 18open $ch, '<', $cSH or die "Cannot open $cSH: $!\n"; 19{ local $/ = "\n\n"; 20 @ch = <$ch>; 21 close $ch; 22 } 23 24sub ch_index () 25{ 26 %ch = (); 27 foreach my $ch (0 .. $#ch) { 28 while ($ch[$ch] =~ m{^/\* ([A-Z]\w+)}gm) { 29 $ch{$1} = $ch; 30 } 31 } 32 } # ch_index 33 34my %dep = ( 35 # This symbol must be defined BEFORE ... 36 BYTEORDER => [ qw( UVSIZE ) ], 37 LONGSIZE => [ qw( BYTEORDER ) ], 38 MULTIARCH => [ qw( BYTEORDER MEM_ALIGNBYTES ) ], 39 HAS_QUAD => [ qw( I64TYPE ) ], 40 HAS_GETGROUPS => [ qw( Groups_t ) ], 41 HAS_SETGROUPS => [ qw( Groups_t ) ], 42 ); 43 44my $changed; 45do { 46 $changed = 0; 47 foreach my $sym (keys %dep) { 48 ch_index; 49 foreach my $dep (@{$dep{$sym}}) { 50 print STDERR "Check if $sym\t($ch{$sym}) precedes $dep\t($ch{$dep})\n"; 51 $ch{$sym} < $ch{$dep} and next; 52 my $ch = splice @ch, $ch{$sym}, 1; 53 splice @ch, $ch{$dep}, 0, $ch; 54 $changed++; 55 ch_index; 56 } 57 } 58 } while ($changed); 59 60# 30327 61for (grep m{echo .Extracting \$CONFIG_H} => @ch) { 62 my $case = join "\n", 63 qq{case "\$CONFIG_H" in}, 64 qq{already-done) echo "Not re-extracting config.h" ;;}, 65 qq{*)}, ""; 66 s{^(?=echo .Extracting)}{$case}m; 67 } 68push @ch, ";;\nesac\n"; 69 70 71open $ch, '>', $cSH or die "Cannot write $cSH: $!\n"; 72print $ch <<EOW; 73#!/bin/sh 74# 75# THIS IS A GENERATED FILE 76# DO NOT HAND-EDIT 77# 78# See Porting/config_h.pl 79 80EOW 81 82print $ch @ch; 83close $ch; 84