Convert to native NQP-rx regex; move last bits of Glue functionality to Util; kill...
[parrot-plumage:parrot-plumage.git] / Configure.nqp
1 # Purpose: Use Parrot's config info to configure our Makefile.
2 #
3 # Usage:
4 #     nqp Configure.nqp [input_makefile [output_makefile]]
5 #
6 # input_makefile  defaults to 'src/Makefile.in';
7 # output_makefile defaults to 'Makefile'.
8
9 my $*OSNAME;
10 my @*ARGS;
11 my %*VM;
12
13 MAIN();
14
15 sub MAIN () {
16     # Wave to the friendly users
17     say("Hello, I'm Configure. My job is to poke and prod\nyour system to figure out how to build Plumage.\n");
18
19     # Load utility functions
20     pir::load_bytecode('src/lib/Util.pir');
21
22     # Slurp in the unconfigured Makefile text
23     my $unconfigured := slurp(@*ARGS[0] || 'src/Makefile.in');
24
25     # Replace all of the @foo@ markers
26     my $replaced := subst($unconfigured, /\@<ident>\@/, replacement);
27
28     # Fix paths on Windows
29     if ($*OSNAME eq 'MSWin32') {
30         $replaced := subst($replaced, /'\/'/,     '\\'   );
31         $replaced := subst($replaced, /'\\\\\*'/, '\\\\*');
32     }
33
34     # Spew out the final makefile
35     spew(@*ARGS[1] || 'Makefile', $replaced);
36
37     # Give the user a hint of next action
38     my $make := %*VM<config><make>;
39     say("Configure completed for platform '$*OSNAME'.");
40     say("You can now type '$make' to build Plumage.\n");
41     say("You may also type '$make test' to run the Plumage test suite.\n");
42     say("Happy Hacking,\n\tThe Plumage Team");
43 }
44
45 sub replacement ($match) {
46     my $key    := $match<ident>;
47     my $config := %*VM<config>{$key} || '';
48
49     return $config;
50 }