This repository has been archived by the owner on Dec 22, 2021. It is now read-only.
/
Mongo.pm
89 lines (66 loc) · 1.99 KB
/
Mongo.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use strict;
use warnings;
package Module::Install::PRIVATE::Mongo;
use Module::Install::Base;
use Config;
use File::Spec::Functions qw/catdir/;
use vars qw{$VERSION @ISA};
BEGIN {
$VERSION = '0.45';
@ISA = qw{Module::Install::Base};
}
sub mongo {
my ($self, @mongo_vars) = @_;
my $custom_cflags = 0;
my $ccflags = $self->makemaker_args->{CCFLAGS};
if ($Config{osname} eq 'darwin') {
my @arch = $Config::Config{ccflags} =~ m/-arch\s+(\S+)/g;
my $archStr = join '', map { " -arch $_ " } @arch;
$ccflags = $ccflags . $archStr;
$self->makemaker_args(CCFLAGS => $ccflags);
$self->makemaker_args(
dynamic_lib => {
OTHERLDFLAGS => $archStr
}
);
$ccflags = $ccflags . ' -g -pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -Wdeclaration-after-statement -I/usr/local/include';
$self->makemaker_args( LDDLFLAGS => ' -bundle -undefined dynamic_lookup -L/usr/local/lib');
$custom_cflags = 1;
}
# check for big-endian
my $endianess = $Config{byteorder};
if ($endianess == 4321 || $endianess == 87654321) {
$ccflags .= " -DMONGO_BIG_ENDIAN=1 ";
$custom_cflags = 1;
}
if ($custom_cflags) {
$self->makemaker_args( CCFLAGS => $ccflags);
}
$self->xs_files;
$self->makemaker_args( INC => '-I. ' );
return;
}
sub xs_files {
my ($self) = @_;
my (@clean, @OBJECT, %XS);
for my $xs (<xs/*.xs>) {
(my $c = $xs) =~ s/\.xs$/.c/i;
(my $o = $xs) =~ s/\.xs$/\$(OBJ_EXT)/i;
$XS{$xs} = $c;
push @OBJECT, $o;
push @clean, $o;
}
for my $c (<*.c>) {
(my $o = $c) =~ s/\.c$/\$(OBJ_EXT)/i;
push @OBJECT, $o;
push @clean, $o;
}
$self->makemaker_args(
clean => { FILES => join(q{ }, @clean) },
OBJECT => join(q{ }, @OBJECT),
XS => \%XS,
);
$self->postamble('$(OBJECT) : perl_mongo.h');
return;
}
1;