-
Notifications
You must be signed in to change notification settings - Fork 0
/
Configure.nqp
71 lines (59 loc) · 1.94 KB
/
Configure.nqp
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
# Purpose: Use Parrot's config info to configure our Makefile.
#
# Usage:
# parrot_nqp Configure.nqp
our @ARGS;
our %VM;
our $OS;
MAIN();
sub MAIN () {
# Wave to the friendly users
say("Hello, I'm Configure. My job is to poke and prod your system");
say("to figure out how to build matrixy.\n");
# Load Parrot config and glue functions
pir::load_bytecode("PGE.pbc");
pir::load_bytecode('config/config-helpers.pir');
# Check for linalg_group
Q:PIR {
.local pmc pla
pla = loadlib "linalg_group"
if pla goto linalg_group_loaded
goto cannot_load_library
linalg_group_loaded:
push_eh cannot_load_library
$P0 = new ['NumMatrix2D']
pop_eh
goto everything_is_fine
cannot_load_library:
pop_eh
say "linalg_group not found"
say "You must install the parrot-linear-algebra package before"
say "installing Matrixy."
say "http://www.github.com/Whiteknight/parrot-linear-algebra"
.return()
everything_is_fine:
say "linalg_group loaded OK"
};
# Slurp in the unconfigured Makefile text
my $unconfigured := slurp(@ARGS[0] || 'config/makefiles/root.in');
# Replace all of the @foo@ markers
my $replaced := subst($unconfigured, rx('\@<ident>\@'), replacement);
# Fix paths on Windows
if ($OS eq 'MSWin32') {
say("D");
$replaced := subst($replaced, rx('/'), '\\');
}
# Spew out the final makefile
spew(@ARGS[1] || 'Makefile', $replaced);
# Give the user a hint of next action
say("Configure completed.");
say("You can now type '" ~ %VM<config><make> ~ "' to build matrixy.\n");
say("You may also type '" ~ %VM<config><make> ~ " test' to run the test suite.\n");
say("Happy Hacking,");
say("\tThe matrixy Team");
}
sub replacement ($match) {
my $key := $match<ident>;
my $config := %VM<config>{$key} || '';
return $config;
}