The R Project SVN R

Rev

Rev 28275 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 28275 Rev 28277
1
#-*- perl -*-
1
#-*- perl -*-
2
# Copyright (C) 2000-4  R Development Core Team
2
# Copyright (C) 2000-4  R Development Core Team
3
#
3
#
4
# This program is free software; you can redistribute it and/or modify
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2, or (at your option)
6
# the Free Software Foundation; either version 2, or (at your option)
7
# any later version.
7
# any later version.
8
#
8
#
9
# This program is distributed in the hope that it will be useful, but
9
# This program is distributed in the hope that it will be useful, but
10
# WITHOUT ANY WARRANTY; without even the implied warranty of
10
# WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the GNU
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the GNU
12
# General Public License for more details.
12
# General Public License for more details.
13
#
13
#
14
# A copy of the GNU General Public License is available via WWW at
14
# A copy of the GNU General Public License is available via WWW at
15
# http://www.gnu.org/copyleft/gpl.html.	 You can also obtain it by
15
# http://www.gnu.org/copyleft/gpl.html.	 You can also obtain it by
16
# writing to the Free Software Foundation, Inc., 59 Temple Place,
16
# writing to the Free Software Foundation, Inc., 59 Temple Place,
17
# Suite 330, Boston, MA  02111-1307  USA.
17
# Suite 330, Boston, MA  02111-1307  USA.
18
 
18
 
19
# Send any bug reports to r-bugs@r-project.org
19
# Send any bug reports to r-bugs@r-project.org
20
 
20
 
21
use Cwd;
21
use Cwd;
22
use File::Basename;
22
use File::Basename;
23
use File::Path;
23
use File::Path;
24
use Getopt::Long;
24
use Getopt::Long;
25
use R::Dcf;
25
use R::Dcf;
26
use R::Utils;
26
use R::Utils;
27
 
27
 
28
 
28
 
29
my $revision = ' $Revision: 1.39 $ ';
29
my $revision = ' $Revision: 1.40 $ ';
30
my $version;
30
my $version;
31
my $name;
31
my $name;
32
$revision =~ / ([\d\.]*) /;
32
$revision =~ / ([\d\.]*) /;
33
$version = $1;
33
$version = $1;
34
($name = $0) =~ s|.*/||;
34
($name = $0) =~ s|.*/||;
35
 
35
 
36
 
36
 
37
my @knownoptions = ("help|h", "version|v", "debug|d", "library|l:s",
37
my @knownoptions = ("help|h", "version|v", "debug|d", "library|l:s",
38
		    "clean|c", "docs:s", "save|s", "no-save",
38
		    "clean|c", "docs:s", "save|s", "no-save",
39
		    "with-package-versions",
39
		    "with-package-versions",
40
		    "use-zip", "use-zip-data", "use-zip-help", 
40
		    "use-zip", "use-zip-data", "use-zip-help", 
41
		    "auto-zip", "build", "fake");
41
		    "auto-zip", "build", "fake");
42
		    
42
		    
43
##   	topLevelFiles will be files that sit in the top level of a
43
##   	topLevelFiles will be files that sit in the top level of a
44
##      zip/tarball along with any included directories.
44
##      zip/tarball along with any included directories.
45
##	This needs to be fixed: this file shouldn't do binary builds,
45
##	This needs to be fixed: this file shouldn't do binary builds,
46
##	that's what build.in is for - DJM
46
##	that's what build.in is for - DJM
47
##      No, that is what INSTALL --build is for, pace DJM
47
##      No, that is what INSTALL --build is for, pace DJM
48
 
48
 
49
my $topLevelFiles = "DESCRIPTION";		    
49
my $topLevelFiles = "DESCRIPTION";		    
50
			
50
			
51
GetOptions (@knownoptions) || usage();
51
GetOptions (@knownoptions) || usage();
52
R_version($name, $version) if $opt_version;
52
R_version($name, $version) if $opt_version;
53
 
53
 
54
my $R_HOME = $ENV{'R_HOME'} ||
54
my $R_HOME = $ENV{'R_HOME'} ||
55
    die "Error: Environment variable R_HOME not found\n";
55
    die "Error: Environment variable R_HOME not found\n";
56
usage() if $opt_help;
56
usage() if $opt_help;
57
 
57
 
