From 187628634f8abd88fa41b72b2dc4956b9293d013 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 16 Mar 2006 16:02:21 +0000 Subject: r14481: Change paths in headers on the fly when installing. Adds a simple text file that contains the paths where headers need to be installed. (This used to be commit c3d975f4dce85245c7ba2b159c1128711d828291) --- source4/script/installheader.pl | 78 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 8 deletions(-) (limited to 'source4/script') diff --git a/source4/script/installheader.pl b/source4/script/installheader.pl index 1af05f3fea..808ab8d433 100755 --- a/source4/script/installheader.pl +++ b/source4/script/installheader.pl @@ -1,18 +1,70 @@ #!/usr/bin/perl +# Copyright (C) 2006 Jelmer Vernooij use strict; use File::Basename; my $includedir = shift; + +sub read_headermap($) +{ + my ($fn) = @_; + my %map = (); + my $ln = 0; + open(MAP, ") { + $ln++; + s/#.*$//g; + next if (/^\s*$/); + if (! /^(.*): (.*)$/) { + print STDERR "headermap.txt:$ln: Malformed line\n"; + next; + } + $map{$1} = $2; + } + + close(MAP); + + return %map; +} + +my %map = read_headermap("headermap.txt"); + +sub findmap($) +{ + $_ = shift; + s/^\.\///g; + + if (! -f $_ && -f "lib/$_") { $_ = "lib/$_"; } + + return $map{$_}; +} + +sub rewrite_include($$) +{ + my ($pos,$d) = @_; + + my $n = findmap($d); + return $n if $n; + return $d; +} + sub install_header($$) { my ($src,$dst) = @_; + my $lineno = 0; + open(IN, "<$src"); open(OUT, ">$dst"); while () { - print OUT $_; + $lineno++; + if (/^#include \"(.*)\"/) { + print OUT "#include <" . rewrite_include("$src:$lineno", $1) . ">\n"; + } else { + print OUT $_; + } } close(OUT); @@ -21,15 +73,25 @@ sub install_header($$) foreach my $p (@ARGV) { - my $p2 = basename($p); - print "Installing $p as $includedir/$p2\n"; + my $p2 = findmap($p); + unless ($p2) { + warn("Unable to map $p"); + next; + } + print "Installing $p as $includedir/$p2\n"; + + my $dirname = dirname($p2); - if ( -f "$includedir/$p2" ) { - unlink("$includedir/$p2.old"); - rename("$includedir/$p2", "$includedir/$p2.old"); - } + if (! -d "$includedir/$dirname") { + mkdir("$includedir/$dirname"); + } + + if ( -f "$includedir/$p2" ) { + unlink("$includedir/$p2.old"); + rename("$includedir/$p2", "$includedir/$p2.old"); + } - install_header($p,"$includedir/$p2"); + install_header($p,"$includedir/$p2"); } print <