X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/b84fa7158d04f8b2136f01dda106ba0272027887..acddd9188c21c2e13aff5cea3a82f2d01aff788b:/apt-pkg/pkgsystem.h diff --git a/apt-pkg/pkgsystem.h b/apt-pkg/pkgsystem.h index 246762e0b..affaa5c9a 100644 --- a/apt-pkg/pkgsystem.h +++ b/apt-pkg/pkgsystem.h @@ -1,13 +1,12 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: pkgsystem.h,v 1.6 2002/11/11 06:55:50 doogie Exp $ /* ###################################################################### System - Abstraction for running on different systems. Instances of this class can be thought of as factories or meta-classes for a variety of more specialized classes. Together this class and - it's speciallized offspring completely define the environment and how + it's specialized offspring completely define the environment and how to access resources for a specific system. There are several sub areas that are all orthogonal - each system has a unique combination of these sub areas: @@ -23,7 +22,7 @@ - Selection of local 'status' indexes that make up the pkgCache. It is important to note that the handling of index files is not a - function of the system. Index files are handled through a seperate + function of the system. Index files are handled through a separate abstraction - the only requirement is that the index files have the same idea of versioning as the target system. @@ -37,17 +36,24 @@ #ifndef PKGLIB_PKGSYSTEM_H #define PKGLIB_PKGSYSTEM_H +#include +#include -#include #include - + +#ifndef APT_8_CLEANER_HEADERS +#include +#endif + +class pkgDepCache; class pkgPackageManager; class pkgVersioningSystem; class Configuration; class pkgIndexFile; +class pkgSystemPrivate; class pkgSystem -{ +{ public: // Global list of supported systems @@ -55,8 +61,8 @@ class pkgSystem static unsigned long GlobalListLen; static pkgSystem *GetSystem(const char *Label); - const char *Label; - pkgVersioningSystem *VS; + const char * const Label; + pkgVersioningSystem * const VS; /* Prevent other programs from touching shared data not covered by other locks (cache or state locks) */ @@ -76,16 +82,46 @@ class pkgSystem virtual bool ArchiveSupported(const char *Type) = 0; // Return a list of system index files.. - virtual bool AddStatusFiles(std::vector &List) = 0; + virtual bool AddStatusFiles(std::vector &List) = 0; + virtual bool FindIndex(pkgCache::PkgFileIterator File, pkgIndexFile *&Found) const = 0; - + /* Evauluate how 'right' we are for this system based on the filesystem etc.. */ - virtual signed Score(Configuration const &/*Cnf*/) {return 0;}; - - pkgSystem(); - virtual ~pkgSystem() {}; + virtual signed Score(Configuration const &/*Cnf*/) { + return 0; + }; + + //FIXME: these methods should be virtual + /** does this system has support for MultiArch? + * + * Systems supporting only single arch (not systems which are single arch) + * are considered legacy systems and support for it will likely degrade over + * time. + * + * The default implementation returns always \b true. + * + * @return \b true if the system supports MultiArch, \b false if not. + */ + bool MultiArchSupported() const; + /** architectures supported by this system + * + * A MultiArch capable system might be configured to use + * this capability. + * + * @return a list of all architectures (native + foreign) configured + * for on this system (aka: which can be installed without force) + */ + std::vector ArchitecturesSupported() const; + + APT_HIDDEN void SetVersionMapping(map_id_t const in, map_id_t const out); + APT_HIDDEN map_id_t GetVersionMapping(map_id_t const in) const; + + pkgSystem(char const * const Label, pkgVersioningSystem * const VS); + virtual ~pkgSystem(); + private: + pkgSystemPrivate * const d; }; // The environment we are operating in.