On cygwin, when compiling lyx_cb.C and a few other files, I get the
following error:

if g++ -DHAVE_CONFIG_H -I. -I../../src -I.   -I../../boost -Wno-uninitialized  
-O2 -MT lyx_cb.o -MD -MP -MF ".deps/lyx_cb.Tpo" -c -o lyx_cb.o 
../../src/lyx_cb.C; \
        then mv -f ".deps/lyx_cb.Tpo" ".deps/lyx_cb.Po"; else rm -f 
".deps/lyx_cb.Tpo"; exit 1; fi
../../src/lyx_cb.C:70: error: `Path' is already declared in this scope
make: *** [lyx_cb.o] Error 1

This is due to the following code in boost/boost/filesystem/operations.hpp:

# ifndef BOOST_FILESYSTEM_NARROW_ONLY
#   define BOOST_FS_FUNC(BOOST_FS_TYPE) \
      template<class Path> typename boost::enable_if<is_basic_path<Path>, \
      BOOST_FS_TYPE>::type
#   define BOOST_INLINE_FS_FUNC(BOOST_FS_TYPE) \
      template<class Path> inline typename 
boost::enable_if<is_basic_path<Path>, \
      BOOST_FS_TYPE>::type
#   define BOOST_FS_TYPENAME typename
# else
#   define BOOST_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE
#   define BOOST_INLINE_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE
    typedef boost::filesystem::path Path;
#   define BOOST_FS_TYPENAME
# endif

The problem occurs when BOOST_FILESYSTEM_NARROW_ONLY is defined as
in this case the "typedef boost::filesystem::path Path;" kicks in.

The attached patch solves it by renaming class Path as CurrentPath.
Please, let me know if there are any objections. The alternative would
be deleting "using lyx::support::Path" and substituting "Path" with
"lyx::support::Path" in those files where the problem occurs.

-- 
Enrico
Log:
Rename class Path as CurrentPath to avoid a name clash in boost 1.34

        * src/lyx_cb.C:
        * src/insets/insetbibtex.C:
        * src/insets/ExternalSupport.C:
        * src/insets/ExternalTemplate.C:
        * src/converter.C:
        * src/buffer.C:
        * src/lyxfunc.C:
        * src/vc-backend.C:
        * src/frontends/controllers/tex_helpers.C:
        * src/support/path.[Ch]:
        * src/lyx_main.C:
        rename Path as CurrentPath.
Index: src/lyx_cb.C
===================================================================
--- src/lyx_cb.C        (revisione 14981)
+++ src/lyx_cb.C        (copia locale)
@@ -67,7 +67,7 @@ using lyx::support::makeAbsPath;
 using lyx::support::makeDisplayPath;
 using lyx::support::onlyFilename;
 using lyx::support::onlyPath;
-using lyx::support::Path;
+using lyx::support::CurrentPath;
 using lyx::support::package;
 using lyx::support::removeAutosaveFile;
 using lyx::support::rename;
@@ -443,7 +443,7 @@ void reconfigure(BufferView * bv)
        bv->buffer()->message(_("Running configure..."));
 
        // Run configure in user lyx directory
-       Path p(package().user_support());
+       CurrentPath p(package().user_support());
        string const configure_command = package().configure_command();
        Systemcall one;
        one.startscript(Systemcall::Wait, configure_command);
Index: src/insets/insetbibtex.C
===================================================================
--- src/insets/insetbibtex.C    (revisione 14981)
+++ src/insets/insetbibtex.C    (copia locale)
@@ -48,7 +48,7 @@ using lyx::support::latex_path;
 using lyx::support::ltrim;
 using lyx::support::makeAbsPath;
 using lyx::support::makeRelPath;
-using lyx::support::Path;
+using lyx::support::CurrentPath;
 using lyx::support::prefixIs;
 using lyx::support::removeExtension;
 using lyx::support::rtrim;
@@ -296,7 +296,7 @@ int InsetBibtex::latex(Buffer const & bu
 
 vector<string> const InsetBibtex::getFiles(Buffer const & buffer) const
 {
-       Path p(buffer.filePath());
+       CurrentPath p(buffer.filePath());
 
        vector<string> vec;
 
Index: src/insets/ExternalSupport.C
===================================================================
--- src/insets/ExternalSupport.C        (revisione 14981)
+++ src/insets/ExternalSupport.C        (copia locale)
@@ -174,7 +174,7 @@ string const doSubstitution(InsetExterna
 
                string const filepath = support::isFileReadable(file) ?
                        buffer.filePath() : m_buffer->temppath();
-               support::Path p(filepath);
+               support::CurrentPath p(filepath);
 
                if (support::isFileReadable(file))
                        contents = support::getFileContents(file);
Index: src/insets/ExternalTemplate.C
===================================================================
--- src/insets/ExternalTemplate.C       (revisione 14981)
+++ src/insets/ExternalTemplate.C       (copia locale)
@@ -228,7 +228,7 @@ TemplateManager::getPreambleDefByName(st
 
 void TemplateManager::readTemplates(string const & path)
 {
-       support::Path p(path);
+       support::CurrentPath p(path);
 
        enum TemplateTags {
                TM_PREAMBLEDEF = 1,
Index: src/converter.C
===================================================================
--- src/converter.C     (revisione 14981)
+++ src/converter.C     (copia locale)
@@ -43,7 +43,7 @@ using lyx::support::libScriptSearch;
 using lyx::support::makeRelPath;
 using lyx::support::onlyFilename;
 using lyx::support::onlyPath;
-using lyx::support::Path;
+using lyx::support::CurrentPath;
 using lyx::support::prefixIs;
 using lyx::support::quoteName;
 using lyx::support::split;
@@ -327,7 +327,7 @@ bool Converters::convert(Buffer const * 
        OutputParams runparams;
        runparams.flavor = getFlavor(edgepath);
        string path = onlyPath(from_file);
-       Path p(path);
+       CurrentPath p(path);
        // empty the error list before any new conversion takes place.
        errorList.clear();
 
@@ -405,7 +405,7 @@ bool Converters::convert(Buffer const * 
                        Systemcall one;
                        int res;
                        if (conv.original_dir) {
-                               Path p(buffer->filePath());
+                               CurrentPath p(buffer->filePath());
                                res = one.startscript(type, command);
                        } else
                                res = one.startscript(type, command);
Index: src/buffer.C
===================================================================
--- src/buffer.C        (revisione 14981)
+++ src/buffer.C        (copia locale)
@@ -113,7 +113,7 @@ using lyx::support::makeDisplayPath;
 using lyx::support::makeLatexName;
 using lyx::support::onlyFilename;
 using lyx::support::onlyPath;
-using lyx::support::Path;
+using lyx::support::CurrentPath;
 using lyx::support::quoteName;
 using lyx::support::removeAutosaveFile;
 using lyx::support::rename;
@@ -1076,7 +1076,7 @@ int Buffer::runChktex()
        string const path = temppath();
        string const org_path = filePath();
 
-       Path p(path); // path to LaTeX file
+       CurrentPath p(path); // path to LaTeX file
        message(_("Running chktex..."));
 
        // Generate the LaTeX file if neccessary
Index: src/lyxfunc.C
===================================================================
--- src/lyxfunc.C       (revisione 14981)
+++ src/lyxfunc.C       (copia locale)
@@ -118,7 +118,7 @@ using lyx::support::isStrInt;
 using lyx::support::makeAbsPath;
 using lyx::support::makeDisplayPath;
 using lyx::support::package;
-using lyx::support::Path;
+using lyx::support::CurrentPath;
 using lyx::support::quoteName;
 using lyx::support::rtrim;
 using lyx::support::split;
@@ -931,7 +931,7 @@ void LyXFunc::dispatch(FuncRequest const
 
                        // Push directory path.
                        string const path = buffer->temppath();
-                       Path p(path);
+                       CurrentPath p(path);
 
                        // there are three cases here:
                        // 1. we print to a file
@@ -1346,7 +1346,7 @@ void LyXFunc::dispatch(FuncRequest const
                }
 
                case LFUN_PREFERENCES_SAVE: {
-                       Path p(package().user_support());
+                       CurrentPath p(package().user_support());
                        lyxrc.write("preferences", false);
                        break;
                }
Index: src/vc-backend.C
===================================================================
--- src/vc-backend.C    (revisione 14981)
+++ src/vc-backend.C    (copia locale)
@@ -30,7 +30,7 @@ using lyx::support::addPath;
 using lyx::support::contains;
 using lyx::support::onlyFilename;
 using lyx::support::onlyPath;
-using lyx::support::Path;
+using lyx::support::CurrentPath;
 using lyx::support::quoteName;
 using lyx::support::rtrim;
 using lyx::support::split;
@@ -57,7 +57,7 @@ int VCS::doVCCommand(string const & cmd,
 {
        lyxerr[Debug::LYXVC] << "doVCCommand: " << cmd << endl;
        Systemcall one;
-       Path p(path);
+       CurrentPath p(path);
        int const ret = one.startscript(Systemcall::Wait, cmd);
        return ret;
 }
Index: src/frontends/controllers/tex_helpers.C
===================================================================
--- src/frontends/controllers/tex_helpers.C     (revisione 14981)
+++ src/frontends/controllers/tex_helpers.C     (copia locale)
@@ -41,7 +41,7 @@ using support::getVectorFromString;
 using support::libFileSearch;
 using support::onlyFilename;
 using support::package;
-using support::Path;
+using support::CurrentPath;
 using support::quoteName;
 using support::split;
 using support::Systemcall;
@@ -52,7 +52,7 @@ namespace frontend {
 void rescanTexStyles()
 {
        // Run rescan in user lyx directory
-       Path p(package().user_support());
+       CurrentPath p(package().user_support());
        string const command = libFileSearch("scripts", "TeXFiles.py");
        Systemcall one;
        int const status = one.startscript(Systemcall::Wait,
@@ -69,7 +69,7 @@ void rescanTexStyles()
 void texhash()
 {
        // Run texhash in user lyx directory
-       Path p(package().user_support());
+       CurrentPath p(package().user_support());
 
        //path to texhash through system
        Systemcall one;
Index: src/support/path.h
===================================================================
--- src/support/path.h  (revisione 14981)
+++ src/support/path.h  (copia locale)
@@ -20,25 +20,25 @@ namespace lyx {
 namespace support {
 
 /**
- * Path - utility closs for stackable working directories
+ * CurrentPath - utility closs for stackable working directories
  *
  * You can use a local variable of this type to temporarily
  * change to a directory as the cwd, for example :
  *
  * if (blah) {
- *     Path p("/tmp/blah");
+ *     CurrentPath p("/tmp/blah");
  *     ...
  * }
  *
  * At the end of p's scope the cwd is reset to its previous value.
  */
-class Path : boost::noncopyable {
+class CurrentPath : boost::noncopyable {
 public:
        /// change to the given directory
-       explicit Path(std::string const & path);
+       explicit CurrentPath(std::string const & path);
 
        /// set cwd to the previous value if needed
-       ~Path();
+       ~CurrentPath();
 
        /// set cwd to the previous value if needed
        int pop();
@@ -50,13 +50,13 @@ private:
 };
 
 // To avoid the wrong usage:
-// Path("/tmp");   // wrong
-// Path p("/tmp");  // right
+// CurrentPath("/tmp");   // wrong
+// CurrentPath p("/tmp");  // right
 // we add this macro:
 ///
 // With boost 1.34 this is not usable anymore
 //#ifndef PATH_C
-//#define Path(x) unnamed_Path;
+//#define CurrentPath(x) unnamed_Path;
 //#endif
 // Tip gotten from Bobby Schmidt's column in C/C++ Users Journal
 
Index: src/support/path.C
===================================================================
--- src/support/path.C  (revisione 14981)
+++ src/support/path.C  (copia locale)
@@ -23,7 +23,7 @@ using std::string;
 namespace lyx {
 namespace support {
 
-Path::Path(string const & path)
+CurrentPath::CurrentPath(string const & path)
        : popped_(false)
 {
        if (!path.empty()) {
@@ -38,13 +38,13 @@ Path::Path(string const & path)
 }
 
 
-Path::~Path()
+CurrentPath::~CurrentPath()
 {
        if (!popped_) pop();
 }
 
 
-int Path::pop()
+int CurrentPath::pop()
 {
        if (popped_) {
                // should throw an exception
Index: src/lyx_main.C
===================================================================
--- src/lyx_main.C      (revisione 14981)
+++ src/lyx_main.C      (copia locale)
@@ -71,7 +71,7 @@ using lyx::support::getEnv;
 using lyx::support::i18nLibFileSearch;
 using lyx::support::libFileSearch;
 using lyx::support::package;
-using lyx::support::Path;
+using lyx::support::CurrentPath;
 using lyx::support::prependEnvPath;
 using lyx::support::rtrim;
 using lyx::support::Systemcall;
@@ -133,7 +133,7 @@ void reconfigureUserLyXDir()
        string const configure_command = package().configure_command();
 
        lyxerr << lyx::to_utf8(_("LyX: reconfiguring user directory")) << endl;
-       Path p(package().user_support());
+       CurrentPath p(package().user_support());
        Systemcall one;
        one.startscript(Systemcall::Wait, configure_command);
        lyxerr << "LyX: " << lyx::to_utf8(_("Done!")) << endl;

Reply via email to