patch 8.0.1554: custom plugins loaded with --clean

Problem:    Custom plugins loaded with --clean.
Solution:   Do not include the home directory in 'runtimepath'.
diff --git a/src/main.c b/src/main.c
index 78a3018..cf937a3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -158,18 +158,25 @@
 
 #ifdef STARTUPTIME
     /* Need to find "--startuptime" before actually parsing arguments. */
-    for (i = 1; i < argc; ++i)
-    {
-	if (STRICMP(argv[i], "--startuptime") == 0 && i + 1 < argc)
+    for (i = 1; i < argc - 1; ++i)
+	if (STRICMP(argv[i], "--startuptime") == 0)
 	{
 	    time_fd = mch_fopen(argv[i + 1], "a");
 	    TIME_MSG("--- VIM STARTING ---");
 	    break;
 	}
-    }
 #endif
     starttime = time(NULL);
 
+#ifdef CLEAN_RUNTIMEPATH
+    /* Need to find "--clean" before actually parsing arguments. */
+    for (i = 1; i < argc; ++i)
+	if (STRICMP(argv[i], "--clean") == 0)
+	{
+	    params.clean = TRUE;
+	    break;
+	}
+#endif
     common_init(&params);
 
 #ifdef FEAT_CLIENTSERVER
@@ -1024,7 +1031,7 @@
      * First find out the home directory, needed to expand "~" in options.
      */
     init_homedir();		/* find real value of $HOME */
-    set_init_1();
+    set_init_1(paramp->clean);
     TIME_MSG("inits 1");
 
 #ifdef FEAT_EVAL
@@ -1903,6 +1910,7 @@
 		else if (STRNICMP(argv[0] + argv_idx, "clean", 5) == 0)
 		{
 		    parmp->use_vimrc = (char_u *)"DEFAULTS";
+		    parmp->clean = TRUE;
 		    set_option_value((char_u *)"vif", 0L, (char_u *)"NONE", 0);
 		}
 		else if (STRNICMP(argv[0] + argv_idx, "literal", 7) == 0)
diff --git a/src/option.c b/src/option.c
index 9662039..1b51447 100644
--- a/src/option.c
+++ b/src/option.c
@@ -3345,9 +3345,10 @@
  * Initialize the options, first part.
  *
  * Called only once from main(), just after creating the first buffer.
+ * If "clean_arg" is TRUE Vim was started with --clean.
  */
     void
-set_init_1(void)
+set_init_1(int clean_arg)
 {
     char_u	*p;
     int		opt_idx;
@@ -3554,6 +3555,24 @@
      */
     set_options_default(0);
 
+#ifdef CLEAN_RUNTIMEPATH
+    if (clean_arg)
+    {
+	opt_idx = findoption((char_u *)"runtimepath");
+	if (opt_idx >= 0)
+	{
+	    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)CLEAN_RUNTIMEPATH;
+	    p_rtp = (char_u *)CLEAN_RUNTIMEPATH;
+	}
+	opt_idx = findoption((char_u *)"packpath");
+	if (opt_idx >= 0)
+	{
+	    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)CLEAN_RUNTIMEPATH;
+	    p_pp = (char_u *)CLEAN_RUNTIMEPATH;
+	}
+    }
+#endif
+
 #ifdef FEAT_GUI
     if (found_reverse_arg)
 	set_option_value((char_u *)"bg", 0L, (char_u *)"dark", 0);
diff --git a/src/os_amiga.h b/src/os_amiga.h
index 5154e28..336cbdb 100644
--- a/src/os_amiga.h
+++ b/src/os_amiga.h
@@ -43,6 +43,9 @@
 #ifndef	DFLT_RUNTIMEPATH
 # define DFLT_RUNTIMEPATH "home:vimfiles,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,home:vimfiles/after"
 #endif
+#ifndef	CLEAN_RUNTIMEPATH
+# define CLEAN_RUNTIMEPATH "$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after"
+#endif
 
 #ifndef	BASENAMELEN
 # define BASENAMELEN	26	/* Amiga */
diff --git a/src/os_dos.h b/src/os_dos.h
index 0edc3e0..bb8b308 100644
--- a/src/os_dos.h
+++ b/src/os_dos.h
@@ -125,6 +125,7 @@
 
 #define DFLT_ERRORFILE		"errors.err"
 #define DFLT_RUNTIMEPATH	"$HOME/vimfiles,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/vimfiles/after"
+#define CLEAN_RUNTIMEPATH	"$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after"
 
 #define CASE_INSENSITIVE_FILENAME   /* ignore case when comparing file names */
 #define SPACE_IN_FILENAME
diff --git a/src/os_mac.h b/src/os_mac.h
index 9fc2f92..f1c7cb7 100644
--- a/src/os_mac.h
+++ b/src/os_mac.h
@@ -215,6 +215,9 @@
 #ifndef DFLT_RUNTIMEPATH
 # define DFLT_RUNTIMEPATH	"~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after"
 #endif
+#ifndef CLEAN_RUNTIMEPATH
+# define CLEAN_RUNTIMEPATH	"$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after"
+#endif
 
 /*
  * Macintosh has plenty of memory, use large buffers
diff --git a/src/os_unix.h b/src/os_unix.h
index 695affa..4146529 100644
--- a/src/os_unix.h
+++ b/src/os_unix.h
@@ -366,11 +366,14 @@
 
 #ifdef VMS
 # define DFLT_RUNTIMEPATH      "sys$login:vimfiles,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,sys$login:vimfiles/after"
+# define CLEAN_RUNTIMEPATH      "$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after"
 #else
 # ifdef RUNTIME_GLOBAL
 #  define DFLT_RUNTIMEPATH	"~/.vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL "/after,~/.vim/after"
+#  define CLEAN_RUNTIMEPATH	RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL "/after"
 # else
 #  define DFLT_RUNTIMEPATH	"~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after"
+#  define CLEAN_RUNTIMEPATH	"$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after"
 # endif
 #endif
 
diff --git a/src/proto/option.pro b/src/proto/option.pro
index 59dcd42..60a45e6 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -1,5 +1,5 @@
 /* option.c */
-void set_init_1(void);
+void set_init_1(int clean_arg);
 void set_string_default(char *name, char_u *val);
 void set_number_default(char *name, long val);
 void free_all_options(void);
diff --git a/src/structs.h b/src/structs.h
index 4f6a196..fe8c036 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -3333,6 +3333,7 @@
 
     int		evim_mode;		/* started as "evim" */
     char_u	*use_vimrc;		/* vimrc from -u argument */
+    int		clean;			/* --clean argument */
 
     int		n_commands;		     /* no. of commands from + or -c */
     char_u	*commands[MAX_ARG_CMDS];     /* commands from + or -c arg. */
diff --git a/src/version.c b/src/version.c
index 5f66464..e890d11 100644
--- a/src/version.c
+++ b/src/version.c
@@ -779,6 +779,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1554,
+/**/
     1553,
 /**/
     1552,