//===-- SWIG Interface for SBPlatform ---------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

namespace lldb {

    
class SBPlatformConnectOptions
{
public:
    SBPlatformConnectOptions (const char *url);
    
    SBPlatformConnectOptions (const SBPlatformConnectOptions &rhs);
    
    ~SBPlatformConnectOptions ();
    
    const char *
    GetURL();
    
    void
    SetURL(const char *url);
    
    bool
    GetRsyncEnabled();
    
    void
    EnableRsync (const char *options,
                 const char *remote_path_prefix,
                 bool omit_remote_hostname);
    
    void
    DisableRsync ();
    
    const char *
    GetLocalCacheDirectory();
    
    void
    SetLocalCacheDirectory(const char *path);
};

class SBPlatformShellCommand
{
public:
    SBPlatformShellCommand (const char *shell_command);
    
    SBPlatformShellCommand (const SBPlatformShellCommand &rhs);
    
    ~SBPlatformShellCommand();
    
    void
    Clear();

    const char *
    GetCommand();

    void
    SetCommand(const char *shell_command);
    
    const char *
    GetWorkingDirectory ();

    void
    SetWorkingDirectory (const char *path);

    uint32_t
    GetTimeoutSeconds ();
    
    void
    SetTimeoutSeconds (uint32_t sec);
    
    int
    GetSignal ();
    
    int
    GetStatus ();
    
    const char *
    GetOutput ();
};

%feature("docstring",
"A class that represents a platform that can represent the current host or a remote host debug platform.

The SBPlatform class represents the current host, or a remote host.
It can be connected to a remote platform in order to provide ways
to remotely launch and attach to processes, upload/download files,
create directories, run remote shell commands, find locally cached
versions of files from the remote system, and much more.
         
SBPlatform objects can be created and then used to connect to a remote
platform which allows the SBPlatform to be used to get a list of the
current processes on the remote host, attach to one of those processes,
install programs on the remote system, attach and launch processes,
and much more.

Every SBTarget has a corresponding SBPlatform. The platform can be
specified upon target creation, or the currently selected platform
will attempt to be used when creating the target automatically as long
as the currently selected platform matches the target architecture
and executable type. If the architecture or executable type do not match,
a suitable platform will be found automatically."
         
) SBPlatform;
class SBPlatform
{
public:

    SBPlatform ();

    SBPlatform (const char *);

    ~SBPlatform();
    
    bool
    IsValid () const;

    void
    Clear ();

    const char *
    GetWorkingDirectory();
    
    bool
    SetWorkingDirectory(const char *);

    const char *
    GetName ();
    
    SBError
    ConnectRemote (lldb::SBPlatformConnectOptions &connect_options);
    
    void
    DisconnectRemote ();

    bool
    IsConnected();
    
    const char *
    GetTriple();
    
    const char *
    GetHostname ();
    
    const char *
    GetOSBuild ();
    
    const char *
    GetOSDescription ();
    
    uint32_t
    GetOSMajorVersion ();
    
    uint32_t
    GetOSMinorVersion ();
    
    uint32_t
    GetOSUpdateVersion ();
    
    lldb::SBError
    Get (lldb::SBFileSpec &src, lldb::SBFileSpec &dst);

    lldb::SBError
    Put (lldb::SBFileSpec &src, lldb::SBFileSpec &dst);
    
    lldb::SBError
    Install (lldb::SBFileSpec &src, lldb::SBFileSpec &dst);
    
    lldb::SBError
    Run (lldb::SBPlatformShellCommand &shell_command);

    lldb::SBError
    Launch (lldb::SBLaunchInfo &launch_info);

    lldb::SBError
    Kill (const lldb::pid_t pid);

    lldb::SBError
    MakeDirectory (const char *path, uint32_t file_permissions = lldb::eFilePermissionsDirectoryDefault);
    
    uint32_t
    GetFilePermissions (const char *path);
    
    lldb::SBError
    SetFilePermissions (const char *path, uint32_t file_permissions);

    lldb::SBUnixSignals
    GetUnixSignals();

};

} // namespace lldb
