r14488: Install more headers.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 16 Mar 2006 20:02:31 +0000 (20:02 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:57:32 +0000 (13:57 -0500)
Generate different #include lines in pidl depending on whether
we're building inside or outside of the Samba tree (useful for
3rd-party projects).
(This used to be commit 0c188833154c1fe565cb1735909e408a4a1a6049)

13 files changed:
source4/build/smb_build/TODO
source4/headermap.txt
source4/lib/charset/charset.h
source4/lib/charset/config.mk
source4/librpc/config.mk
source4/librpc/ndr/libndr.h
source4/librpc/rpc/dcerpc.h
source4/pidl/lib/Parse/Pidl/Samba4.pm [new file with mode: 0644]
source4/pidl/lib/Parse/Pidl/Samba4/COM/Header.pm
source4/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm
source4/pidl/lib/Parse/Pidl/Samba4/Header.pm
source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
source4/pidl/pidl

index b37515aeb4ea9a28205ba8090246b380418e542a..dae3fc6cfa5b888f6ae80d0dc38c25a37cd6dff5 100644 (file)
@@ -1,12 +1,10 @@
-- saner names for some of the .pc files
+- saner names for some of the .pc files (reduce the amount of .pc files?)
 - plugin loading support in ldb
 - proper #include dependencies:
   for each subsystem:
   - include line in Makefile
   - rule in Makefile
-- improve include paths and how they are handled
-- install autogenerated headers (seperate directory)
-- subdir handler for install headers into a specific directory
+- generate headermap.txt
 
 set of test scripts that check the code:
 - configure_check_unused.pl
index ddf37c5d8ca2b11f2ee8532b95aa1e966fca7dab..c761272abe6a48689c957a47ce336447b8f68a14 100644 (file)
@@ -40,6 +40,8 @@ lib/samba3/samba3.h: samba3.h
 include/core.h: core.h
 librpc/gen_ndr/dcerpc.h: gen_ndr/dcerpc.h
 librpc/gen_ndr/netlogon.h: gen_ndr/netlogon.h
+librpc/gen_ndr/ndr_misc.h: gen_ndr/ndr_misc.h
+librpc/gen_ndr/ndr_dcerpc.h: gen_ndr/ndr_dcerpc.h
 librpc/gen_ndr/misc.h: gen_ndr/misc.h
 librpc/gen_ndr/lsa.h: gen_ndr/lsa.h
 librpc/gen_ndr/samr.h: gen_ndr/samr.h
@@ -56,3 +58,5 @@ auth/auth_proto.h: auth/proto.h
 auth/gensec/spnego.h: gensec/spnego.h
 auth/gensec/gensec_proto.h: gensec/proto.h
 libcli/auth/credentials.h: domain_credentials.h
+lib/charset/charset.h: charset.h
+lib/charset/charset_proto.h: charset/proto.h
index 5ad2f431bfcf040b75473d380e7a32675b3a5e6c..df67aebb55928b0eecdc5216c967f9fa528c8736 100644 (file)
@@ -19,6 +19,9 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#ifndef __CHARSET_H__
+#define __CHARSET_H__
+
 /* this defines the charset types used in samba */
 typedef enum {CH_UTF16=0, CH_UNIX=1, CH_DISPLAY=2, CH_DOS=3, CH_UTF8=4, CH_UTF16BE=5} charset_t;
 
