Author: jelmer
Date: 2005-12-27 20:29:19 +0000 (Tue, 27 Dec 2005)
New Revision: 12520

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12520

Log:
Add support for --help to mkproto.pl
Allow the use of {PRIVATE,PUBLIC}_PROTO_HEADER for [SUBSYSTEM]
and [LIBRARY] sections in .mk files. Public functions can be marked 
by adding _PUBLIC_ between their return type and function name.

This should eventually make include/proto.h and include/structs.h obsolete.

Modified:
   branches/SAMBA_4_0/source/build/smb_build/config_mk.pm
   branches/SAMBA_4_0/source/build/smb_build/input.pm
   branches/SAMBA_4_0/source/build/smb_build/main.pl
   branches/SAMBA_4_0/source/build/smb_build/makefile.pm
   branches/SAMBA_4_0/source/main.mk
   branches/SAMBA_4_0/source/script/mkproto.pl


Changeset:
Modified: branches/SAMBA_4_0/source/build/smb_build/config_mk.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/config_mk.pm      2005-12-27 
20:20:03 UTC (rev 12519)
+++ branches/SAMBA_4_0/source/build/smb_build/config_mk.pm      2005-12-27 
20:29:19 UTC (rev 12520)
@@ -29,6 +29,9 @@
                "NOPROTO"               => "bool",
 
                "MANPAGE"               => "string",
+
+               "PUBLIC_PROTO_HEADER" => "string",
+               "PRIVATE_PROTO_HEADER" => "string"
                },
        "MODULE" => {
                "SUBSYSTEM"             => "string",
@@ -71,7 +74,10 @@
 
                "MANPAGE"               => "string",
 
-               "PUBLIC_HEADERS" => "list"
+               "PUBLIC_HEADERS" => "list",
+
+               "PUBLIC_PROTO_HEADER" => "string",
+               "PRIVATE_PROTO_HEADER" => "string"
                }
 };
 

Modified: branches/SAMBA_4_0/source/build/smb_build/input.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/input.pm  2005-12-27 20:20:03 UTC 
(rev 12519)
+++ branches/SAMBA_4_0/source/build/smb_build/input.pm  2005-12-27 20:29:19 UTC 
(rev 12520)
@@ -140,6 +140,11 @@
                        $part->{NOPROTO} = "NO";
                }
 
+               if (defined($part->{PRIVATE_PROTO_HEADER}) or 
+                       defined($part->{PUBLIC_PROTO_HEADER})) {
+                       $part->{NOPROTO} = "YES";
+               }
+
                if (defined($enabled->{$part->{NAME}})) { 
                        $part->{ENABLE} = $enabled->{$part->{NAME}};
                        next;

Modified: branches/SAMBA_4_0/source/build/smb_build/main.pl
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/main.pl   2005-12-27 20:20:03 UTC 
(rev 12519)
+++ branches/SAMBA_4_0/source/build/smb_build/main.pl   2005-12-27 20:29:19 UTC 
(rev 12520)
@@ -74,6 +74,8 @@
        $mkenv->Binary($key) if $key->{OUTPUT_TYPE} eq "BINARY";
        $mkenv->Manpage($key) if defined($key->{MANPAGE});
        $mkenv->Header($key) if defined($key->{PUBLIC_HEADERS});
+       $mkenv->ProtoHeader($key) if defined($key->{PRIVATE_PROTO_HEADER});
+
 }
 
 $mkenv->write("Makefile");

Modified: branches/SAMBA_4_0/source/build/smb_build/makefile.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/makefile.pm       2005-12-27 
20:20:03 UTC (rev 12519)
+++ branches/SAMBA_4_0/source/build/smb_build/makefile.pm       2005-12-27 
20:29:19 UTC (rev 12520)
@@ -425,9 +425,9 @@
        my ($self,$ctx) = @_;
 
        my $dir = $ctx->{BASEDIR};
+       
+       $ctx->{BASEDIR} =~ s/^\.\///g;
 
-       $dir =~ s/^\.\///g;
-
        push (@{$self->{manpages}}, "$dir/$ctx->{MANPAGE}");
 }
 
