mirror of
https://github.com/samba-team/samba.git
synced 2025-01-03 01:18:10 +03:00
param: use generate_param.py to generate param_proto.h
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>
This commit is contained in:
parent
a29d885cb6
commit
526cf3c119
@ -1,199 +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_PROTO_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_proto.pl. DO NOT EDIT */\n\n");
|
||||
}
|
||||
|
||||
sub print_footer($$)
|
||||
{
|
||||
my ($file, $header_name) = @_;
|
||||
$file->("\n#endif /* $header_name */\n\n");
|
||||
}
|
||||
|
||||
sub handle_loadparm($$)
|
||||
{
|
||||
my ($file,$line) = @_;
|
||||
|
||||
my $scope;
|
||||
my $type;
|
||||
my $name;
|
||||
my $var;
|
||||
my $param;
|
||||
|
||||
if ($line =~ /^FN_(GLOBAL|LOCAL)_(CONST_STRING|STRING|BOOL|bool|CHAR|INTEGER|LIST)\((\w+),(.*)\)/o) {
|
||||
$scope = $1;
|
||||
$type = $2;
|
||||
$name = $3;
|
||||
$var = $4;
|
||||
$param = "int";
|
||||
} elsif ($line =~ /^FN_(GLOBAL|LOCAL)_PARM_(CONST_STRING|STRING|BOOL|bool|CHAR|INTEGER|LIST)\((\w+),(.*)\)/o) {
|
||||
$scope = $1;
|
||||
$type = $2;
|
||||
$name = $3;
|
||||
$var = $4;
|
||||
$param = "const struct share_params *p";
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
my %tmap = (
|
||||
"BOOL" => "bool ",
|
||||
"CONST_STRING" => "const char *",
|
||||
"STRING" => "char *",
|
||||
"INTEGER" => "int ",
|
||||
"CHAR" => "char ",
|
||||
"LIST" => "const char **",
|
||||
);
|
||||
|
||||
my %smap = (
|
||||
"GLOBAL" => "void",
|
||||
"LOCAL" => "$param"
|
||||
);
|
||||
|
||||
if (($type eq "STRING") and ($scope eq "GLOBAL")) {
|
||||
$file->("$tmap{$type}lp_$name(TALLOC_CTX *ctx);\n");
|
||||
} elsif (($type eq "STRING") and ($scope eq "LOCAL")) {
|
||||
$file->("$tmap{$type}lp_$name(TALLOC_CTX *ctx, $smap{$scope});\n");
|
||||
} else {
|
||||
$file->("$tmap{$type}lp_$name($smap{$scope});\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);
|
@ -987,6 +987,11 @@ NTSTATUS trust_pw_change(struct netlogon_creds_cli_context *context,
|
||||
|
||||
#include "source3/param/param_proto.h"
|
||||
|
||||
char *lp_configfile(TALLOC_CTX *ctx);
|
||||
char *lp_servicename(TALLOC_CTX *ctx, int);
|
||||
const char *lp_const_servicename(int);
|
||||
bool lp_autoloaded(int);
|
||||
const char *lp_dnsdomain(void);
|
||||
int lp_winbind_max_domain_connections(void);
|
||||
bool lp_idmap_range(const char *domain_name, uint32_t *low, uint32_t *high);
|
||||
bool lp_idmap_default_range(uint32_t *low, uint32_t *high);
|
||||
|
@ -15,10 +15,10 @@ bld.SAMBA_GENERATOR('s3_param_global_h',
|
||||
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/mks3param_proto.pl loadparm.c ../../lib/param/param_functions.c',
|
||||
source= '../../script/generate_param.py ../../docs-xml/smbdotconf/parameters.all.xml',
|
||||
target='param_proto.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=S3PROTO')
|
||||
|
||||
bld.SAMBA_GENERATOR('s3_loadparm_ctx_table_c',
|
||||
source= ' ../../script/mks3param_ctx_table.pl ../../lib/param/loadparm.c ../../lib/param/param_functions.c',
|
||||
|
Loading…
Reference in New Issue
Block a user