58
my $startdir = cwd();
58
my $startdir = cwd();
59
my $library;
59
my $library;
60
if($opt_library){
60
if($opt_library){
61
    # remove quotes around the library path
61
    # remove quotes around the library path
62
    $opt_library =~ s/^['"]//; $opt_library =~ s/['"]$//; #'"
62
    $opt_library =~ s/^['"]//; $opt_library =~ s/['"]$//; #'"
63
    chdir($opt_library) ||
63
    chdir($opt_library) ||
64
	die "Error: cannot change to directory \`$opt_library'\n";
64
	die "Error: cannot change to directory \`$opt_library'\n";
65
    $library = cwd();
65
    $library = cwd();
66
    $library = Win32::GetShortPathName($library) if $library =~ / /;
66
    $library = Win32::GetShortPathName($library) if $library =~ / /;
67
    chdir($startdir);
67
    chdir($startdir);
68
} else {
68
} else {
69
    $library = $R_HOME . "/library";
69
    $library = $R_HOME . "/library";
70
}
70
}
71
 
71
 
72
my $helpflags = "HELP=YES WINHELP=CHM";
72
my $helpflags = "HELP=YES WINHELP=CHM";
73
if($opt_docs) {
73
if($opt_docs) {
74
    if ($opt_docs eq "none") {
74
    if ($opt_docs eq "none") {
75
	$helpflags = "HELP=NO";
75
	$helpflags = "HELP=NO";
76
    } elsif ($opt_docs eq "normal") {
76
    } elsif ($opt_docs eq "normal") {
77
	$helpflags = "HELP=YES WINHELP=NO";
77
	$helpflags = "HELP=YES WINHELP=NO";
78
    } elsif ($opt_docs eq "chm"|| ($opt_docs eq "all")) {
78
    } elsif ($opt_docs eq "chm"|| ($opt_docs eq "all")) {
79
	$helpflags = "HELP=YES WINHELP=CHM";
79
	$helpflags = "HELP=YES WINHELP=CHM";
80
    } else {
80
    } else {
81
	die "ERROR: invalid --docs value `$opt_docs'\n";
81
	die "ERROR: invalid --docs value `$opt_docs'\n";
82
    }
82
    }
83
}
83
}
84
 
84
 
-
 
85
if((-e "$R_HOME/doc/html/R.css") && !(-e "$library/R.css")) {
-
 
86
    printf "installing R.css in $library\n";
-
 
87
    system("cp $R_HOME/doc/html/R.css $library/R.css");
-
 
88
}
-
 
89
 
85
## this is the main loop over all packages to be installed
90
## this is the main loop over all packages to be installed
86
my $pkg;
91
my $pkg;
87
foreach $pkg (@ARGV){
92
foreach $pkg (@ARGV){
88
    # remove misguided trailing separator (/ or \)
93
    # remove misguided trailing separator (/ or \)
89
    $pkg =~ s/\/$//; $pkg =~ s/\\$//;
94
    $pkg =~ s/\/$//; $pkg =~ s/\\$//;
90
    my $pkgname = basename($pkg);
95
    my $pkgname = basename($pkg);
91
    my $is_bundle = 0;
96
    my $is_bundle = 0;
92
    my $istar = 0;
97
    my $istar = 0;
93
 
98
 
94
    if (!(-e $pkg)) {
99
    if (!(-e $pkg)) {
95
	warn "`$pkg' does not exist: skipping\n";
100
	warn "`$pkg' does not exist: skipping\n";
96
	next;
101
	next;
97
    }
102
    }
98
 
103
 
99
## is this a tar archive?
104
## is this a tar archive?
100
    if($pkgname =~ /\.tar\.gz$/) {
105
    if($pkgname =~ /\.tar\.gz$/) {
101
	$pkgname =~ s/\.tar\.gz$//;
106
	$pkgname =~ s/\.tar\.gz$//;
102
	$pkgname =~ s/_[0-9\.-]*$//;
107
	$pkgname =~ s/_[0-9\.-]*$//;
103
	my $dir = "R.INSTALL";
108
	my $dir = "R.INSTALL";
104
	mkdir($dir, 755);
109
	mkdir($dir, 755);
105
	## workaround for paths in Cygwin tar
110
	## workaround for paths in Cygwin tar
106
	$pkg =~ s+^([A-Za-x]):+/cygdrive/\1+;
111
	$pkg =~ s+^([A-Za-x]):+/cygdrive/\1+;
107
	if(system("tar -zxf '$pkg' -C $dir")) {
112
	if(system("tar -zxf '$pkg' -C $dir")) {
108
	    die "Error: cannot untar the package\n";}
113
	    die "Error: cannot untar the package\n";}
109
	$pkg = $dir."/".$pkgname;
114
	$pkg = $dir."/".$pkgname;
110
	$istar = 1;
115
	$istar = 1;
111
    }
116
    }
112
 
117
 
113
    chdir($pkg) || die "Error: cannot change to directory \`$pkg'\n";;
118
    chdir($pkg) || die "Error: cannot change to directory \`$pkg'\n";;
114
    my $canonpkg = cwd();
119
    my $canonpkg = cwd();
115
    chdir("..");
120
    chdir("..");
116
    my $pkgdir = cwd();
121
    my $pkgdir = cwd();
117
    chdir($startdir);
122
    chdir($startdir);
118
 
123
 
119
    die "no valid package name found\n" unless length($pkgname) > 0;
124
    die "no valid package name found\n" unless length($pkgname) > 0;
120
    my $pkgoutdir = "$library/$pkgname";
125
    my $pkgoutdir = "$library/$pkgname";
121
    die "  *** can't install into source directory ***\n" 
126
    die "  *** can't install into source directory ***\n" 
122
	if $canonpkg eq $pkgoutdir;
127
	if $canonpkg eq $pkgoutdir;
123
    rmtree($pkgoutdir) if (-d $pkgoutdir);
128
    rmtree($pkgoutdir) if (-d $pkgoutdir);
124
    $pkgdir = Win32::GetShortPathName($pkgdir) if $pkgdir =~ / /;
129
    $pkgdir = Win32::GetShortPathName($pkgdir) if $pkgdir =~ / /;
125
 
130
 
126
    my $makecmd = "pkg";
131
    my $makecmd = "pkg";
127
    $makecmd = "pkgfake" if $opt_fake;
132
    $makecmd = "pkgfake" if $opt_fake;
128
    if(-r "$pkg/DESCRIPTION"){
133
    if(-r "$pkg/DESCRIPTION"){
129
	$description = new R::Dcf("$pkg/DESCRIPTION");
134
	$description = new R::Dcf("$pkg/DESCRIPTION");
130
    }
135
    }
131
    
136
    
132
    my $zippkgs = $pkgname;
137
    my $zippkgs = $pkgname;
133
    if($description->{"Contains"}) {
138
    if($description->{"Contains"}) {
134
	print "\nLooks like \`${pkg}' is a package bundle\n";
139
	print "\nLooks like \`${pkg}' is a package bundle\n";
135
	$makecmd = "bundle";
140
	$makecmd = "bundle";
136
	$is_bundle = 1;
141
	$is_bundle = 1;
137
	@bundlepkgs = split(/\s+/, $description->{"Contains"});
142
	@bundlepkgs = split(/\s+/, $description->{"Contains"});
138
	$zippkgs = join(" ", @bundlepkgs);
143
	$zippkgs = join(" ", @bundlepkgs);
139
    }
144
    }
140
    print "\n";
145
    print "\n";
141
 
146
 
142
    if($description->{"Depends"}) {
147
    if($description->{"Depends"}) {
143
	my $depends = $description->{"Depends"};
148
	my $depends = $description->{"Depends"};
144
	if($depends =~ /\bR *\(([^) ]+) *([^) ]+)\)/) { # regexp from check
149
	if($depends =~ /\bR *\(([^) ]+) *([^) ]+)\)/) { # regexp from check
145
            my $op = $1;
150
            my $op = $1;
146
            my $ver = $2; 
151
            my $ver = $2; 
147
	    my $Rversion = $ENV{'R_VERSION'};
152
	    my $Rversion = $ENV{'R_VERSION'};
148
	    if ($op eq ">=" && $ver) {
153
	    if ($op eq ">=" && $ver) {
149
		die "This R is version $Rversion\n".
154
		die "This R is version $Rversion\n".
150
		    "    package \`$pkgname' requires R $ver or later\n"
155
		    "    package \`$pkgname' requires R $ver or later\n"
151
			unless $Rversion ge $ver;
156
			unless $Rversion ge $ver;
152
	    } elsif ($op eq "<=" && $ver) {
157
	    } elsif ($op eq "<=" && $ver) {
153
		die "This R is version $Rversion\n".
158
		die "This R is version $Rversion\n".
154
		    "     package \`$pkgname' requires R $ver or earlier\n"
159
		    "     package \`$pkgname' requires R $ver or earlier\n"
155
			unless $Rversion le $ver;
160
			unless $Rversion le $ver;
156
	    } else {
161
	    } else {
157
		printf "unsupported operator in dependence \"$depends\"\n";
162
		printf "unsupported operator in dependence \"$depends\"\n";
158
	    }
163
	    }
159
        }
164
        }
160
    }
165
    }
