diff options
Diffstat (limited to 'make')
-rwxr-xr-x | make/calcdep.pl | 55 | ||||
-rw-r--r-- | make/template/main.mk | 6 |
2 files changed, 56 insertions, 5 deletions
diff --git a/make/calcdep.pl b/make/calcdep.pl index 81a7759d3..587bd64de 100755 --- a/make/calcdep.pl +++ b/make/calcdep.pl @@ -3,7 +3,7 @@ use strict; use warnings; use POSIX qw(getcwd); -sub find_output($); +sub find_output; sub gendep($); sub dep_cpp($$); sub dep_dir($); @@ -28,6 +28,16 @@ sub run() { open MAKE, '>real.mk' or die "Could not write real.mk: $!"; chdir "$ENV{SOURCEPATH}/src"; + if ($ENV{PURE_STATIC}) { + run_static(); + } else { + run_dynamic(); + } + close MAKE; +} + +sub run_dynamic() { + my $build = $ENV{BUILDPATH}; print MAKE <<END; # DO NOT EDIT THIS FILE # It is autogenerated by make/calcdep.pl, and will be overwritten @@ -95,11 +105,48 @@ modules: $mods END } -sub find_output($) { - my $file = shift; +sub run_static() { + print MAKE <<END; +# DO NOT EDIT THIS FILE +# It is autogenerated by make/calcdep.pl, and will be overwritten +# every time you rerun make in the main directory +VPATH = \$(SOURCEPATH)/src + +bad-target: + \@echo "This Makefile must be run by a sub-make from the source" + \@echo "in order to set the correct environment variables" + \@exit 1 + +all: inspircd + +END + my @deps; + for my $file (<*.cpp>, <modes/*.cpp>, <socketengines/*.cpp>, <commands/*.cpp>, + <modules/*.cpp>, <modules/m_*/*.cpp>, "threadengines/threadengine_pthread.cpp") { + my $out = find_output $file, 1; + dep_cpp $file, $out; + next if $file =~ m#^socketengines/# && $file ne "socketengines/$ENV{SOCKETENGINE}.cpp"; + push @deps, $out; + } + + my $core_mk = join ' ', @deps; + print MAKE <<END; + +bin/inspircd: $core_mk + \$(RUNCC) -o \$\@ \$(CORELDFLAGS) \$(LDLIBS) \$^ \$> + +inspircd: bin/inspircd + +.PHONY: all bad-target inspircd + +END +} + +sub find_output { + my($file, $static) = @_; my($path,$base) = $file =~ m#^((?:.*/)?)([^/]+)\.cpp# or die "Bad file $file"; if ($path eq 'modules/' || $path eq 'commands/') { - return "modules/$base.so"; + return $static ? "obj/$base.o" : "modules/$base.so"; } elsif ($path eq '' || $path eq 'modes/' || $path =~ /^[a-z]+engines\/$/) { return "obj/$base.o"; } elsif ($path =~ m#modules/(m_.*)/#) { diff --git a/make/template/main.mk b/make/template/main.mk index 666104d1b..c06e92fea 100644 --- a/make/template/main.mk +++ b/make/template/main.mk @@ -74,7 +74,11 @@ CXXFLAGS += -Iinclude RUNCC = perl $(SOURCEPATH)/make/run-cc.pl $(CC) @ENDIF -@DO_EXPORT RUNCC CXXFLAGS CC LDLIBS PICLDFLAGS VERBOSE SOCKETENGINE CORELDFLAGS +@IFDEF PURE_STATIC + CXXFLAGS += -DPURE_STATIC +@ENDIF + +@DO_EXPORT RUNCC CXXFLAGS CC LDLIBS PICLDFLAGS VERBOSE SOCKETENGINE CORELDFLAGS PURE_STATIC @DO_EXPORT BASE CONPATH MODPATH BINPATH SOURCEPATH BUILDPATH # Default target |