Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2007-10-23 14:53:51


Bjørn Roald wrote:
> Eric Niebler wrote:
>> Bjørn Roald wrote:
>> Sounds very interesting! Yes, there is interest. Please send the
>> patches around again.
>>
> I have merged with the latest svn trunk. Are there any guidelines for
> producing a patch with svn?
>
> Attached is a patch generated with plain 'svn diff' command in the trunk
> directory.

<snip>

I've attached an updated patch for these changes against HEAD, for
anybody else who is interested. (This patch adds the ability to move
boost into a different top-level namespace, rename macros, etc.)

-- 
Eric Niebler
Boost Consulting
www.boost-consulting.com

Index: tools/bcp/file_types.cpp
===================================================================
--- tools/bcp/file_types.cpp (revision 40295)
+++ tools/bcp/file_types.cpp (working copy)
@@ -9,6 +9,7 @@
  * void bcp_implementation::is_source_file(const fs::path& p)
  * void bcp_implementation::is_html_file(const fs::path& p)
  * void bcp_implementation::is_binary_file(const fs::path& p)
+ * void bcp_implementation::is_bjam_file(const fs::path& p)
  */
 
 #include "bcp_imp.hpp"
@@ -19,8 +20,8 @@
    static const boost::regex e(
       ".*\\."
       "(?:"
- "c|cxx|h|hxx|inc|.?pp|yy?"
- ")",
+ "c|cxx|h|hxx|inl|inc|.?pp|yy?"
+ ")",
       boost::regex::perl | boost::regex::icase
       );
    return boost::regex_match(p.string(), e);
@@ -50,8 +51,23 @@
          "c|cxx|cpp|h|hxx|hpp|inc|html?|css|mak|in"
       ")"
       "|"
- "(Jamfile|makefile|configure)",
+ "(Jamfile|Jamfile\\.v2|Jamrules|Jambase|makefile|configure)",
       boost::regex::perl | boost::regex::icase);
    return !boost::regex_match(p.leaf(), e);
 
 }
+
+
+bool bcp_implementation::is_bjam_file(const fs::path& p)
+{
+ static const boost::regex e(
+ ".*\\."
+ "(?:"
+ "jam"
+ ")"
+ "|"
+ "(Jamfile|Jamfile\\.v2|Jamrules|Jambase)",
+ boost::regex::perl | boost::regex::icase);
+ return boost::regex_match(p.leaf(), e);
+
+}
Index: tools/bcp/add_path.cpp
===================================================================
--- tools/bcp/add_path.cpp (revision 40295)
+++ tools/bcp/add_path.cpp (working copy)
@@ -125,6 +125,11 @@
          // or we'll get an error:
          if(s.compare(0, 2, "./") == 0)
             s.erase(0, 2);
+ //
+ // if the name contain .html# , remove the html bookmark
+ // or we'll get warnings of none existing files
+ if(s.find(".html#") != std::string::npos)
+ s.erase(s.find(".html#")+5);
          if(s.find(':') == std::string::npos)
          {
             // only concatonate if it's a relative path
Index: tools/bcp/bcp_imp.cpp
===================================================================
--- tools/bcp/bcp_imp.cpp (revision 40295)
+++ tools/bcp/bcp_imp.cpp (working copy)
@@ -18,7 +18,17 @@
 #include <string>
 
 bcp_implementation::bcp_implementation()
- : m_list_mode(false), m_list_summary_mode(false), m_license_mode(false), m_cvs_mode(false), m_svn_mode(false), m_unix_lines(false), m_scan_mode(false), m_bsl_convert_mode(false), m_bsl_summary_mode(false)
+ : m_list_mode(false)
+ , m_list_summary_mode(false)
+ , m_license_mode(false)
+ , m_cvs_mode(false)
+ , m_svn_mode(false)
+ , m_unix_lines(false)
+ , m_diff_only_mode(false)
+ , m_replace_namespace(false)
+ , m_scan_mode(false)
+ , m_bsl_convert_mode(false)
+ , m_bsl_summary_mode(false)
 {
 }
 
@@ -76,6 +86,11 @@
    m_unix_lines = true;
 }
 
