my $build = $ENV{BUILDPATH};
mkdir $build;
chdir $build or die "Could not open build directory: $!";
- mkdir 'bin';
- mkdir 'obj';
- mkdir 'modules';
symlink "$ENV{SOURCEPATH}/include", 'include';
+ mkdir $_ for qw/bin modules obj/;
+# BSD make has a horribly annoying bug resulting in an extra chdir of the make process
+# Create symlinks to work around it
+ symlink "../$_", "obj/$_" for qw/bin modules obj/;
+
$build = getcwd();
open MAKE, '>real.mk' or die "Could not write real.mk: $!";
chdir "$ENV{SOURCEPATH}/src";
# Autogenerated by calcdep
VPATH = \$(SOURCEPATH)/src
-all: bin/inspircd modules
+all: inspircd commands modules
END
- my @core_deps;
- for my $file (<*.cpp>, <modes/*.cpp>, "socketengines/$ENV{SOCKETENGINE}.cpp", "threadengines/threadengine_pthread.cpp") {
+ my(@core_deps, @cmdlist, @modlist);
+ for my $file (<*.cpp>, <modes/*.cpp>, <socketengines/*.cpp>, "threadengines/threadengine_pthread.cpp") {
my $out = find_output $file;
dep_cpp $file, $out;
+ next if $file =~ m#^socketengines/# && $file ne "socketengines/$ENV{SOCKETENGINE}.cpp";
push @core_deps, $out;
}
-
- my @modlist;
+
for my $file (<commands/*.cpp>) {
my $out = find_output $file;
dep_cpp $file, $out;
- push @modlist, $out;
+ push @cmdlist, $out;
}
opendir my $moddir, 'modules';
- for my $file (readdir $moddir) {
+ for my $file (sort readdir $moddir) {
next if $file =~ /^\./;
if (-e "modules/extra/$file" && !-l "modules/$file") {
# Incorrect symlink?
}
my $core_mk = join ' ', @core_deps;
+ my $cmds = join ' ', @cmdlist;
my $mods = join ' ', @modlist;
print MAKE <<END;
bin/inspircd: $core_mk
- \$(RUNCC) -o \$\@ \$(CORELDFLAGS) \$(LDLIBS) \$^
+ \$(RUNCC) -o \$\@ \$(CORELDFLAGS) \$(LDLIBS) \$^ \$>
inspircd: bin/inspircd
+
+commands: $cmds
+
modules: $mods
-.PHONY: inspircd modules
+.PHONY: inspircd commands modules
END
}
gendep $file;
print MAKE "$out: $file $f2dep{$file}\n";
- print MAKE "\t@\$(SOURCEPATH)/make/unit-cc.pl \$(VERBOSE) \$< \$\@\n";
+ print MAKE "\t@\$(SOURCEPATH)/make/unit-cc.pl \$(VERBOSE) \$\@ \$< \$>\n";
}
sub dep_dir($) {
my($dir) = @_;
my @ofiles;
opendir DIR, $dir;
- for my $file (readdir DIR) {
+ for my $file (sort readdir DIR) {
next unless $file =~ /(.*)\.cpp$/;
my $ofile = find_output "$dir/$file";
dep_cpp "$dir/$file", $ofile;
closedir DIR;
if (@ofiles) {
my $ofiles = join ' ', @ofiles;
- print MAKE "$dir.so: $ofiles\n\t\$(RUNCC) \$(PICLDFLAGS) -o \$\@ \$^\n";
+ print MAKE "$dir.so: $ofiles\n\t\$(RUNCC) \$(PICLDFLAGS) -o \$\@ \$^ \$>\n";
return 1;
} else {
return 0;