diff -r -w -u -x CVS -x '*.bak' CMake.orig/Source/cmake.cxx CMake/Source/cmake.cxx
--- CMake.orig/Source/cmake.cxx	2004-04-29 08:26:22.000000000 -0600
+++ CMake/Source/cmake.cxx	2004-04-30 17:20:58.000000000 -0600
@@ -265,7 +265,7 @@
 }
 
 // Parse the args
-void cmake::SetArgs(const std::vector<std::string>& args)
+void cmake::SetArgs(std::vector<std::string>& args)
 {
   m_Local = false;
   bool directoriesSet = false;
@@ -341,6 +341,32 @@
         this->SetGlobalGenerator(gen);
         }
       }
+	 else if(arg.find("@",0) == 0)
+	   {
+        std::string filename = arg.substr(1);
+        std::cout << "reading from " << filename << '\n';
+
+        filename = cmSystemTools::CollapseFullPath(filename.c_str());
+        cmSystemTools::ConvertToUnixSlashes(filename);
+		if(cmSystemTools::FileExists(filename.c_str()))
+        {
+        std::ifstream fin(filename.c_str());
+        std::string   next_filearg;
+        while (fin)
+          {
+          fin >> next_filearg;
+          if (!next_filearg.empty())
+            {
+            args.push_back(next_filearg);
+            }
+          }
+        }
+      else
+        {
+        cmSystemTools::Error("Could not open command line file",
+                             filename.c_str());
+        }
+      }
     // no option assume it is the path to the source
     else
       {
@@ -1139,7 +1165,7 @@
 }
 
 // handle a command line invocation
-int cmake::Run(const std::vector<std::string>& args, bool noconfigure)
+int cmake::Run(std::vector<std::string>& args, bool noconfigure)
 {
   // Process the arguments
   this->SetArgs(args);
diff -r -w -u -x CVS -x '*.bak' CMake.orig/Source/cmake.h CMake/Source/cmake.h
--- CMake.orig/Source/cmake.h	2004-04-26 09:23:06.000000000 -0600
+++ CMake/Source/cmake.h	2004-04-30 17:13:18.000000000 -0600
@@ -122,9 +122,9 @@
   /**
    * Handle a command line invocation of cmake.
    */
-  int Run(const std::vector<std::string>&args)
+  int Run(std::vector<std::string>&args)
     { return this->Run(args, false); }
-  int Run(const std::vector<std::string>&args, bool noconfigure);
+  int Run(std::vector<std::string>&args, bool noconfigure);
 
   /**
    * Generate the SourceFilesList from the SourceLists. This should only be
@@ -212,7 +212,7 @@
   void Usage(const char *program);
 
   ///! Parse command line arguments
-  void SetArgs(const std::vector<std::string>&);
+  void SetArgs(std::vector<std::string>&);
 
   ///! Is this cmake running as a result of a TRY_COMPILE command
   bool GetIsInTryCompile() { return m_InTryCompile; }
diff -r -w -u -x CVS -x '*.bak' CMake.orig/Source/cmakewizard.cxx CMake/Source/cmakewizard.cxx
--- CMake.orig/Source/cmakewizard.cxx	2003-08-26 13:06:52.000000000 -0600
+++ CMake/Source/cmakewizard.cxx	2004-04-29 19:36:48.000000000 -0600
@@ -89,7 +89,7 @@
 
 
 
-int cmakewizard::RunWizard(std::vector<std::string> const& args)
+int cmakewizard::RunWizard(std::vector<std::string>& args)
 {
   m_ShowAdvanced = this->AskAdvanced();
   cmSystemTools::DisableRunCommandOutput();
diff -r -w -u -x CVS -x '*.bak' CMake.orig/Source/cmakewizard.h CMake/Source/cmakewizard.h
--- CMake.orig/Source/cmakewizard.h	2003-08-26 13:06:52.000000000 -0600
+++ CMake/Source/cmakewizard.h	2004-04-29 19:37:04.000000000 -0600
@@ -38,7 +38,7 @@
    *  Run cmake in wizard mode.  This will coninue to ask the user questions 
    *  until there are no more entries in the cache.
    */
-  int RunWizard(std::vector<std::string>const& args);
+  int RunWizard(std::vector<std::string>& args);
   
 private:
   bool m_ShowAdvanced;
