These files are shell and perl scripts used for configuring/building R.
They are not required at run time, and hence not installed.

The files are as follows.

  config.guess
  config.sub
	auxiliary scripts for configure.
	From https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD etc

  config.rpath
	from gettext 1.18.1.1 sources.  Modified here to allow for FreeBSD 10.x.

  install-sh
  mdate-sh
  missing
	standard tools from GNU autoconf.  Taken from the autoconf CVS
	(pserver:anoncvs@subversions.gnu.org:/cvsroot/autoconf, module 
	'autoconf').
	install-sh may be set by configure as a substitute for the
	'install' program.  
	missing may be set by configure as a substitute for various GNU programs.
	mdate-sh is not currently used.

  GETCONFIG
	create API 'Rconfig.h' from the configure information in
	'config.h'.
  GETDISTNAME
	get the name of the distribution tarball.
  GETMAKEVAL
	get the value of a Make variable from a Makefile [this needs to
	be improved].  Used by configure.
  GETVERSION
	create API 'Rversion.h' from 'VERSION' and 'SVN-REVISION'.
  
  copy-if-change
	copy a file if changed; otherwise, do nothing.

  getsp.java
	Java source for share/java/getsp.class used for extracting
	system properties when detecting Java support in R CMD
	javareconf.  We don't require the existence of a Java
	compiler, so we need to supply the compiled version as well.

  help2man.pl
	generate simple manual pages from program output.  Taken from
	the GNU help2man package (ftp://ftp.gnu.org/gnu/help2man/).
	Used for a maintainer-mode build only: requires Perl.
	
  install-info.pl
	create or update entry in Info directory.  Taken from the Debian
	GNU/Linux stable distribution in 2001.  Only used if a suitable
	install-info program is not found: requires Perl.
	
  ldAIX4
	writes an export file, assembling the exported symbols by
	reading the output of nm.  This file is needed on AIX (4.2 and
	later) to compile shared libs.

  link-recommended
	create links with simplified names to the recommended packages.

  ltmain.sh
	provide generalized library-building support services.  Taken
	from Libtool 2.2.6a.

  move-if-change
	move a file if changed; otherwise, remove.

  rsync-recommended
	obtain sources for the recommended packages using rsync, and then
	create links with simplified names to these.

  updatefat
	updates a fat file by adding a new architecture (macOS only)
	it is essentially a smart wrapper for "lipo".  (No longer used.)

GETCONFIG, GETVERSION, copy-if-change and move-if-change are used on Windows,
and require cmp, cp, echo, expr, grep, mv and sed.
