r22047: Move suffix rules into smb_build. Enable $< if we are building with
authorJames Peach <jpeach@samba.org>
Mon, 2 Apr 2007 21:21:56 +0000 (21:21 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:49:45 +0000 (14:49 -0500)
GNU Make. This lets GNU Make users bild with $srcdir != $builddir.
(This used to be commit bb473bf856c0108646c67792d5750c84743ea46e)

source4/build/smb_build/makefile.pm

index 2df85461c6523c7a6149df1b38e6d91593385cde..2c789b8d62862404bf61c1696768af201dfdc0c3 100644 (file)
@@ -46,6 +46,7 @@ sub new($$$)
        $self->output("default: all\n\n");
 
        $self->_prepare_path_vars();
+       $self->_prepare_suffix_rules();
        $self->_prepare_compiler_linker();
 
        if (!$self->{automatic_deps}) {
@@ -104,6 +105,57 @@ __EOD__
 );
 }
 
+sub _prepare_suffix_rules($)
+{
+       my ($self) = @_;
+       my $first_prereq = '$*.c';
+
+       if ($self->{config}->{GNU_MAKE} eq 'yes') {
+               $first_prereq = '$<';
+       }
+
+       $self->output(<< "__EOD__"
+# Dependencies command
+DEPENDS = \$(CC) -M -MG -MP -MT \$(<:.c=.o) -MT \$@ \\
+    `\$(PERL) \$(srcdir)/script/cflags.pl \$@` \\
+    \$(CFLAGS) $first_prereq-o \$@
+# Dependencies for host objects
+HDEPENDS = \$(CC) -M -MG -MP -MT \$(<:.c=.ho) -MT \$@ \\
+    `\$(PERL) \$(srcdir)/script/cflags.pl \$@` \\
+    \$(HOSTCC_CFLAGS) $first_prereq -o \$@
+# Dependencies for precompiled headers
+PCHDEPENDS = \$(CC) -M -MG -MT include/includes.h.gch -MT \$@ \\
+    \$(CFLAGS) $first_prereq -o \$@
+
+# \$< is broken in older BSD versions:
+# when \$@ is foo/bar.o, \$< could be torture/foo/bar.c
+# if it also exists. So better use \$* which is foo/bar
+# and append .c manually to get foo/bar.c
+#
+# If we have GNU Make, it is safe to use \$<, which also lets
+# building with \$srcdir != \$builddir work.
+
+# Run a static analysis checker
+CHECK = \$(CC_CHECKER) `\$(PERL) \$(srcdir)/script/cflags.pl \$@` \\
+    \$(CFLAGS) \$(PICFLAG) -c $first_prereq -o \$@
+
+# Run the configured compiler
+COMPILE = \$(CC) `\$(PERL) \$(srcdir)/script/cflags.pl \$@` \\
+    \$(CFLAGS) \$(PICFLAG) -c $first_prereq -o \$@
+
+# Run the compiler for the build host
+HCOMPILE = \$(HOSTCC) `\$(PERL) \$(srcdir)/script/cflags.pl \$@` \\
+    \$(HOSTCC_CFLAGS) -c $first_prereq -o \$@
+
+# Precompile headers
+PCHCOMPILE = @\$(CC) -Ilib/replace \\
+    `\$(PERL) \$(srcdir)/script/cflags.pl \$@` \\
+    \$(CFLAGS) \$(PICFLAG) -c $first_prereq -o \$@
+
+__EOD__
+);
+}
+
 sub _prepare_compiler_linker($)
 {
        my ($self) = @_;