param: use generate_param.py to generate s3_param.h
authorGarming Sam <garming@catalyst.net.nz>
Wed, 15 Jan 2014 04:52:41 +0000 (17:52 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 12 Feb 2014 00:17:14 +0000 (13:17 +1300)
Pair-programmed-with: Andrew Bartlett <abartlet@samba.org>
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
lib/param/wscript_build
script/mks3param.pl [deleted file]
source3/param/wscript_build

index c0b612bfcbaa387a3e8ed637e32b7f6c188e7921..256dfcbdd4c582383743187ce9ae6da857dcbbbc 100644 (file)
@@ -18,11 +18,11 @@ bld.SAMBA_GENERATOR('param_local.h',
                     group='build_source',
                     rule='${PYTHON} ${SRC[0].abspath(env)} --file ${SRC[1].abspath(env)} --output ${TGT} --mode=PARAMDEFS --scope=LOCAL')
 
-bld.SAMBA_GENERATOR('s3_param_h',
-                    source= ' ../../script/mks3param.pl loadparm.c param_functions.c',
+bld.SAMBA_GENERATOR('s3_param.h',
+                    source= '../../script/generate_param.py ../../docs-xml/smbdotconf/parameters.all.xml',
                     target='s3_param.h',
                     group='build_source',
-                    rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT}')
+                    rule='${PYTHON} ${SRC[0].abspath(env)} --file ${SRC[1].abspath(env)} --output ${TGT} --mode=S3PARAM')
 
 bld.SAMBA_GENERATOR('param_global.h',
                     source= '../../script/generate_param.py ../../docs-xml/smbdotconf/parameters.all.xml',
diff --git a/script/mks3param.pl b/script/mks3param.pl
deleted file mode 100644 (file)
index 799958c..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/usr/bin/perl
-# Generate loadparm interfaces tables for Samba3/Samba4 integration
-# by Andrew Bartlett
-# based on mkproto.pl Written by Jelmer Vernooij
-# based on the original mkproto.sh by Andrew Tridgell
-
-use strict;
-
-# don't use warnings module as it is not portable enough
-# use warnings;
-
-use Getopt::Long;
-use File::Basename;
-use File::Path;
-
-#####################################################################
-# read a file into a string
-
-my $file = undef;
-my $public_define = undef;
-my $_public = "";
-my $_private = "";
-my $public_data = \$_public;
-my $builddir = ".";
-my $srcdir = ".";
-
-sub public($)
-{
-       my ($d) = @_;
-       $$public_data .= $d;
-}
-
-sub usage()
-{
-       print "Usage: mks3param.pl [options] [c files]\n";
-       print "OPTIONS:\n";
-       print "  --srcdir=path          Read files relative to this directory\n";
-       print "  --builddir=path        Write file relative to this directory\n";
-       print "  --help                 Print this help message\n\n";
-       exit 0;
-}
-
-GetOptions(
-       'file=s' => sub { my ($f,$v) = @_; $file = $v; },
-       'srcdir=s' => sub { my ($f,$v) = @_; $srcdir = $v; },
-       'builddir=s' => sub { my ($f,$v) = @_; $builddir = $v; },
-       'help' => \&usage
-) or exit(1);
-
-sub normalize_define($$)
-{
-       my ($define, $file) = @_;
-
-       if (not defined($define) and defined($file)) {
-               $define = "__" . uc($file) . "__";
-               $define =~ tr{./}{__};
-               $define =~ tr{\-}{_};
-       } elsif (not defined($define)) {
-               $define = '_S3_PARAM_H_';
-       }
-
-       return $define;
-}
-
-$public_define = normalize_define($public_define, $file);
-
-sub file_load($)
-{
-    my($filename) = @_;
-    local(*INPUTFILE);
-    open(INPUTFILE, $filename) or return undef;
-    my($saved_delim) = $/;
-    undef $/;
-    my($data) = <INPUTFILE>;
-    close(INPUTFILE);
-    $/ = $saved_delim;
-    return $data;
-}
-
-sub print_header($$)
-{
-       my ($file, $header_name) = @_;
-       $file->("#ifndef $header_name\n");
-       $file->("#define $header_name\n\n");
-       $file->("/* This file was automatically generated by mks3param.pl. DO NOT EDIT */\n\n");
-       $file->("struct loadparm_s3_helpers\n");
-       $file->("{\n");
-       $file->("\tconst char * (*get_parametric)(struct loadparm_service *, const char *type, const char *option);\n");
-       $file->("\tstruct parm_struct * (*get_parm_struct)(const char *param_name);\n");
-       $file->("\tvoid * (*get_parm_ptr)(struct loadparm_service *service, struct parm_struct *parm);\n");
-       $file->("\tstruct loadparm_service * (*get_service)(const char *service_name);\n");
-       $file->("\tstruct loadparm_service * (*get_default_loadparm_service)(void);\n");
-       $file->("\tstruct loadparm_service * (*get_servicebynum)(int snum);\n");
-       $file->("\tint (*get_numservices)(void);\n");
-       $file->("\tbool (*load)(const char *filename);\n");
-       $file->("\tbool (*set_cmdline)(const char *pszParmName, const char *pszParmValue);\n");
-       $file->("\tvoid (*dump)(FILE *f, bool show_defaults, int maxtoprint);\n");
-}
-
-sub print_footer($$) 
-{
-       my ($file, $header_name) = @_;
-       $file->("};");
-       $file->("\n#endif /* $header_name */\n\n");
-}
-
-sub handle_loadparm($$) 
-{
-       my ($file,$line) = @_;
-
-       # Local parameters don't need the ->s3_fns because the struct
-       # loadparm_service is shared and lpcfg_service() checks the ->s3_fns
-       # hook
-       #
-       # STRING isn't handled as we do not yet have a way to pass in a memory context nor
-       # do we have a good way of dealing with the % macros yet.
-
-       if ($line =~ /^FN_(GLOBAL)_(CONST_STRING|BOOL|bool|CHAR|INTEGER|LIST)\((\w+),.*\)/o) {
-               my $scope = $1;
-               my $type = $2;
-               my $name = $3;
-
-               my %tmap = (
-                           "BOOL" => "bool ",
-                           "CONST_STRING" => "const char *",
-                           "STRING" => "const char *",
-                           "INTEGER" => "int ",
-                           "CHAR" => "char ",
-                           "LIST" => "const char **",
-                           );
-
-               $file->("\t$tmap{$type} (*$name)(void);\n");
-       }
-}
-
-sub process_file($$) 
-{
-       my ($file, $filename) = @_;
-
-       $filename =~ s/\.o$/\.c/g;
-
-       if ($filename =~ /^\//) {
-               open(FH, "<$filename") or die("Failed to open $filename");
-       } elsif (!open(FH, "< $builddir/$filename")) {
-           open(FH, "< $srcdir/$filename") || die "Failed to open $filename";
-       }
-
-       my $comment = undef;
-       my $incomment = 0;
-       while (my $line = <FH>) {             
-               if ($line =~ /^\/\*\*/) { 
-                       $comment = "";
-                       $incomment = 1;
-               }
-
-               if ($incomment) {
-                       $comment .= $line;
-                       if ($line =~ /\*\//) {
-                               $incomment = 0;
-                       }
-               } 
-
-               # these are ordered for maximum speed
-               next if ($line =~ /^\s/);
-             
-               next unless ($line =~ /\(/);
-
-               next if ($line =~ /^\/|[;]/);
-
-               if ($line =~ /^FN_/) {
-                       handle_loadparm($file, $line);
-               }
-               next;
-       }
-
-       close(FH);
-}
-
-
-print_header(\&public, $public_define);
-
-process_file(\&public, $_) foreach (@ARGV);
-print_footer(\&public, $public_define);
-
-if (not defined($file)) {
-       print STDOUT $$public_data;
-}
-
-mkpath(dirname($file), 0, 0755);
-open(PUBLIC, ">$file") or die("Can't open `$file': $!"); 
-print PUBLIC "$$public_data";
-close(PUBLIC);
-
index f0c6ddae8438c58789e12b54ce3e6ea67eee7c25..90af52bbd4cb0e655d35f8dd815f45728701e1ad 100644 (file)
@@ -6,7 +6,7 @@ bld.SAMBA3_SUBSYSTEM('PARAM_UTIL',
 
 bld.SAMBA3_SUBSYSTEM('LOADPARM_CTX',
                      source='loadparm_ctx.c',
-                     deps='''talloc s3_param_h param''')
+                     deps='''talloc s3_param.h param''')
 
 bld.SAMBA_GENERATOR('s3_param_proto_h',
                     source= '../../script/generate_param.py ../../docs-xml/smbdotconf/parameters.all.xml',