161
 
166
 
162
    my $save = "CHECK";
167
    my $save = "CHECK";
163
    $save = "false" if $opt_no_save;
168
    $save = "false" if $opt_no_save;
164
    $save = "true" if $opt_save;
169
    $save = "true" if $opt_save;
165
    my $opt = "";
170
    my $opt = "";
166
    my $dpkg = $library. "/" . $pkgname;
171
    my $dpkg = $library. "/" . $pkgname;
167
    if($opt_with_package_versions) {
172
    if($opt_with_package_versions) {
168
        $dpkg = $dpkg . "_" . $description->{"Version"};
173
        $dpkg = $dpkg . "_" . $description->{"Version"};
169
    }
174
    }
170
    if(!$is_bundle) {
175
    if(!$is_bundle) {
171
        if($opt_auto_zip || $opt_build) {
176
        if($opt_auto_zip || $opt_build) {
172
	    my $dir = $pkgdir. "/" . $pkgname . "/data";
177
	    my $dir = $pkgdir. "/" . $pkgname . "/data";
173
	    if(-d $dir && 
178
	    if(-d $dir && 
174
	       $pkgname ne "RadioSonde" && $pkgname ne "dichromat"
179
	       $pkgname ne "RadioSonde" && $pkgname ne "dichromat"
175
	       && $pkgname ne "pls.pcr") {
180
	       && $pkgname ne "pls.pcr") {
176
		my $Rout = "datacnt";
181
		my $Rout = "datacnt";
177
		system("ls -s1 $dir > $Rout");
182
		system("ls -s1 $dir > $Rout");
178
		my $out, $nodups=1, $prev="";
183
		my $out, $nodups=1, $prev="";
179
		open ROUT, "< $Rout";
184
		open ROUT, "< $Rout";
180
		while(<ROUT>) {
185
		while(<ROUT>) {
181
		    if(/^total/) {
186
		    if(/^total/) {
182
			s/^total //;
187
			s/^total //;
183
			$out = $_;
188
			$out = $_;
184
		    } else {
189
		    } else {
185
			chomp;
190
			chomp;
186
			s/\s*[0-9]+\ //;
191
			s/\s*[0-9]+\ //;
187
			s/\.[a-zA-Z]+$//;
192
			s/\.[a-zA-Z]+$//;
188
			$nodups = 0 if $_ eq $prev;
193
			$nodups = 0 if $_ eq $prev;
189
			$prev = $_;
194
			$prev = $_;
190
		    }
195
		    }
191
		}
196
		}
192
		close ROUT;
197
		close ROUT;
193
		unlink $Rout;
198
		unlink $Rout;
194
		$opt = "$pkgname-ZIPDATA=zip" if $out > 100 && $nodups;
199
		$opt = "$pkgname-ZIPDATA=zip" if $out > 100 && $nodups;
195
	    }
200
	    }
196
	    $dir = $pkgdir. "/" . $pkgname . "/man";
201
	    $dir = $pkgdir. "/" . $pkgname . "/man";
197
	    if(-d $dir) {
202
	    if(-d $dir) {
198
		opendir(DIR, $dir) or die "cannot opendir $dir: $!";
203
		opendir(DIR, $dir) or die "cannot opendir $dir: $!";
199
		@files = grep{ /\.Rd$/ } readdir(DIR);
204
		@files = grep{ /\.Rd$/ } readdir(DIR);
200
		closedir(DIR);
205
		closedir(DIR);
201
		$opt = $opt . " $pkgname-HELP=ziponly" if @files > 20;
206
		$opt = $opt . " $pkgname-HELP=ziponly" if @files > 20;
202
	    }
207
	    }
203
	    print "Using auto-selected zip options '$opt'\n";
208
	    print "Using auto-selected zip options '$opt'\n";
204
        } else {
209
        } else {
205
            $opt = "$pkgname-ZIPDATA=zip" 
210
            $opt = "$pkgname-ZIPDATA=zip" 
206
		if ($opt_use_zip || $opt_use_zip_data);
211
		if ($opt_use_zip || $opt_use_zip_data);
207
            $opt = $opt . " $pkgname-HELP=ziponly"
212
            $opt = $opt . " $pkgname-HELP=ziponly"
208
		if ($opt_use_zip || $opt_use_zip_help);
213
		if ($opt_use_zip || $opt_use_zip_help);
209
        }
214
        }
210
    } else {
215
    } else {
211
        ## note: --auto-zip is not supported for bundles
216
        ## note: --auto-zip is not supported for bundles
212
        foreach $ppkg (@bundlepkgs) {
217
        foreach $ppkg (@bundlepkgs) {
213
	    $opt = $opt . " $ppkg-ZIPDATA=zip" if ($opt_use_zip || $opt_use_zip_data);
218
	    $opt = $opt . " $ppkg-ZIPDATA=zip" if ($opt_use_zip || $opt_use_zip_data);
214
	    $opt = $opt . " $ppkg-HELP=ziponly" if ($opt_use_zip || $opt_use_zip_help);
219
	    $opt = $opt . " $ppkg-HELP=ziponly" if ($opt_use_zip || $opt_use_zip_help);
215
	}
220
	}
216
    }
221
    }
