Skip to content
Back to formatted view

Raw Message

Message-ID: <16526.42416.293528.830604@mithrandir.hornik.net>
Date: 2004-04-27T20:26:01Z
From: Kurt Hornik
Subject: 'R CMD build' fails when there are spaces in the path (PR#6830)
In-Reply-To: <20040427141913.35041EFCF@slim.kubism.ku.dk>

>>>>> ellis  writes:

> Full_Name: Byron Ellis
> Version: R 1.9.0 (and 2.0.0)
> OS: Linux (Redhat Fedora Core)
> Submission from: (NULL) (140.247.241.197)


> It appears that `R CMD build` cannot handle spaces in the path when
> building packages for distribution. For instance:

> [ellis@net-78815 ~/Bayesian Networks]$ R CMD build bnsl
> * checking for file 'bnsl/DESCRIPTION' ... OK
> * preparing 'bnsl':
> * cleaning src
> * removing junk files
> * building 'bnsl_0.0.1.tar.gz'
> tar: Networks/bnsl_0.0.1.tar: Cannot stat: No such file or directory
> tar: Error exit delayed from previous errors
> tar: Networks/bnsl_0.0.1.tar: Not found in archive
> tar: Error exit delayed from previous errors
> Error: cannot open file 'bnsl/DESCRIPTION' for reading
> [ellis@net-78815 ~/Bayesian Networks]$ 

> Results in a file named "Bayesian" (that appears to be the
> uncompressed tar file) in ~/. I suspect some missing quotes somewhere.

The problem definitely occurs when calling R CMD build from a dir whose
file path contains white space.  Now in R CMD build we have

$ grep filepath build.in 
        my $filepath = &file_path($startdir, $filename);
            R_system("zip -r9X $filepath.zip $pkgs $topLevelFiles");
            R_system("$tar chf $filepath $pkgs $topLevelFiles");
            R_system("gzip -9f $filepath");
        my $filepath = &file_path($startdir, $filename);
        my $origfilepath = $filepath;
            $filepath =~ s+^([A-Za-x]):+/cygdrive/\1+;
        R_system("$tar chf $filepath $pkgname");
        R_system("$tar xhf $filepath");
        R_system("$tar chf $filepath $pkgname");
        R_system("gzip -9f $origfilepath");

so in fact in none of the calls to R_system() with $filepath do we
currently perform any kind of quoting or shell escaping.

A simple improvement would be quoting all filepaths in R_system() calls
via \"...\" or '...'.  Unless someone has a better idea or wants to put
in more effort ...

-k