package Test::Make::Util; use Test::Util -Base; #use Data::Dumper::Simple; our @EXPORT = qw( process_args touch utouch clean_env ); sub process_args ($) { my $text = shift; my @args = split_arg($text); foreach (@args) { #warn "----------\n"; #warn Dumper(@args, $_); #warn "----------\n"; if (/^"(.*)"$/) { #warn "---------"; #warn qq{Pusing "$1" into args\n}; $_ = $1; process_escape( $_, q{"\\$@\#} ); } elsif (/^'(.*)'$/) { #warn " Pusing '$1' into args\n"; $_ = $1; } } return @args; } sub touch (@) { utouch(0, @_); } # Touch with a time offset. To DTRT, call touch() then use stat() to get the # access/mod time for each file and apply the offset. sub utouch ($@) { my $off = shift; my @files = @_; foreach my $file (@files) { my $in; open $in, ">>$file" or print $in '' or close $in or die "Can't touch $file: $!"; } my (@s) = stat($files[0]); utime($s[8] + $off, $s[9] + $off, @files); } # the current implementation of clean_env is buggy. haven't found a better approach sub clean_env () { # Get a clean environment my %makeENV = (); # Pull in benign variables from the user's environment # foreach (# UNIX-specific things 'TZ', 'LANG', 'TMPDIR', 'HOME', 'USER', 'LOGNAME', 'PATH', # Purify things 'PURIFYOPTIONS', # Windows NT-specific stuff 'Path', 'SystemRoot', 'TMP', 'SystemDrive', 'TEMP', 'OS', 'HOMEPATH', # DJGPP-specific stuff 'DJDIR', 'DJGPP', 'SHELL', 'COMSPEC', 'HOSTNAME', 'LFN', 'FNCASE', '387', 'EMU387', 'GROUP', 'GNU_MAKE_PATH', 'GNU_SHELL_PATH', 'INC', 'path', ) { $makeENV{$_} = $ENV{$_} if defined $ENV{$_}; } %ENV = (); %ENV = %makeENV; } 1;