summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-07-18 17:13:10 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-07-18 17:13:10 +0000
commit398e33c16bc61c3adf568b1e2d65c2965e762656 (patch)
treef52edcdc676870f13048e20f333a8a8e0be55541
parent58ecf39129ae6d1e5a15785c7bb8bf0fd5ee46b9 (diff)
Okay. This will probably break *everything*, but hey. Use static linking (JUST) for the main binary. This has advantages in terms of shorter compile time and in slightly reduced file size used, so it is worth it. Configure is also a tiny bit simpler in some ways, so.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10033 e03df62e-2008-0410-955e-edbf42e46eb7
-rwxr-xr-xconfigure97
1 files changed, 49 insertions, 48 deletions
diff --git a/configure b/configure
index 8783c5865..272698f96 100755
--- a/configure
+++ b/configure
@@ -98,7 +98,7 @@ our %extraobjects = ();
our %extrasources = ();
our ($opt_use_gnutls, $opt_rebuild, $opt_use_openssl, $opt_nointeractive, $opt_ports,
- $opt_epoll, $opt_kqueue, $opt_noports, $opt_noepoll, $opt_nokqueue, $opt_disablerpath,
+ $opt_epoll, $opt_kqueue, $opt_noports, $opt_noepoll, $opt_nokqueue,
$opt_ipv6, $opt_ipv6links, $opt_noipv6links, $opt_maxbuf, $opt_disable_debug,
$opt_freebsd_port);
@@ -125,7 +125,6 @@ GetOptions (
'disable-ports' => \$opt_noports,
'disable-epoll' => \$opt_noepoll,
'disable-kqueue' => \$opt_nokqueue,
- 'disable-rpath' => \$opt_disablerpath,
'enable-ipv6' => \$opt_ipv6,
'enable-remote-ipv6' => \$opt_ipv6links,
'disable-remote-ipv6' => \$opt_noipv6links,
@@ -1071,7 +1070,7 @@ sub getosflags {
$config{LDLIBS} = "-pthread -lstdc++";
$config{FLAGS} = "-fPIC -Woverloaded-virtual -Wshadow -Wformat=2 -Wmissing-format-attribute -Wall $config{OPTIMISATI}";
$config{DEVELOPER} = "-fPIC -Woverloaded-virtual -Wshadow -Wall -Wformat=2 -Wmissing-format-attribute -g";
- $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared" unless defined $opt_disablerpath;
+ $SHARED = "-shared";
$config{MAKEPROG} = "make";
if ($config{OSNAME} =~ /darwin/i) {
@@ -1498,6 +1497,8 @@ sub write_dynamic_makefile
my $i = 0;
my @cmdlist = ();
my %existing_install_list = ();
+ my %core_files_list = ();
+
opendir(DIRHANDLE, "src/commands");
foreach my $name (sort readdir(DIRHANDLE))
{
@@ -1523,6 +1524,9 @@ sub write_dynamic_makefile
$config{USE_PORTS} = 0;
}
+ # formerly generated below this foreach, now it's not! magic.
+ my $all_core = "";
+
foreach my $dir (("src","src/commands","src/modes","src/socketengines","src/modules"))
{
print "Scanning \e[1;32m$dir\e[0m for core files ";
@@ -1538,7 +1542,18 @@ sub write_dynamic_makefile
chomp($line);
if ($line =~ /\/\* \$Core: (\w+) \*\//i)
{
- $filelist{$name} = $1;
+ my $sname = $name;
+ $sname =~ s/\.cpp$/.o/;
+
+ # append it to list to be built
+ $all_core = $all_core . $sname . " ";
+ $filelist{$name} = $sname;
+
+ # mark it as a core file, so it won't get shared object cflags
+ if (!exists($core_files_list{$name}))
+ {
+ $core_files_list{$name} = 1;
+ }
}
elsif ($line =~ /\/\* \$ExtraDeps: (.*?) \*\//i)
{
@@ -1604,36 +1619,24 @@ sub write_dynamic_makefile
print " done!\n";
}
+ # modes need to be compiled in too
+ $all_core = $all_core . "modes/modeclasses.a";
+
my $freebsd4libs = (defined $config{CRAQ} ? $config{CRAQ} : "");
- my $all = "all: ";
- my $all_libsonly = "";
my $libraryext = "";
- my $othercrap = "";
- my $RPATH = "";
+ my $binary_rule = "";
if ($config{IS_DARWIN} eq "YES")
{
$libraryext = "dylib";
- $othercrap = " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp\n \@../make/run-cc.pl \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o "
+ $binary_rule = " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp\n \@../make/run-cc.pl \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o "
}
else
{
$libraryext = "so";
- $RPATH = "-Wl,--rpath -Wl,$config{LIBRARY_DIR}" unless defined $opt_disablerpath;
- $othercrap = " \@../make/run-cc.pl \$(CC) -pipe -I../include $RPATH \$(FLAGS) $freebsd4libs -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) ";
- }
-
- foreach my $cpp (sort keys %filelist)
- {
- $all = $all . $filelist{$cpp} . "." . $libraryext . " ";
- $all_libsonly = $all_libsonly . $filelist{$cpp} . "." . $libraryext . " ";
- $install_list = $install_list . " -install -m \$(INSTMODE) src/" . $filelist{$cpp} . "." . $libraryext . " \$(LIBPATH)\n";
- $uninstall_list = $uninstall_list . " -rm \$(LIBPATH)/" . $filelist{$cpp} . "." . $libraryext . "\n";
+ $binary_rule = " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) $freebsd4libs -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) ";
}
- $all = $all . "moo inspircd\n";
-
- $othercrap = $othercrap . " $all_libsonly\n\n";
open(FH,">src/Makefile") or die("Could not write src/Makefile");
print FH <<EOM;
@@ -1645,42 +1648,24 @@ RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//
EOM
- print FH "$all\n\n";
-
- my $deps = calcdeps("src/inspircd.cpp");
- print FH "inspircd: inspircd.cpp $deps $all_libsonly\n";
- print FH "$othercrap\n";
+ my $buildstring = "";
+ my $deps = "";
foreach my $cpp (sort keys %filelist)
{
- my $thislib = $filelist{$cpp} . "." . $libraryext;
my $objs = $cpp;
my $rawcpp = $cpp;
- my $libcrap = "";
$objs =~ s/\.cpp$/.o/;
if (exists($extraobjects{$cpp}))
{
$objs = $objs . " " . $extraobjects{$cpp};
+ $all_core = $all_core . " " . $extraobjects{$cpp};
}
if (exists($extrasources{$cpp}))
{
$rawcpp = $rawcpp . " " . $extrasources{$cpp};
}
- if ($config{IS_DARWIN} eq "YES")
- {
- $libcrap = "-install_name " . $config{LIBRARY_DIR} . "/" . $thislib . " -dynamiclib -twolevel_namespace -undefined dynamic_lookup";
- }
- else
- {
- if (defined $opt_disablerpath)
- {
- $libcrap = " -shared";
- }
- else
- {
- $libcrap = "-Wl,--rpath -Wl," . $config{LIBRARY_DIR} . " -shared";
- }
- }
+
$deps = calcdeps("src/$cpp");
if (exists($extrasources{$cpp}))
{
@@ -1693,15 +1678,31 @@ EOM
}
}
}
- print FH $thislib . ": $cpp $deps ". (defined($specialdeps{$cpp}) ? $specialdeps{$cpp} : "") . "\n";
- print FH " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $rawcpp\n";
+ $buildstring = $buildstring . $objs . ": $cpp $deps ". (defined($specialdeps{$cpp}) ? $specialdeps{$cpp} : "") . "\n";
+
+ if (exists($core_files_list{$cpp}))
+ {
+ # core files are statically linked into the binary and do not require -export-dynamic
+ $buildstring = $buildstring . " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -c $rawcpp\n";
+ }
+ else
+ {
+ $buildstring = $buildstring . " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $rawcpp\n";
+ }
+
if (exists($extrabuildlines{$cpp}))
{
- print FH " " . $extrabuildlines{$cpp} . "\n";
+ $buildstring = $buildstring . " " . $extrabuildlines{$cpp} . "\n";
}
- print FH " \@../make/run-cc.pl \$(CC) -pipe $libcrap -o " . $thislib . " " . $objs . "\n\n";
}
+ print FH "all: inspircd moo\n\n\n";
+
+ $deps = calcdeps("src/inspircd.cpp");
+ print FH "inspircd: inspircd.cpp $deps $all_core\n";
+ print FH "$binary_rule $all_core\n\n";
+
+ print FH $buildstring;
print FH "moo:\n \@\${MAKE} -C \"commands\" DIRNAME=\"src/commands\" CC=\"\$(CC)\" \$(MAKEARGS)\n\n";
# close main makefile