# Please do not edit unless you know what you're doing.
#
-@GNU_ONLY COMPILE_ROOT = $(shell pwd)
+@GNU_ONLY MAKESTYLE = gnu
+@GNU_ONLY COMPILE_ROOT ?= $(shell pwd)
+@BSD_ONLY MAKESTYLE = bsd
@BSD_ONLY COMPILE_ROOT != pwd
@IFDEF D
CC = @CC@
FLAGS = $(NICEFLAGS) -pedantic
+PICLDFLAGS = -fPIC -DPIC -shared -export-dynamic
LDLIBS = @LDLIBS@
BASE = "@BASE_DIR@"
CONPATH = "@CONFIG_DIR@"
BINPATH = "@BINARY_DIR@"
LAUNCHDPATH = "/System/Library/LaunchDaemons"
LIBPATH = "@LIBRARY_DIR@"
-MODULES = @MODULES@
INSTMODE = 0755
+SOCKETENGINE = @SOCKETENGINE@
@GNU_ONLY MAKEFLAGS += --no-print-directory
@IFDEF V
RUNCC = $(CC)
+ VERBOSE = -v
@ELSE
@GNU_ONLY MAKEFLAGS += --silent
+ @BSD_ONLY MAKE += -s
RUNCC = $(COMPILE_ROOT)/make/run-cc.pl $(CC)
@ENDIF
-@GNU_ONLY export COMPILE_ROOT RUNCC FLAGS NICEFLAGS CC LDLIBS MODULES MODPATH LIBPATH INSTMODE
-@BSD_ONLY MAKEARGS = -s 'RUNCC=${RUNCC}' 'FLAGS=${FLAGS}' 'NICEFLAGS=${NICEFLAGS}' 'CC=${CC}' 'LDLIBS=${LDLIBS}' 'MODULES=${MODULES}' 'MODPATH=${MODPATH}' 'LIBPATH=${LIBPATH}' 'INSTMODE=${INSTMODE}'
+@DO_EXPORT RUNCC FLAGS NICEFLAGS CC LDLIBS PICLDFLAGS VERBOSE SOCKETENGINE
# Default target
_all: module
@ENDIF
-all: ircd mods finishmessage
+all: finishmessage
+
+alldep: $(HEADER)
+ @echo -n "Generating module dependencies..."
+ @$(MAKEENV) $(MAKE) -C src -f ../make/$(MAKESTYLE)-dep.mk all
+ @echo 'done'
+
+allreal: alldep
+ @$(MAKEENV) $(MAKE) -C src -f ../make/$(MAKESTYLE)-real.mk all
debug:
@${MAKE} D=1 all
@echo "* while you wait for make to run? *"
@echo "*************************************"
-ircd: $(HEADER)
- @${MAKE} -C src $(MAKEARGS) inspircd commands
-
-mods: $(HEADER)
- @${MAKE} -C src/modules $(MAKEARGS)
-
-# Make this depend on 'ircd' and 'mods', so its always output last even with -j
-finishmessage: ircd mods
+finishmessage: allreal
@echo ""
@echo "*************************************"
@echo "* BUILD COMPLETE! *"
@echo "* make install *"
@echo "*************************************"
-install: ircd mods@EXTRA_DIR@
+install: allreal@EXTRA_DIR@
@-install -d -m $(INSTMODE) $(BASE)
@-install -d -m $(INSTMODE) $(LIBPATH)
@-install -d -m $(INSTMODE) $(BINPATH)
@-install -d -m $(INSTMODE) $(CONPATH)
@-install -d -m $(INSTMODE) $(MODPATH)
-install -m $(INSTMODE) @STARTSCRIPT@ $(@DESTINATION@) 2>/dev/null
-@INSTALL_LIST@ @echo ""
+@INSTALL_LIST@ -install -m $(INSTMODE) src/inspircd $(BINPATH)
+ @echo ""
@echo "*************************************"
@echo "* INSTALL COMPLETE! *"
@echo "* *"
rm -f src/modules/*/*.o
deinstall:
+ -rm $(BINPATH)/inspircd
@UNINSTALL_LIST@
squeakyclean: distclean
sub writefiles {
my($writeheader) = @_;
- my $se = "";
# First File.. inspircd_config.h
chomp(my $incos = `uname -n -s -r`);
chomp(my $version = `sh src/version.sh`);
my $use_hiperf = 0;
if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
print FILEHANDLE "#define USE_KQUEUE\n";
- $se = "socketengine_kqueue";
+ $config{SOCKETENGINE} = "socketengine_kqueue";
$use_hiperf = 1;
}
if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
print FILEHANDLE "#define USE_EPOLL\n";
- $se = "socketengine_epoll";
+ $config{SOCKETENGINE} = "socketengine_epoll";
$use_hiperf = 1;
}
if (($has_ports) && ($config{USE_PORTS} eq "y")) {
print FILEHANDLE "#define USE_PORTS\n";
- $se = "socketengine_ports";
+ $config{SOCKETENGINE} = "socketengine_ports";
$use_hiperf = 1;
}
# user didn't choose either epoll or select for their OS.
if ($config{USE_POLL} eq "y")
{
print FILEHANDLE "#define USE_POLL\n";
- $se = "socketengine_poll";
+ $config{SOCKETENGINE} = "socketengine_poll";
}
else
{
print FILEHANDLE "#define USE_SELECT\n";
- $se = "socketengine_select";
+ $config{SOCKETENGINE} = "socketengine_select";
}
}
print FILEHANDLE "\n#include \"threadengines/threadengine_pthread.h\"\n\n#endif\n";
#ifndef __CONFIGURATION_SOCKETENGINE__
#define __CONFIGURATION_SOCKETENGINE__
-#include "socketengines/$se.h"
+#include "socketengines/$config{SOCKETENGINE}.h"
#endif
EOF
print "Writing \e[1;32m$file\e[0m ...\n";
for my $var (qw(
CC FLAGS DEVELOPER LDLIBS BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR LIBRARY_DIR
- STARTSCRIPT DESTINATION EXTRA_DIR
+ STARTSCRIPT DESTINATION EXTRA_DIR SOCKETENGINE
)) {
s/\@$var\@/$config{$var}/g;
}
- s/\@MODULES\@/$modules/ if defined $modules;
s/\@EXECUTABLE\@/$exe/ if defined $exe;
s/\@VERSION\@/$version/ if defined $version;
s/\@INSTALL_LIST\@/$install_list/ if defined $install_list;
s/\@IFNDEF (\S+)/ifndef $1/g;
s/\@ELSE/else/g;
s/\@ENDIF/endif/g;
- s/\@BSD_ONLY .*\n//g;
+ s/ *\@BSD_ONLY .*\n//g;
s/\@GNU_ONLY //g;
+ s/\@DO_EXPORT (.*)/export $1/g;
open MKF, '>GNUmakefile' or die "Can't write to GNUmakefile: $!";
print MKF $_;
close MKF;
s/\@ELSE/.else/g;
s/\@ENDIF/.endif/g;
s/\@BSD_ONLY //g;
- s/\@GNU_ONLY .*\n//g;
+ s/ *\@GNU_ONLY .*\n//g;
+ $mk_tmp = $_;
+ $mk_tmp =~ s#\@DO_EXPORT (.*)#"MAKEENV += ".join ' ', map "$_='\${$_}'", split /\s/, $1#eg;
open MKF, '>BSDmakefile' or die "Can't write to BSDmakefile: $!";
- print MKF $_;
+ print MKF $mk_tmp;
close MKF;
} else {
open(FILEHANDLE, ">$file") or die("Can't write to $file: $!\n");
$core_files_list{$name} = 1;
}
}
- elsif ($line =~ /\/\* \$ExtraDeps: (.*?) \*\//i)
- {
- $specialdeps{$name} = $1;
- }
- elsif ($line =~ /\/\* \$ExtraObjects: (.*?) \*\//i)
- {
- $extraobjects{$name} = $1;
- }
- elsif ($line =~ /\/\* \$ExtraBuild: (.*?) \*\//i)
- {
- $extrabuildlines{$name} = $1;
- }
- elsif ($line =~ /\/\* \$ExtraSources: (.*?) \*\//i)
- {
- $extrasources{$name} = $1;
- }
- elsif ($line =~ /\/\* \$If: (\w+) \*\//i)
- {
- if (defined $config{$1})
- {
- if (($config{$1} !~ /y/i) and ($config{$1} ne "1"))
- {
- # Skip to 'endif'
- while (defined($line = <CPP>))
- {
- chomp($line);
- die ("\$If buildsystem instruction within another \$If in file $dir/$name") if ($line =~ /\/\* \$If: (\w+) \*\//i);
- last if ($line =~ /\/\* \$EndIf \*\//i);
- }
- }
- }
- }
- elsif ($line =~ /\/\* \$Install: (.*?) \*\//i)
- {
- if (!exists($existing_install_list{$1}))
- {
- $existing_install_list{$1} = 1;
- my $idir = (split(' ',$1))[1];
- my $ifile = (split(' ',$1))[0];
- $install_list = $install_list . " -install -m \$(INSTMODE) $1\n";
- $ifile =~ s/.*\///g;
- $uninstall_list = $uninstall_list . " -rm $idir/$ifile\n";
- }
- }
elsif ($line =~ /\/\* \$CopyInstall: (.*?) \*\//i)
{
if (!exists($existing_install_list{$1}))
--- /dev/null
+DFILES != perl -e 'print join " ", grep s/\.cpp/.d/, <*.cpp>, <commands/*.cpp>, <modes/*.cpp>, <modules/*.cpp>'
+DFILES += socketengines/$(SOCKETENGINE).d threadengines/threadengine_pthread.d
+
+all: $(DFILES)
+
+.SUFFIXES: .d .cpp
+
+.cpp.d:
+ @../make/calcdep.pl $<
+ @echo -n .
--- /dev/null
+CORE_TARGS != perl -e 'print join " ", grep s/\.cpp/.o/, <*.cpp>'
+MODE_TARGS != perl -e 'print join " ", grep s/\.cpp/.o/, <modes/*.cpp>'
+CMD_TARGS != perl -e 'print join " ", grep s/\.cpp/.so/, <commands/*.cpp>'
+MOD_TARGS != perl -e 'print join " ", grep s/\.cpp/.so/, <modules/*.cpp>'
+CORE_TARGS += modeclasses.a threadengines/threadengine_pthread.o
+CORE_TARGS += socketengines/$(SOCKETENGINE).o
+
+DFILES != perl -e 'print join " ", grep s/\.cpp/.d/, <*.cpp>, <commands/*.cpp>, <modes/*.cpp>, <modules/*.cpp>'
+DFILES += socketengines/$(SOCKETENGINE).d threadengines/threadengine_pthread.d
+
+all: inspircd commands modules
+
+commands: $(CMD_TARGS)
+
+modules: $(MOD_TARGS)
+
+modeclasses.a: $(MODE_TARGS)
+ @../make/run-cc.pl ar crs modeclasses.a $(MODE_TARGS)
+
+inspircd: $(CORE_TARGS)
+ $(RUNCC) $(FLAGS) -rdynamic -L. -o inspircd $(LDLIBS) $(CORE_TARGS)
+
+.for FILE in $(DFILES)
+.include "$(FILE)"
+.endfor
--- /dev/null
+#!/usr/bin/perl
+use strict;
+BEGIN { push @INC, '..'; }
+use make::configure;
+
+my $file = shift;
+
+$file =~ /(.*)\.cpp$/ or die "Cannot process $file";
+my $base = $1;
+
+my $out = "$base.d";
+
+open IN, '<', $file or die "Could not read $file: $!";
+open OUT, '>', $out or die "Could not write $out: $!";
+
+my $cc_deps = qx($ENV{CC} $ENV{FLAGS} -MM $file);
+$cc_deps =~ s/.*?:\s*//;
+
+my $ext = $file =~ m#(modules|commands)/# ? '.so' : '.o';
+print OUT "$base$ext: $cc_deps";
+print OUT "\t@../make/unit-cc.pl \$(VERBOSE) $file $base$ext\n";
+print OUT "$base.d: $cc_deps";
+print OUT "\t../make/calcdep.pl $file\n";
--- /dev/null
+DFILES = $(patsubst %.cpp,%.d,$(wildcard *.cpp))
+DFILES += $(patsubst %.cpp,%.d,$(wildcard commands/*.cpp))
+DFILES += $(patsubst %.cpp,%.d,$(wildcard modes/*.cpp))
+DFILES += $(patsubst %.cpp,%.d,$(wildcard modules/*.cpp))
+DFILES += socketengines/$(SOCKETENGINE).d threadengines/threadengine_pthread.d
+
+all: $(DFILES)
+
+%.d: %.cpp
+ @../make/calcdep.pl $<
+ @echo -n .
--- /dev/null
+CORE_TARGS = $(patsubst %.cpp,%.o,$(wildcard *.cpp))
+MODE_TARGS = $(patsubst %.cpp,%.o,$(wildcard modes/*.cpp))
+CMD_TARGS = $(patsubst %.cpp,%.so,$(wildcard commands/*.cpp))
+MOD_TARGS = $(patsubst %.cpp,%.so,$(wildcard modules/*.cpp))
+
+CORE_TARGS += modeclasses.a threadengines/threadengine_pthread.o
+CORE_TARGS += socketengines/$(SOCKETENGINE).o
+
+DFILES = $(patsubst %.cpp,%.d,$(wildcard *.cpp))
+DFILES += $(patsubst %.cpp,%.d,$(wildcard commands/*.cpp))
+DFILES += $(patsubst %.cpp,%.d,$(wildcard modes/*.cpp))
+DFILES += $(patsubst %.cpp,%.d,$(wildcard modules/*.cpp))
+DFILES += socketengines/$(SOCKETENGINE).d threadengines/threadengine_pthread.d
+
+all: inspircd commands modules
+
+commands: $(CMD_TARGS)
+
+modules: $(MOD_TARGS)
+
+modeclasses.a: $(MODE_TARGS)
+ @../make/run-cc.pl ar crs modeclasses.a $(MODE_TARGS)
+
+inspircd: $(CORE_TARGS)
+ $(RUNCC) $(FLAGS) -rdynamic -L. -o inspircd $(LDLIBS) $(CORE_TARGS)
+
+%.d: %.cpp
+ @../make/calcdep.pl $<
+
+.PHONY: all commands modules
+
+-include $(DFILES)
--- /dev/null
+#!/usr/bin/perl
+use strict;
+use warnings;
+BEGIN { push @INC, '..'; }
+use make::configure;
+
+my $file = shift;
+my $verbose;
+
+if ($file =~ /^-/) {
+ $_ = $file;
+ $file = shift;
+ $verbose = /v/;
+}
+
+my $out = shift;
+
+my $cflags = nopedantic($file) ? $ENV{NICEFLAGS} : $ENV{FLAGS};
+$cflags .= ' ' . getcompilerflags($file);
+
+my $flags;
+if ($out =~ /\.so$/) {
+ $flags = join ' ', $cflags, $ENV{PICLDFLAGS}, getlinkerflags($file);
+} else {
+ $flags = "$cflags -c";
+}
+
+my $execstr = "$ENV{RUNCC} $flags -o $out $file";
+print "$execstr\n" if $verbose;
+exec $execstr;
+exit 1;