@@ -463,7 +463,21 @@
 {
        my ($self,$ctx) = @_;
 
-       $self->_prepare_list($ctx, "OBJ_LIST");
+       my $dir = $ctx->{BASEDIR};
+       $ctx->{BASEDIR} =~ s/^\.\///g;
+
+       my $comment = "";
+       my $target = "$dir/$ctx->{PRIVATE_PROTO_HEADER}";
+       if (defined($ctx->{PUBLIC_PROTO_HEADER})) {
+               $comment.= " and $dir/$ctx->{PRIVATE_PROTO_HEADER}";
+       } else {
+               $ctx->{PUBLIC_PROTO_HEADER} = $ctx->{PRIVATE_PROTO_HEADER};
+       }       
+
+       $self->output("$target: 
\$($ctx->{TYPE}_$ctx->{NAME}_OBJ_LIST:.o=.c)\n");
+       $self->output("[EMAIL PROTECTED] \"Creating 
$dir/$ctx->{PRIVATE_PROTO_HEADER}$comment\"\n");
+
+       $self->output("[EMAIL PROTECTED](PERL) \${srcdir}/script/mkproto.pl 
--private=$dir/$ctx->{PRIVATE_PROTO_HEADER} 
--public=$dir/$ctx->{PUBLIC_PROTO_HEADER} 
\$($ctx->{TYPE}_$ctx->{NAME}_OBJ_LIST)\n\n");
 }
 
 sub write($$)
@@ -479,9 +493,8 @@
        $self->output("PUBLIC_HEADERS = " . array2oneperline($self->{headers}) 
. "\n");
        $self->output("PC_FILES = " . array2oneperline($self->{pc_files}) . 
"\n");
        $self->output("ALL_OBJS = " . array2oneperline($self->{all_objs}) . 
"\n");
-       $self->output("PROTO_OBJS = " . array2oneperline($self->{proto_objs}) . 
"\n");
+       $self->output("PROTO_OBJS = " . array2oneperline($self->{proto_objs}) . 
 "\n");
 
-
        $self->_prepare_mk_files();
 
        if ($self->{developer}) {

Modified: branches/SAMBA_4_0/source/main.mk
===================================================================
--- branches/SAMBA_4_0/source/main.mk   2005-12-27 20:20:03 UTC (rev 12519)
+++ branches/SAMBA_4_0/source/main.mk   2005-12-27 20:29:19 UTC (rev 12520)
@@ -198,18 +198,21 @@
        @/bin/false
 
 include/proto.h: $(PROTO_OBJS:.o=.c)
-       @-rm -f include/includes.h.gch
        @echo "Creating include/proto.h"
        @$(PERL) script/mkproto.pl --public-define=_PROTO_H_ \
                --public=include/proto.h --private=include/proto.h \
                $(PROTO_OBJS)
 
 proto: include/proto.h
+
 pch: include/config.h \
        include/proto.h \
        idl \
        include/includes.h.gch
 
+clean_pch: 
+       -rm -f include/includes.h.gch
+
 basics: include/config.h \
        include/proto.h \
        idl \

Modified: branches/SAMBA_4_0/source/script/mkproto.pl
===================================================================
--- branches/SAMBA_4_0/source/script/mkproto.pl 2005-12-27 20:20:03 UTC (rev 
12519)
+++ branches/SAMBA_4_0/source/script/mkproto.pl 2005-12-27 20:29:19 UTC (rev 
12520)
@@ -15,6 +15,19 @@
 my $public_fd = \*STDOUT;
 my $private_fd = \*STDOUT;
 
+sub usage()
+{
+       print "Usage: mkproto.pl [options] [c files]\n";
+       print "OPTIONS:\n";
+       print "  --public=FILE          Write prototypes for public functions 
to FILE\n";
+       print "  --private=FILE         Write prototypes for private functions 
to FILE\n";
+       print "  --define=DEF           Use DEF to check whether header was 
already included\n";
+       print "  --public-define=DEF    Same as --define, but just for public 
header\n";
+       print "  --private-define=DEF   Same as --define, but just for private 
header\n";
+       print "  --help                 Print this help message\n\n";
+       exit 0;
+}
+
 GetOptions(
        'public=s' => sub { my ($f,$v) = @_; $public_file = $v; },
        'private=s' => sub { my ($f,$v) = @_; $private_file = $v; },
@@ -24,18 +37,19 @@
                $private_define = "$v\_PRIVATE"; 
        },
        'public-define=s' => \$public_define,
-       'private-define=s' => \$private_define
-);
+       'private-define=s' => \$private_define,
+       'help' => \&usage
+) or exit(1);
 
 if (not defined($public_define) and defined($public_file)) {
-       $public_define = $public_file;
+       $public_define = ".." . uc($public_file) . "__";
        $public_define =~ tr{./}{__};
 } elsif (not defined($public_define)) {
        $public_define = '_PROTO_H_';
 }
 
 if (not defined($private_define) and defined($private_file)) {
-       $private_define = $private_file;
+       $private_define = "__" . uc($private_file) . "__";
        $private_define =~ tr{./}{__};
 } elsif (not defined($public_define)) {
        $public_define = '_PROTO_H_';
@@ -48,7 +62,7 @@
 
 if ($private_file eq $public_file) {
        $private_fd = $public_fd;
-} elsif (not defined($private_file)) {
+} elsif (defined($private_file)) {
        open PRIVATE, ">$private_file"; 
        $private_fd = \*PRIVATE;
 }
@@ -58,7 +72,7 @@
        my ($file, $header_name) = @_;
        print $file "#ifndef $header_name\n";
        print $file "#define $header_name\n\n";
-       print $file "/* This file is automatically generated with \"make 
proto\". DO NOT EDIT */\n\n";
+       print $file "/* This file was automatically generated by mkproto.pl. DO 
NOT EDIT */\n\n";
 }
 
 sub print_footer($$) 
@@ -153,10 +167,17 @@
        close(FH);
 }
 
+print_header($public_fd, $public_define);
 if ($public_file ne $private_file) {
        print_header($private_fd, $private_define);
+
+       print $private_fd "/* this file contains prototypes for functions that 
" .
+                       "are private \n * to this subsystem or library. These 
functions " .
+                       "should not be \n * used outside this particular 
subsystem! */\n\n";
+
+       print $public_fd "/* this file contains prototypes for functions that " 
. 
+                       "are part of \n * the public API of this subsystem or 
library. */\n\n";
 }
-print_header($public_fd, $public_define);
 process_file($public_fd, $private_fd, $_) foreach (@ARGV);
 print_footer($public_fd, $public_define);
 if ($public_file ne $private_file) {

Reply via email to