-sub read_module_directory {
- my ($dpath, $reldpath) = @_;
-
- if (opendir(MDIRHANDLE, $dpath) == 0) {
- return;
- }
-
- foreach my $fname (sort readdir(MDIRHANDLE)) {
- if ($fname =~ /\.cpp$/) {
- my $cmflags = getcompilerflags("$dpath/$fname");
- $mliflags = $mliflags . " " . getlinkerflags("$dpath/$fname");
- my $deps = getdependencies("$dpath/$fname");
- my $oname = $fname;
- $oname =~ s/\.cpp$/.o/g;
- $mfrules = $mfrules . "$reldpath/$oname: $reldpath/$fname ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h $deps\n";
- $mfrules = $mfrules . " \$(RUNCC) -I. \$(FLAGS) $cmflags $SHARED -o $reldpath/$oname -c $reldpath/$fname\n\n";
- $mobjs = $mobjs . " $reldpath/$oname";
- $mfcount++;
- }
- elsif ((-d "$dpath/$fname") && !($fname eq ".") && !($fname eq "..")) {
- read_module_directory($dpath."/".$fname, $reldpath."/".$fname);
- }
- }
-}
-
-sub calcdeps($)
-{
- # Yes i know we could use gcc -M but it seems to ideneify a lot of 'deep'
- # dependencies which are not relevent in C++.
-
- my $file = $_[0];
-
- open (CPP, "<$file") or die("Can't open $file for reading!");
-
- my %dupe = ();
- my $retlist = "";
-
- foreach my $d (@ignoredeps)
- {
- $dupe{$d} = 1;
- }
-
- my $immutable = "";
- foreach my $dep (@immutabledeps)
- {
- $immutable = $immutable . "../include/$dep ";
- }
- $immutable =~ s/ $//g;
-
- while (defined(my $line = <CPP>))
- {
- chomp($line);
- if ($line =~ /#include "(.+\.h)"/)
- {
- if (!exists($dupe{$1}))
- {
- $retlist = $retlist . "../include/$1 ";
- $dupe{$1} = 1;
- }
- }
- }
- close CPP;
- return length($immutable) ? $immutable . " " . $retlist : $retlist;
-}
-