summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/build/m4/check_cc.m44
-rw-r--r--source4/build/smb_build/makefile.pm44
2 files changed, 37 insertions, 11 deletions
diff --git a/source4/build/m4/check_cc.m4 b/source4/build/m4/check_cc.m4
index 19261d50b6..8bc160eb82 100644
--- a/source4/build/m4/check_cc.m4
+++ b/source4/build/m4/check_cc.m4
@@ -29,9 +29,9 @@ AC_ISC_POSIX
dnl Check if C compiler understands -c and -o at the same time
AC_PROG_CC_C_O
if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
- BROKEN_CC=
+ BROKEN_CC=no
else
- BROKEN_CC=#
+ BROKEN_CC=yes
fi
AC_SUBST(BROKEN_CC)
diff --git a/source4/build/smb_build/makefile.pm b/source4/build/smb_build/makefile.pm
index 2027c27cdc..9215dee3a6 100644
--- a/source4/build/smb_build/makefile.pm
+++ b/source4/build/smb_build/makefile.pm
@@ -77,6 +77,8 @@ PERL=$config{PERL}
CC=$config{CC}
CFLAGS=-I\$(srcdir)/include -I\$(srcdir) -I\$(srcdir)/lib -D_SAMBA_BUILD_ -DHAVE_CONFIG_H $config{CFLAGS} $config{CPPFLAGS}
+PICFLAG=$config{PICFLAG}
+HOSTCC=$config{HOSTCC}
CPP=$config{CPP}
CPPFLAGS=$config{CPPFLAGS}
@@ -114,7 +116,7 @@ __EOD__
sub _prepare_SUFFIXES()
{
return << '__EOD__';
-.SUFFIXES: .x .c .et .y .l .d .o .h .h.gch .a .so .1 .1.xml .3 .3.xml .5 .5.xml .7 .7.xml
+.SUFFIXES: .x .c .et .y .l .d .o .h .h.gch .a .so .1 .1.xml .3 .3.xml .5 .5.xml .7 .7.xml .ho
__EOD__
}
@@ -194,16 +196,19 @@ sub _prepare_dummy_MAKEDIR()
{
my $ctx = shift;
- return << '__EOD__';
+ my $ret = << '__EOD__';
bin/.dummy:
@: >> $@ || : > $@
dynconfig.o: dynconfig.c Makefile
@echo Compiling $*.c
- @$(CC) $(CFLAGS) @PICFLAG@ $(PATH_FLAGS) -c $< -o $@
-@BROKEN_CC@ -mv `echo $@ | sed 's%^.*/%%g'` $@
-
+ @$(CC) $(CFLAGS) $(PICFLAG) $(PATH_FLAGS) -c $< -o $@
__EOD__
+ if ($config{BROKEN_CC} eq "yes") {
+ $ret .= ' -mv `echo $@ | sed \'s%^.*/%%g\'` $@
+';
+ }
+ return $ret."\n";
}
sub _prepare_depend_CC_rule()
@@ -237,16 +242,36 @@ sub _prepare_std_CC_rule($$$$$)
{
my ($src,$dst,$flags,$message,$comment) = @_;
- return << "__EOD__";
+ my $ret = << "__EOD__";
# $comment
.$src.$dst:
\@echo $message \$\*.$src
\@\$(CC) `script/cflags.sh \$\@` \$(CFLAGS) $flags -c \$< -o \$\@
-\@BROKEN_CC\@ -mv `echo \$\@ | sed 's%^.*/%%g'` \$\@
+__EOD__
+ if ($config{BROKEN_CC} eq "yes") {
+ $ret.= ' -mv `echo \$\@ | sed \'s%^.*/%%g\'` \$\@
+';
+ }
+ return $ret."\n";
+}
+sub _prepare_hostcc_rule()
+{
+ my $ret = << "__EOD__";
+.c.ho:
+ \@echo Compiling \$\*.c with host compiler
+ \@\$(HOSTCC) `script/cflags.sh \$\@` \$(CFLAGS) -c \$< -o \$\@
__EOD__
+ if ($config{BROKEN_CC} eq "yes") {
+ $ret .= ' -mv `echo \$\@ | sed \'s%^.*/%%g\'` \$\@
+';
+ }
+
+ return $ret."\n";
}
+
+
sub array2oneperline($)
{
my $array = shift;
@@ -611,8 +636,9 @@ sub _prepare_makefile_in($)
$output .= _prepare_default_rule();
$output .= _prepare_SUFFIXES();
$output .= _prepare_dummy_MAKEDIR();
- $output .= _prepare_std_CC_rule("c","o",$config{PICFLAG},"Compiling","Rule for std objectfiles");
- $output .= _prepare_std_CC_rule("h","h.gch",$config{PICFLAG},"Precompiling","Rule for precompiled headerfiles");
+ $output .= _prepare_hostcc_rule();
+ $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_depend_CC_rule();