]> cygwin.com Git - cygwin-apps/setup.git/blame - package_version.h
2002-11-25 Robert Collins <rbtcollins@hotmail.com>
[cygwin-apps/setup.git] / package_version.h
CommitLineData
7939f6d1
RC
1/*
2 * Copyright (c) 2001, Robert Collins.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * A copy of the GNU General Public License can be found at
10 * http://www.gnu.org/
11 *
12 * Written by Robert Collins <rbtcollins@hotmail.com>
13 *
14 */
15
fa0c0d10 16/* This is a package version abstrct class, that should be able to
7939f6d1
RC
17 * arbitrate acceess to cygwin binary packages, cygwin source package,
18 * and the rpm and deb equivalents of the same.
19 */
20
fa0c0d10
RC
21#ifndef _PACKAGE_VERSION_H_
22#define _PACKAGE_VERSION_H_
7939f6d1
RC
23
24/* standard binary package metadata:
25 * Name (ie mutt
26 * Vendor Version (ie 2.5.1)
27 * Package Version (ie 16)
28 * Stability
29 * Files
30 */
31
32/* For non installed files, this class can be populated via information about
33 * what is available on the net, or by parsing a specific package file.
34 * for installed packages, this class should represent what is currently installed,
35 * - updated by what net metadata has about it.
36 * i.e. the stability of this version will change simply because the net mirrors
37 * now consider it old.
38 */
39
7b606ae5 40class CategoryList;
3c196821
RC
41
42/*Required for parsing */
bb849dbd 43#include "package_source.h"
3c054baf 44#include "String++.h"
aa1e3b4d 45#include "PackageSpecification.h"
4f591f9d 46#include "PackageTrust.h"
aa1e3b4d 47#include <vector>
bb849dbd 48
7939f6d1
RC
49typedef enum
50{
51 package_invalid,
52 package_old,
53 package_current,
54 package_experimental
55}
56package_stability_t;
57
58typedef enum
59{
60 package_notinstalled,
61 package_installed
62}
63package_status_t;
64
65typedef enum
66{
67 package_binary,
68 package_source
69}
70package_type_t;
71
3c196821
RC
72/* A wrapper class to be copied by value that
73 references the same package.
74 Nothing is virtual, because the wrapper cannot be inherited.
75 However, as all the methods are implemented in the referenced
76 _packageversion, that class allows virtual overriding.
77 */
78
79class _packageversion;
80
81/* This class has pointer semantics
82 Specifically: a=b does not alter the value of *a.
83 */
fa0c0d10 84class packageversion
7939f6d1
RC
85{
86public:
3c196821
RC
87 packageversion (); /* creates an empty packageversion */
88 packageversion (_packageversion *); /* used when creating an instance */
89 packageversion (packageversion const &);
90 ~packageversion ();
91 packageversion &operator= (packageversion const &);
92 bool operator ! () const; /* true if the package is invalid. (i.e.
93 uninitialised */
94 operator bool () const; /* returns ! !() */
95 bool operator == (packageversion const &) const; /* equality */
96 bool operator != (packageversion const &) const;
97 bool operator < (packageversion const &) const;
98 bool operator <= (packageversion const &) const;
99 bool operator > (packageversion const &) const;
100 bool operator >= (packageversion const &) const;
101
102 String const Name () const;
103 String const Vendor_version () const;
104 String const Package_version () const;
105 String const Canonical_version () const;
106 void setCanonicalVersion (String const &);
107 package_status_t Status () const;
108 package_type_t Type () const;
109 String const getfirstfile ();
110 String const getnextfile ();
111 String const SDesc () const;
112 void set_sdesc (String const &);
113 String const LDesc () const;
114 void set_ldesc (String const &);
115 packageversion sourcePackage ();
116 PackageSpecification & sourcePackageSpecification ();
117 void setSourcePackageSpecification (PackageSpecification const &);
118
119 /* invariant: these never return NULL */
666bf37d 120 std::vector <std::vector <PackageSpecification *> *> *depends(), *predepends(),
b1ff53ed 121 *recommends(), *suggests(), *replaces(), *conflicts(), *provides(), *binaries();
3c196821
RC
122
123 bool picked() const; /* true if this version is to be installed */
124 void pick(bool); /* trigger an install/reinsall */
125 /* a change - install/uninstall/reinstall/source install
126 has been requested */
127 bool changeRequested () const;
128
129 void uninstall ();
130 /* invariant: never null */
e5662e0a
RC
131 packagesource *source(); /* where can we source the file from */
132 /* invariant: never null */
666bf37d 133 std::vector <packagesource> *sources(); /* expose the list of files.
e5662e0a
RC
134 source() returns the 'default' file
135 sources() allows managing multiple files
136 in a single package
137 */
3c196821
RC
138
139 bool accessible () const;
4f591f9d
RC
140
141 /* ensure that the depends clause is satisfied */
142 int set_requirements (trusts deftrust = TRUST_CURR, size_t depth = 0);
05c5b8a6 143
3c196821
RC
144private:
145 _packageversion *data; /* Invariant: * data is always valid */
146};
147
148class _packageversion
149{
150public:
151 _packageversion();
152 virtual ~_packageversion();
bb849dbd 153 /* for list inserts/mgmt. */
3c054baf 154 String key;
7939f6d1
RC
155 /* name is needed here, because if we are querying a file, the data may be embedded in
156 the file */
3c054baf
RC
157 virtual String const Name () = 0;
158 virtual String const Vendor_version () = 0;
159 virtual String const Package_version () = 0;
160 virtual String const Canonical_version () = 0;
3c196821 161 virtual void setCanonicalVersion (String const &) = 0;
7939f6d1
RC
162 virtual package_status_t Status () = 0;
163// virtual package_stability_t Stability () = 0;
164 virtual package_type_t Type () = 0;
165 /* TODO: we should probably return a metaclass - file name & path & size & type
166 - ie doc/script/binary
167 */
3c054baf
RC
168 virtual String const getfirstfile () = 0;
169 virtual String const getnextfile () = 0;
170 virtual String const SDesc () = 0;
171 virtual void set_sdesc (String const &) = 0;
172 virtual String const LDesc () = 0;
173 virtual void set_ldesc (String const &) = 0;
aa1e3b4d 174 /* only semantically meaningful for binary packages */
3c196821
RC
175 /* direct link to the source package for this binary */
176 /* if multiple versions exist and the source doesn't discriminate
177 then the most recent is used
178 */
179 virtual packageversion sourcePackage ();
180 virtual PackageSpecification & sourcePackageSpecification ();
181 virtual void setSourcePackageSpecification (PackageSpecification const &);
aa1e3b4d 182
666bf37d 183 std::vector <std::vector <PackageSpecification *> *> depends, predepends, recommends,
b1ff53ed 184 suggests, replaces, conflicts, provides, binaries;
aa1e3b4d 185
3c196821
RC
186 bool picked; /* non zero if this version is to be installed */
187 /* This will also trigger reinstalled if it is set */
188 /* a change - install/uninstall/reinstall/source install
189 has been requested */
190 bool changeRequested ();
bb849dbd 191
7939f6d1 192
bb849dbd 193 virtual void uninstall () = 0;
666bf37d 194 std::vector<packagesource> sources; /* where can we source the files from */
fa0c0d10 195
3c196821 196 bool accessible () const;
7939f6d1 197
bb849dbd
RC
198 /* TODO: Implement me:
199 static package_meta * scan_package (io_stream *);
200 */
3c196821 201 size_t references;
aa1e3b4d 202protected:
3c196821 203 /* only meaningful for binary packages */
aa1e3b4d 204 PackageSpecification _sourcePackage;
3c196821 205 packageversion sourceVersion;
7939f6d1
RC
206};
207
fa0c0d10 208#endif /* _PACKAGE_VERSION_H_ */
This page took 0.051693 seconds and 5 git commands to generate.