diff options
Diffstat (limited to 'Configurations')
-rw-r--r-- | Configurations/README | 7 | ||||
-rw-r--r-- | Configurations/README.design | 9 | ||||
-rw-r--r-- | Configurations/common.tmpl | 6 | ||||
-rw-r--r-- | Configurations/unix-Makefile.tmpl | 17 |
4 files changed, 26 insertions, 13 deletions
diff --git a/Configurations/README b/Configurations/README index 58c4d96c6c..454c8f375e 100644 --- a/Configurations/README +++ b/Configurations/README @@ -488,7 +488,8 @@ They are all expected to return a string with the lines they produce. src2obj(obj => "PATH/TO/objectfile", srcs => [ "PATH/TO/sourcefile", ... ], deps => [ "dep1", ... ], - incs => [ "INCL/PATH", ... ]); + incs => [ "INCL/PATH", ... ] + intent => one of "lib", "dso", "bin" ); 'obj' has the intended object file *without* extension, src2obj() is expected to add that. @@ -496,7 +497,9 @@ They are all expected to return a string with the lines they produce. object file, with the first item being the source file that directly corresponds to the object file. 'deps' is a list of explicit dependencies. 'incs' - is a list of include file directories. + is a list of include file directories. Finally, + 'intent' indicates what this object file is going + to be used for. obj2lib - function that produces build file lines to build a static library file ("libfoo.a" in Unix terms) from diff --git a/Configurations/README.design b/Configurations/README.design index 80839faa6d..362b967f17 100644 --- a/Configurations/README.design +++ b/Configurations/README.design @@ -392,15 +392,18 @@ etc. src2obj(obj => "PATH/TO/objectfile", srcs => [ "PATH/TO/sourcefile", ... ], deps => [ "dep1", ... ], - incs => [ "INCL/PATH", ... ]); + incs => [ "INCL/PATH", ... ] + intent => one of "lib", "dso", "bin" ); 'obj' has the intended object file *without* extension, src2obj() is expected to add that. 'srcs' has the list of source files to build the object file, with the first item being the source file that directly corresponds to the object file. - 'deps' is a list of dependencies. 'incs' is a list - of include file directories. + 'deps' is a list of explicit dependencies. 'incs' + is a list of include file directories. Finally, + 'intent' indicates what this object file is going + to be used for. obj2lib - function that produces build file lines to build a static library file ("libfoo.a" in Unix terms) from diff --git a/Configurations/common.tmpl b/Configurations/common.tmpl index f0860dd781..196441c267 100644 --- a/Configurations/common.tmpl +++ b/Configurations/common.tmpl @@ -37,12 +37,14 @@ my $obj = shift; (my $obj_no_o = $obj) =~ s|\.o$||; my $bin = shift; + my %opts = @_; if (@{$unified_info{sources}->{$obj}}) { $OUT .= src2obj(obj => $obj_no_o, srcs => $unified_info{sources}->{$obj}, deps => [ reducedepends(resolvedepends($obj)) ], incs => [ @{$unified_info{includes}->{$bin}}, - @{$unified_info{includes}->{$obj}} ]); + @{$unified_info{includes}->{$obj}} ], + %opts); } } @@ -78,7 +80,7 @@ objs => [ map { (my $x = $_) =~ s|\.o$||; $x } @{$unified_info{sources}->{$lib}} ], deps => [ resolvedepends($lib) ]); - map { doobj($_, $lib, intent => "lib") } @{$unified_info{sources}->{$lib}}; + map { doobj($_, $lib, intent => "dso") } @{$unified_info{sources}->{$lib}}; } # dobin is responsible for building programs. It will call obj2bin, diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 9dc6d7dfe8..61ee7a6ab0 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -43,7 +43,6 @@ # given libname with the simple shared extension (possible SO version # removed). This differs from shlib_simple() by being unconditional. sub dso { - return () if $config{no_shared}; my $engine = shift; return $engine . '$(DSO_EXT)'; @@ -149,6 +148,7 @@ CFLAGS_Q={- $cflags2 =~ s|([\\"])|\\$1|g; $cflags2 -} {- $config{cflags} -} LDFLAGS= {- $config{lflags} -} PLIB_LDFLAGS= {- $config{plib_lflags} -} EX_LIBS= {- $config{ex_libs} -} +SHARED_CFLAGS={- $target{shared_cflag} || "" -} SHARED_LDFLAGS={- $target{shared_ldflag} # Unlike other OSes (like Solaris, Linux, Tru64, # IRIX) BSD run-time linkers (tested OpenBSD, NetBSD @@ -164,6 +164,8 @@ SHARED_LDFLAGS={- $target{shared_ldflag} . ($config{target} =~ m|^BSD-| && $prefix !~ m|^/usr/.*$| ? " -Wl,-rpath,\$\$(LIBRPATH)" : "") -} SHARED_RCFLAGS={- $target{shared_rcflag} -} +DSO_CFLAGS={- $target{shared_cflag} || "" -} +BIN_CFLAGS={- "" -} PERL={- $config{perl} -} @@ -823,25 +825,28 @@ configdata.pm: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/ my $obj = $args{obj}; my $srcs = join(" ", @{$args{srcs}}); my $deps = join(" ", @{$args{srcs}}, @{$args{deps}}); - my $incs = join(" ", map { " -I".$_ } @{$args{incs}}); + my $incs = join("", map { " -I".$_ } @{$args{incs}}); + my $ecflags = { lib => '$(SHARED_CFLAGS)', + dso => '$(DSO_CFLAGS)', + bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; my $makedepprog = $config{makedepprog}; if ($makedepprog eq "makedepend") { return <<"EOF"; $obj\$(DEP_EXT): $deps rm -f \$\@.tmp; touch \$\@.tmp - \$(MAKEDEPEND) -f\$\@.tmp -o"|$obj" -- \$(CFLAGS)$incs -- $srcs \\ + \$(MAKEDEPEND) -f\$\@.tmp -o"|$obj" -- \$(CFLAGS) $ecflags$incs -- $srcs \\ 2>/dev/null sed -e 's/^.*|//' -e 's/ \\/\\(\\\\.\\|[^ ]\\)*//g' -e '/: *\$\$/d' -e '/^\\(#.*\\| *\\)\$\$/d' \$\@.tmp > \$\@ rm \$\@.tmp $obj\$(OBJ_EXT): $obj\$(DEP_EXT) - \$(CC) \$(CFLAGS)$incs -c -o \$\@ $srcs + \$(CC) \$(CFLAGS) $ecflags$incs -c -o \$\@ $srcs EOF } return <<"EOF"; $obj\$(DEP_EXT): $deps - \$(CC) \$(CFLAGS)$incs -MM -MF \$\@ -MQ $obj $srcs + \$(CC) \$(CFLAGS) $ecflags$incs -MM -MF \$\@ -MQ $obj $srcs $obj\$(OBJ_EXT): $obj\$(DEP_EXT) - \$(CC) \$(CFLAGS)$incs -c -o \$\@ $srcs + \$(CC) \$(CFLAGS) $ecflags$incs -c -o \$\@ $srcs EOF } # On Unix, we build shlibs from static libs, so we're ignoring the |