From b1de1abf7bf3de70faa279bd0617f48434d550e2 Mon Sep 17 00:00:00 2001 From: Garming Sam Date: Wed, 15 Jan 2014 17:39:48 +1300 Subject: [PATCH] param: use generate_param.py to generate param_global.h Pair-programmed-with: Andrew Bartlett Signed-off-by: Garming Sam Reviewed-by: Andrew Bartlett Reviewed-by: Michael Adam --- lib/param/wscript_build | 7 +- script/mkparamdefs.pl | 206 ------------------------------------ source3/param/loadparm.c | 2 +- source3/param/wscript_build | 6 -- source3/wscript_build | 2 +- 5 files changed, 5 insertions(+), 218 deletions(-) delete mode 100644 script/mkparamdefs.pl diff --git a/lib/param/wscript_build b/lib/param/wscript_build index 2a32133bc1d..3d216c4913c 100644 --- a/lib/param/wscript_build +++ b/lib/param/wscript_build @@ -25,12 +25,11 @@ bld.SAMBA_GENERATOR('s3_param_h', group='build_source', rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT}') - -bld.SAMBA_GENERATOR('param_global_h', - source= '../../script/mkparamdefs.pl loadparm.c param_functions.c', +bld.SAMBA_GENERATOR('param_global.h', + source= '../../script/generate_param.py ../../docs-xml/smbdotconf/parameters.all.xml', target='param_global.h', group='build_source', - rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT} --generate-scope=GLOBAL') + rule='${PYTHON} ${SRC[0].abspath(env)} --file ${SRC[1].abspath(env)} --output ${TGT} --mode=PARAMDEFS --scope=GLOBAL') bld.SAMBA_LIBRARY('server-role', source='loadparm_server_role.c', diff --git a/script/mkparamdefs.pl b/script/mkparamdefs.pl deleted file mode 100644 index 6b59230b243..00000000000 --- a/script/mkparamdefs.pl +++ /dev/null @@ -1,206 +0,0 @@ -#!/usr/bin/perl -# Generate loadparm tables for loadparm.c -# 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 = "."; -my $generate_scope = undef; - -sub public($) -{ - my ($d) = @_; - $$public_data .= $d; -} - -sub usage() -{ - print "Usage: mkparamdefs.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 " --generate-scope=[GLOBAL|LOCAL] Filter which definitions to generate\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; }, - 'generate-scope=s' => sub { my ($f,$v) = @_; $generate_scope = $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) = ; - close(INPUTFILE); - $/ = $saved_delim; - return $data; -} - -sub print_header($$$) -{ - my ($file, $header_name,$generate_scope) = @_; - $file->("#ifndef $header_name\n"); - $file->("#define $header_name\n\n"); -$file->("/* This file was automatically generated by mkparamdefs.pl. DO NOT EDIT */\n\n"); - $file->("/**\n"); - if ($generate_scope eq "GLOBAL") { - $file->(" * This structure describes global (ie., server-wide) parameters.\n"); - $file->(" */\n"); - $file->("struct loadparm_global \n"); - $file->("{\n"); - $file->("\tTALLOC_CTX *ctx; /* Context for talloced members */\n"); - } elsif ($generate_scope eq "LOCAL") { - $file->(" * This structure describes a single service.\n"); - $file->(" */\n"); - $file->("struct loadparm_service \n"); - $file->("{\n"); - } -} - -sub print_footer($$$) -{ - my ($file, $header_name, $generate_scope) = @_; - $file->("LOADPARM_EXTRA_" . $generate_scope . "S\n"); - $file->("};\n"); - $file->("\n#endif /* $header_name */\n\n"); -} - -sub handle_loadparm($$$) -{ - my ($file,$line,$generate_scope) = @_; - - my $scope; - my $type; - my $name; - my $var; - - if ($line =~ /^FN_(GLOBAL|LOCAL)_(CONST_STRING|STRING|BOOL|bool|CHAR|INTEGER|LIST)\((\w+),(.*)\)/o) { - $scope = $1; - $type = $2; - $name = $3; - $var = $4; - } elsif ($line =~ /^FN_(GLOBAL|LOCAL)_PARM_(CONST_STRING|STRING|BOOL|bool|CHAR|INTEGER|LIST)\((\w+),(.*)\)/o) { - $scope = $1; - $type = $2; - $name = $3; - $var = $4; - } else { - return; - } - my %tmap = ( - "BOOL" => "bool ", - "CONST_STRING" => "char *", - "STRING" => "char *", - "INTEGER" => "int ", - "CHAR" => "char ", - "LIST" => "const char **", - ); - - if ($scope eq $generate_scope) { - $file->("\t$tmap{$type} $var;\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 = ) { - 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 =~ /^static (FN_.*)/) { - handle_loadparm($file, $1, $generate_scope); - } elsif ($line =~ /^FN_/) { - handle_loadparm($file, $line, $generate_scope); - } - next; - } - - close(FH); -} - - -print_header(\&public, $public_define, $generate_scope); - -process_file(\&public, $_) foreach (@ARGV); -print_footer(\&public, $public_define, $generate_scope); - -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); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index c464861fffe..be18f10921f 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -130,7 +130,7 @@ static bool defaults_saved = false; char *tls_crlfile; \ char *tls_dhpfile; -#include "param/param_global.h" +#include "lib/param/param_global.h" static struct loadparm_global Globals; diff --git a/source3/param/wscript_build b/source3/param/wscript_build index 5c0635c03ed..f0c6ddae843 100644 --- a/source3/param/wscript_build +++ b/source3/param/wscript_build @@ -8,12 +8,6 @@ bld.SAMBA3_SUBSYSTEM('LOADPARM_CTX', source='loadparm_ctx.c', deps='''talloc s3_param_h param''') -bld.SAMBA_GENERATOR('s3_param_global_h', - source= '../../script/mkparamdefs.pl loadparm.c ../../lib/param/param_functions.c', - target='param_global.h', - group='build_source', - rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT} --generate-scope=GLOBAL') - bld.SAMBA_GENERATOR('s3_param_proto_h', source= '../../script/generate_param.py ../../docs-xml/smbdotconf/parameters.all.xml', target='param_proto.h', diff --git a/source3/wscript_build b/source3/wscript_build index 61e7935c98b..9b6111930d0 100755 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -190,7 +190,7 @@ bld.SAMBA3_SUBSYSTEM('param', lib/sharesec.c lib/ldap_debug_handler.c lib/util_names.c''', - deps='samba-util PARAM_UTIL ldap lber LOADPARM_CTX samba3core smbconf param_local_h s3_param_global_h cups''') + deps='samba-util PARAM_UTIL ldap lber LOADPARM_CTX samba3core smbconf param_local_h param_global.h cups''') # this includes only the low level parse code, not stuff # that requires knowledge of security contexts -- 2.34.1