mirror of
https://github.com/samba-team/samba.git
synced 2025-11-26 04:23:49 +03:00
platforms. The problem is that some loaders (for example the IRIX 6.5 machine us4 in the build farm) must have libs listed after object files that depend on them on the link line. If you put the libs first then all the symbols in the libs remain unresolved. I think the correct fix for this is to separate xxx_LINK_LIBS out from the current xxx_LINK_FLAGS, and use xxx_LINK_FLAGS followed by xxx_LINK_LIST followed by xxx_LINK_LIBS. I'm hoping metze or jelmer, as our build wizards, might take a look at this when they get time. This interim fix should work fine, but its rather ugly, as it lists the flags and libs twice in each link.
834 lines
21 KiB
Perl
834 lines
21 KiB
Perl
###########################################################
|
|
### SMB Build System ###
|
|
### - create output for Makefile ###
|
|
### ###
|
|
### Copyright (C) Stefan (metze) Metzmacher 2004 ###
|
|
### Released under the GNU GPL ###
|
|
###########################################################
|
|
|
|
package makefile;
|
|
use strict;
|
|
|
|
sub _prepare_command_interpreters($)
|
|
{
|
|
my $ctx = shift;
|
|
my $output;
|
|
|
|
$output = "
|
|
SHELL=/bin/sh
|
|
PERL=\@PERL\@
|
|
";
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_path_vars($)
|
|
{
|
|
my $ctx = shift;
|
|
my $output;
|
|
|
|
$output = "
|
|
prefix=\@prefix\@
|
|
exec_prefix=\@exec_prefix\@
|
|
VPATH=\@srcdir\@
|
|
srcdir=\@srcdir\@
|
|
builddir=\@builddir\@
|
|
eparserdir=\@eparserdir\@
|
|
|
|
BASEDIR= \@prefix\@
|
|
BINDIR = \@bindir\@
|
|
SBINDIR = \@sbindir\@
|
|
LIBDIR = \@libdir\@
|
|
CONFIGDIR = \@configdir\@
|
|
VARDIR = \@localstatedir\@
|
|
|
|
|
|
# The permissions to give the executables
|
|
INSTALLPERMS = 0755
|
|
|
|
# set these to where to find various files
|
|
# These can be overridden by command line switches (see smbd(8))
|
|
# or in smb.conf (see smb.conf(5))
|
|
LOGFILEBASE = \@logfilebase\@
|
|
CONFIGFILE = \$(CONFIGDIR)/smb.conf
|
|
LMHOSTSFILE = \$(CONFIGDIR)/lmhosts
|
|
NCALRPCDIR = \@localstatedir\@/ncalrpc
|
|
|
|
# This is where smbpasswd et al go
|
|
PRIVATEDIR = \@privatedir\@
|
|
SMB_PASSWD_FILE = \$(PRIVATEDIR)/smbpasswd
|
|
|
|
# the directory where lock files go
|
|
LOCKDIR = \@lockdir\@
|
|
|
|
# the directory where pid files go
|
|
PIDDIR = \@piddir\@
|
|
|
|
PASSWD_FLAGS = -DSMB_PASSWD_FILE=\\\"\$(SMB_PASSWD_FILE)\\\" -DPRIVATE_DIR=\\\"\$(PRIVATEDIR)\\\"
|
|
PATH_FLAGS1 = -DCONFIGFILE=\\\"\$(CONFIGFILE)\\\" -DSBINDIR=\\\"\$(SBINDIR)\\\"
|
|
PATH_FLAGS2 = \$(PATH_FLAGS1) -DBINDIR=\\\"\$(BINDIR)\\\"
|
|
PATH_FLAGS3 = \$(PATH_FLAGS2) -DLMHOSTSFILE=\\\"\$(LMHOSTSFILE)\\\"
|
|
PATH_FLAGS4 = \$(PATH_FLAGS3) -DLOCKDIR=\\\"\$(LOCKDIR)\\\" -DPIDDIR=\\\"\$(PIDDIR)\\\"
|
|
PATH_FLAGS5 = \$(PATH_FLAGS4) -DLIBDIR=\\\"\$(LIBDIR)\\\" \\
|
|
-DLOGFILEBASE=\\\"\$(LOGFILEBASE)\\\" -DSHLIBEXT=\\\"\@SHLIBEXT\@\\\"
|
|
PATH_FLAGS6 = \$(PATH_FLAGS5) -DCONFIGDIR=\\\"\$(CONFIGDIR)\\\" -DNCALRPCDIR=\\\"\$(NCALRPCDIR)\\\"
|
|
PATH_FLAGS = \$(PATH_FLAGS6) \$(PASSWD_FLAGS)
|
|
";
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_compiler_linker($)
|
|
{
|
|
my $ctx = shift;
|
|
my $output;
|
|
|
|
$output = "
|
|
CC=\@CC\@
|
|
CC_FLAGS=-Iinclude -I. -I\$(srcdir)/include -I\$(srcdir) -D_SAMBA_BUILD_ -Ilib \@CFLAGS\@ \@CPPFLAGS\@
|
|
|
|
LD=\@CC\@
|
|
LD_FLAGS=\@LDFLAGS\@ \@CFLAGS\@
|
|
|
|
STLD=ar
|
|
STLD_FLAGS=-rc
|
|
|
|
SHLD=\@CC\@
|
|
SHLD_FLAGS=\@LDSHFLAGS\@ \@LDFLAGS\@
|
|
";
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_default_rule($)
|
|
{
|
|
my $ctx = shift;
|
|
my $output;
|
|
|
|
$output = "
|
|
default: all
|
|
";
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_SUFFIXES($)
|
|
{
|
|
my $ctx = shift;
|
|
my $output;
|
|
|
|
$output = "
|
|
.SUFFIXES:
|
|
.SUFFIXES: .c .o .h .h.gch .a .so
|
|
";
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_IDL($)
|
|
{
|
|
my $ctx = shift;
|
|
my $output;
|
|
|
|
$output = "
|
|
idl_full: build/pidl/idl.pm
|
|
CPP=\"\@CPP\@\" PERL=\"\$(PERL)\" script/build_idl.sh FULL
|
|
|
|
idl: build/pidl/idl.pm
|
|
\@CPP=\"\@CPP\@\" script/build_idl.sh PARTIAL
|
|
|
|
eparser_idl: build/pidl/idl.pm
|
|
CPP=\"\@CPP\@\" PERL=\"\$(PERL)\" EPARSERPREFIX=\"\$(eparserdir)\" script/build_idl.sh EPARSER
|
|
|
|
build/pidl/idl.pm: build/pidl/idl.yp
|
|
-yapp -s build/pidl/idl.yp
|
|
|
|
pch: proto include/includes.h.gch
|
|
|
|
pch_clean:
|
|
-rm -f include/includes.h.gch
|
|
|
|
basics: idl proto_exists
|
|
|
|
";
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_dummy_MAKEDIR()
|
|
{
|
|
my $ctx = shift;
|
|
my $output;
|
|
|
|
$output = "
|
|
bin/.dummy:
|
|
\@: >> \$\@ || : > \$\@
|
|
|
|
dynconfig.o: dynconfig.c Makefile
|
|
\@echo Compiling \$*.c
|
|
\@\$(CC) \$(CC_FLAGS) \@PICFLAG\@ \$(PATH_FLAGS) -c \$< -o \$\@
|
|
\@BROKEN_CC\@ -mv `echo \$\@ | sed 's%^.*/%%g'` \$\@
|
|
|
|
";
|
|
return $output;
|
|
}
|
|
|
|
###########################################################
|
|
# This function creates a standard make rule which is using $(CC)
|
|
#
|
|
# $output = _prepare_std_CC_rule($srcext,$destext,$flags,$message,$comment)
|
|
#
|
|
# $srcext - sourcefile extension
|
|
#
|
|
# $destext - destinationfile extension
|
|
#
|
|
# $flags - additional compiler flags
|
|
#
|
|
# $message - logmessage which is echoed while running this rule
|
|
#
|
|
# $comment - just a comment what this rule should do
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub _prepare_std_CC_rule($$$$$)
|
|
{
|
|
my $src = shift;
|
|
my $dst = shift;
|
|
my $flags = shift;
|
|
my $message = shift;
|
|
my $comment = shift;
|
|
my $flagsstr = "";
|
|
my $output;
|
|
|
|
$output = "
|
|
###################################
|
|
# Start $comment
|
|
.$src.$dst:
|
|
\@echo $message \$*.$src
|
|
\@\$(CC) \$(CC_FLAGS) $flags -c \$< -o \$\@
|
|
\@BROKEN_CC\@ -mv `echo \$\@ | sed 's%^.*/%%g'` \$\@
|
|
#End $comment
|
|
###################################
|
|
";
|
|
|
|
return $output;
|
|
}
|
|
|
|
sub array2oneperline($)
|
|
{
|
|
my $array = shift;
|
|
my $i;
|
|
my $output = "";
|
|
|
|
foreach my $str (@{$array}) {
|
|
if (!defined($str)) {
|
|
next;
|
|
}
|
|
|
|
$output .= " \\\n\t\t";
|
|
$output .= $str;
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
sub array2oneline($)
|
|
{
|
|
my $array = shift;
|
|
my $i;
|
|
my $output = "";
|
|
|
|
foreach my $str (@{$array}) {
|
|
if (!defined($str)) {
|
|
next;
|
|
}
|
|
|
|
$output .= $str;
|
|
$output .= " ";
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
###########################################################
|
|
# This function creates a object file list
|
|
#
|
|
# $output = _prepare_var_obj_list($var, $var_ctx)
|
|
#
|
|
# $var_ctx - the subsystem context
|
|
#
|
|
# $var_ctx->{NAME} - the <var> name
|
|
# $var_ctx->{OBJ_LIST} - the list of objectfiles which sould be linked to this <var>
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub _prepare_obj_list($$)
|
|
{
|
|
my $var = shift;
|
|
my $ctx = shift;
|
|
my $tmpobjlist;
|
|
my $output;
|
|
|
|
$tmpobjlist = array2oneperline($ctx->{OBJ_LIST});
|
|
|
|
$output = "
|
|
###################################
|
|
# Start $var $ctx->{NAME} OBJ LIST
|
|
$var\_$ctx->{NAME}_OBJS =$tmpobjlist
|
|
# End $var $ctx->{NAME} OBJ LIST
|
|
###################################
|
|
";
|
|
|
|
return $output;
|
|
}
|
|
|
|
###########################################################
|
|
# This function creates a object file list for a subsystem
|
|
#
|
|
# $output = _prepare_subsystem_obj_list($subsystem_ctx)
|
|
#
|
|
# $subsystem_ctx - the subsystem context
|
|
#
|
|
# $subsystem_ctx->{NAME} - the subsystem name
|
|
# $subsystem_ctx->{OBJ_LIST} - the list of objectfiles which sould be linked to this subsystem
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub _prepare_subsystem_obj_list($)
|
|
{
|
|
my $ctx = shift;
|
|
|
|
return _prepare_var_obj_list("SUBSYSTEM",$ctx);
|
|
}
|
|
|
|
###########################################################
|
|
# This function creates a object file list for a module
|
|
#
|
|
# $output = _prepare_module_obj_and_lib_list($module_ctx)
|
|
#
|
|
# $module_ctx - the module context
|
|
#
|
|
# $module_ctx->{NAME} - the module binary name
|
|
# $module_ctx->{OBJ_LIST} - the list of objectfiles which sould be linked to this module
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub _prepare_module_obj_list($)
|
|
{
|
|
my $ctx = shift;
|
|
|
|
return _prepare_var_obj_list("MODULE",$ctx);
|
|
|
|
}
|
|
|
|
###########################################################
|
|
# This function creates a make rule for linking a library
|
|
#
|
|
# $output = _prepare_shared_library_rule($library_ctx)
|
|
#
|
|
# $library_ctx - the library context
|
|
#
|
|
# $library_ctx->{NAME} - the library name
|
|
#
|
|
# $library_ctx->{DEPEND_LIST} - the list of rules on which this library depends
|
|
#
|
|
# $library_ctx->{LIBRARY_NAME} - the shared library name
|
|
# $library_ctx->{LIBRARY_REALNAME} - the shared library real name
|
|
# $library_ctx->{LIBRARY_SONAME} - the shared library soname
|
|
# $library_ctx->{LINK_LIST} - the list of objectfiles and external libraries
|
|
# which sould be linked to this shared library
|
|
# $library_ctx->{LINK_FLAGS} - linker flags used by this shared library
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub _prepare_shared_library_rule($)
|
|
{
|
|
my $ctx = shift;
|
|
my $tmpdepend;
|
|
my $tmpstlink;
|
|
my $tmpstflag;
|
|
my $tmpshlink;
|
|
my $tmpshflag;
|
|
my $tmprules;
|
|
my $output;
|
|
my $outname = $ctx->{OUTPUT};
|
|
|
|
$tmpdepend = array2oneperline($ctx->{DEPEND_LIST});
|
|
|
|
$tmpshlink = array2oneperline($ctx->{LINK_LIST});
|
|
$tmpshflag = array2oneperline($ctx->{LINK_FLAGS});
|
|
|
|
$output = "
|
|
###################################
|
|
# Start Library $ctx->{NAME}
|
|
#
|
|
LIBRARY_$ctx->{NAME}_DEPEND_LIST =$tmpdepend
|
|
#
|
|
LIBRARY_$ctx->{NAME}_SHARED_LINK_LIST =$tmpshlink
|
|
LIBRARY_$ctx->{NAME}_SHARED_LINK_FLAGS =$tmpshflag
|
|
#
|
|
|
|
# Shared $ctx->{LIBRARY_NAME}
|
|
$ctx->{OUTPUT}: \$(LIBRARY_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
|
|
\@echo Linking \$\@
|
|
\@\$(SHLD) \$(SHLD_FLAGS) -o \$\@ \\
|
|
\$(LIBRARY_$ctx->{NAME}_SHARED_LINK_FLAGS) \\
|
|
\$(LIBRARY_$ctx->{NAME}_SHARED_LINK_LIST)
|
|
";
|
|
|
|
if (defined($ctx->{LIBRARY_SONAME})) {
|
|
$output .= "
|
|
# Symlink $ctx->{LIBRARY_SONAME}
|
|
bin/$ctx->{LIBRARY_SONAME}: bin/$ctx->{LIBRARY_REALNAME} bin/.dummy
|
|
\@echo Symlink \$\@
|
|
\@ln -sf $ctx->{LIBRARY_REALNAME} \$\@
|
|
# Symlink $ctx->{LIBRARY_NAME}
|
|
bin/$ctx->{LIBRARY_NAME}: bin/$ctx->{LIBRARY_SONAME} bin/.dummy
|
|
\@echo Symlink \$\@
|
|
\@ln -sf $ctx->{LIBRARY_SONAME} \$\@
|
|
";
|
|
$outname = $ctx->{LIBRARY_NAME};
|
|
}
|
|
|
|
$output .= "
|
|
library_$ctx->{NAME}: basics bin/$outname
|
|
# End Library $ctx->{NAME}
|
|
###################################
|
|
";
|
|
|
|
return $output;
|
|
}
|
|
|
|
###########################################################
|
|
# This function creates a make rule for linking a library
|
|
#
|
|
# $output = _prepare_static_library_rule($library_ctx)
|
|
#
|
|
# $library_ctx - the library context
|
|
#
|
|
# $library_ctx->{NAME} - the library name
|
|
#
|
|
# $library_ctx->{DEPEND_LIST} - the list of rules on which this library depends
|
|
#
|
|
# $library_ctx->{LIBRARY_NAME} - the static library name
|
|
# $library_ctx->{LINK_LIST} - the list of objectfiles which sould be linked
|
|
# to this static library
|
|
# $library_ctx->{LINK_FLAGS} - linker flags used by this static library
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub _prepare_static_library_rule($)
|
|
{
|
|
my $ctx = shift;
|
|
my $tmpdepend;
|
|
my $tmpstlink;
|
|
my $tmpstflag;
|
|
my $tmpshlink;
|
|
my $tmpshflag;
|
|
my $tmprules;
|
|
my $output;
|
|
|
|
$tmpdepend = array2oneperline($ctx->{DEPEND_LIST});
|
|
|
|
$tmpstlink = array2oneperline($ctx->{LINK_LIST});
|
|
$tmpstflag = array2oneperline($ctx->{LINK_FLAGS});
|
|
|
|
$tmprules = "bin/$ctx->{LIBRARY_NAME}";
|
|
|
|
$output = "
|
|
###################################
|
|
# Start Library $ctx->{NAME}
|
|
#
|
|
LIBRARY_$ctx->{NAME}_DEPEND_LIST =$tmpdepend
|
|
#
|
|
LIBRARY_$ctx->{NAME}_STATIC_LINK_LIST =$tmpstlink
|
|
#
|
|
# Static $ctx->{LIBRARY_NAME}
|
|
$ctx->{OUTPUT}: \$(LIBRARY_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
|
|
\@echo Linking \$\@
|
|
\@\$(STLD) \$(STLD_FLAGS) \$\@ \\
|
|
\$(LIBRARY_$ctx->{NAME}_STATIC_LINK_LIST)
|
|
|
|
library_$ctx->{NAME}: basics $tmprules
|
|
# End Library $ctx->{NAME}
|
|
###################################
|
|
";
|
|
|
|
return $output;
|
|
}
|
|
|
|
|
|
|
|
###########################################################
|
|
# This function creates a make rule for linking a binary
|
|
#
|
|
# $output = _prepare_binary_rule($binary_ctx)
|
|
#
|
|
# $binary_ctx - the binary context
|
|
#
|
|
# $binary_ctx->{NAME} - the binary name
|
|
# $binary_ctx->{BINARY} - the binary binary name
|
|
#
|
|
# $binary_ctx->{DEPEND_LIST} - the list of rules on which this binary depends
|
|
# $binary_ctx->{LINK_LIST} - the list of objectfiles and external libraries
|
|
# which sould be linked to this binary
|
|
# $binary_ctx->{LINK_FLAGS} - linker flags used by this binary
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub _prepare_binary_rule($)
|
|
{
|
|
my $ctx = shift;
|
|
my $tmpdepend;
|
|
my $tmplink;
|
|
my $tmpflag;
|
|
my $output;
|
|
|
|
$tmpdepend = array2oneperline($ctx->{DEPEND_LIST});
|
|
$tmplink = array2oneperline($ctx->{LINK_LIST});
|
|
$tmpflag = array2oneperline($ctx->{LINK_FLAGS});
|
|
|
|
$output = "
|
|
###################################
|
|
# Start Binary $ctx->{BINARY}
|
|
#
|
|
BINARY_$ctx->{NAME}_DEPEND_LIST =$tmpdepend
|
|
BINARY_$ctx->{NAME}_LINK_LIST =$tmplink
|
|
BINARY_$ctx->{NAME}_LINK_FLAGS =$tmpflag
|
|
#
|
|
bin/$ctx->{BINARY}: bin/.dummy \$(BINARY_$ctx->{NAME}_DEPEND_LIST)
|
|
\@echo Linking \$\@
|
|
\@\$(LD) \$(LD_FLAGS) -o \$\@ \\
|
|
\$(BINARY_$ctx->{NAME}_LINK_FLAGS) \\
|
|
\$(BINARY_$ctx->{NAME}_LINK_LIST) \\
|
|
\$(BINARY_$ctx->{NAME}_LINK_FLAGS)
|
|
binary_$ctx->{BINARY}: basics bin/$ctx->{BINARY}
|
|
# End Binary $ctx->{BINARY}
|
|
###################################
|
|
";
|
|
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_proto_rules()
|
|
{
|
|
my $output = "";
|
|
|
|
$output .= "
|
|
# Making this target will just make sure that the prototype files
|
|
# exist, not necessarily that they are up to date. Since they're
|
|
# removed by 'make clean' this will always be run when you do anything
|
|
# afterwards.
|
|
proto_exists: include/proto.h include/build_env.h
|
|
|
|
delheaders: pch_clean
|
|
-rm -f \$(builddir)/include/proto.h \$(builddir)/include/build_env.h:
|
|
|
|
include/proto.h:
|
|
\@cd \$(srcdir) && \$(SHELL) script/mkproto.sh \"\$(PERL)\" \\
|
|
-h _PROTO_H_ \$(builddir)/include/proto.h \\
|
|
\$(PROTO_PROTO_OBJS)
|
|
|
|
include/build_env.h:
|
|
\@echo Building include/build_env.h
|
|
\@cd \$(srcdir) && \$(SHELL) script/build_env.sh \$(srcdir) \$(builddir) \$(CC) > \$(builddir)/include/build_env.h
|
|
|
|
# 'make headers' or 'make proto' calls a subshell because we need to
|
|
# make sure these commands are executed in sequence even for a
|
|
# parallel make.
|
|
headers: delheaders proto_exists
|
|
|
|
proto: idl headers
|
|
|
|
proto_test:
|
|
\@[ -f \$(builddir)/include/proto.h ] || \$(MAKE) proto
|
|
|
|
clean: delheaders
|
|
-rm -f *.o */*.o */*/*.o */*/*/*.o bin/*
|
|
-rm -rf librpc/gen_*
|
|
|
|
distclean: clean
|
|
-rm -f bin/.dummy
|
|
-rm -f include/config.h
|
|
-rm -f Makefile*
|
|
-rm -f config.status
|
|
-rm -f config.smb_build.*
|
|
-rm -f config.log config.cache
|
|
|
|
removebackup:
|
|
-rm -f *.bak *~ */*.bak */*~ */*/*.bak */*/*~ */*/*/*.bak */*/*/*~
|
|
|
|
realdistclean: distclean removebackup
|
|
-rm -f include/config.h.in
|
|
-rm -f lib/version.h
|
|
-rm -f configure
|
|
";
|
|
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_make_target($)
|
|
{
|
|
my $ctx = shift;
|
|
my $tmpdepend;
|
|
my $output;
|
|
|
|
$tmpdepend = array2oneperline($ctx->{DEPEND_LIST});
|
|
|
|
$output = "
|
|
###################################
|
|
# Start Target $ctx->{TARGET}
|
|
$ctx->{TARGET}: basics $tmpdepend
|
|
# End Target $ctx->{TARGET}
|
|
###################################
|
|
";
|
|
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_obj_lists($)
|
|
{
|
|
my $CTX = shift;
|
|
my $output = "";
|
|
|
|
foreach my $key (values %{$CTX}) {
|
|
next if not defined($key->{OBJ_LIST});
|
|
$output .= _prepare_obj_list($key->{TYPE}, $key);
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_install_rules($)
|
|
{
|
|
my $CTX = shift;
|
|
my $output = "";
|
|
|
|
$output .= "
|
|
|
|
showlayout:
|
|
\@echo \"Samba will be installed into:\"
|
|
\@echo \" basedir: \$(BASEDIR)\"
|
|
\@echo \" bindir: \$(BINDIR)\"
|
|
\@echo \" sbindir: \$(SBINDIR)\"
|
|
\@echo \" libdir: \$(LIBDIR)\"
|
|
\@echo \" vardir: \$(VARDIR)\"
|
|
\@echo \" privatedir: \$(PRIVATEDIR)\"
|
|
\@echo \" piddir: \$(PIDDIR)\"
|
|
\@echo \" lockdir: \$(LOCKDIR)\"
|
|
|
|
SBIN_PROGS = bin/smbd
|
|
|
|
BIN_PROGS = bin/smbclient
|
|
|
|
TORTURE_PROGS = bin/smbtorture \\
|
|
bin/gentest \\
|
|
bin/locktest \\
|
|
bin/masktest \\
|
|
bin/ndrdump
|
|
|
|
LDB_PROGS = bin/ldbadd \\
|
|
bin/ldbdel \\
|
|
bin/ldbmodify \\
|
|
bin/ldbedit \\
|
|
bin/ldbsearch
|
|
|
|
REG_PROGS = bin/regpatch \\
|
|
bin/regshell \\
|
|
bin/regtree \\
|
|
bin/regpatch \\
|
|
bin/regdiff
|
|
|
|
install: showlayout installbin installtorture installldb installreg installdat
|
|
|
|
# DESTDIR is used here to prevent packagers wasting their time
|
|
# duplicating the Makefile. Remove it and you will have the privelege
|
|
# of package each samba release for muliple versions of multiple
|
|
# distributions and operating systems, or at least supplying patches
|
|
# to all the packaging files required for this, prior to committing
|
|
# the removal of DESTDIR. Do not remove it even though you think it
|
|
# is not used
|
|
|
|
installdirs:
|
|
\@\$(SHELL) \$(srcdir)/script/installdirs.sh \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(BINDIR) \$(DESTDIR)\$(SBINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(DESTDIR)\$(PRIVATEDIR) \$(DESTDIR)\$(PIDDIR) \$(DESTDIR)\$(LOCKDIR)
|
|
|
|
installbin: all installdirs
|
|
\@\$(SHELL) \$(srcdir)/script/installbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(SBINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(SBIN_PROGS)
|
|
\@\$(SHELL) \$(srcdir)/script/installbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(BINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(BIN_PROGS)
|
|
|
|
installtorture: all installdirs
|
|
\@\$(SHELL) \$(srcdir)/script/installbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(BINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(TORTURE_PROGS)
|
|
|
|
installldb: all installdirs
|
|
\@\$(SHELL) \$(srcdir)/script/installbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(BINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(LDB_PROGS)
|
|
|
|
installreg: all installdirs
|
|
\@\$(SHELL) \$(srcdir)/script/installbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(BINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(REG_PROGS)
|
|
|
|
installdat: installdirs
|
|
\@\$(SHELL) \$(srcdir)/script/installdat.sh \$(DESTDIR)\$(LIBDIR) \$(srcdir)
|
|
|
|
uninstall: uninstallbin uninstalltorture uninstallldb uninstallreg
|
|
|
|
uninstallbin:
|
|
\@\$(SHELL) \$(srcdir)/script/uninstallbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(SBINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(DESTDIR)\$(SBIN_PROGS)
|
|
|
|
uninstalltorture:
|
|
\@\$(SHELL) \$(srcdir)/script/uninstallbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(BINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(DESTDIR)\$(TORTURE_PROGS)
|
|
|
|
uninstallldb:
|
|
\@\$(SHELL) \$(srcdir)/script/uninstallbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(BINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(DESTDIR)\$(LDB_PROGS)
|
|
|
|
uninstallreg:
|
|
\@\$(SHELL) \$(srcdir)/script/uninstallbin.sh \$(INSTALLPERMS) \$(DESTDIR)\$(BASEDIR) \$(DESTDIR)\$(BINDIR) \$(DESTDIR)\$(LIBDIR) \$(DESTDIR)\$(VARDIR) \$(DESTDIR)\$(REG_PROGS)
|
|
|
|
# Swig extensions
|
|
|
|
swig: scripting/swig/_tdb.so scripting/swig/_dcerpc.so
|
|
|
|
PYTHON_TDB_OBJ = lib/tdb/common/tdb.o lib/tdb/common/spinlock.o
|
|
|
|
scripting/swig/tdb.py: scripting/swig/tdb.i
|
|
swig -python scripting/swig/tdb.i
|
|
|
|
scripting/swig/_tdb.so: scripting/swig/tdb.py scripting/swig/tdb_wrap.o \$(PYTHON_TDB_OBJ)
|
|
\$(SHLD) \$(SHLD_FLAGS) -o scripting/swig/_tdb.so scripting/swig/tdb_wrap.o \\
|
|
\$(PYTHON_TDB_OBJ)
|
|
|
|
PYTHON_DCERPC_OBJ = \$(SUBSYSTEM_LIBRPC_RAW_OBJS) \\
|
|
\$(SUBSYSTEM_LIBDCOM_OBJS) \\
|
|
\$(SUBSYSTEM_LIBNDR_RAW_OBJS) \\
|
|
\$(SUBSYSTEM_LIBNDR_GEN_OBJS) \\
|
|
\$(SUBSYSTEM_LIBBASIC_OBJS) \\
|
|
\$(SUBSYSTEM_CONFIG_OBJS) \\
|
|
\$(SUBSYSTEM_LIBTDB_OBJS) \\
|
|
\$(SUBSYSTEM_SCHANNELDB_OBJS) \\
|
|
\$(SUBSYSTEM_GENSEC_OBJS) \\
|
|
\$(SUBSYSTEM_LIBCLI_UTILS_OBJS) \\
|
|
\$(SUBSYSTEM_LIBCLI_RAW_OBJS) \\
|
|
\$(SUBSYSTEM_LIBCLI_AUTH_OBJS) \\
|
|
\$(SUBSYSTEM_LIBCLI_NMB_OBJS) \\
|
|
\$(SUBSYSTEM_AUTH_OBJS) \\
|
|
\$(SUBSYSTEM_SAMDB_OBJS) \\
|
|
\$(SUBSYSTEM_LIBLDB_OBJS) \\
|
|
\$(SUBSYSTEM_CHARSET_OBJS) \\
|
|
\$(SUBSYSTEM_LIBSMB_OBJS) \\
|
|
\$(SUBSYSTEM_DCERPC_COMMON_OBJS) \\
|
|
\$(SUBSYSTEM_LIB_WINBIND_CLIENT_OBJS) \\
|
|
\$(SUBSYSTEM_SOCKET_OBJS) \\
|
|
\$(SUBSYSTEM_LIBREPLACE_OBJS) \\
|
|
\$(SUBSYSTEM_LIBNETIF_OBJS) \\
|
|
\$(SUBSYSTEM_LIBCRYPTO_OBJS)
|
|
|
|
PYTHON_DCERPC_LIBS = -lldap
|
|
|
|
SWIG_INCLUDES = librpc/gen_ndr/samr.i librpc/gen_ndr/lsa.i librpc/gen_ndr/winreg.i librpc/gen_ndr/spoolss.i
|
|
|
|
scripting/swig/dcerpc.py: scripting/swig/dcerpc.i scripting/swig/samba.i scripting/swig/status_codes.i \$(SWIG_INCLUDES)
|
|
swig -python scripting/swig/dcerpc.i
|
|
|
|
scripting/swig/_dcerpc.so: scripting/swig/dcerpc.py scripting/swig/dcerpc_wrap.o \$(PYTHON_DCERPC_OBJ)
|
|
\$(SHLD) \$(SHLD_FLAGS) -o scripting/swig/_dcerpc.so scripting/swig/dcerpc_wrap.o \$(PYTHON_DCERPC_OBJ) \$(PYTHON_DCERPC_LIBS)
|
|
|
|
swig_clean:
|
|
-rm -f scripting/swig/_tdb.so scripting/swig/tdb.pyc \\
|
|
scripting/swig/tdb.py scripting/swig/tdb_wrap.c \\
|
|
scripting/swig/tdb_wrap.o
|
|
|
|
everything: all
|
|
|
|
etags:
|
|
etags `find \$(srcdir) -name \"*.[ch]\"`
|
|
|
|
ctags:
|
|
ctags `find \$(srcdir) -name \"*.[ch]\"`
|
|
|
|
";
|
|
|
|
return $output;
|
|
}
|
|
|
|
sub _prepare_rule_lists($)
|
|
{
|
|
my $depend = shift;
|
|
my $output = "";
|
|
|
|
foreach my $key (values %{$depend}) {
|
|
next if not defined $key->{OUTPUT_TYPE};
|
|
($output .= _prepare_static_library_rule($key)) if $key->{OUTPUT_TYPE} eq "STATIC_LIBRARY";
|
|
($output .= _prepare_shared_library_rule($key)) if $key->{OUTPUT_TYPE} eq "SHARED_LIBRARY";
|
|
($output .= _prepare_binary_rule($key)) if $key->{OUTPUT_TYPE} eq "BINARY";
|
|
}
|
|
|
|
my $idl_ctx;
|
|
$output .= _prepare_IDL($idl_ctx);
|
|
|
|
$output .= _prepare_proto_rules();
|
|
|
|
$output .= _prepare_install_rules($depend);
|
|
|
|
return $output;
|
|
}
|
|
|
|
###########################################################
|
|
# This function prepares the output for Makefile
|
|
#
|
|
# $output = _prepare_makefile_in($SMB_BUILD_CTX)
|
|
#
|
|
# $SMB_BUILD_CTX - the global SMB_BUILD context
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub _prepare_makefile_in($)
|
|
{
|
|
my $CTX = shift;
|
|
my $output;
|
|
|
|
$output = "########################################\n";
|
|
$output .= "# Autogenerated by config.smb_build.pl #\n";
|
|
$output .= "########################################\n";
|
|
|
|
my $cmd_ctx;
|
|
$output .= _prepare_command_interpreters($cmd_ctx);
|
|
|
|
my $path_ctx;
|
|
$output .= _prepare_path_vars($path_ctx);
|
|
|
|
my $compiler_ctx;
|
|
$output .= _prepare_compiler_linker($compiler_ctx);
|
|
|
|
my $rules_ctx;
|
|
$output .= _prepare_default_rule($rules_ctx);
|
|
|
|
my $suffix_ctx;
|
|
$output .= _prepare_SUFFIXES($suffix_ctx);
|
|
|
|
$output .= _prepare_dummy_MAKEDIR();
|
|
|
|
$output .= _prepare_std_CC_rule("c","o","\@PICFLAG\@","Compiling","Rule for std objectfiles");
|
|
$output .= _prepare_std_CC_rule("h","h.gch","\@PICFLAG\@","Precompiling","Rule for precompiled headerfiles");
|
|
|
|
$output .= _prepare_obj_lists($CTX);
|
|
|
|
$output .= _prepare_rule_lists($CTX);
|
|
|
|
my @all = ();
|
|
|
|
foreach my $part (values %{$CTX}) {
|
|
push (@all, $part->{OUTPUT}) if defined ($part->{OUTPUT_TYPE}) and $part->{OUTPUT_TYPE} eq "BINARY";
|
|
}
|
|
|
|
$output .= _prepare_make_target({ TARGET => "all", DEPEND_LIST => \@all });
|
|
|
|
return $output;
|
|
}
|
|
|
|
###########################################################
|
|
# This function creates Makefile.in from the SMB_BUILD
|
|
# context
|
|
#
|
|
# create_makefile_in($SMB_BUILD_CTX)
|
|
#
|
|
# $SMB_BUILD_CTX - the global SMB_BUILD context
|
|
#
|
|
# $output - the resulting output buffer
|
|
sub create_makefile_in($)
|
|
{
|
|
my $CTX = shift;
|
|
|
|
open(MAKEFILE_IN,"> Makefile.in") || die ("Can't open Makefile.in\n");
|
|
print MAKEFILE_IN _prepare_makefile_in($CTX);
|
|
close(MAKEFILE_IN);
|
|
|
|
print "config.smb_build.pl: creating Makefile.in\n";
|
|
return;
|
|
}
|
|
|
|
1;
|