+void bcp_implementation::enable_diff_only_mode()
+{
+ m_diff_only_mode = true;
+}
+
 void bcp_implementation::set_boost_path(const char* p)
 {
    m_boost_path = fs::path(p, fs::native);
Index: tools/bcp/bcp.hpp
===================================================================
--- tools/bcp/bcp.hpp (revision 40295)
+++ tools/bcp/bcp.hpp (working copy)
@@ -22,11 +22,13 @@
    virtual void enable_cvs_mode() = 0;
    virtual void enable_svn_mode() = 0;
    virtual void enable_unix_lines() = 0;
+ virtual void enable_diff_only_mode() = 0;
    virtual void enable_scan_mode() = 0;
    virtual void enable_license_mode() = 0;
    virtual void enable_bsl_convert_mode() = 0;
    virtual void enable_bsl_summary_mode() = 0;
    virtual void set_boost_path(const char* p) = 0;
+ virtual void set_replacement_namespace(const char* ns) = 0;
    virtual void set_destination(const char* p) = 0;
    virtual void add_module(const char* p) = 0;
 
Index: tools/bcp/scan_cvs_path.cpp
===================================================================
--- tools/bcp/scan_cvs_path.cpp (revision 40295)
+++ tools/bcp/scan_cvs_path.cpp (working copy)
@@ -59,7 +59,6 @@
             ++i;
             m_cvs_paths[file] = binary;
          }
-
       }
    }
 }
Index: tools/bcp/Jamfile.v2
===================================================================
--- tools/bcp/Jamfile.v2 (revision 40295)
+++ tools/bcp/Jamfile.v2 (working copy)
@@ -7,6 +7,7 @@
     add_path.cpp bcp_imp.cpp copy_path.cpp file_types.cpp
     fileview.cpp main.cpp path_operations.cpp scan_cvs_path.cpp
     licence_info.cpp scan_licence.cpp output_licence_info.cpp
+ replace_namespace.cpp
     /boost/filesystem//boost_filesystem
     /boost/regex//boost_regex
     /boost/test//boost_prg_exec_monitor
Index: tools/bcp/bcp_imp.hpp
===================================================================
--- tools/bcp/bcp_imp.hpp (revision 40295)
+++ tools/bcp/bcp_imp.hpp (working copy)
@@ -53,11 +53,13 @@
    void enable_cvs_mode();
    void enable_svn_mode();
    void enable_unix_lines();
+ void enable_diff_only_mode();
    void enable_scan_mode();
    void enable_license_mode();
    void enable_bsl_convert_mode();
    void enable_bsl_summary_mode();
    void set_boost_path(const char* p);
+ void set_replacement_namespace(const char* ns);
    void set_destination(const char* p);
    void add_module(const char* p);
 
@@ -70,10 +72,15 @@
    void add_directory(const fs::path& p);
    void add_file(const fs::path& p);
    void copy_path(const fs::path& p);
+ void replace_namespace(const fs::path& p);
+ fs::path destination_path(const fs::path p, std::string seperator = "/");
    void add_file_dependencies(const fs::path& p, bool scanfile);
    bool is_source_file(const fs::path& p);
    bool is_html_file(const fs::path& p);
    bool is_binary_file(const fs::path& p);
+ bool is_bjam_file(const fs::path& p);
+ bool diff_only_copy( const std::string& new_file,
+ fs::path destination_path );
    void add_dependent_lib(const std::string& libname, const fs::path& p);
    void create_path(const fs::path& p);
    // license code:
@@ -87,6 +94,8 @@
    bool m_cvs_mode; // check cvs for files
    bool m_svn_mode; // check svn for files
    bool m_unix_lines; // fix line endings
+ bool m_diff_only_mode; // diff only mode
+ bool m_replace_namespace; // replace the boost namespace
    bool m_scan_mode; // scan non-boost files.
    bool m_bsl_convert_mode; // try to convert to the BSL
    bool m_bsl_summary_mode; // summarise BSL issues only
