summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/headermap.txt47
-rwxr-xr-xsource4/script/installheader.pl78
2 files changed, 117 insertions, 8 deletions
diff --git a/source4/headermap.txt b/source4/headermap.txt
new file mode 100644
index 0000000000..646cc00b8b
--- /dev/null
+++ b/source4/headermap.txt
@@ -0,0 +1,47 @@
+# FIXME: This file should be autogenerated by the build system at some
+# point
+lib/talloc/talloc.h: talloc.h
+lib/util/util.h: util.h
+lib/util/debug.h: util/debug.h
+lib/util/mutex.h: util/mutex.h
+lib/util/util_proto.h: util/proto.h
+nt_status.h: core/nt_status.h
+lib/util/byteorder.h: util/byteorder.h
+lib/util/safe_string.h: util/safe_string.h
+lib/util/xfile.h: util/xfile.h
+lib/tdr/tdr.h: tdr.h
+librpc/rpc/dcerpc.h: dcerpc.h
+lib/socket_wrapper/socket_wrapper.h: socket_wrapper.h
+libnet/libnet.h: libnet.h
+libnet/libnet_join.h: libnet/join.h
+libnet/libnet_lookup.h: libnet/lookup.h
+libnet/libnet_passwd.h: libnet/passwd.h
+libnet/libnet_rpc.h: libnet/rpc.h
+libnet/libnet_share.h: libnet/share.h
+libnet/libnet_time.h: libnet/time.h
+libnet/libnet_user.h: libnet/user.h
+libnet/libnet_site.h: libnet/site.h
+libnet/libnet_vampire.h: libnet/vampire.h
+libnet/userinfo.h: libnet/userinfo.h
+libnet/userman.h: libnet/userman.h
+lib/ldb/include/ldb.h: ldb.h
+ntvfs/ntvfs.h: ntvfs.h
+lib/tdb/include/tdb.h: tdb.h
+auth/gensec/gensec.h: gensec.h
+gtk/common/gtk-smb.h: gtk-smb.h
+gtk/common/select.h: gtk/select.h
+librpc/ndr/libndr.h: ndr.h
+lib/registry/registry.h: registry.h
+libcli/util/nterr.h: core/nterr.h
+libcli/util/doserr.h: core/doserr.h
+libcli/util/nt_status.h: core/ntstatus.h
+libcli/cldap/cldap.h: cldap.h
+lib/samba3/samba3.h: samba3.h
+include/core.h: core.h
+librpc/gen_ndr/dcerpc.h: gen_ndr/dcerpc.h
+librpc/gen_ndr/misc.h: gen_ndr/misc.h
+librpc/ndr/libndr_proto.h: ndr/proto.h
+librpc/rpc/dcerpc_proto.h: dcerpc/proto.h
+lib/tdr/tdr_proto.h: tdr/proto.h
+auth/credentials/credentials.h: credentials.h
+auth/credentials/credentials_proto.h: credentials/proto.h
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, "<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>) {
- 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 <<EOF;