id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc,lang,patch,platform
2085,Eliminate reliance during build on 'tempdir' in config settings,jkeenan,,"This ticket addresses an issue which came to dominate discussion in TT #1544 and supersedes that ticket.

As noted by Benabik and Coke 12 months ago, the value for `tempdir` in ''config_lib.pir'' and ''lib/Parrot/Config/Generated.pm'' can be dramatically different on different OSes and on different versions on the same OS.  For example, on my older Mac OS X 10.4.11, the results are straightforward and very Unix-ish:
{{{
$ grep -n tempdir config_lib.pir lib/Parrot/Config/Generated.pm 
config_lib.pir:272:    set $P0[""tempdir""], ""/tmp""
lib/Parrot/Config/Generated.pm:371:  'tempdir' => '/tmp',
}}}
But on later versions of Mac OS X, it can appear as something much more, errrm, clever:
{{{
set P0[""tempdir""], ""/var/folders/Bh/BhrBssnnHYqX6SDI8N3S1U+++TM/-Tmp-""
}}}
As Coke put it in TT #1544, it ""like it's intended to be a one-time use tempdir, not something that we can save and reuse elsewhere.""  Benabik speculated that ""I'm guessing ''launchd'' creates a new per-user temp dir at login. The problem here is that we're caching `TMPDIR` and there's no guarantee that it will be stable.'' 

In each case, `tempdir` is simply picked up from Perl 5 early in the configuration process:
{{{
$ grep -n tempdir config/init/defaults.pm
255:        tempdir => File::Spec->tmpdir,
}}}
No magic there, but it suggests that it is the '''environment''' in which Perl 5 is built on different OS versions that controls what Perl 5 gets and what, in turn, Parrot gets.

Two courses of action are conceivable:  One is to find some clever, Parrot-specific way of populating `tempdir`.  The other is simply to extirpate any instance where `tempdir` is used in our build or test systems.

A bit of data on the latter option:  Here are the locations in our source code where I can see something what the problem is:
{{{
$ find . -type f | xargs grep -n 'config.*tempdir'
./runtime/parrot/library/ProfTest/PIRProfile.nqp:66:
    my $tmp_pir   := %config<tempdir> ~ %config<slash> ~ 'test.pir';
./runtime/parrot/library/ProfTest/PIRProfile.nqp:67:
    my $tmp_pprof := %config<tempdir> ~ %config<slash> ~ 'test.pprof';
}}}
Another datum:  We have functions `tempdir()` and `tmpdir()` in '' ./runtime/parrot/library/osutils.pir''.  Would they be of any use?

Thank you very much.

kid51",bug,new,normal,,configure,3.2.0,medium,,,,,,
