r15378: Fix installheader script. Alexander, this will break installation of headers
[tprouty/samba.git] / source4 / script / installheader.pl
1 #!/usr/bin/perl
2 # Copyright (C) 2006 Jelmer Vernooij
3 use strict;
4 use File::Basename;
5
6 my $includedir = shift;
7
8
9 sub read_headermap($)
10 {
11         my ($fn) = @_;
12         my %map = ();
13         my $ln = 0;
14         open(MAP, "<headermap.txt");
15         while(<MAP>) {
16                 $ln++;
17                 s/#.*$//g;
18                 next if (/^\s*$/);
19                 if (! /^(.*): (.*)$/) {
20                         print STDERR "headermap.txt:$ln: Malformed line\n";
21                         next;
22                 }
23                 $map{$1} = $2;
24         }
25
26         close(MAP);
27
28         return %map;
29 }
30
31 my %map = read_headermap("headermap.txt");
32
33 sub findmap($)
34 {
35         $_ = shift;
36         s/^\.\///g;
37
38         if (! -f $_ && -f "lib/$_") { $_ = "lib/$_"; }
39         
40         return $map{$_};
41 }
42
43 sub rewrite_include($$)
44 {
45         my ($pos,$d) = @_;
46
47         my $n = findmap($d);
48         return $n if $n; 
49         return $d;
50 }
51
52 sub install_header($$)
53 {
54         my ($src,$dst) = @_;
55
56         my $lineno = 0;
57
58         open(IN, "<$src");
59         open(OUT, ">$dst");
60
61         while (<IN>) {
62                 $lineno++;
63                 if (/^#include \"(.*)\"/) {
64                         print OUT "#include <" . rewrite_include("$src:$lineno", $1) . ">\n";
65                 } else {
66                         print OUT $_;
67                 }
68         }
69
70         close(OUT);
71         close(IN);
72 }
73
74 foreach my $p (@ARGV)
75 {
76         my $p2 = findmap($p);
77         unless ($p2) {
78             warn("Unable to map $p");
79             next;
80         }
81         print "Installing $p as $includedir/$p2\n";
82
83         my $dirname = dirname($p2);
84
85         if (! -d "$includedir/$dirname") {
86                 mkdir("$includedir/$dirname", 0777);
87         }
88
89         if ( -f "$includedir/$p2" ) {
90                 unlink("$includedir/$p2.old");
91                 rename("$includedir/$p2", "$includedir/$p2.old");
92         }
93
94         install_header($p,"$includedir/$p2");
95 }
96
97 print <<EOF;
98 ======================================================================
99 The headers are installed. You may restore the old headers (if there
100 were any) using the command "make revert". You may uninstall the headers
101 using the command "make uninstallheader" or "make uninstall" to uninstall
102 binaries, man pages and shell scripts.
103 ======================================================================
104 EOF
105
106 exit 0;