Changeset 565 for CMT/HEAD/source
- Timestamp:
- Apr 13, 2011, 1:28:08 PM (13 years ago)
- Location:
- CMT/HEAD/source
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
CMT/HEAD/source/cmt.h
r561 r565 233 233 static void get_cmt_flags (CmtSystem::cmt_string_vector& flags); 234 234 static cmt_string get_cmt_flags (); 235 static cmt_string get_cmt_flags (const cmt_string& file_name); 235 236 static bool set_cmt_flags (const cmt_string& flags); 236 237 static bool add_cmt_flag (const cmt_string& flag); … … 241 242 static void install_cleanup_scripts (); 242 243 static void install_setup_scripts (); 244 static void install_scripts (ScriptType type, const cmt_string& flags); 243 245 static void install_native_version_file (); 244 static void install_test_cleanup_scripts ();245 static void install_test_setup_scripts ();246 246 // static bool load (const cmt_string& path, 247 247 static bool load (const ArgParser& ap, -
CMT/HEAD/source/cmt_awk.cxx
r542 r565 462 462 cmt_string text; 463 463 464 text.read (file_name);464 if (!text.read (file_name)) return (failed); 465 465 466 466 return (Awk::run (text, pattern)); … … 478 478 cmt_string text; 479 479 480 text.read (file_name);480 if (!text.read (file_name)) return (failed); 481 481 482 482 return (Awk::run (text, expression)); -
CMT/HEAD/source/cmt_commands.cxx
r562 r565 2193 2193 { 2194 2194 cmt.m_use_cmt = true; 2195 if (!Cmt::add_cmt_flag ("-with_cmt")) 2196 CmtMessage::error ("Cannot add flag `-with_cmt'"); 2195 2197 } 2196 2198 … … 2198 2200 { 2199 2201 cmt.m_use_cmt = false; 2202 if (!Cmt::add_cmt_flag ("-without_cmt")) 2203 CmtMessage::error ("Cannot add flag `-without_cmt'"); 2200 2204 } 2201 2205 -
CMT/HEAD/source/cmt_install_area.cxx
r459 r565 197 197 cmt_string installarea; 198 198 199 const cmt_string pwd = CmtSystem::pwd (); 200 201 installarea = Project::find_in_cmt_paths (pwd); 199 const Use& use = Use::current (); 200 cmt_string current_path (use.real_path); 201 if (!use.located ()) 202 { 203 CmtMessage::verbose ("build_current_installarea: Current use not located"); 204 current_path = CmtSystem::pwd (); 205 } 206 //const cmt_string pwd = CmtSystem::pwd (); 207 208 installarea = Project::find_in_cmt_paths (current_path); 209 //installarea = Project::find_in_cmt_paths (pwd); 202 210 203 211 return (installarea); -
CMT/HEAD/source/cmt_parser.cxx
r564 r565 2826 2826 if (Me.m_current_package == "methods") return; 2827 2827 2828 cmt_string file_name; 2829 if (strlen (ap.extra_file.c_str ()) == 0) 2830 file_name = "requirements"; 2831 else 2832 file_name = ap.extra_file; 2833 cmt_string cmtflags (get_cmt_flags (file_name)); 2834 2835 if (strlen (ap.extra_file.c_str ()) != 0) 2836 cmtflags += " -f=" + file_name; 2837 cmt_string flags (get_cmt_flags ()); 2838 if (flags.size () != 0) 2839 cmtflags += " " + flags; 2840 2828 2841 cmt_string branch; 2829 2842 … … 2848 2861 } 2849 2862 2850 install_setup_scripts ();2851 install_cleanup_scripts ();2852 //install_ test_setup_scripts ();2853 //install_ test_cleanup_scripts ();2863 install_scripts (SetupScript, cmtflags); 2864 install_scripts (CleanupScript, cmtflags); 2865 //install_setup_scripts (); 2866 //install_cleanup_scripts (); 2854 2867 2855 2868 Generator::build_default_makefile (); … … 2959 2972 */ 2960 2973 Me.m_quiet = true; 2961 install_setup_scripts (); 2962 install_cleanup_scripts (); 2974 install_scripts (SetupScript, cmtflags); 2975 install_scripts (CleanupScript, cmtflags); 2976 //install_setup_scripts (); 2977 //install_cleanup_scripts (); 2963 2978 install_native_version_file (); 2964 2979 … … 3024 3039 if (Me.m_current_package == "methods") return; 3025 3040 3041 cmt_string file_name; 3042 if (strlen (ap.extra_file.c_str ()) == 0) 3043 file_name = "requirements"; 3044 else 3045 file_name = ap.extra_file; 3046 cmt_string cmtflags (get_cmt_flags (file_name)); 3047 3048 if (strlen (ap.extra_file.c_str ()) != 0) 3049 cmtflags += " -f=" + file_name; 3050 cmt_string flags (get_cmt_flags ()); 3051 if (flags.size () != 0) 3052 cmtflags += " " + flags; 3053 3026 3054 cmt_string branch; 3027 3055 … … 3045 3073 cout << "------------------------------------------" << endl; 3046 3074 } 3047 install_setup_scripts ();3048 install_cleanup_scripts ();3049 //install_ test_setup_scripts ();3050 //install_ test_cleanup_scripts ();3075 install_scripts (SetupScript, cmtflags); 3076 install_scripts (CleanupScript, cmtflags); 3077 //install_setup_scripts (); 3078 //install_cleanup_scripts (); 3051 3079 3052 3080 Generator::build_default_makefile (); … … 3072 3100 // Generator::build_default_makefile (); 3073 3101 3102 /* 3074 3103 CmtSystem::cd (".."); 3075 3104 CmtSystem::cd (branch); … … 3095 3124 return; 3096 3125 } 3097 3098 install_setup_scripts (); 3099 install_cleanup_scripts (); 3126 */ 3127 Me.m_quiet = true; 3128 install_scripts (SetupScript, cmtflags); 3129 install_scripts (CleanupScript, cmtflags); 3130 //install_setup_scripts (); 3131 //install_cleanup_scripts (); 3100 3132 3101 3133 Generator::build_default_makefile (); … … 4109 4141 cout << "<setup>"; 4110 4142 break; 4143 case Requirements : 4144 CmtSystem::cmt_string_vector flags; 4145 get_cmt_flags (flags); 4146 cout << "\n# CMTFLAGS: -without_cmt"; 4147 for (int i = 0; i < flags.size (); i++) 4148 { 4149 if (flags[i] == "-without_cmt") 4150 cout << " -with_cmt"; 4151 else if (flags[i] == "-with_cmt") 4152 cout << " -without_cmt"; 4153 else 4154 cout << " " << flags[i]; 4155 } 4156 cout << endl; 4157 break; 4111 4158 } 4112 4159 print (ap.mode); … … 5057 5104 5058 5105 //---------------------------------------------------------- 5106 class CmtFlagsReader : public FAwk 5107 { 5108 public: 5109 5110 CmtFlagsReader () 5111 { } 5112 5113 CmtFlagsReader (const cmt_string& pattern) 5114 : m_pattern (pattern) 5115 { m_condition = ok; } 5116 5117 const cmt_string& get_pattern () const 5118 { 5119 return (m_pattern); 5120 } 5121 5122 const cmt_string& get_cmt_flags () const 5123 { 5124 return (m_cmt_flags); 5125 } 5126 5127 void filter (const cmt_string& line) 5128 { 5129 int p (line.find (m_pattern)); 5130 if (p == cmt_string::npos) return; 5131 if (m_cmt_flags.size () != 0) 5132 m_cmt_flags += " " + line.substr (p + m_pattern.size ()); 5133 else 5134 m_cmt_flags = line.substr (p + m_pattern.size ()); 5135 //stop (); 5136 } 5137 5138 private: 5139 const cmt_string m_pattern; 5140 cmt_string m_cmt_flags; 5141 }; 5142 5143 //---------------------------------------------------------- 5144 cmt_string Cmt::get_cmt_flags (const cmt_string& file_name) 5145 { 5146 cmt_string result; 5147 CmtFlagsReader reader ("CMTFLAGS:"); 5148 Awk::condition c = reader.run (file_name, reader.get_pattern ()); 5149 if (Awk::failed != c) 5150 result = reader.get_cmt_flags (); 5151 else 5152 CmtError::set (CmtError::file_access_error, file_name); 5153 return result; 5154 } 5155 5156 //---------------------------------------------------------- 5059 5157 bool Cmt::set_cmt_flags (const cmt_string& cmtflags) 5060 5158 { … … 5254 5352 5255 5353 //---------------------------------------------------------- 5256 // Mangle text so that it consists solely of5257 // letters, numbers, and underscores5258 // (any other characters are replaced with X).5259 // Then text, prefixed with a letter or underscore,5260 // can be used as shell variable name5261 //----------------------------------------------------------5262 static cmt_string mangle (const cmt_string& text)5263 {5264 cmt_string result;5265 int allocated = text.size ();5266 char* const buffer = (char*) malloc (allocated + 1);5267 char* b (buffer);5268 const char* t = text.c_str ();5269 while (*t)5270 {5271 if (isalnum (*t) || *t == '_')5272 *b++ = *t++;5273 else5274 {5275 *b++ = 'X'; t++;5276 }5277 }5278 *b = '\0';5279 result = buffer;5280 free (buffer);5281 return result;5282 }5283 5284 //----------------------------------------------------------5285 5354 void Cmt::install_cleanup_scripts () 5286 5355 { … … 5322 5391 cmt_string version = Me.m_current_version; 5323 5392 if (version == "v*") version = ""; 5324 cmt_string mangled_package = mangle (Me.m_current_package);5393 cmt_string mangled_package = CmtSystem::mangle (Me.m_current_package); 5325 5394 5326 5395 for (i = 0; i < modes; i++) … … 5479 5548 cmt_string version = Me.m_current_version; 5480 5549 if (version == "v*") version = ""; 5481 cmt_string mangled_package = mangle (Me.m_current_package);5550 cmt_string mangled_package = CmtSystem::mangle (Me.m_current_package); 5482 5551 5483 5552 for (i = 0; i < modes; i++) … … 5609 5678 5610 5679 //---------------------------------------------------------- 5611 void Cmt::install_ test_cleanup_scripts ()5680 void Cmt::install_scripts (ScriptType type, const cmt_string& flags) 5612 5681 { 5613 5682 #ifdef WIN32 … … 5622 5691 5623 5692 Use& current_use = Use::current (); 5624 5693 const cmt_string action = (SetupScript == type ? "setup" : "cleanup"); 5625 5694 if (!current_use.get_strategy ("SetupScripts")) 5626 5695 { 5627 5696 for (int i = 0; i < modes; i++) 5628 5697 { 5629 cmt_string old_file_name = "cleanup"; 5698 cmt_string old_file_name (action); 5699 //cmt_string old_file_name = "setup"; 5630 5700 old_file_name += "."; 5631 5701 old_file_name += suffix[i]; … … 5633 5703 { 5634 5704 if (CmtMessage::active (Error)) 5635 cerr << "Removing cleanup script " + old_file_name << endl; 5705 cerr << "Removing " + action + " script " + old_file_name << endl; 5706 //cerr << "Removing setup script " + old_file_name << endl; 5636 5707 CmtSystem::remove_file (old_file_name); 5637 5708 } … … 5641 5712 5642 5713 if (CmtMessage::active (Error)) 5643 cerr << "Creating cleanup scripts." << endl; 5644 5645 cmt_string temp; 5646 int i; 5714 cerr << "Creating " + action + " scripts." << endl; 5715 //cerr << "Creating setup scripts." << endl; 5716 5717 cmt_string no_cleanup_opt; 5718 5719 if (SetupScript == type) 5720 if (current_use.get_strategy ("SetupCleanup")) 5721 { 5722 no_cleanup_opt = " -no_cleanup"; 5723 } 5724 5725 no_cleanup_opt = flags + no_cleanup_opt; 5647 5726 5648 5727 cmt_string version = Me.m_current_version; 5649 5728 if (version == "v*") version = ""; 5650 cmt_string mangled_package = mangle (Me.m_current_package); 5651 5652 for (i = 0; i < modes; i++) 5653 { 5654 cmt_string file_name = "cleanup"; 5729 cmt_string mangled_package = CmtSystem::mangle (Me.m_current_package); 5730 5731 for (int i = 0; i < modes; i++) 5732 { 5733 cmt_string file_name = action; 5734 //cmt_string file_name = "setup"; 5655 5735 file_name += "."; 5656 5736 file_name += suffix[i]; … … 5663 5743 if (mode[i] == Csh) 5664 5744 { 5745 //fprintf (f, "# echo \"Setting %s %s in %s\"\n", 5746 fprintf (f, "# echo \"%s %s %s in %s\"\n", 5747 action.c_str (), 5748 Me.m_current_package.c_str (), 5749 version.c_str (), 5750 Me.m_current_path.c_str ()); 5751 fprintf (f, "\n"); 5752 5665 5753 fprintf (f, "if ( $?CMTROOT == 0 ) then\n"); 5666 5754 fprintf (f, " setenv CMTROOT %s\n", Me.m_cmt_root.c_str ()); … … 5669 5757 fprintf (f, "set cmt%stempfile=`${CMTROOT}/mgr/cmt -quiet build temporary_name`\n", mangled_package.c_str ()); 5670 5758 fprintf (f, "if $status != 0 then\n set cmt%stempfile=/tmp/cmt.$$\nendif\n", mangled_package.c_str ()); 5671 fprintf (f, "${CMTROOT}/mgr/cmt cleanup -%s -pack=cmt_standalone -path=%s $* >${cmt%stempfile}\n", 5672 suffix[i].c_str (), 5673 Me.m_current_path.c_str (), mangled_package.c_str ()); 5759 //fprintf (f, "${CMTROOT}/mgr/cmt setup -%s " 5760 fprintf (f, "${CMTROOT}/mgr/cmt %s -%s " 5761 "-pack=%s -version=%s -path=%s %s $* >${cmt%stempfile}\n", 5762 action.c_str (), 5763 suffix[i].c_str (), 5764 Me.m_current_package.c_str (), 5765 version.c_str (), 5766 Me.m_current_path.c_str (), 5767 no_cleanup_opt.c_str (), 5768 mangled_package.c_str ()); 5674 5769 fprintf (f, 5675 5770 "if ( $status != 0 ) then\n" 5676 " echo \"${CMTROOT}/mgr/cmt cleanup-%s "5677 "-pack=cmt_standalone -path=%s $* >${cmt%stempfile}\"\n"5678 " set cmt cleanupstatus=2\n"5771 " echo \"${CMTROOT}/mgr/cmt %s -%s " 5772 "-pack=%s -version=%s -path=%s %s $* >${cmt%stempfile}\"\n" 5773 " set cmt%sstatus=2\n" 5679 5774 " /bin/rm -f ${cmt%stempfile}\n" 5680 5775 " unset cmt%stempfile\n" 5681 " exit $cmt cleanupstatus\n"5776 " exit $cmt%sstatus\n" 5682 5777 "endif\n" 5683 "set cmt cleanupstatus=0\n"5778 "set cmt%sstatus=0\n" 5684 5779 "source ${cmt%stempfile}\n" 5685 5780 "if ( $status != 0 ) then\n" 5686 " set cmt cleanupstatus=2\n"5781 " set cmt%sstatus=2\n" 5687 5782 "endif\n" 5688 5783 "/bin/rm -f ${cmt%stempfile}\n" 5689 5784 "unset cmt%stempfile\n" 5690 "exit $cmtcleanupstatus\n", 5785 "exit $cmt%sstatus\n", 5786 action.c_str (), 5691 5787 suffix[i].c_str (), 5692 Me.m_current_path.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str ()); 5788 Me.m_current_package.c_str (), 5789 version.c_str (), 5790 Me.m_current_path.c_str (), 5791 no_cleanup_opt.c_str (), mangled_package.c_str (), 5792 action.c_str (), 5793 mangled_package.c_str (), 5794 mangled_package.c_str (), 5795 action.c_str (), 5796 action.c_str (), 5797 mangled_package.c_str (), 5798 action.c_str (), 5799 mangled_package.c_str (), 5800 mangled_package.c_str (), 5801 action.c_str ()); 5693 5802 } 5694 5803 else if (mode[i] == Sh) 5695 5804 { 5805 //fprintf (f, "# echo \"Setting %s %s in %s\"\n", 5806 fprintf (f, "# echo \"%s %s %s in %s\"\n", 5807 action.c_str (), 5808 Me.m_current_package.c_str (), 5809 version.c_str (), 5810 Me.m_current_path.c_str ()); 5811 fprintf (f, "\n"); 5812 5696 5813 fprintf (f, "if test \"${CMTROOT}\" = \"\"; then\n"); 5697 5814 fprintf (f, " CMTROOT=%s; export CMTROOT\n", Me.m_cmt_root.c_str ()); … … 5700 5817 fprintf (f, "cmt%stempfile=`${CMTROOT}/mgr/cmt -quiet build temporary_name`\n", mangled_package.c_str ()); 5701 5818 fprintf (f, "if test ! $? = 0 ; then cmt%stempfile=/tmp/cmt.$$; fi\n", mangled_package.c_str ()); 5702 fprintf (f, "${CMTROOT}/mgr/cmt cleanup -%s -pack=cmt_standalone -path=%s $* >${cmt%stempfile}\n", 5703 suffix[i].c_str (), 5704 Me.m_current_path.c_str (), mangled_package.c_str ()); 5819 //fprintf (f, "${CMTROOT}/mgr/cmt setup -%s " 5820 fprintf (f, "${CMTROOT}/mgr/cmt %s -%s " 5821 "-pack=%s -version=%s -path=%s %s $* >${cmt%stempfile}\n", 5822 action.c_str (), 5823 suffix[i].c_str (), 5824 Me.m_current_package.c_str (), 5825 version.c_str (), 5826 Me.m_current_path.c_str (), 5827 no_cleanup_opt.c_str (), 5828 mangled_package.c_str ()); 5705 5829 fprintf (f, 5706 5830 "if test $? != 0 ; then\n" 5707 " echo >&2 \"${CMTROOT}/mgr/cmt cleanup-%s "5708 "-pack=cmt_standalone -path=%s $* >${cmt%stempfile}\"\n"5709 " cmt cleanupstatus=2\n"5831 " echo >&2 \"${CMTROOT}/mgr/cmt %s -%s " 5832 "-pack=%s -version=%s -path=%s %s $* >${cmt%stempfile}\"\n" 5833 " cmt%sstatus=2\n" 5710 5834 " /bin/rm -f ${cmt%stempfile}\n" 5711 5835 " unset cmt%stempfile\n" 5712 " return $cmt cleanupstatus\n"5836 " return $cmt%sstatus\n" 5713 5837 "fi\n" 5714 "cmt cleanupstatus=0\n"5838 "cmt%sstatus=0\n" 5715 5839 ". ${cmt%stempfile}\n" 5716 5840 "if test $? != 0 ; then\n" 5717 " cmt cleanupstatus=2\n"5841 " cmt%sstatus=2\n" 5718 5842 "fi\n" 5719 5843 "/bin/rm -f ${cmt%stempfile}\n" 5720 5844 "unset cmt%stempfile\n" 5721 "return $cmtcleanupstatus\n", 5845 "return $cmt%sstatus\n", 5846 action.c_str (), 5722 5847 suffix[i].c_str (), 5723 Me.m_current_path.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str ()); 5848 Me.m_current_package.c_str (), 5849 version.c_str (), 5850 Me.m_current_path.c_str (), 5851 no_cleanup_opt.c_str (), mangled_package.c_str (), 5852 action.c_str (), 5853 mangled_package.c_str (), 5854 mangled_package.c_str (), 5855 action.c_str (), 5856 action.c_str (), 5857 mangled_package.c_str (), 5858 action.c_str (), 5859 mangled_package.c_str (), 5860 mangled_package.c_str (), 5861 action.c_str ()); 5724 5862 } 5725 5863 else if (mode[i] == Bat) 5726 5864 { 5865 //fprintf (f, "rem Setting %s %s in %%~d0%%~p0\n", 5866 fprintf (f, "rem %s %s %s in %%~d0%%~p0\n", 5867 action.c_str (), 5868 Me.m_current_package.c_str (), 5869 version.c_str ()); 5727 5870 dos_script_prefix (f, Me.m_cmt_root, 5728 "cmt_standalone", "cmt_standalone", "", Me.m_current_path, 5729 "cleanup"); 5871 Me.m_current_package, mangled_package, version, Me.m_current_path, 5872 action, no_cleanup_opt); 5873 //"setup", no_cleanup_opt); 5730 5874 } 5731 5875 … … 5735 5879 // fclose (f); 5736 5880 5737 cmt_string old_file_name = "cleanup"; 5881 cmt_string old_file_name = action; 5882 //cmt_string old_file_name = "setup"; 5738 5883 old_file_name += "."; 5739 5884 old_file_name += suffix[i]; … … 5779 5924 } 5780 5925 } 5781 }5782 //----------------------------------------------------------5783 void Cmt::install_test_setup_scripts ()5784 {5785 #ifdef WIN325786 static const int modes = 1;5787 static const cmt_string suffix[1] = {"bat"};5788 static const PrintMode mode[1] = {Bat};5789 #else5790 static const int modes = 2;5791 static const cmt_string suffix[2] = {"csh", "sh"};5792 static const PrintMode mode[2] = {Csh, Sh};5793 #endif5794 5795 Use& current_use = Use::current ();5796 5797 if (!current_use.get_strategy ("SetupScripts"))5798 {5799 for (int i = 0; i < modes; i++)5800 {5801 cmt_string old_file_name = "setup";5802 old_file_name += ".";5803 old_file_name += suffix[i];5804 if (CmtSystem::test_file (old_file_name))5805 {5806 if (CmtMessage::active (Error))5807 cerr << "Removing setup script " + old_file_name << endl;5808 CmtSystem::remove_file (old_file_name);5809 }5810 }5811 return;5812 }5813 5814 if (CmtMessage::active (Error))5815 cerr << "Creating setup scripts." << endl;5816 5817 cmt_string no_cleanup_opt;5818 5819 if (current_use.get_strategy ("SetupCleanup"))5820 {5821 no_cleanup_opt = " -no_cleanup";5822 }5823 5824 cmt_string temp;5825 int i;5826 5827 cmt_string version = Me.m_current_version;5828 if (version == "v*") version = "";5829 cmt_string mangled_package = mangle (Me.m_current_package);5830 5831 for (i = 0; i < modes; i++)5832 {5833 cmt_string file_name = "setup";5834 file_name += ".";5835 file_name += suffix[i];5836 file_name += ".";5837 file_name += "new";5838 5839 FILE* f = fopen (file_name.c_str (), "wb");5840 if (f != NULL)5841 {5842 if (mode[i] == Csh)5843 {5844 fprintf (f, "# echo \"Setting standalone package\"\n");5845 fprintf (f, "\n");5846 5847 fprintf (f, "if ( $?CMTROOT == 0 ) then\n");5848 fprintf (f, " setenv CMTROOT %s\n", Me.m_cmt_root.c_str ());5849 fprintf (f, "endif\n");5850 fprintf (f, "source ${CMTROOT}/mgr/setup.csh\n");5851 fprintf (f, "set cmt%stempfile=`${CMTROOT}/mgr/cmt -quiet build temporary_name`\n", mangled_package.c_str ());5852 fprintf (f, "if $status != 0 then\n set cmt%stempfile=/tmp/cmt.$$\nendif\n", mangled_package.c_str ());5853 fprintf (f, "${CMTROOT}/mgr/cmt setup -%s -pack=cmt_standalone -path=%s %s $* >${cmt%stempfile}\n",5854 suffix[i].c_str (),5855 Me.m_current_path.c_str (),5856 no_cleanup_opt.c_str (), mangled_package.c_str ());5857 fprintf (f,5858 "if ( $status != 0 ) then\n"5859 " echo \"${CMTROOT}/mgr/cmt setup -%s "5860 "-pack=cmt_standalone -path=%s %s $* >${cmt%stempfile}\"\n"5861 " set cmtsetupstatus=2\n"5862 " /bin/rm -f ${cmt%stempfile}\n"5863 " unset cmt%stempfile\n"5864 " exit $cmtsetupstatus\n"5865 "endif\n"5866 "set cmtsetupstatus=0\n"5867 "source ${cmt%stempfile}\n"5868 "if ( $status != 0 ) then\n"5869 " set cmtsetupstatus=2\n"5870 "endif\n"5871 "/bin/rm -f ${cmt%stempfile}\n"5872 "unset cmt%stempfile\n"5873 "exit $cmtsetupstatus\n",5874 suffix[i].c_str (),5875 Me.m_current_path.c_str (),5876 no_cleanup_opt.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str ());5877 }5878 else if (mode[i] == Sh)5879 {5880 fprintf (f, "# echo \"Setting standalone package\"\n");5881 fprintf (f, "\n");5882 5883 fprintf (f, "if test \"${CMTROOT}\" = \"\"; then\n");5884 fprintf (f, " CMTROOT=%s; export CMTROOT\n", Me.m_cmt_root.c_str ());5885 fprintf (f, "fi\n");5886 fprintf (f, ". ${CMTROOT}/mgr/setup.sh\n");5887 fprintf (f, "cmt%stempfile=`${CMTROOT}/mgr/cmt -quiet build temporary_name`\n", mangled_package.c_str ());5888 fprintf (f, "if test ! $? = 0 ; then cmt%stempfile=/tmp/cmt.$$; fi\n", mangled_package.c_str ());5889 fprintf (f, "${CMTROOT}/mgr/cmt setup -%s -pack=cmt_standalone -path=%s %s $* >${cmt%stempfile}\n",5890 suffix[i].c_str (),5891 Me.m_current_path.c_str (),5892 no_cleanup_opt.c_str (), mangled_package.c_str ());5893 fprintf (f,5894 "if test $? != 0 ; then\n"5895 " echo >&2 \"${CMTROOT}/mgr/cmt setup -%s "5896 "-pack=cmt_standalone -path=%s %s $* >${cmt%stempfile}\"\n"5897 " cmtsetupstatus=2\n"5898 " /bin/rm -f ${cmt%stempfile}\n"5899 " unset cmt%stempfile\n"5900 " return $cmtsetupstatus\n"5901 "fi\n"5902 "cmtsetupstatus=0\n"5903 ". ${cmt%stempfile}\n"5904 "if test $? != 0 ; then\n"5905 " cmtsetupstatus=2\n"5906 "fi\n"5907 "/bin/rm -f ${cmt%stempfile}\n"5908 "unset cmt%stempfile\n"5909 "return $cmtsetupstatus\n",5910 suffix[i].c_str (),5911 Me.m_current_path.c_str (),5912 no_cleanup_opt.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str (), mangled_package.c_str ());5913 }5914 else if (mode[i] == Bat)5915 {5916 fprintf (f, "rem Setting standalone package\n");5917 dos_script_prefix (f, Me.m_cmt_root,5918 "cmt_standalone", "cmt_standalone", "", Me.m_current_path,5919 "setup", no_cleanup_opt);5920 }5921 5922 fprintf (f, "\n");5923 5924 CmtSystem::close_ostream (f, file_name);5925 // fclose (f);5926 5927 cmt_string old_file_name = "setup";5928 old_file_name += ".";5929 old_file_name += suffix[i];5930 5931 CmtSystem::compare_and_update_files (file_name, old_file_name);5932 }5933 else5934 {5935 CmtError::set (CmtError::file_access_error, file_name);5936 }5937 }5938 5926 } 5939 5927 … … 7314 7302 set_standard_macros (); 7315 7303 7316 Script::all_print_clean (mode);7304 //Script::all_print_clean (mode); 7317 7305 Symbol::all_print_clean (mode); 7306 7307 cmt_string prefix; 7308 if (0 != CmtSystem::mangle (Me.m_current_prefix, prefix)) 7309 CmtMessage::verbose ("Replace " + Me.m_current_prefix + " with " + prefix); 7318 7310 7319 7311 switch (mode) … … 7322 7314 if (Me.m_current_package != "CMT") 7323 7315 { 7324 cout << "unsetenv " << Me.m_current_prefix << "ROOT" << endl;7325 cout << "unsetenv " << Me.m_current_prefix << "CONFIG" << endl;7316 cout << "unsetenv " << prefix << "ROOT" << endl; 7317 cout << "unsetenv " << prefix << "CONFIG" << endl; 7326 7318 } 7327 7319 break; … … 7329 7321 if (Me.m_current_package != "CMT") 7330 7322 { 7331 cout << "unset " << Me.m_current_prefix << "ROOT" << endl;7332 cout << "unset " << Me.m_current_prefix << "CONFIG" << endl;7323 cout << "unset " << prefix << "ROOT" << endl; 7324 cout << "unset " << prefix << "CONFIG" << endl; 7333 7325 } 7334 7326 break; … … 7336 7328 if (Me.m_current_package != "CMT") 7337 7329 { 7338 cout << "set " << Me.m_current_prefix << "ROOT=" << endl;7339 cout << "set " << Me.m_current_prefix << "CONFIG=" << endl;7330 cout << "set " << prefix << "ROOT=" << endl; 7331 cout << "set " << prefix << "CONFIG=" << endl; 7340 7332 } 7341 7333 break; … … 7356 7348 if (p->is_cmt ()) continue; 7357 7349 7350 7351 if (0 != CmtSystem::mangle (use->prefix, prefix)) 7352 CmtMessage::verbose ("Replace " + use->prefix + " with " + prefix); 7358 7353 7359 7354 switch (mode) 7360 7355 { 7361 7356 case Csh : 7362 cout << "unsetenv " << use->prefix << "ROOT" << endl;7363 cout << "unsetenv " << use->prefix << "CONFIG" << endl;7357 cout << "unsetenv " << prefix << "ROOT" << endl; 7358 cout << "unsetenv " << prefix << "CONFIG" << endl; 7364 7359 break; 7365 7360 case Sh : 7366 cout << "unset " << use->prefix << "ROOT" << endl;7367 cout << "unset " << use->prefix << "CONFIG" << endl;7361 cout << "unset " << prefix << "ROOT" << endl; 7362 cout << "unset " << prefix << "CONFIG" << endl; 7368 7363 break; 7369 7364 case Bat : 7370 cout << "set " << use->prefix << "ROOT=" << endl;7371 cout << "set " << use->prefix << "CONFIG=" << endl;7365 cout << "set " << prefix << "ROOT=" << endl; 7366 cout << "set " << prefix << "CONFIG=" << endl; 7372 7367 break; 7373 7368 } … … 7405 7400 bool do_root = use.get_strategy ("SetupRoot"); 7406 7401 7402 cmt_string prefix (use.prefix); 7403 switch (mode) 7404 { 7405 case Requirements : 7406 break; 7407 default: 7408 if (do_config || do_root) 7409 { 7410 if (0 != CmtSystem::mangle (use.prefix, prefix)) 7411 CmtMessage::verbose ("Replace " + use.prefix + " with " + prefix); 7412 } 7413 break; 7414 } 7407 7415 7408 7416 switch (mode) … … 7411 7419 if (do_root) 7412 7420 { 7413 cout << "setenv " << use.prefix << "ROOT \"" <<7421 cout << "setenv " << prefix << "ROOT \"" << 7414 7422 use.get_full_path () << "\"" << endl; 7415 7423 } … … 7423 7431 if (do_config) 7424 7432 { 7425 cout << "setenv " << use.prefix << "CONFIG \"" << tag << "\"" << endl;7433 cout << "setenv " << prefix << "CONFIG \"" << tag << "\"" << endl; 7426 7434 } 7427 7435 } … … 7431 7439 if (do_root) 7432 7440 { 7433 cout << use.prefix << "ROOT=\"" <<7441 cout << prefix << "ROOT=\"" << 7434 7442 use.get_full_path () << "\"; export " << 7435 use.prefix << "ROOT" << endl;7443 prefix << "ROOT" << endl; 7436 7444 } 7437 7445 … … 7444 7452 if (do_config) 7445 7453 { 7446 cout << use.prefix << "CONFIG=\"" <<7454 cout << prefix << "CONFIG=\"" << 7447 7455 tag << "\"; export " << 7448 use.prefix << "CONFIG" << endl;7456 prefix << "CONFIG" << endl; 7449 7457 } 7450 7458 } … … 7454 7462 if (do_root) 7455 7463 { 7456 cout << "set " << use.prefix << "ROOT=" <<7457 use.get_full_path () << endl;7464 cout << "set " << prefix << "ROOT=" << 7465 CmtSystem::quote (use.get_full_path (), " \t") << endl; 7458 7466 } 7459 7467 … … 7466 7474 if (do_config) 7467 7475 { 7468 cout << "set " << use.prefix << "CONFIG=" << tag<< endl;7476 cout << "set " << prefix << "CONFIG=" << CmtSystem::quote (tag, " \t") << endl; 7469 7477 } 7470 7478 } … … 7474 7482 if (do_root) 7475 7483 { 7476 cout << "<variable><name>" << use.prefix << "ROOT</name>"7484 cout << "<variable><name>" << prefix << "ROOT</name>" 7477 7485 << "<value>" << use.get_full_path () << "</value></variable>"; 7478 7486 } … … 7487 7495 if (do_config) 7488 7496 { 7489 cout << "<variable><name>" << use.prefix << "CONFIG</name>"7497 cout << "<variable><name>" << prefix << "CONFIG</name>" 7490 7498 << "<value>" << tag << "</value></variable>"; 7491 7499 } … … 7497 7505 use.get_package_name () != "CMT") 7498 7506 { 7499 cout << "set " << use.prefix << "ROOT \"" <<7500 use.get_full_path () << "\""<< endl;7507 cout << "set " << use.prefix << "ROOT " << 7508 CmtSystem::quote (use.get_full_path (), " \t") << endl; 7501 7509 7502 7510 cmt_string name (use.prefix + "ROOT"); … … 7516 7524 if (use.get_package_name () == "CMT") 7517 7525 { 7518 cout << "set CMTCONFIG \"" << system << "\""<< endl;7526 cout << "set CMTCONFIG " << system << endl; 7519 7527 } 7520 7528 else … … 7522 7530 if (do_config) 7523 7531 { 7524 cout << "set " << use.prefix << "CONFIG \"" << tag << "\""<< endl;7532 cout << "set " << use.prefix << "CONFIG " << CmtSystem::quote (tag, " \t") << endl; 7525 7533 } 7526 7534 } … … 8114 8122 fs = CmtSystem::file_separator (); 8115 8123 buffer = ""; 8116 pwd = CmtSystem::pwd ();8117 CmtSystem::split (pwd, fs, vb);8124 //pwd = CmtSystem::pwd (); 8125 //CmtSystem::split (pwd, fs, vb); 8118 8126 current_use = &(Use::current ()); 8119 8127 current_tag = tag; … … 8161 8169 * PACKAGE_ROOT 8162 8170 */ 8163 void fill_for_package ( const cmt_string& current_dir)8171 void fill_for_package () 8164 8172 { 8165 8173 buffer = "macro package \""; … … 8251 8259 } 8252 8260 8261 if (!Symbol::is_selected ("javabin")) 8262 { 8263 buffer = "macro javabin \"."; 8264 buffer += fs; 8265 buffer += "\""; 8266 apply (); 8267 } 8268 8269 if (!Symbol::is_selected ("mgr")) 8270 { 8271 buffer = "macro mgr \"."; 8272 buffer += fs; 8273 buffer += "\""; 8274 apply (); 8275 } 8276 8253 8277 if (!Symbol::is_selected ("BIN")) 8254 8278 { … … 8270 8294 else 8271 8295 { 8272 atemp = pwd + fs + temp; 8296 atemp = "$(PACKAGE_ROOT)"; 8297 Symbol::expand (atemp); 8298 atemp += fs + temp; 8299 //atemp = pwd + fs + temp; 8273 8300 CmtSystem::compress_path (atemp); 8274 8301 } … … 8290 8317 } 8291 8318 } 8292 8293 if (!Symbol::is_selected ("javabin"))8294 {8295 buffer = "macro javabin \".";8296 buffer += fs;8297 buffer += "\"";8298 apply ();8299 }8300 8301 if (!Symbol::is_selected ("mgr"))8302 {8303 buffer = "macro mgr \".";8304 buffer += fs;8305 buffer += "\"";8306 apply ();8307 }8308 8319 } 8309 8320 else … … 8363 8374 } 8364 8375 8376 if (!Symbol::is_selected ("javabin")) 8377 { 8378 buffer = "macro javabin \".."; 8379 buffer += fs; 8380 buffer += "classes"; 8381 buffer += fs; 8382 buffer += "\""; 8383 apply (); 8384 } 8385 8386 if (current_style == mgr_style) 8387 { 8388 buffer = "macro mgrdir \"mgr\""; 8389 apply (); 8390 8391 buffer = "macro mgr \".."; 8392 buffer += fs; 8393 buffer += "mgr"; 8394 buffer += fs; 8395 buffer += "\""; 8396 apply (); 8397 } 8398 else 8399 { 8400 buffer = "macro mgrdir \"cmt\""; 8401 apply (); 8402 8403 buffer = "macro mgr \".."; 8404 buffer += fs; 8405 buffer += "cmt"; 8406 buffer += fs; 8407 buffer += "\""; 8408 apply (); 8409 } 8410 8365 8411 if (!Symbol::is_selected ("BIN")) 8366 8412 { … … 8389 8435 else 8390 8436 { 8391 atemp = pwd + fs + temp; 8437 atemp = "$(PACKAGE_ROOT)"; 8438 atemp += fs + "$(mgrdir)"; 8439 Symbol::expand (atemp); 8440 atemp += fs + temp; 8441 //atemp = pwd + fs + temp; 8392 8442 CmtSystem::compress_path (atemp); 8393 8443 } … … 8409 8459 } 8410 8460 } 8411 8412 if (!Symbol::is_selected ("javabin"))8413 {8414 buffer = "macro javabin \"..";8415 buffer += fs;8416 buffer += "classes";8417 buffer += fs;8418 buffer += "\"";8419 apply ();8420 }8421 8422 if (current_style == mgr_style)8423 {8424 buffer = "macro mgrdir \"mgr\"";8425 apply ();8426 8427 buffer = "macro mgr \"..";8428 buffer += fs;8429 buffer += "mgr";8430 buffer += fs;8431 buffer += "\"";8432 apply ();8433 }8434 else8435 {8436 buffer = "macro mgrdir \"cmt\"";8437 apply ();8438 8439 buffer = "macro mgr \"..";8440 buffer += fs;8441 buffer += "cmt";8442 buffer += fs;8443 buffer += "\"";8444 apply ();8445 }8446 8461 8447 8462 Cmt::configure_current_cmtpath (); … … 9354 9369 * and even before reading its requirements file. 9355 9370 */ 9356 void fill_for_current_package ( const cmt_string& current_dir)9371 void fill_for_current_package () 9357 9372 { 9358 9373 fill_for_tag (); 9359 fill_for_package ( current_dir);9374 fill_for_package (); 9360 9375 } 9361 9376 … … 9363 9378 cmt_string fs; 9364 9379 cmt_string buffer; 9365 CmtSystem::cmt_string_vector vb;9366 cmt_string pwd;9380 //CmtSystem::cmt_string_vector vb; 9381 //cmt_string pwd; 9367 9382 Use* current_use; 9368 9383 cmt_string current_tag; … … 9505 9520 9506 9521 StandardMacroBuilder builder (Me.m_current_tag, 9507 Me.m_current_package, 9508 Me.m_current_version, 9509 Me.m_current_prefix, 9510 Me.m_current_style); 9511 9512 9513 builder.fill_for_current_package (Me.m_current_dir); 9522 current_use.get_package_name (),//Me.m_current_package, 9523 current_use.version,//Me.m_current_version, 9524 current_use.prefix,//Me.m_current_prefix, 9525 current_use.style);//Me.m_current_style); 9526 9527 builder.fill_for_current_package (); 9514 9528 9515 9529 builder.fill_for_branches (); -
CMT/HEAD/source/cmt_project.cxx
r563 r565 1652 1652 cmt_string Project::find_in_cmt_paths (const cmt_string& path) 1653 1653 { 1654 const cmt_string pwd = CmtSystem::pwd ();1654 //const cmt_string pwd = CmtSystem::pwd (); 1655 1655 1656 1656 // In case there are symlinks -
CMT/HEAD/source/cmt_symbol.cxx
r561 r565 774 774 break; 775 775 } 776 777 CmtMessage::warning ("Symbol " + name 778 + " inconsistently redeclared from " + s1 779 + " to " + s2 780 + ( (use != 0) ? 781 " in package " + use->get_package_name () : 782 "" ) 783 ); 776 // <PACKAGE>ROOT macro is defined in 777 // Use::fill_standard_macros <- SyntaxParser::parse_requirements 778 // "cmt -requirements setup" may generate <PACKAGE>ROOT set 779 // hence, warning 780 // Symbol <PACKAGE>ROOT inconsistently redeclared from macro to set in package <package> 781 // below, we suppress the warning for current package 782 if (use != &(Use::current()) || 783 (Use::current().prefix + "ROOT") != name || 784 symbol->type != SymbolMacro || 785 type != SymbolSet) 786 CmtMessage::warning ("Symbol " + name 787 + " inconsistently redeclared from " + s1 788 + " to " + s2 789 + ( (use != 0) ? 790 " in package " + use->get_package_name () : 791 "" ) 792 ); 784 793 /* 785 794 cerr << "#CMT> Warning: Symbol " << name … … 982 991 full_name = "${"; 983 992 #endif 984 full_name += use->prefix;993 full_name += CmtSystem::mangle (use->prefix); 985 994 full_name += "ROOT"; 986 995 #ifdef WIN32 … … 1612 1621 if (name == "CMTCONFIG") return (0); 1613 1622 1623 cmt_string _name; 1624 switch (type) 1625 { 1626 case SymbolSet : 1627 case SymbolPath : 1628 if (0 != CmtSystem::mangle (name, _name)) 1629 CmtMessage::info ("Replace " + name + " with " + _name); 1630 break; 1631 } 1632 1614 1633 switch (type) 1615 1634 { … … 1618 1637 { 1619 1638 case Csh : 1620 cout << "unsetenv " << name;1639 cout << "unsetenv " << _name; 1621 1640 result = 1; 1622 1641 break; 1623 1642 case Sh : 1624 cout << "unset " << name;1643 cout << "unset " << _name; 1625 1644 result = 1; 1626 1645 break; 1627 1646 case Bat : 1628 cout << "set " << name << "=";1647 cout << "set " << _name << "="; 1629 1648 result = 1; 1630 1649 break; … … 1651 1670 if (temp == "") 1652 1671 { 1653 cout << "unsetenv " << name;1672 cout << "unsetenv " << _name; 1654 1673 } 1655 1674 else 1656 1675 { 1657 cout << "setenv " << name << " " << temp;1676 cout << "setenv " << _name << " " << CmtSystem::quote (temp, " \t"); 1658 1677 } 1659 1678 result = 1; 1660 1679 break; 1661 1680 case Sh : 1662 cout << name << "=" << temp << "; export " <<name;1681 cout << _name << "=" << CmtSystem::quote (temp, " \t") << "; export " << _name; 1663 1682 result = 1; 1664 1683 break; 1665 1684 case Bat : 1666 cout << "set " << name << "=" << temp;1685 cout << "set " << _name << "=" << CmtSystem::quote (temp, " \t"); 1667 1686 result = 1; 1668 1687 break; … … 1673 1692 { 1674 1693 case Csh : 1675 cout << "if ( -f " << name<< ".csh ) then" << endl;1676 cout << " source " << name<< ".csh" << endl;1694 cout << "if ( -f " << CmtSystem::quote (name, " \t") << ".csh ) then" << endl; 1695 cout << " source " << CmtSystem::quote (name, " \t") << ".csh" << endl; 1677 1696 cout << 1678 1697 "if ( $status != 0 ) then\n" … … 1683 1702 break; 1684 1703 case Sh : 1685 cout << "if test -f " << name<< ".sh; then" << endl;1686 cout << " . " << name<< ".sh" << endl;1704 cout << "if test -f " << CmtSystem::quote (name, " \t") << ".sh; then" << endl; 1705 cout << " . " << CmtSystem::quote (name, " \t") << ".sh" << endl; 1687 1706 cout << 1688 1707 "if test $? != 0; then\n" … … 1693 1712 break; 1694 1713 case Bat : 1695 cout << "call " << name;1714 cout << "call " << CmtSystem::quote (name, " \t"); 1696 1715 result = 1; 1697 1716 break; … … 1707 1726 { 1708 1727 int result = 0; 1709 cmt_string temp; 1710 1711 temp = build_macro_value (); 1712 1728 1729 cmt_string temp = build_macro_value (); 1713 1730 bool empty = (temp.size () == 0) ? true : false; 1714 1731 … … 1719 1736 } 1720 1737 1738 cmt_string _name; 1721 1739 switch (type) 1722 1740 { 1723 1741 case SymbolSet : 1724 1742 case SymbolPath : 1743 if (0 != CmtSystem::mangle (name, _name)) 1744 CmtMessage::info ("Replace " + name + " with " + _name); 1725 1745 switch (mode) 1726 1746 { 1727 1747 case Csh : 1728 if (empty) cout << "unsetenv " << name; 1729 else cout << "setenv " << name << " \"" << temp << "\""; 1748 if (empty) cout << "unsetenv " << _name; 1749 else cout << "setenv " << _name << " \"" << temp << "\""; 1750 //else cout << "setenv " << name << " " << CmtSystem::quote (temp, " \t"); 1730 1751 1731 1752 result = 1; 1732 1753 break; 1733 1754 case Sh : 1734 if (empty) cout << "unset " << name; 1735 else cout << name << "=\"" << temp << "\"; export " << name; 1755 if (empty) cout << "unset " << _name; 1756 else cout << _name << "=\"" << temp << "\"; export " << _name; 1757 //else cout << name << "=" << CmtSystem::quote (temp, " \t") << "; export " << name; 1736 1758 1737 1759 result = 1; … … 1739 1761 case Bat : 1740 1762 temp.replace_all ("/", "\\"); 1741 cout << "set " << name << "=" << temp; 1763 cout << "set " << _name << "=" << CmtSystem::quote (temp, " \t"); 1764 //cout << "set " << name << "=" << temp; 1742 1765 result = 1; 1743 1766 break; 1744 1767 case Xml : 1745 cout << "<variable><name>" << name << "</name>"1768 cout << "<variable><name>" << _name << "</name>" 1746 1769 << "<value>" << temp << "</value></variable>"; 1747 1770 result = 1; … … 1754 1777 case Csh : 1755 1778 cout << "alias " << name << 1756 " \"" << temp << "\""; 1779 " \"" << temp << "\""; 1780 //CmtSystem::quote (temp, " \t"); 1757 1781 result = 1; 1758 1782 break; 1759 1783 case Sh : 1760 1784 cout << "alias " << name << 1761 "=\"" << temp << "\""; 1785 "=\"" << temp << "\""; 1786 //"=" << CmtSystem::quote (temp, " \t"); 1762 1787 result = 1; 1763 1788 break; 1764 1789 case Bat : 1765 1790 cout << "set " << name << 1766 "=" << temp; 1791 "=" << CmtSystem::quote (temp, " \t"); 1792 //"=" << temp; 1767 1793 result = 1; 1768 1794 break; … … 1786 1812 { 1787 1813 case Csh : 1788 cout << "if ( -f " << name<< ".csh ) then" << endl;1789 cout << " source " << name<< ".csh" << endl;1814 cout << "if ( -f " << CmtSystem::quote (name, " \t") << ".csh ) then" << endl; 1815 cout << " source " << CmtSystem::quote (name, " \t") << ".csh" << endl; 1790 1816 cout << 1791 1817 "if ( $status != 0 ) then\n" … … 1796 1822 break; 1797 1823 case Sh : 1798 cout << "if test -f " << name<< ".sh; then" << endl;1799 cout << " . " << name<< ".sh" << endl;1824 cout << "if test -f " << CmtSystem::quote (name, " \t") << ".sh; then" << endl; 1825 cout << " . " << CmtSystem::quote (name, " \t") << ".sh" << endl; 1800 1826 cout << 1801 1827 "if test $? != 0; then\n" … … 1806 1832 break; 1807 1833 case Bat : 1808 cout << "call " << name;1834 cout << "call " << CmtSystem::quote (name, " \t"); 1809 1835 result = 1; 1810 1836 break; … … 3067 3093 int result (0); 3068 3094 3069 if (use->get_package_name () == "CMT") return result;3095 //if (use->get_package_name () == "CMT") return result; 3070 3096 3071 3097 cmt_string discarded_text; -
CMT/HEAD/source/cmt_system.cxx
r561 r565 2188 2188 if (text.size () == 0) return result; 2189 2189 2190 int allocated = 3 * text.size (); // if EACH character of text quoted with " or '2190 size_t allocated = 3 * text.size (); // if EACH character of text quoted with " or ' 2191 2191 char* const buffer = (char*) malloc (allocated + 1); 2192 if (0 == buffer) 2193 { 2194 char num[32]; sprintf (num, "%u", allocated + 1); 2195 cmt_string msg ("Cannot allocate "); 2196 msg += num; 2197 msg += " bytes"; 2198 cmt_string e = errno ? ": " + cmt_string (strerror (errno)) : ""; 2199 CmtMessage::error (msg + e); 2200 exit (EXIT_FAILURE); 2201 } 2192 2202 char* b (buffer); 2193 2203 … … 2244 2254 result = buffer; 2245 2255 free (buffer); 2256 return result; 2257 } 2258 2259 //---------------------------------------------------------- 2260 // Mangle text so that it consists solely of 2261 // letters, digits, and underscores 2262 // the first character being not digit 2263 // (any other characters are replaced with character '_'). 2264 // The out can be used as shell variable name. 2265 // Return the number of characters replaced with character '_'. 2266 //---------------------------------------------------------- 2267 int CmtSystem::mangle (const cmt_string& text, cmt_string& out) 2268 { 2269 int result (0); 2270 size_t allocated = text.size (); 2271 //allocated = 3000000000; 2272 char* const buffer = (char*) malloc (allocated + 1); 2273 if (0 == buffer) 2274 { 2275 char num[32]; sprintf (num, "%u", allocated + 1); 2276 cmt_string msg ("Cannot allocate "); 2277 msg += num; 2278 msg += " bytes"; 2279 cmt_string e = errno ? ": " + cmt_string (strerror (errno)) : ""; 2280 CmtMessage::error (msg + e); 2281 exit (EXIT_FAILURE); 2282 } 2283 char* b (buffer); 2284 const char* t = text.c_str (); 2285 while (*t) 2286 { 2287 if (isalnum (*t) || *t == '_') 2288 *b++ = *t++; 2289 else 2290 { 2291 *b++ = '_'; t++; 2292 result++; 2293 } 2294 } 2295 *b = '\0'; 2296 if (0 != allocated && isdigit (*buffer)) 2297 { 2298 *buffer = '_'; 2299 result++; 2300 } 2301 out = buffer; 2302 free (buffer); 2303 return result; 2304 } 2305 2306 cmt_string CmtSystem::mangle (const cmt_string& text) 2307 { 2308 cmt_string result; 2309 mangle (text, result); 2246 2310 return result; 2247 2311 } -
CMT/HEAD/source/cmt_system.h
r561 r565 134 134 static cmt_string quote (const cmt_string& text, 135 135 const cmt_string& separators); 136 static int mangle (const cmt_string& text, cmt_string& out); 137 static cmt_string mangle (const cmt_string& text); 136 138 137 139 static void compress_path (const cmt_string& dir, cmt_string& new_dir);
Note: See TracChangeset
for help on using the changeset viewer.