217
    my $res = system("make --no-print-directory -C $R_HOME/src/gnuwin32 PKGDIR=$pkgdir RLIB=$library DPKG=$dpkg SAVE=$save $opt $helpflags $makecmd-$pkgname");
222
    my $res = system("make --no-print-directory -C $R_HOME/src/gnuwin32 PKGDIR=$pkgdir RLIB=$library DPKG=$dpkg SAVE=$save $opt $helpflags $makecmd-$pkgname");
218
    if($res) {
223
    if($res) {
219
	printf "*** Installation of $pkgname failed ***\n";
224
	printf "*** Installation of $pkgname failed ***\n";
220
    } else {
225
    } else {
221
        if($opt_build) {
226
        if($opt_build) {
222
	    my $filename = "${pkgname}_" . $description->{"Version"};
227
	    my $filename = "${pkgname}_" . $description->{"Version"};
223
	    chdir($library);
228
	    chdir($library);
224
	    $startdir = Win32::GetShortPathName($startdir) if $startdir =~ / /;
229
	    $startdir = Win32::GetShortPathName($startdir) if $startdir =~ / /;
225
	    system("rm -f  $startdir/$filename.zip");
230
	    system("rm -f  $startdir/$filename.zip");
226
	    system("zip -r9Xq $startdir/$filename.zip $zippkgs");
231
	    system("zip -r9Xq $startdir/$filename.zip $zippkgs");
227
	    if ($is_bundle) {
232
	    if ($is_bundle) {
228
		## Need to get the toplevel files in there
233
		## Need to get the toplevel files in there
229
		$currentDir = cwd();
234
		$currentDir = cwd();
230
		chdir($canonpkg);
235
		chdir($canonpkg);
231
		system("zip $startdir/$filename.zip $topLevelFiles");
236
		system("zip $startdir/$filename.zip $topLevelFiles");
232
		chdir($currentDir);
237
		chdir($currentDir);
233
	    }
238
	    }
234
	}
239
	}
235
    }
240
    }
