]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - make/calcdep.pl
Fix null dereference caused by tracking dummy
[user/henk/code/inspircd.git] / make / calcdep.pl
index 7d424f4e366ed18debbf548550d9f9b5333d8934..2a0ea5d92a7390112b8935810c2c481abf0bb1cd 100755 (executable)
@@ -18,10 +18,12 @@ sub run() {
        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";
@@ -31,25 +33,25 @@ sub run() {
 # 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?
@@ -69,16 +71,20 @@ END
        }
        
        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
 }
@@ -138,14 +144,14 @@ sub dep_cpp($$) {
        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;
@@ -154,7 +160,7 @@ sub dep_dir($) {
        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;