mirror of
				https://github.com/samba-team/samba.git
				synced 2025-11-04 00:23:49 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
###########################################################
 | 
						|
### SMB Build System					###
 | 
						|
### - create output for smb_build.h			###
 | 
						|
###							###
 | 
						|
###  Copyright (C) Stefan (metze) Metzmacher 2004	###
 | 
						|
###  Released under the GNU GPL				###
 | 
						|
###########################################################
 | 
						|
 | 
						|
package smb_build_h;
 | 
						|
use strict;
 | 
						|
 | 
						|
sub _add_define_section($)
 | 
						|
{
 | 
						|
	my $DEFINE = shift;
 | 
						|
	my $output = "";
 | 
						|
 | 
						|
	$output .= "
 | 
						|
/* $DEFINE->{COMMENT} */
 | 
						|
#define $DEFINE->{KEY} $DEFINE->{VAL}
 | 
						|
";
 | 
						|
 | 
						|
	return $output;
 | 
						|
}
 | 
						|
 | 
						|
sub _prepare_smb_build_h($)
 | 
						|
{
 | 
						|
	my $depend = shift;
 | 
						|
	my @defines = ();
 | 
						|
 | 
						|
	#
 | 
						|
	# loop over all binaries
 | 
						|
	#
 | 
						|
	foreach my $key (values %{$depend}) {
 | 
						|
		next if ($key->{TYPE} ne "BINARY");
 | 
						|
 | 
						|
		my $NAME = $key->{NAME};
 | 
						|
		my $DEFINE = ();
 | 
						|
		my $name = lc($NAME);
 | 
						|
 | 
						|
		#
 | 
						|
		# Static modules
 | 
						|
		# 
 | 
						|
		$DEFINE->{COMMENT} = "BINARY $NAME INIT";
 | 
						|
		$DEFINE->{KEY} = $name . "_init_subsystems";
 | 
						|
		$DEFINE->{VAL} = "do { \\\n";
 | 
						|
		foreach my $subkey (@{$key->{SUBSYSTEM_INIT_FUNCTIONS}}) {
 | 
						|
			$DEFINE->{VAL} .= "\t\textern NTSTATUS $subkey(void); \\\n";
 | 
						|
		}
 | 
						|
	
 | 
						|
		foreach my $subkey (@{$key->{SUBSYSTEM_INIT_FUNCTIONS}}) {
 | 
						|
			$DEFINE->{VAL} .= "\t\tif (NT_STATUS_IS_ERR($subkey())) exit(1); \\\n";
 | 
						|
		}
 | 
						|
		$DEFINE->{VAL} .= "\t} while(0)";
 | 
						|
		
 | 
						|
		push(@defines,$DEFINE);
 | 
						|
	}
 | 
						|
 | 
						|
	#
 | 
						|
	# Shared modules
 | 
						|
	#
 | 
						|
	foreach my $key (values %{$depend}) {
 | 
						|
		next if $key->{TYPE} ne "MODULE";
 | 
						|
		next if $key->{ENABLE} ne "YES";
 | 
						|
		next if $key->{OUTPUT_TYPE} ne "SHARED_LIBRARY";
 | 
						|
 | 
						|
		my $name = $key->{NAME};
 | 
						|
		next if not defined($key->{INIT_FUNCTION});
 | 
						|
		my $func = join(' ', @{$key->{INIT_FUNCTION}});
 | 
						|
		next if $func eq "";
 | 
						|
 | 
						|
		my $DEFINE = ();
 | 
						|
		
 | 
						|
		$DEFINE->{COMMENT} = "$name is built shared";
 | 
						|
		$DEFINE->{KEY} = $func;
 | 
						|
		$DEFINE->{VAL} = "init_module";
 | 
						|
 | 
						|
		push(@defines,$DEFINE);
 | 
						|
	}
 | 
						|
 | 
						|
	#
 | 
						|
	# loop over all SMB_BUILD_H define sections
 | 
						|
	#
 | 
						|
	my $output = "";
 | 
						|
	foreach my $key (@defines) {
 | 
						|
		$output .= _add_define_section($key);
 | 
						|
	}
 | 
						|
 | 
						|
	return $output;
 | 
						|
}
 | 
						|
 | 
						|
###########################################################
 | 
						|
# This function creates include/smb_build.h from the SMB_BUILD 
 | 
						|
# context
 | 
						|
#
 | 
						|
# create_smb_build_h($SMB_BUILD_CTX)
 | 
						|
#
 | 
						|
# $SMB_BUILD_CTX -	the global SMB_BUILD context
 | 
						|
#
 | 
						|
# $output -		the resulting output buffer
 | 
						|
sub create_smb_build_h($$)
 | 
						|
{
 | 
						|
	my ($CTX, $file) = @_;
 | 
						|
	my $output = "/* autogenerated by build/smb_build/main.pl */\n";
 | 
						|
 | 
						|
	$output .= _prepare_smb_build_h($CTX);
 | 
						|
 | 
						|
	open(SMB_BUILD_H,">$file") || die ("Can't open `$file'\n");
 | 
						|
	print SMB_BUILD_H $output;
 | 
						|
	close(SMB_BUILD_H);
 | 
						|
 | 
						|
	print "build/smb_build/main.pl: creating $file\n";
 | 
						|
	return;	
 | 
						|
}
 | 
						|
1;
 |