236
 
241
 
237
    system("make --no-print-directory -C $R_HOME/src/gnuwin32 PKGDIR=$pkgdir RLIB=$library pkgclean-$pkgname") if ($opt_clean && $is_bundle == 0);
242
    system("make --no-print-directory -C $R_HOME/src/gnuwin32 PKGDIR=$pkgdir RLIB=$library pkgclean-$pkgname") if ($opt_clean && $is_bundle == 0);
238
 
243
 
239
    if($opt_clean && $is_bundle) {
244
    if($opt_clean && $is_bundle) {
240
	foreach $ppkg (@bundlepkgs) {
245
	foreach $ppkg (@bundlepkgs) {
241
	    system("make --no-print-directory -C $R_HOME/src/gnuwin32 PKGDIR=$pkgdir/$pkgname RLIB=$library pkgclean-$ppkg") 
246
	    system("make --no-print-directory -C $R_HOME/src/gnuwin32 PKGDIR=$pkgdir/$pkgname RLIB=$library pkgclean-$ppkg") 
242
	}
247
	}
243
 
248
 
244
    }
249
    }
245
    if ($istar > 0) {
250
    if ($istar > 0) {
246
	chdir($startdir);
251
	chdir($startdir);
247
	rmtree("R.INSTALL");
252
	rmtree("R.INSTALL");
248
    }
253
    }
