summaryrefslogtreecommitdiff
path: root/source4/build/smb_build/makefile.pm
diff options
context:
space:
mode:
Diffstat (limited to 'source4/build/smb_build/makefile.pm')
-rw-r--r--source4/build/smb_build/makefile.pm917
1 files changed, 917 insertions, 0 deletions
diff --git a/source4/build/smb_build/makefile.pm b/source4/build/smb_build/makefile.pm
new file mode 100644
index 0000000000..0e0da317f5
--- /dev/null
+++ b/source4/build/smb_build/makefile.pm
@@ -0,0 +1,917 @@
+###########################################################
+### SMB Build System ###
+### - create output for Makefile ###
+### ###
+### Copyright (C) Stefan (metze) Metzmacher 2004 ###
+### Released under the GNU GPL ###
+###########################################################
+
+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) -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_var_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 shared module
+#
+# $output = _prepare_shared_module_rule($module_ctx)
+#
+# $module_ctx - the module context
+#
+# $module_ctx->{MODULE} - the module binary name
+# $module_ctx->{DEPEND_LIST} - the list of rules on which this module depends
+# $module_ctx->{LINK_LIST} - the list of objectfiles and external libraries
+# which sould be linked to this module
+# $module_ctx->{LINK_FLAGS} - linker flags used by this module
+#
+# $output - the resulting output buffer
+sub _prepare_shared_module_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 Module $ctx->{MODULE}
+MODULE_$ctx->{NAME}_DEPEND_LIST =$tmpdepend
+MODULE_$ctx->{NAME}_LINK_LIST =$tmplink
+MODULE_$ctx->{NAME}_LINK_FLAGS =$tmpflag
+#
+bin/$ctx->{MODULE}: \$(MODULE_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
+ \@echo Linking \$\@
+ \@\$(SHLD) \$(SHLD_FLAGS) -o \$\@ \\
+ \$(MODULE_$ctx->{NAME}_LINK_FLAGS) \\
+ \$(MODULE_$ctx->{NAME}_LINK_LIST)
+module_$ctx->{MODULE}: basics bin/$ctx->{MODULE}
+# Module $ctx->{MODULE}
+###################################
+";
+
+ return $output;
+}
+
+###########################################################
+# This function creates a object file list for a library
+#
+# $output = _prepare_library_obj_and_lib_list($library_ctx)
+#
+# $library_ctx - the library context
+#
+# $library_ctx->{NAME} - the library binary name
+# $library_ctx->{OBJ_LIST} - the list of objectfiles which sould be linked to this library
+#
+# $output - the resulting output buffer
+sub _prepare_library_obj_list($)
+{
+ my $ctx = shift;
+
+ return _prepare_var_obj_list("LIBRARY",$ctx);
+
+}
+
+###########################################################
+# This function creates a make rule for linking a library
+#
+# $output = _prepare_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->{STATIC_LIBRARY_NAME} - the static library name
+# $library_ctx->{STATIC_LINK_LIST} - the list of objectfiles which sould be linked
+# to this static library
+# $library_ctx->{STATIC_LINK_FLAGS} - linker flags used by this static library
+#
+# $library_ctx->{SHARED_LIBRARY_NAME} - the shared library name
+# $library_ctx->{SHARED_LIBRARY_REALNAME} - the shared library real name
+# $library_ctx->{SHARED_LIBRARY_SONAME} - the shared library soname
+# $library_ctx->{SHARED_LINK_LIST} - the list of objectfiles and external libraries
+# which sould be linked to this shared library
+# $library_ctx->{SHARED_LINK_FLAGS} - linker flags used by this shared library
+#
+# $output - the resulting output buffer
+sub _prepare_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->{STATIC_LINK_LIST});
+ $tmpstflag = array2oneperline($ctx->{STATIC_LINK_FLAGS});
+
+ $tmpshlink = array2oneperline($ctx->{SHARED_LINK_LIST});
+ $tmpshflag = array2oneperline($ctx->{SHARED_LINK_FLAGS});
+
+ $tmprules = "bin/$ctx->{STATIC_LIBRARY_NAME}";
+
+ $output = "
+###################################
+# Start Library $ctx->{NAME}
+#
+LIBRARY_$ctx->{NAME}_DEPEND_LIST =$tmpdepend
+#
+LIBRARY_$ctx->{NAME}_STATIC_LINK_LIST =$tmpstlink
+LIBRARY_$ctx->{NAME}_STATIC_LINK_FLAGS =$tmpstflag
+#
+LIBRARY_$ctx->{NAME}_SHARED_LINK_LIST =$tmpshlink
+LIBRARY_$ctx->{NAME}_SHARED_LINK_FLAGS =$tmpshflag
+#
+# Static $ctx->{STATIC_LIBRARY_NAME}
+bin/$ctx->{STATIC_LIBRARY_NAME}: \$(LIBRARY_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
+ \@echo Linking \$\@
+ \@\$(STLD) \$(STLD_FLAGS) \$\@ \\
+ \$(LIBRARY_$ctx->{NAME}_STATIC_LINK_FLAGS) \\
+ \$(LIBRARY_$ctx->{NAME}_STATIC_LINK_LIST)
+";
+
+ if (defined($ctx->{SHARED_LIBRARY_NAME})) {
+ $output .= "
+# Shared $ctx->{SHARED_LIBRARY_REALNAME}
+bin/$ctx->{SHARED_LIBRARY_REALNAME}: \$(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)
+# Symlink $ctx->{SHARED_LIBRARY_SONAME}
+bin/$ctx->{SHARED_LIBRARY_SONAME}: bin/$ctx->{SHARED_LIBRARY_REALNAME} bin/.dummy
+ \@echo Symlink \$\@
+ \@ln -sf $ctx->{SHARED_LIBRARY_REALNAME} \$\@
+# Symlink $ctx->{SHARED_LIBRARY_NAME}
+bin/$ctx->{SHARED_LIBRARY_NAME}: bin/$ctx->{SHARED_LIBRARY_SONAME} bin/.dummy
+ \@echo Symlink \$\@
+ \@ln -sf $ctx->{SHARED_LIBRARY_SONAME} \$\@
+";
+ $tmprules .= " bin/$ctx->{SHARED_LIBRARY_NAME}"
+ }
+
+ $output .= "
+library_$ctx->{NAME}: basics $tmprules
+# End Library $ctx->{NAME}
+###################################
+";
+
+ return $output;
+}
+
+###########################################################
+# This function creates a object file list for a binary
+#
+# $output = _prepare_binary_obj_and_lib_list($binary_ctx)
+#
+# $binary_ctx - the binary context
+#
+# $binary_ctx->{NAME} - the binary name
+# $binary_ctx->{OBJ_LIST} - the list of objectfiles which sould be linked to this binary
+#
+# $output - the resulting output buffer
+sub _prepare_binary_obj_list($)
+{
+ my $ctx = shift;
+
+ return _prepare_var_obj_list("BINARY",$ctx);
+
+}
+
+###########################################################
+# 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->{BINARY}: basics bin/$ctx->{BINARY}
+# End Binary $ctx->{BINARY}
+###################################
+";
+
+ return $output;
+}
+
+###########################################################
+# This function creates a object file list for make proto
+#
+# $output = _prepare_proto_obj_list($proto_ctx)
+#
+# $proto_ctx - the proto context
+
+# $proto_ctx->{OBJ_LIST} - the list of objectfiles which sould be scanned by make proto
+#
+# $output - the resulting output buffer
+sub _prepare_proto_obj_list($)
+{
+ my $ctx = shift;
+ my $tmplist;
+ my $output;
+
+ $tmplist = array2oneperline($ctx->{OBJ_LIST});
+
+ $output = "
+###################################
+# Start PROTO OBJ LIST
+PROTO_OBJS =$tmplist
+# End PROTO OBJ LIST
+###################################
+";
+
+ 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_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 (sort keys %{$CTX->{OUTPUT}{SUBSYSTEMS}}) {
+ $output .= _prepare_subsystem_obj_list(\%{$CTX->{OUTPUT}{SUBSYSTEMS}{$key}});
+ }
+
+ foreach my $key (sort keys %{$CTX->{OUTPUT}{SHARED_MODULES}}) {
+ $output .= _prepare_module_obj_list(\%{$CTX->{OUTPUT}{SHARED_MODULES}{$key}});
+ }
+
+ foreach my $key (sort keys %{$CTX->{OUTPUT}{LIBRARIES}}) {
+ $output .= _prepare_library_obj_list(\%{$CTX->{OUTPUT}{LIBRARIES}{$key}});
+ }
+
+ foreach my $key (sort keys %{$CTX->{OUTPUT}{BINARIES}}) {
+ $output .= _prepare_binary_obj_list(\%{$CTX->{OUTPUT}{BINARIES}{$key}});
+ }
+
+ $output .= _prepare_proto_obj_list(\%{$CTX->{OUTPUT}{PROTO}});
+
+ 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 $CTX = shift;
+ my $output = "";
+
+ foreach my $key (sort keys %{$CTX->{OUTPUT}{SHARED_MODULES}}) {
+ $output .= _prepare_shared_module_rule(\%{$CTX->{OUTPUT}{SHARED_MODULES}{$key}});
+ }
+
+ foreach my $key (sort keys %{$CTX->{OUTPUT}{LIBRARIES}}) {
+ $output .= _prepare_library_rule(\%{$CTX->{OUTPUT}{LIBRARIES}{$key}});
+ }
+
+ foreach my $key (sort keys %{$CTX->{OUTPUT}{BINARIES}}) {
+ $output .= _prepare_binary_rule(\%{$CTX->{OUTPUT}{BINARIES}{$key}});
+ }
+
+ my $idl_ctx;
+ $output .= _prepare_IDL($idl_ctx);
+
+ $output .= _prepare_proto_rules();
+
+ $output .= _prepare_install_rules($CTX);
+
+ 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);
+
+ $output .= _prepare_make_target(\%{$CTX->{OUTPUT}{TARGETS}{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;
+ my $output;
+
+ $output = _prepare_makefile_in($CTX);
+
+ open(MAKEFILE_IN,"> Makefile.in") || die ("Can't open Makefile.in\n");
+
+ print MAKEFILE_IN $output;
+
+ close(MAKEFILE_IN);
+
+ print "config.smb_build.pl: creating Makefile.in\n";
+ return;
+}
+
+1;