/
Process.pm
104 lines (89 loc) · 3.08 KB
/
Process.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
Rakudo::Internals.REGISTER-DYNAMIC: '$*RAKUDO_MODULE_DEBUG', {
PROCESS::<$RAKUDO_MODULE_DEBUG> := ?%*ENV<RAKUDO_MODULE_DEBUG>
?? -> *@str --> Nil {
state Num $last = Rakudo::Internals.INITTIME;
my num $now = nqp::time_n;
my $str = @str>>.indent(16).join("\n").substr(16);
note sprintf "%4d %5d RMD: $str",
1000 * ($now - $last), nqp::getpid();
$last = $now;
}
!! False
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*PID', {
PROCESS::<$PID> := nqp::p6box_i(nqp::getpid());
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*EXECUTABLE', {
PROCESS::<$EXECUTABLE> := (
#?if jvm
$*VM.properties<perl6.execname>
// $*VM.properties<perl6.prefix> ~ '/bin/perl6-j'
#?endif
#?if moar
nqp::execname()
// ($*VM.config<prefix> ~ '/bin/'
~ ($*VM.config<osname> eq 'MSWin32' ?? 'perl6-m.bat' !! 'perl6-m'))
#?endif
).IO;
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*EXECUTABLE-NAME', {
PROCESS::<$EXECUTABLE-NAME> := $*EXECUTABLE.basename;
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*PROGRAM-NAME', {
PROCESS::<$PROGRAM-NAME> := nqp::getcomp('perl6').user-progname;
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*PROGRAM', {
PROCESS::<$PROGRAM> := IO::Path.new($*PROGRAM-NAME);
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*TMPDIR', {
PROCESS::<$TMPDIR> = $*SPEC.tmpdir;
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*TOLERANCE', {
PROCESS::<$TOLERANCE> := item 1e-15;
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*REPO', {
my $repo := PROCESS::<$REPO> := CompUnit::RepositoryRegistry.setup-repositories;
my $world := $*W;
$world.suspend_recording_precompilation_dependencies if $world;
CompUnit::RepositoryRegistry.resolve-unknown-repos($repo.repo-chain);
$world.resume_recording_precompilation_dependencies if $world;
PROCESS::<$REPO>
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*HOME', {
my $HOME is default(Nil);
if %*ENV<HOME> -> $home {
$HOME = $home;
}
elsif Rakudo::Internals.IS-WIN {
my $env := %*ENV;
$env<HOMEDRIVE> && $env<HOMEPATH> && ($HOME
= nqp::concat($env<HOMEDRIVE>, $env<HOMEPATH>));
}
$HOME = IO::Path.new($HOME) if $HOME;
PROCESS::<$HOME> := $HOME # bind container so Nil default is kept
}
{
sub fetch($what) {
once if !Rakudo::Internals.IS-WIN && try { qx/id/ } -> $id {
if $id ~~ m/^
[ uid "=" $<uid>=(\d+) ]
[ "(" $<user>=(<-[ ) ]>+) ")" ]
\s+
[ gid "=" $<gid>=(\d+) ]
[ "(" $<group>=(<-[ ) ]>+) ")" ]
/ {
PROCESS::<$USER> := IntStr.new(+$<uid>,~$<user>);
PROCESS::<$GROUP> := IntStr.new(+$<gid>,~$<group>);
}
# alas, no support yet
else {
PROCESS::<$USER> := Nil;
PROCESS::<$GROUP> := Nil;
}
}
PROCESS::{$what}
}
Rakudo::Internals.REGISTER-DYNAMIC: '$*USER', { fetch('$USER') };
Rakudo::Internals.REGISTER-DYNAMIC: '$*GROUP', { fetch('$GROUP') };
}
# vim: ft=perl6 expandtab sw=4