@@ -67,3 +70,5 @@ typedef struct {
 #define STR_LEN_NOTERM 256 /* the length field is the unterminated length */
 
 #include "lib/charset/charset_proto.h"
+
+#endif /* __CHARSET_H__ */
index a69bee1ec330321338b36c73b2e02f783fba15bd..5f423b3ba63f50828d9092ef5bf196b6c51e081f 100644 (file)
@@ -4,7 +4,8 @@
 OBJ_FILES = \
                iconv.o \
                charcnv.o
-PRIVATE_PROTO_HEADER = charset_proto.h
+PUBLIC_HEADERS = charset.h
+PUBLIC_PROTO_HEADER = charset_proto.h
 REQUIRED_SUBSYSTEMS = EXT_LIB_ICONV
 # End SUBSYSTEM CHARSET
 ################################################
index 6680bd484ae87328127940a00e557be6c4ceba96..83ac97821b12e7e4b6e923c7b457e92e8b14bff2 100644 (file)
@@ -102,7 +102,7 @@ VERSION = 0.0.1
 SO_VERSION = 0.0.1
 DESCRIPTION =
 OBJ_FILES = gen_ndr/ndr_misc.o
-PUBLIC_HEADERS = gen_ndr/misc.h
+PUBLIC_HEADERS = gen_ndr/misc.h gen_ndr/ndr_misc.h
 REQUIRED_SUBSYSTEMS = LIBNDR
 
 [LIBRARY::NDR_ROT]
@@ -705,7 +705,7 @@ REQUIRED_SUBSYSTEMS = dcerpc NDR_KEYSVC
 [SUBSYSTEM::NDR_DCERPC]
 OBJ_FILES = gen_ndr/ndr_dcerpc.o
 REQUIRED_SUBSYSTEMS = LIBNDR NDR_MISC
-PUBLIC_HEADERS = gen_ndr/dcerpc.h
+PUBLIC_HEADERS = gen_ndr/dcerpc.h gen_ndr/ndr_dcerpc.h
 
 ################################################
 # Start SUBSYSTEM dcerpc
index d3ff7c5e42fe325aded659b61210eec708090bfe..4b6d128ec4a3426c3fbc62842a75aaff7c230b19 100644 (file)
@@ -23,6 +23,8 @@
 
 #include "core.h"
 #include "lib/talloc/talloc.h"
+#include "lib/util/util.h" /* for discard_const */
+#include "lib/charset/charset.h"
 
 /*
   this provides definitions for the libcli/rpc/ MSRPC library
index 517df4bf7e8eefcd9b61977483872252a05780cd..24f8df7d8bf262fda6dcc75175a362c1d21cd3fa 100644 (file)
@@ -24,6 +24,7 @@
 #ifndef __DCERPC_H__
 #define __DCERPC_H__
 
+#include "core.h"
 #include "librpc/gen_ndr/dcerpc.h"
 
 enum dcerpc_transport_t {
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4.pm b/source4/pidl/lib/Parse/Pidl/Samba4.pm
new file mode 100644 (file)
index 0000000..0a284aa
--- /dev/null
@@ -0,0 +1,32 @@
+###################################################
+# Common Samba4 functions
+# Copyright jelmer@samba.org 2006
+# released under the GNU GPL
+
+package Parse::Pidl::Samba4;
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(is_intree choose_header);
+
+use Parse::Pidl::Util qw(has_property);
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '0.01';
+
+sub is_intree()
+{
+       return -f "include/smb.h";
+}
+
+# Return an #include line depending on whether this build is an in-tree
+# build or not.
+sub choose_header($$)
+{
+       my ($in,$out) = @_;
+       return "#include \"$in\"" if (is_intree());
+       return "#include <$out>";
+}
+
+1;
index 83df9afe885adcd345ec7af3ad813b77d16c3fc5..85dab37246490ea00cabb899778c894018926d96 100644 (file)
@@ -117,19 +117,22 @@ sub ParseCoClass($)
        return $res;
 }
 
-sub Parse($)
+sub Parse($$)
 {
-       my $idl = shift;
+       my ($idl,$ndr_header) = @_;
        my $res = "";
 
-       foreach my $x (@{$idl})
+       $res .= "#include \"librpc/gen_ndr/orpc.h\"\n" . 
+                       "#include \"$ndr_header\"\n\n";
+
+       foreach (@{$idl})
        {
-               if ($x->{TYPE} eq "INTERFACE" && has_property($x, "object")) {
-                       $res.=ParseInterface($x);
+               if ($_->{TYPE} eq "INTERFACE" && has_property($_, "object")) {
+                       $res.=ParseInterface($_);
                } 
 
-               if ($x->{TYPE} eq "COCLASS") {
-                       $res.=ParseCoClass($x);
+               if ($_->{TYPE} eq "COCLASS") {
+                       $res.=ParseCoClass($_);
                }
        }
 
index c0d460fe09047f429b52953c0e83b72b37d9d138..e6366f0f3d19014a374e5d8fd0c6302a49f33376 100644 (file)
@@ -196,17 +196,21 @@ sub RegistrationFunction($$)
        return $res;
 }
 
-sub Parse($)
+sub Parse($$)
 {
-       my $pidl = shift;
+       my ($pidl,$comh_filename) = @_;
        my $res = "";
 
-       foreach my $x (@{$pidl}) {
-               next if ($x->{TYPE} ne "INTERFACE");
-               next if has_property($x, "local");
-               next unless has_property($x, "object");
+       $res .= "#include \"includes.h\"\n" .
+                       "#include \"lib/com/dcom/dcom.h\"\n" .
+                       "#include \"$comh_filename\"\n";
 
-               $res .= ParseInterface($x);
+       foreach (@{$pidl}) {
+               next if ($_->{TYPE} ne "INTERFACE");
+               next if has_property($_, "local");
+               next unless has_property($_, "object");
+
+               $res .= ParseInterface($_);
        }
 
        return $res;
index 46caba731a4adeda0a55261cf26f18bbba114bee..54e410f71686254d593a6505a4c5903e4ef2c5a5 100644 (file)
@@ -10,6 +10,7 @@ use strict;
 use Parse::Pidl::Typelist qw(mapType);
 use Parse::Pidl::Util qw(has_property is_constant);
 use Parse::Pidl::NDR qw(GetNextLevel GetPrevLevel);
+use Parse::Pidl::Samba4 qw(is_intree);
 
 use vars qw($VERSION);
 $VERSION = '0.01';
@@ -349,6 +350,10 @@ sub Parse($)
        $res = "";
        %headerstructs = ();
     pidl "/* header auto-generated by pidl */\n\n";
+       if (!is_intree()) {
+               pidl "#include <core.h>";
+       }
+       
     foreach (@{$idl}) {
            ($_->{TYPE} eq "INTERFACE") && HeaderInterface($_);
     }
index 972368195b45cd0a2c79160465100ee5d32fb5a6..f4672e93e97d215cdf1a14a45671663b43f3dfd0 100644 (file)
@@ -11,6 +11,7 @@ use strict;
 use Parse::Pidl::Typelist qw(hasType getType mapType);
 use Parse::Pidl::Util qw(has_property ParseExpr print_uuid);
 use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
+use Parse::Pidl::Samba4 qw(is_intree choose_header);
 
 use vars qw($VERSION);
 $VERSION = '0.01';
@@ -2237,16 +2238,16 @@ sub HeaderInterface($)
 
        my $count = 0;
 
-       pidl_hdr "#include \"librpc/ndr/libndr.h\"";
+       pidl_hdr choose_header("librpc/ndr/libndr.h", "ndr.h");
 
        if (has_property($interface, "object")) {
-               pidl "#include \"librpc/gen_ndr/ndr_orpc.h\"";
+               pidl choose_header("librpc/gen_ndr/ndr_orpc.h", "ndr/orpc.h");
        }
 
        if (defined $interface->{PROPERTIES}->{depends}) {
                my @d = split / /, $interface->{PROPERTIES}->{depends};
                foreach my $i (@d) {
-                       pidl "#include \"librpc/gen_ndr/ndr_$i\.h\"";
+                       pidl choose_header("librpc/gen_ndr/ndr_$i\.h", "gen_ndr/ndr_$i.h");
                }
        }
 
@@ -2311,7 +2312,7 @@ sub ParseInterface($$)
        pidl_hdr "";
 
        if ($needed->{"compression"}) {
-               pidl "#include \"librpc/ndr/ndr_compression.h\"";
+               pidl choose_header("librpc/ndr/ndr_compression.h", "ndr/compression.h");
        }
        
        HeaderInterface($interface);
@@ -2347,9 +2348,9 @@ sub ParseInterface($$)
 
 #####################################################################
 # parse a parsed IDL structure back into an IDL file
-sub Parse($$)
+sub Parse($$$)
 {
-       my($ndr,$basename) = @_;
+       my($ndr,$gen_header,$ndr_header) = @_;
 
        $tabs = "";
        $res = "";
@@ -2357,9 +2358,27 @@ sub Parse($$)
        $res_hdr = "";
        pidl_hdr "/* header auto-generated by pidl */";
        pidl_hdr "";
+       pidl_hdr "#include \"$gen_header\"";
+       pidl_hdr "";
 
        pidl "/* parser auto-generated by pidl */";
        pidl "";
+       if (is_intree()) {
+               pidl "#include \"includes.h\"";
+       } else {
+               pidl "#define _GNU_SOURCE";
+               pidl "#include <stdint.h>";
+               pidl "#include <stdlib.h>";
+               pidl "#include <stdio.h>";
+               pidl "#include <stdarg.h>";
+               pidl "#include <string.h>";
+       }
+       pidl choose_header("libcli/util/nterr.h", "core/nterr.h");
+       pidl choose_header("librpc/gen_ndr/ndr_misc.h", "gen_ndr/ndr_misc.h");
+       pidl choose_header("librpc/gen_ndr/ndr_dcerpc.h", "gen_ndr/ndr_dcerpc.h");
+       pidl "#include \"$ndr_header\"";
+       pidl choose_header("librpc/rpc/dcerpc.h", "dcerpc.h"); #FIXME: This shouldn't be here!
+       pidl "";
 
        my %needed = ();
 
index 1cfc005c2f4a3ade6beed3472b57c338fc601793..d913e84e7d5dbb33f76b760674a3fa7d8477b7a5 100755 (executable)
@@ -613,27 +613,22 @@ sub process_file($)
                unlink($tempfile);
        }
 
+
+       my $comh_filename = ($opt_com_header or "$outputdir/com_$basename.h");
        if (defined($opt_com_header)) {
                require Parse::Pidl::Samba4::COM::Header;
-               my $res = Parse::Pidl::Samba4::COM::Header::Parse($pidl);
+               my $res = Parse::Pidl::Samba4::COM::Header::Parse($pidl,"$outputdir/ndr_$basename.h");
                if ($res) {
-                       my $comh_filename = ($opt_com_header or "$outputdir/com_$basename.h");
-                       FileSave($comh_filename, 
-                       "#include \"librpc/gen_ndr/ndr_orpc.h\"\n" . 
-                       "#include \"$outputdir/ndr_$basename.h\"\n" . 
-                       $res);
+                       FileSave($comh_filename, $res);
                }
        }
 
        if (defined($opt_dcom_proxy)) {
                require Parse::Pidl::Samba4::COM::Proxy;
-               my $res = Parse::Pidl::Samba4::COM::Proxy::Parse($pidl);
+               my $res = Parse::Pidl::Samba4::COM::Proxy::Parse($pidl,$comh_filename);
                if ($res) {
                        my ($client) = ($opt_dcom_proxy or "$outputdir/$basename\_p.c");
-                       FileSave($client, 
-                       "#include \"includes.h\"\n" .
-                       "#include \"$outputdir/com_$basename.h\"\n" . 
-                       "#include \"lib/com/dcom/dcom.h\"\n" .$res);
+                       FileSave($client, $res);
                }
        }
 
@@ -690,12 +685,12 @@ sub process_file($)
                require Parse::Pidl::Samba4::NDR::Server;
                my $dcom = "";
 
-               foreach my $x (@{$pidl}) {
-                       next if ($x->{TYPE} ne "INTERFACE");
+               foreach (@{$pidl}) {
+                       next if ($_->{TYPE} ne "INTERFACE");
 
-                       if (Parse::Pidl::Util::has_property($x, "object")) {
+                       if (Parse::Pidl::Util::has_property($_, "object")) {
                                require Parse::Pidl::Samba4::COM::Stub;
-                               $dcom .= Parse::Pidl::Samba4::COM::Stub::ParseInterface($x);
+                               $dcom .= Parse::Pidl::Samba4::COM::Stub::ParseInterface($_);
                        }
                }
 
@@ -717,25 +712,16 @@ $dcom
        if (defined($opt_ndr_parser)) {
                my $parser_fname = ($opt_ndr_parser or "$outputdir/ndr_$basename.c");
                require Parse::Pidl::Samba4::NDR::Parser;
-               my $header_fname = $parser_fname; 
-               $header_fname =~ s/\.c$/\.h/;
-               my ($header,$parser) = Parse::Pidl::Samba4::NDR::Parser::Parse($ndr, $basename);
-
-               my $baseheader = $h_filename; $baseheader =~ s/\/ndr_/\//;
-               $header = "#include \"$baseheader\"\n$header";
+               my ($header,$parser) = Parse::Pidl::Samba4::NDR::Parser::Parse($ndr, $gen_header, $h_filename);
 
-               $parser = "#include \"includes.h\"\n"
-               . "#include \"librpc/gen_ndr/ndr_misc.h\"\n"
-               . "#include \"librpc/gen_ndr/ndr_dcerpc.h\"\n"
-               . "#include \"$header_fname\"\n\n$parser";
 
                FileSave($parser_fname, $parser);
-               FileSave($header_fname, $header);
+               FileSave($h_filename, $header);
 
                if (defined($opt_swig)) {
                  require Parse::Pidl::Samba4::SWIG;
                  my($filename) = ($opt_swig or "$outputdir/$basename.i");
-                 Parse::Pidl::Samba4::SWIG::RewriteHeader($pidl, $header_fname, $filename);
+                 Parse::Pidl::Samba4::SWIG::RewriteHeader($pidl, $h_filename, $filename);
                }
        }