#!/usr/bin/perl
my
(
$cSH
,
$ch
,
@ch
,
%ch
) = (
"config_h.SH"
);
open
$ch
,
"<"
,
$cSH
or
die
"Cannot open $cSH: $!\n"
;
{
local
$/ =
"\n\n"
;
@ch
= <
$ch
>;
close
$ch
;
}
sub
ch_index {
%ch
= ();
foreach
my
$ch
(0 ..
$#ch
) {
while
(
$ch
[
$ch
] =~ m{^/\* ([A-Z]\w+)}gm) {
$ch
{$1} =
$ch
;
}
}
}
my
%dep
= (
BYTEORDER
=> [
qw( UVSIZE )
],
LONGSIZE
=> [
qw( BYTEORDER )
],
MULTIARCH
=> [
qw( BYTEORDER MEM_ALIGNBYTES )
],
HAS_QUAD
=> [
qw( I64TYPE )
],
HAS_GETGROUPS
=> [
qw( Groups_t )
],
HAS_SETGROUPS
=> [
qw( Groups_t )
],
);
my
$changed
;
do
{
$changed
= 0;
foreach
my
$sym
(
keys
%dep
) {
ch_index ();
foreach
my
$dep
(@{
$dep
{
$sym
}}) {
print
STDERR
"Check if $sym\t($ch{$sym}) precedes $dep\t($ch{$dep})\n"
;
$ch
{
$sym
} <
$ch
{
$dep
} and
next
;
my
$ch
=
splice
@ch
,
$ch
{
$sym
}, 1;
splice
@ch
,
$ch
{
$dep
}, 0,
$ch
;
$changed
++;
ch_index ();
}
}
}
while
(
$changed
);
for
(
grep
m{echo .Extracting \
$CONFIG_H
} =>
@ch
) {
my
$case
=
join
"\n"
,
qq{case "\$CONFIG_H" in}
,
qq{already-done) echo "Not re-extracting config.h" ;;}
,
qq{*)}
,
""
;
s{^(?=echo .Extracting)}{
$case
}m;
}
unless
(
$ch
[0] =~ m/THIS IS A GENERATED FILE/) {
unshift
@ch
,
join
"\n"
=>
"#!/bin/sh"
,
"#"
,
"# THIS IS A GENERATED FILE"
,
"# DO NOT HAND-EDIT"
,
"#"
,
"# See Porting/config_h.pl"
,
""
,
""
;
push
@ch
,
";;\nesac\n"
;
}
s/^(\s*)
open
$ch
,
">"
,
$cSH
or
die
"Cannot write $cSH: $!\n"
;
print
$ch
@ch
;
close
$ch
;