summaryrefslogtreecommitdiff
path: root/source4/script/installheader.pl
diff options
context:
space:
mode:
Diffstat (limited to 'source4/script/installheader.pl')
-rwxr-xr-xsource4/script/installheader.pl107
1 files changed, 107 insertions, 0 deletions
diff --git a/source4/script/installheader.pl b/source4/script/installheader.pl
new file mode 100755
index 0000000000..6b10bde65f
--- /dev/null
+++ b/source4/script/installheader.pl
@@ -0,0 +1,107 @@
+#!/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, "<headermap.txt");
+ while(<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 (<IN>) {
+ $lineno++;
+ die("Will not install autogenerated header $src") if (/This file was automatically generated by mkproto.pl. DO NOT EDIT/);
+
+ if (/^#include \"(.*)\"/) {
+ print OUT "#include <" . rewrite_include("$src:$lineno", $1) . ">\n";
+ } else {
+ print OUT $_;
+ }
+ }
+
+ close(OUT);
+ close(IN);
+}
+
+foreach my $p (@ARGV)
+{
+ my $p2 = findmap($p);
+ unless ($p2) {
+ die("Unable to map $p");
+ }
+ print "Installing $p as $includedir/$p2\n";
+
+ my $dirname = dirname($p2);
+
+ if (! -d "$includedir/$dirname") {
+ mkdir("$includedir/$dirname", 0777);
+ }
+
+ if ( -f "$includedir/$p2" ) {
+ unlink("$includedir/$p2.old");
+ rename("$includedir/$p2", "$includedir/$p2.old");
+ }
+
+ install_header($p,"$includedir/$p2");
+}
+
+print <<EOF;
+======================================================================
+The headers are installed. You may restore the old headers (if there
+were any) using the command "make revert". You may uninstall the headers
+using the command "make uninstallheader" or "make uninstall" to uninstall
+binaries, man pages and shell scripts.
+======================================================================
+EOF
+
+exit 0;