1#!/usr/bin/env perl 2 3# this script patches a config.status file, to use our own perl script 4# in the main loop 5# we do it this way to circumvent hacking (and thereby including) 6# autoconf function (which are GPL) into our LGPL acinclude.m4.in 7# written by Michael Matz <matz@kde.org> 8# adapted by Dirk Mueller <mueller@kde.org> 9# 10# This file is free software; you can redistribute it and/or 11# modify it under the terms of the GNU Library General Public 12# License as published by the Free Software Foundation; either 13# version 2 of the License, or (at your option) any later version. 14 15# This library is distributed in the hope that it will be useful, 16# but WITHOUT ANY WARRANTY; without even the implied warranty of 17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18# Library General Public License for more details. 19 20# You should have received a copy of the GNU Library General Public License 21# along with this library; see the file COPYING.LIB. If not, write to 22# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 23# Boston, MA 02111-1307, USA. 24 25# we have to change two places 26# 1. the splitting of the substitutions into chunks of 90 (or even 48 in 27# later autoconf's 28# 2. the big main loop which patches all Makefile.in's 29 30use strict; 31use File::Basename; 32 33my $ac_aux_dir = dirname($0); 34my ($flag); 35my $ac_version = 0; 36my $vpath_seen = 0; 37$flag = 0; 38 39while (<>) { 40# usage of $flag: 0 -- we have seen nothing yet 41# 1 -- we are in (1) 42# 2 -- we have ended (1) 43# 3 -- we are in (2) 44# 4 -- we ended (2) 45 46 if ($flag == 4) { 47 print; 48 } elsif ($flag == 0) { 49# 1. begins with (including): "ac_max_sed_\S+\s*=\s*[0-9]+..." 50# ends with (excluding) "CONFIG_FILE=..." 51# in later autoconf (2.14.1) there is no CONFIG_FILES= line, 52# but instead the (2) directly follow (1) 53 if (/^\s*ac_max_sed_([a-z]+).*=\s*([0-9]+)/ ) { 54 $flag = 1; 55 if ($1 eq 'lines') { 56 # lets hope its different with 2141, 57 # wasn't able to verify that 58 if ($2 eq '48') { 59 $ac_version = 250; 60 } 61 else { 62 $ac_version = 2141; 63 } 64 } elsif ($1 eq 'cmds') { 65 $ac_version = 213; 66 } 67 # hmm, we don't know the autoconf version, but we try anyway 68 } else { 69 print; 70 } 71 } elsif ($flag == 1) { 72 if (/^\s*CONFIG_FILES=/ && ($ac_version != 250)) { 73 print; 74 $flag = 2; 75 } elsif (/^\s*for\s+ac_file\s+in\s+.*CONFIG_FILES/ ) { 76 $flag = 3; 77 } 78 } elsif ($flag == 2) { 79# 2. begins with: "for ac_file in.*CONFIG_FILES" (the next 'for' after (1)) 80# end with: "rm -f conftest.s\*" 81# on autoconf 250, it ends with '# CONFIG_HEADER section' 82# 83# gg: if a post-processing commands section is found first, 84# stop there and insert a new loop to honour the case/esac. 85# (pattern: /^\s+#\sRun the commands associated with the file./) 86 87 if (/^\s*for\s+ac_file\s+in\s+.*CONFIG_FILES/ ) { 88 $flag = 3; 89 } else { 90 print; 91 } 92 } elsif ($flag == 3) { 93 if (/^\s*rm\s+-f\s+conftest/ ) { 94 $flag = 4; 95 &insert_main_loop(); 96 } elsif (/^\s*rm\s+-f\s+.*ac_cs_root/ ) { 97 $flag = 4; 98 &insert_main_loop(); 99 #die "hhhhhhh"; 100 if ($ac_version != 2141) { 101 print STDERR "hmm, don't know autoconf version\n"; 102 } 103 } elsif (/^\#\s*CONFIG_(HEADER|COMMANDS) section.*|^\s+#\s(Run) the commands associated/) { 104 $flag = 4; 105 my $commands = defined $2; 106 &insert_main_loop(); 107 $commands && insert_command_loop(); 108 if($ac_version != 250) { 109 print STDERR "hmm, something went wrong :-(\n"; 110 } 111 } elsif (/VPATH/ ) { 112 $vpath_seen = 1; 113 } 114 } 115} 116 117die "wrong input (flag != 4)" unless $flag == 4; 118print STDERR "hmm, don't know autoconf version\n" unless $ac_version; 119 120sub insert_main_loop { 121 122 if ($ac_version == 250) { 123 &insert_main_loop_250(); 124 } 125 else { 126 &insert_main_loop_213(); 127 } 128} 129 130sub insert_main_loop_250 { 131 132 print <<EOF; 133 #echo Doing the fast build of Makefiles -- autoconf $ac_version 134EOF 135 if ($vpath_seen) { 136 print <<EOF; 137 # VPATH subst was seen in original config.status main loop 138 echo '/^[ ]*VPATH[ ]*=[^:]*\$/d' >>\$tmp/subs.sed 139EOF 140 } 141 print <<EOF; 142 rm -f \$tmp/subs.files 143 for ac_file in .. \$CONFIG_FILES ; do 144 if test "x\$ac_file" != x..; then 145 echo \$ac_file >> \$tmp/subs.files 146 fi 147 done 148 if test -f \$tmp/subs.files ; then 149 perl $ac_aux_dir/config.pl "\$tmp/subs.sed" "\$tmp/subs.files" "\$srcdir" "\$INSTALL" 150 fi 151 rm -f \$tmp/subs.files 152 153fi 154EOF 155 return; 156} 157 158sub insert_main_loop_213 { 159 print <<EOF; 160#echo Doing the fast build of Makefiles -- autoconf $ac_version 161if test "x\$ac_cs_root" = "x" ; then 162 ac_cs_root=conftest 163fi 164EOF 165 if ($vpath_seen) { 166 print <<EOF; 167# VPATH subst was seen in original config.status main loop 168echo '/^[ ]*VPATH[ ]*=[^:]*\$/d' >> \$ac_cs_root.subs 169EOF 170 } 171 print <<EOF; 172rm -f \$ac_cs_root.sacfiles 173for ac_file in .. \$CONFIG_FILES ; do 174 if test "x\$ac_file" != x..; then 175 echo \$ac_file >> \$ac_cs_root.sacfiles 176 fi 177done 178if test -f \$ac_cs_root.sacfiles ; then 179 perl $ac_aux_dir/config.pl "\$ac_cs_root.subs" "\$ac_cs_root.sacfiles" "\$ac_given_srcdir" "\$ac_given_INSTALL" 180fi 181rm -f \$ac_cs_root.s* 182 183EOF 184 return; 185} 186 187sub insert_command_loop { 188 print <<EOF; 189 for ac_file in .. \$CONFIG_FILES ; do 190EOF 191} 192