Rollback of commit ae5f442e9cf3ef6578e70104af7cb2a2288b9fb8.

*** Reason for rollback ***

This is causing segfaults.

*** Original change description ***

Remove copy ctor and operator= from BlazeStartupOptions

--
MOS_MIGRATED_REVID=104726824
diff --git a/src/main/cpp/blaze_startup_options.h b/src/main/cpp/blaze_startup_options.h
index f1ea545..f29ab3f 100644
--- a/src/main/cpp/blaze_startup_options.h
+++ b/src/main/cpp/blaze_startup_options.h
@@ -15,16 +15,18 @@
 #define BAZEL_SRC_MAIN_CPP_BLAZE_STARTUP_OPTIONS_H_
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
-#include "src/main/cpp/extra_startup_options.h"
 #include "src/main/cpp/util/exit_code.h"
 
 namespace blaze {
 
 using std::string;
 
+struct StartupOptions;
+
 // This class holds the parsed startup options for Blaze.
 // These options and their defaults must be kept in sync with those
 // in java/com/google/devtools/build/lib/blaze/BlazeServerStartupOptions.
@@ -38,6 +40,9 @@
 class BlazeStartupOptions {
  public:
   BlazeStartupOptions();
+  BlazeStartupOptions(const BlazeStartupOptions &rhs);
+  ~BlazeStartupOptions();
+  BlazeStartupOptions& operator=(const BlazeStartupOptions &rhs);
 
   // Returns the capitalized name of this binary.
   string GetProductName();
@@ -158,8 +163,9 @@
   std::map<string, string> option_sources;
 
   // This can be used for site-specific startup options. For Bazel, this is
-  // stubbed out.
-  ExtraStartupOptions extra_options;
+  // stubbed
+  // out.
+  std::unique_ptr<StartupOptions> extra_options;
 
   // Given the working directory, returns the nearest enclosing directory with a
   // WORKSPACE file in it.  If there is no such enclosing directory, returns "".
@@ -198,6 +204,14 @@
  private:
   string host_javabase;
 
+  // Sets default values for members.
+  void Init();
+
+  // Copies member variables from rhs to lhs. This cannot use the compiler-
+  // generated copy constructor because extra_options is a unique_ptr and
+  // unique_ptr deletes its copy constructor.
+  void Copy(const BlazeStartupOptions &rhs, BlazeStartupOptions *lhs);
+
   // Returns the directory to use for storing outputs.
   string GetOutputRoot();
 };