forked from slic3r/Slic3r
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Build.PL
144 lines (126 loc) · 4.05 KB
/
Build.PL
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/usr/bin/perl
use strict;
use warnings;
use Config;
use File::Spec;
my %prereqs = qw(
Boost::Geometry::Utils 0.15
Encode::Locale 0
File::Basename 0
File::Spec 0
Getopt::Long 0
Math::ConvexHull::MonotoneChain 0.01
Math::Geometry::Voronoi 1.3
Math::PlanePath 53
Moo 1.003001
Scalar::Util 0
Storable 0
Test::More 0
IO::Scalar 0
Time::HiRes 0
);
my %recommends = qw(
Class::XSAccessor 0
Growl::GNTP 0.15
XML::SAX::ExpatXS 0
);
my $gui = defined $ARGV[0] && $ARGV[0] eq '--gui';
if ($gui) {
%prereqs = qw(
Wx 0.9918
);
%recommends = qw(
Wx::GLCanvas 0
OpenGL 0
);
}
my $missing_prereqs = 0;
if ($ENV{SLIC3R_NO_AUTO}) {
foreach my $module (sort keys %prereqs) {
my $version = $prereqs{$module};
next if eval "use $module $version; 1";
$missing_prereqs = 1 if exists $prereqs{$module};
print "Missing prerequisite $module $version\n";
}
foreach my $module (sort keys %recommends) {
my $version = $recommends{$module};
next if eval "use $module $version; 1";
print "Missing optional $module $version\n";
}
} else {
my @try = (
$ENV{CPANM} // (),
File::Spec->catfile($Config{sitebin}, 'cpanm'),
File::Spec->catfile($Config{installscript}, 'cpanm'),
);
my $cpanm;
foreach my $path (@try) {
if (-e $path) { # don't use -x because it fails on Windows
$cpanm = $path;
last;
}
}
if (!$cpanm) {
if ($^O =~ /^(?:darwin|linux)$/ && system(qw(which cpanm)) == 0) {
$cpanm = 'cpanm';
}
}
die <<'EOF'
cpanm was not found. Please install it before running this script.
There are several ways to install cpanm, try one of these:
apt-get install cpanminus
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
cpan App::cpanminus
If it is installed in a non-standard location you can do:
CPANM=/path/to/cpanm perl Build.PL
EOF
if !$cpanm;
# make sure our cpanm is updated (old ones don't support the ~ syntax)
system $cpanm, 'App::cpanminus';
# install the Windows-compatible Math::Libm
if ($^O eq 'MSWin32' && !eval "use Math::Libm; 1") {
system $cpanm, 'https://github.com/alexrj/Math-Libm/tarball/master';
}
my %modules = (%prereqs, %recommends);
foreach my $module (sort keys %modules) {
my $version = $modules{$module};
my $res = system $cpanm, "$module~$version";
if ($res != 0) {
if (exists $prereqs{$module}) {
$missing_prereqs = 1;
} else {
printf "Don't worry, this module is optional.\n";
}
}
}
if (!$gui) {
# temporarily require this dev version until this upstream bug
# is resolved: https://rt.cpan.org/Ticket/Display.html?id=86367
system $cpanm, 'SMUELLER/ExtUtils-ParseXS-3.18_04.tar.gz';
# clean xs directory before reinstalling, to make sure Build is called
# with current perl binary
if (-e './xs/Build') {
if ($^O eq 'MSWin32') {
system 'cd', 'xs';
system 'Build', 'distclean';
system 'cd', '..';
} else {
system './xs/Build', 'distclean';
}
}
system $cpanm, '--reinstall', './xs';
}
}
if ($missing_prereqs) {
exit 1;
} else {
my $res = 0;
if (eval "use App::Prove; 1") {
$res = App::Prove->new->run ? 0 : 1;
}
if (!$gui) {
print "If you also want to use the GUI you can now run `perl Build.PL --gui` to install the required modules.\n";
}
exit $res;
}
__END__