249
    print("\n");
254
    print("\n");
250
    if(!$res) {print("\* DONE");}
255
    if(!$res) {print("\* DONE");}
251
}
256
}
252
 
257
 
253
if((-e "$R_HOME/doc/html/R.css") && !(-e "$library/R.css")) {
-
 
254
    printf "installing R.css in $library\n";
-
 
255
    system("cp $R_HOME/doc/html/R.css $library/R.css");
-
 
256
}
258
 
257
 
259
 
258
sub usage {
260
sub usage {
259
    print STDERR <<END;
261
    print STDERR <<END;
260
Usage: Rcmd $name [options] pkgs
262
Usage: Rcmd $name [options] pkgs
261
 
263
 
262
Install the add-on packages specified by pkgs into the default R library
264
Install the add-on packages specified by pkgs into the default R library
263
tree ($R_HOME/library) or the tree specified via \`--library'.  The
265
tree ($R_HOME/library) or the tree specified via \`--library'.  The
264
elements of pkgs can be relative or absolute paths to directories with
266
elements of pkgs can be relative or absolute paths to directories with
265
the package (bundle) sources, or to gzipped package \`tar' archives.
267
the package (bundle) sources, or to gzipped package \`tar' archives.
266
Then optionally pack the installed package into a zip file.
268
Then optionally pack the installed package into a zip file.
267
 
269
 
268
Options:
270
Options:
269
  -h, --help		print short help message and exit
271
  -h, --help		print short help message and exit
270
  -v, --version		print version info and exit
272
  -v, --version		print version info and exit
271
  -c, --clean		remove all files created during installation
273
  -c, --clean		remove all files created during installation
272
  -s, --save            Save the package source as an image file, and arrange for
274
  -s, --save            Save the package source as an image file, and arrange for
273
                        this file to be loaded when the library is attached.
275
                        this file to be loaded when the library is attached.
274
  --no-save             Do not save the package source as an image file.
276
  --no-save             Do not save the package source as an image file.
275
  -d, --debug		[x] turn on shell and build-help debugging
277
  -d, --debug		[x] turn on shell and build-help debugging
276
  -l, --library=LIB	install packages to library tree LIB
278
  -l, --library=LIB	install packages to library tree LIB
277
      --docs=TYPE	type(s) of documentation to build and install
279
      --docs=TYPE	type(s) of documentation to build and install
278
      --with-package-versions
280
      --with-package-versions
279
                        allow for multiple versions of the same package
281
                        allow for multiple versions of the same package
280
      --use-zip-data	collect data files in zip archive
282
      --use-zip-data	collect data files in zip archive
281
      --use-zip-help	collect help and examples into zip archives
283
      --use-zip-help	collect help and examples into zip archives
282
      --use-zip		combine \`--use-zip-data\' and \`--use-zip-help\'
284
      --use-zip		combine \`--use-zip-data\' and \`--use-zip-help\'
283
      --auto-zip	select whether to zip automatically
285
      --auto-zip	select whether to zip automatically
284
      --build		zip-up the installation. Implies --auto-zip
286
      --build		zip-up the installation. Implies --auto-zip
285
      --fake		do minimal install for testing purposes
287
      --fake		do minimal install for testing purposes
286
 
288
 
287
TYPE can be "none" or "normal" or "chm" (the default) or "all"
289
TYPE can be "none" or "normal" or "chm" (the default) or "all"
288
 
290
 
289
Report bugs to <r-bugs\@r-project.org>.
291
Report bugs to <r-bugs\@r-project.org>.
290
END
292
END
291
    exit 0;
293
    exit 0;
292
}
294
}