]> git.saurik.com Git - apt.git/blame - apt-pkg/pkgsystem.h
cleanup headers and especially #includes everywhere
[apt.git] / apt-pkg / pkgsystem.h
CommitLineData
b2e465d6
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
584e4558 3// $Id: pkgsystem.h,v 1.6 2002/11/11 06:55:50 doogie Exp $
b2e465d6
AL
4/* ######################################################################
5
6 System - Abstraction for running on different systems.
7
8 Instances of this class can be thought of as factories or meta-classes
9 for a variety of more specialized classes. Together this class and
1e3f4083 10 it's specialized offspring completely define the environment and how
b2e465d6
AL
11 to access resources for a specific system. There are several sub
12 areas that are all orthogonal - each system has a unique combination of
13 these sub areas:
14 - Versioning. Different systems have different ideas on versions.
15 Within a system all sub classes must follow the same versioning
16 rules.
17 - Local tool locking to prevent multiple tools from accessing the
18 same database.
19 - Candidate Version selection policy - this is probably almost always
20 managed using a standard APT class
21 - Actual Package installation
22 * Indication of what kind of binary formats are supported
23 - Selection of local 'status' indexes that make up the pkgCache.
24
25 It is important to note that the handling of index files is not a
1e3f4083 26 function of the system. Index files are handled through a separate
b2e465d6
AL
27 abstraction - the only requirement is that the index files have the
28 same idea of versioning as the target system.
29
30 Upon startup each supported system instantiates an instance of the
31 pkgSystem class (using a global constructor) which will make itself
32 available to the main APT init routine. That routine will select the
33 proper system and make it the global default.
34
35 ##################################################################### */
36 /*}}}*/
37#ifndef PKGLIB_PKGSYSTEM_H
38#define PKGLIB_PKGSYSTEM_H
39
472ff00e 40#include <apt-pkg/pkgcache.h>
453b82a3 41#include <apt-pkg/cacheiterators.h>
b2e465d6 42
90f057fd 43#include <vector>
472ff00e 44
b9dadc24
DK
45#ifndef APT_8_CLEANER_HEADERS
46#include <apt-pkg/depcache.h>
47#endif
48
472ff00e 49class pkgDepCache;
b2e465d6
AL
50class pkgPackageManager;
51class pkgVersioningSystem;
52class Configuration;
53class pkgIndexFile;
54
55class pkgSystem
56{
57 public:
58
59 // Global list of supported systems
60 static pkgSystem **GlobalList;
61 static unsigned long GlobalListLen;
62 static pkgSystem *GetSystem(const char *Label);
63
64 const char *Label;
65 pkgVersioningSystem *VS;
66
67 /* Prevent other programs from touching shared data not covered by
68 other locks (cache or state locks) */
69 virtual bool Lock() = 0;
70 virtual bool UnLock(bool NoErrors = false) = 0;
71
72 /* Various helper classes to interface with specific bits of this
73 environment */
74 virtual pkgPackageManager *CreatePM(pkgDepCache *Cache) const = 0;
75
76 /* Load environment specific configuration and perform any other setup
77 necessary */
db5c1b54 78 virtual bool Initialize(Configuration &/*Cnf*/) {return true;};
b2e465d6
AL
79
80 /* Type is some kind of Globally Unique way of differentiating
81 archive file types.. */
82 virtual bool ArchiveSupported(const char *Type) = 0;
83
84 // Return a list of system index files..
584e4558 85 virtual bool AddStatusFiles(std::vector<pkgIndexFile *> &List) = 0;
af87ab54
AL
86 virtual bool FindIndex(pkgCache::PkgFileIterator File,
87 pkgIndexFile *&Found) const = 0;
b2e465d6
AL
88
89 /* Evauluate how 'right' we are for this system based on the filesystem
90 etc.. */
db5c1b54 91 virtual signed Score(Configuration const &/*Cnf*/) {return 0;};
b2e465d6
AL
92
93 pkgSystem();
94 virtual ~pkgSystem() {};
95};
96
97// The environment we are operating in.
98extern pkgSystem *_system;
99
100#endif