sharable build utils
This commit is contained in:
parent
59c7c1d975
commit
b2a1f5cbd5
|
@ -0,0 +1,132 @@
|
|||
package SigarBuild;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use File::Basename qw(basename);
|
||||
|
||||
use vars qw(@ISA @EXPORT);
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(cppflags ldflags libs os src inline_src);
|
||||
|
||||
sub flags {
|
||||
my $os = lc $^O;
|
||||
my $is_win32 = 0;
|
||||
my (@cppflags, @ldflags, @libs);
|
||||
if ($os =~ /(win32)/) {
|
||||
$os = $1;
|
||||
$is_win32 = 1;
|
||||
@cppflags = ('-DWIN32');
|
||||
@libs = qw(kernel32 user32 advapi32 ws2_32 netapi32 shell32 pdh version);
|
||||
}
|
||||
elsif ($os =~ /(linux)/) {
|
||||
$os = $1;
|
||||
}
|
||||
elsif ($os =~ /(hpux)/) {
|
||||
$os = $1;
|
||||
@libs = qw(nsl nm);
|
||||
}
|
||||
elsif ($os =~ /(aix)/) {
|
||||
$os = $1;
|
||||
@libs = qw(odm cfg perfstat);
|
||||
}
|
||||
elsif ($os =~ /(solaris)/) {
|
||||
$os = $1;
|
||||
@libs = qw(nsl socket kstat);
|
||||
}
|
||||
elsif ($os =~ /(darwin)/) {
|
||||
$os = $1;
|
||||
my(@sdks) = reverse sort </Developer/SDKs/MacOSX10.*.sdk>;
|
||||
my $sdk;
|
||||
if (@sdks == 0) {
|
||||
die
|
||||
"Xcode Developer Tools not installed\n".
|
||||
"Download from http://developer.apple.com/technology/xcode.html";
|
||||
}
|
||||
else {
|
||||
#print "Available SDKs...\n(*) " . join("\n ", @sdks) . "\n";
|
||||
$sdk = $sdks[0];
|
||||
}
|
||||
@cppflags = ('-DDARWIN',
|
||||
"-I/Developer/Headers/FlatCarbon -isysroot $sdk");
|
||||
@ldflags = ("-Wl,-syslibroot,$sdk",
|
||||
'-framework CoreServices',
|
||||
'-framework IOKit');
|
||||
if (-e "/usr/local/libproc.h") {
|
||||
push @cppflags, '-DDARWIN_HAS_LIBPROC_H';
|
||||
}
|
||||
}
|
||||
elsif ($os =~ /bsd/) {
|
||||
$os = 'darwin';
|
||||
@libs = qw(kvm);
|
||||
}
|
||||
|
||||
push @cppflags,
|
||||
'-I../../include',
|
||||
"-I../../src/os/$os";
|
||||
|
||||
unless ($is_win32) {
|
||||
push @cppflags, '-U_FILE_OFFSET_BITS';
|
||||
}
|
||||
|
||||
my(@src) = (<../../src/*.c>, <../../src/os/$os/*.c>);
|
||||
|
||||
return {
|
||||
is_win32 => $is_win32,
|
||||
os => $os,
|
||||
libs => \@libs,
|
||||
cppflags => \@cppflags,
|
||||
ldflags => \@ldflags,
|
||||
src => \@src,
|
||||
};
|
||||
}
|
||||
|
||||
#perl -Mlib=.. -MSigarBuild -e cppflags
|
||||
sub cppflags {
|
||||
print join ' ', @{ flags()->{cppflags} };
|
||||
}
|
||||
|
||||
sub ldflags {
|
||||
print join ' ', @{ flags()->{ldflags} };
|
||||
}
|
||||
|
||||
sub libs {
|
||||
print join ' ', @{ flags()->{libs} };
|
||||
}
|
||||
|
||||
sub os {
|
||||
print flags()->{os};
|
||||
}
|
||||
|
||||
sub src {
|
||||
print join ' ', @{ flags()->{src} };
|
||||
}
|
||||
|
||||
sub inline_src {
|
||||
my $stdout = @_ ? 0 : 1;
|
||||
my $flags = shift || flags();
|
||||
my $src = $flags->{src};
|
||||
my(@files);
|
||||
#unlink symlinks incase of nfs shared dir...
|
||||
for my $file (grep { -l } <*.c>) {
|
||||
unlink $file;
|
||||
}
|
||||
for my $file (@$src) {
|
||||
my $cf = basename $file;
|
||||
push @files, $cf;
|
||||
if ($flags->{is_win32}) {
|
||||
copy($file, $cf);
|
||||
}
|
||||
else {
|
||||
symlink($file, $cf) unless -e $cf;
|
||||
}
|
||||
}
|
||||
if ($stdout) {
|
||||
print join ' ', @files;
|
||||
}
|
||||
else {
|
||||
return @files;
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
Loading…
Reference in New Issue