From 319811203128df91c0a1ed601d8a5902f7c7c853 Mon Sep 17 00:00:00 2001 From: tomboy64 Date: Wed, 27 Apr 2016 02:09:09 +0200 Subject: [PATCH] update the build system to autodetect system provided libs - uses raw pkg-config to determine include directories - failover to the old behaviour when errors occur - fix DT_RPATH when @libdir@ has no / prepended --- Configure.pl | 46 +++++++++++++++++++++++++++++++++++++++++++++- build/Makefile.in | 3 --- build/setup.pm | 2 +- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/Configure.pl b/Configure.pl index 72a5dada4b..444c36452c 100755 --- a/Configure.pl +++ b/Configure.pl @@ -32,7 +32,7 @@ os=s shell=s toolchain=s compiler=s ar=s cc=s ld=s make=s has-sha has-libuv static has-libtommath has-libatomic_ops - has-dyncall has-libffi + has-dyncall has-libffi pkgconfig=s build=s host=s big-endian jit! enable-jit lua=s has-dynasm prefix=s bindir=s libdir=s mastdir=s make-install asan ubsan), 'no-optimize|nooptimize' => sub { $args{optimize} = 0 }, @@ -99,6 +99,7 @@ $config{osname} = $^O; $config{osvers} = $Config{osvers}; $config{lua} = $args{lua} // './3rdparty/dynasm/minilua@exe@'; +$config{pkgconfig} = $args{pkgconfig} // '/usr/bin/pkg-config'; # set options that take priority over all others my @keys = qw( ar cc ld make ); @@ -164,12 +165,30 @@ system($defaults{make}, 'realclean') } +# test whether pkg-config works +system("$config{pkgconfig}", "--version"); +if ( $? == 0 ) { + $config{pkgconfig_works} = 1; +} else { + $config{pkgconfig_works} = 0; +} + # conditionally set include dirs and install rules $config{cincludes} //= ''; $config{install} //= ''; if ($args{'has-libuv'}) { $defaults{-thirdparty}->{uv} = undef; unshift @{$config{usrlibs}}, 'uv'; + if ($config{pkgconfig_works}) { + my $result = `$config{pkgconfig} --cflags libuv`; + if ( $? == 0 ) { + $result =~ s/\n/ /g; + $config{cincludes} .= ' ' . "$result"; + print("Adding extra include for libuv: $result\n"); + } else { + print("Error occured when running $config{pkgconfig} --cflags libuv."); + } + } } else { $config{cincludes} .= ' ' . $defaults{ccinc} . '3rdparty/libuv/include' @@ -181,6 +200,16 @@ if ($args{'has-libatomic_ops'}) { $defaults{-thirdparty}->{lao} = undef; unshift @{$config{usrlibs}}, 'atomic_ops'; + if ($config{pkgconfig_works}) { + my $result = `$config{pkgconfig} --cflags atomic_ops`; + if ( $? == 0 ) { + $result =~ s/\n/ /g; + $config{cincludes} .= ' ' . "$result"; + print("Adding extra include for atomic_ops: $result\n"); + } else { + print("Error occured when running $config{pkgconfig} --cflags atomic_ops."); + } + } } else { $config{cincludes} .= ' ' . $defaults{ccinc} . '3rdparty/libatomic_ops/src'; @@ -232,6 +261,16 @@ $config{nativecall_backend} = 'libffi'; unshift @{$config{usrlibs}}, 'ffi'; push @{$config{defs}}, 'HAVE_LIBFFI'; + if ($config{pkgconfig_works}) { + my $result = `$config{pkgconfig} --cflags libffi`; + if ( $? == 0 ) { + $result =~ s/\n/ /g; + $config{cincludes} .= ' ' . "$result"; + print("Adding extra include for libffi: $result\n"); + } else { + print("Error occured when running $config{pkgconfig} --cflags libffi."); + } + } } elsif ($args{'has-dyncall'}) { unshift @{$config{usrlibs}}, 'dyncall_s', 'dyncallback_s', 'dynload_s'; @@ -364,6 +403,7 @@ print "\n", < '-fPIC', ldshared => '-shared @ccshared@', moarshared => '', - ldrpath => '-Wl,-rpath,@libdir@ -Wl,-rpath,@prefix@/share/perl6/site/lib', + ldrpath => '-Wl,-rpath,/@libdir@ -Wl,-rpath,@prefix@/share/perl6/site/lib', arflags => 'rcs', arout => '',