Index: tools/bcp/main.cpp
===================================================================
--- tools/bcp/main.cpp (revision 40295)
+++ tools/bcp/main.cpp (working copy)
@@ -33,10 +33,13 @@
       "\n"
       "Options:\n"
       " --boost=path sets the location of the boost tree to path\n"
- " --scan treat the module list as a list of (possibly non-boost)\n"
+ " --namespace=ns set a namespace that will replace 'boost'\n"
+ " --scan treat the module list as a list of (possibly non-boost)\n"
       " files to scan for boost dependencies\n"
       " --cvs only copy files under cvs version control\n"
       " --unix-lines make sure that all copied files use Unix style line endings\n"
+ " --diff-only only overwrite files when new file differs from\n"
+ " existing original. May save you rebuilds.\n"
       "\n"
       "module-list: a list of boost files or library names to copy\n"
       "html-file: the name of a html file to which the report will be written\n"
@@ -127,12 +130,21 @@
       {
          papp->enable_unix_lines();
       }
+ else if(0 == std::strcmp("--diff-only", argv[i]))
+ {
+ papp->enable_diff_only_mode();
+ }
       else if(0 == std::strncmp("--boost=", argv[i], 8))
       {
          papp->set_boost_path(argv[i] + 8);
       }
+ else if(0 == std::strncmp("--namespace=", argv[i], 12))
+ {
+ papp->set_replacement_namespace(argv[i] + 12);
+ }
       else if(argv[i][0] == '-')
       {
+ std::cout << "wrong argument: " << argv[i] << std::endl;
          show_usage();
          return 1;
       }
Index: tools/bcp/copy_path.cpp
===================================================================
--- tools/bcp/copy_path.cpp (revision 40295)
+++ tools/bcp/copy_path.cpp (working copy)
@@ -20,35 +20,50 @@
 void bcp_implementation::copy_path(const fs::path& p)
 {
    assert(!fs::is_directory(m_boost_path / p));
- if(fs::exists(m_dest_path / p))
- {
- std::cout << "Copying (and overwriting) file: " << p.string() << "\n";
- fs::remove(m_dest_path / p);
- }
- else
- std::cout << "Copying file: " << p.string() << "\n";
+ fs::path dest_p = destination_path( p );
+
    //
    // create the path to the new file if it doesn't already exist:
    //
- create_path(p.branch_path());
+ create_path(dest_p.branch_path());
    //
    // do text based copy if requested:
    //
- if(m_unix_lines && !is_binary_file(p))
+ if(m_replace_namespace && (is_source_file(p) || is_bjam_file(p)))
    {
- std::ifstream is((m_boost_path / p).native_file_string().c_str());
- std::istreambuf_iterator<char> isi(is);
- std::istreambuf_iterator<char> end;
-
- std::ofstream os((m_dest_path / p).native_file_string().c_str(), std::ios_base::binary | std::ios_base::out);
- std::ostreambuf_iterator<char> osi(os);
-
- std::copy(isi, end, osi);
+ replace_namespace(p);
    }
    else
    {
- // binary copy:
- fs::copy_file(m_boost_path / p, m_dest_path / p);
+
+ if( fs::exists(m_dest_path / dest_p))
+ {
+ // TODO: need some support for diff mode here, for now
+ // diff_mode is only supported within replace_namespace(p);
+
+ std::cout << "Copying (and overwriting) file: " << p.string() << "\n";
+ fs::remove(m_dest_path / dest_p );
+ }
+ else
+ std::cout << "Copying file: " << p.string() << "\n";
+
+ if(m_unix_lines && !is_binary_file(p))
+ {
+ std::ifstream is((m_boost_path / p).native_file_string().c_str());
+ std::istreambuf_iterator<char> isi(is);
+ std::istreambuf_iterator<char> end;
+
+ std::ofstream os( ( m_dest_path / dest_p ).native_file_string().c_str(),
+ std::ios_base::binary | std::ios_base::out);
+ std::ostreambuf_iterator<char> osi(os);
+
+ std::copy(isi, end, osi);
+ }
+ else
+ {
+ // binary copy:
+ fs::copy_file(m_boost_path / p, m_dest_path / dest_p);
+ }
    }
 }
 


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk