Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #26451
    Flammenkuchen
    Participant

    #26453
    support
    Keymaster

    Hi,

    We have tested SysprogsSync with gcc versions as old as 4.2.1 (FreeBSD 9.2) and most modern Linux distros, however it looks like FreeBSD 11.1 is different from the environments we checked.

    Normally, VisualGDB would automatically rebuild SysprogsSync with the USE_REGEX_H macro (avoiding the unsupported C++ regex API), however it looks like there are other issues preventing it from building.

    Generally, the easiest way to get it working would be to disable SysprogsSync for that host via Tools->VisualGDB->SSH Host Manager->Host-wide Settings->SysprogsSync Engine = disabled. VisualGDB will then fall back to slower command line-based method of synchronizing files.

    If you would like to get the maximum performance out of file transfers, please try modifying the SysprogsSync.cpp file as follows:

    • Unconditionally define USE_REGEX_H
    • Define PATH_MAX to be 1024
    • Check your system headers for the correct way of including the stat64 support. SysprogsSync needs it to synchronize files larger than 4GB. Update SysprogsSync.cpp accordingly.

    Once you can confirm that SysprogsSync builds successfully, please try renaming the built executable to SysprogsSync-v1.1 and placing it anywhere in the PATH on the target machine. Then restart Visual Studio and VisualGDB will automatically recognize it and will use it for high-speed file synchronization.

    #26454
    Flammenkuchen
    Participant

    It still does not work having:

     

    • Unconditionally define USE_REGEX_H
    • Define PATH_MAX to be 1024

    Getting FreeBSD 9.2 32 bit seems very difficult, as it’s a old version. Can you not make VisualGDB compatible with latest FreeBSD Version? (11.0/12.0 32 bit/64bit)

    Because not using SysprogsSync does not work for me, as it’s that slow, that it is not working either.

    SysprogsSync.cpp: In static member function ‘static int StatImpl::Query(const char*, StatImpl::Data*)’:
    SysprogsSync.cpp:137:29: error: invalid use of incomplete type ‘struct stat64’
    return stat64(pFile, pData);
    ^
    SysprogsSync.cpp:133:17: error: forward declaration of ‘struct stat64’
    typedef struct stat64 Data;
    ^
    SysprogsSync.cpp: In function ‘void FillMissingDirentType(dirent*, const string&)’:
    SysprogsSync.cpp:188:18: error: aggregate ‘StatImpl::Data statData’ has incomplete type and cannot be defined
    StatImpl::Data statData;
    ^
    SysprogsSync.cpp: In member function ‘void FileSet::HandleRegularFile(UniqueFileID, const char*, const char*)’:
    SysprogsSync.cpp:328:18: error: aggregate ‘StatImpl::Data statData’ has incomplete type and cannot be defined
    StatImpl::Data statData;
    ^
    SysprogsSync.cpp: In member function ‘void FileSet::HandleSymlink(std::string&, std::string&, const char*, bool)’:
    SysprogsSync.cpp:434:18: error: aggregate ‘StatImpl::Data statBuffer’ has incomplete type and cannot be defined
    StatImpl::Data statBuffer;
    ^
    SysprogsSync.cpp: In member function ‘void FileSet::IndexDirectoryRecursively(UniqueFileID, std::string)’:
    SysprogsSync.cpp:484:19: error: aggregate ‘StatImpl::Data statData’ has incomplete type and cannot be defined
    StatImpl::Data statData;
    ^
    SysprogsSync.cpp: In member function ‘void FileSet::BuildAndOutputIndex(const char*, bool)’:
    SysprogsSync.cpp:588:19: error: aggregate ‘StatImpl::Data statData’ has incomplete type and cannot be defined
    StatImpl::Data statData;
    ^
    SysprogsSync.cpp: In function ‘int SendOutFiles(const std::vector<NameRule>&, const std::vector<NameRule>&, const FileSet&)’:
    SysprogsSync.cpp:725:18: error: aggregate ‘StatImpl::Data statData’ has incomplete type and cannot be defined
    StatImpl::Data statData;

     

    #26457
    support
    Keymaster

    Sorry, FreeBSD is much less popular than Linux, so ensuring full out-of-the-box compatibility with it has a lower priority for us.

    It also looks like the problem is caused by the use of the 32-bit FreeBSD instead of a 64-bit one. Please consider switching to a 64-bit FreeBSD build instead.

    As a quick-and-dirty workaround to make it work with a 32-bit FreBSD, please try locating the following line in SysprogsSync.cpp:

    #if defined(__FreeBSD__) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64

    Then replace it with just

    #if defined(__FreeBSD__)

    This will break synchronization for files larger than 4 GB, however should work for all other cases.

Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.