1 /* 2 * Copyright 2011, Haiku, Inc. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _PACKAGE__PACKAGE_INFO_H_ 6 #define _PACKAGE__PACKAGE_INFO_H_ 7 8 9 #include <Archivable.h> 10 #include <ObjectList.h> 11 #include <String.h> 12 #include <StringList.h> 13 14 #include <package/GlobalWritableFileInfo.h> 15 #include <package/PackageArchitecture.h> 16 #include <package/PackageFlags.h> 17 #include <package/PackageInfoAttributes.h> 18 #include <package/PackageResolvable.h> 19 #include <package/PackageResolvableExpression.h> 20 #include <package/PackageVersion.h> 21 #include <package/User.h> 22 #include <package/UserSettingsFileInfo.h> 23 24 25 class BEntry; 26 class BFile; 27 28 29 namespace BPackageKit { 30 31 32 /* 33 * Keeps a list of package info elements (e.g. name, version, vendor, ...) which 34 * will be converted to package attributes when creating a package. Usually, 35 * these elements have been parsed from a ".PackageInfo" file. 36 * Alternatively, they can be read from an existing package file. 37 */ 38 class BPackageInfo : public BArchivable { 39 public: 40 struct ParseErrorListener { 41 virtual ~ParseErrorListener(); 42 virtual void OnError(const BString& msg, int line, int col) = 0; 43 }; 44 45 public: 46 BPackageInfo(); 47 BPackageInfo(BMessage* archive, 48 status_t* _error = NULL); 49 virtual ~BPackageInfo(); 50 51 status_t ReadFromConfigFile( 52 const BEntry& packageInfoEntry, 53 ParseErrorListener* listener = NULL); 54 status_t ReadFromConfigFile( 55 BFile& packageInfoFile, 56 ParseErrorListener* listener = NULL); 57 status_t ReadFromConfigString( 58 const BString& packageInfoString, 59 ParseErrorListener* listener = NULL); 60 status_t ReadFromPackageFile(const char* path); 61 status_t ReadFromPackageFile(int fd); 62 63 status_t InitCheck() const; 64 65 const BString& Name() const; 66 const BString& Summary() const; 67 const BString& Description() const; 68 const BString& Vendor() const; 69 const BString& Packager() const; 70 const BString& BasePackage() const; 71 const BString& Checksum() const; 72 const BString& InstallPath() const; 73 74 uint32 Flags() const; 75 76 BPackageArchitecture Architecture() const; 77 78 const BPackageVersion& Version() const; 79 80 const BStringList& CopyrightList() const; 81 const BStringList& LicenseList() const; 82 const BStringList& URLList() const; 83 const BStringList& SourceURLList() const; 84 85 const BObjectList<BGlobalWritableFileInfo>& 86 GlobalWritableFileInfos() const; 87 const BObjectList<BUserSettingsFileInfo>& 88 UserSettingsFileInfos() const; 89 90 const BObjectList<BUser>& Users() const; 91 const BStringList& Groups() const; 92 93 const BStringList& PostInstallScripts() const; 94 95 const BObjectList<BPackageResolvable>& ProvidesList() const; 96 const BObjectList<BPackageResolvableExpression>& 97 RequiresList() const; 98 const BObjectList<BPackageResolvableExpression>& 99 SupplementsList() const; 100 const BObjectList<BPackageResolvableExpression>& 101 ConflictsList() const; 102 const BObjectList<BPackageResolvableExpression>& 103 FreshensList() const; 104 const BStringList& ReplacesList() const; 105 106 BString CanonicalFileName() const; 107 108 void SetName(const BString& name); 109 void SetSummary(const BString& summary); 110 void SetDescription(const BString& description); 111 void SetVendor(const BString& vendor); 112 void SetPackager(const BString& packager); 113 void SetBasePackage(const BString& basePackage); 114 void SetChecksum(const BString& checksum); 115 void SetInstallPath(const BString& installPath); 116 117 void SetFlags(uint32 flags); 118 119 void SetArchitecture( 120 BPackageArchitecture architecture); 121 122 void SetVersion(const BPackageVersion& version); 123 124 void ClearCopyrightList(); 125 status_t AddCopyright(const BString& copyright); 126 127 void ClearLicenseList(); 128 status_t AddLicense(const BString& license); 129 130 void ClearURLList(); 131 status_t AddURL(const BString& url); 132 133 void ClearSourceURLList(); 134 status_t AddSourceURL(const BString& url); 135 136 void ClearGlobalWritableFileInfos(); 137 status_t AddGlobalWritableFileInfo( 138 const BGlobalWritableFileInfo& info); 139 140 void ClearUserSettingsFileInfos(); 141 status_t AddUserSettingsFileInfo( 142 const BUserSettingsFileInfo& info); 143 144 void ClearUsers(); 145 status_t AddUser(const BUser& user); 146 147 void ClearGroups(); 148 status_t AddGroup(const BString& group); 149 150 void ClearPostInstallScripts(); 151 status_t AddPostInstallScript(const BString& path); 152 153 void ClearProvidesList(); 154 status_t AddProvides(const BPackageResolvable& provides); 155 156 void ClearRequiresList(); 157 status_t AddRequires( 158 const BPackageResolvableExpression& expr); 159 160 void ClearSupplementsList(); 161 status_t AddSupplements( 162 const BPackageResolvableExpression& expr); 163 164 void ClearConflictsList(); 165 status_t AddConflicts( 166 const BPackageResolvableExpression& expr); 167 168 void ClearFreshensList(); 169 status_t AddFreshens( 170 const BPackageResolvableExpression& expr); 171 172 void ClearReplacesList(); 173 status_t AddReplaces(const BString& replaces); 174 175 void Clear(); 176 177 virtual status_t Archive(BMessage* archive, 178 bool deep = true) const; 179 static BArchivable* Instantiate(BMessage* archive); 180 181 status_t GetConfigString(BString& _string) const; 182 BString ToString() const; 183 184 public: 185 static status_t GetArchitectureByName(const BString& name, 186 BPackageArchitecture& _architecture); 187 188 static status_t ParseVersionString(const BString& string, 189 bool revisionIsOptional, 190 BPackageVersion& _version, 191 ParseErrorListener* listener = NULL); 192 193 public: 194 static const char* const kElementNames[]; 195 static const char* const kArchitectureNames[]; 196 static const char* const kWritableFileUpdateTypes[]; 197 198 private: 199 class Parser; 200 friend class Parser; 201 struct StringBuilder; 202 struct FieldName; 203 struct PackageFileLocation; 204 205 typedef BObjectList<BPackageResolvable> ResolvableList; 206 typedef BObjectList<BPackageResolvableExpression> 207 ResolvableExpressionList; 208 209 typedef BObjectList<BGlobalWritableFileInfo> 210 GlobalWritableFileInfoList; 211 typedef BObjectList<BUserSettingsFileInfo> 212 UserSettingsFileInfoList; 213 214 typedef BObjectList<BUser> UserList; 215 216 private: 217 status_t _ReadFromPackageFile( 218 const PackageFileLocation& fileLocation); 219 220 static status_t _AddVersion(BMessage* archive, 221 const char* field, 222 const BPackageVersion& version); 223 static status_t _AddResolvables(BMessage* archive, 224 const char* field, 225 const ResolvableList& resolvables); 226 static status_t _AddResolvableExpressions(BMessage* archive, 227 const char* field, 228 const ResolvableExpressionList& 229 expressions); 230 static status_t _AddGlobalWritableFileInfos(BMessage* archive, 231 const char* field, 232 const GlobalWritableFileInfoList& 233 infos); 234 static status_t _AddUserSettingsFileInfos(BMessage* archive, 235 const char* field, 236 const UserSettingsFileInfoList& 237 infos); 238 static status_t _AddUsers(BMessage* archive, const char* field, 239 const UserList& users); 240 241 static status_t _ExtractVersion(BMessage* archive, 242 const char* field, int32 index, 243 BPackageVersion& _version); 244 static status_t _ExtractStringList(BMessage* archive, 245 const char* field, BStringList& _list); 246 static status_t _ExtractResolvables(BMessage* archive, 247 const char* field, 248 ResolvableList& _resolvables); 249 static status_t _ExtractResolvableExpressions(BMessage* archive, 250 const char* field, 251 ResolvableExpressionList& _expressions); 252 static status_t _ExtractGlobalWritableFileInfos( 253 BMessage* archive, const char* field, 254 GlobalWritableFileInfoList& _infos); 255 static status_t _ExtractUserSettingsFileInfos( 256 BMessage* archive, const char* field, 257 UserSettingsFileInfoList& _infos); 258 static status_t _ExtractUsers(BMessage* archive, 259 const char* field, UserList& _users); 260 261 private: 262 BString fName; 263 BString fSummary; 264 BString fDescription; 265 BString fVendor; 266 BString fPackager; 267 BString fBasePackage; 268 269 uint32 fFlags; 270 271 BPackageArchitecture fArchitecture; 272 273 BPackageVersion fVersion; 274 275 BStringList fCopyrightList; 276 BStringList fLicenseList; 277 BStringList fURLList; 278 BStringList fSourceURLList; 279 280 BObjectList<BGlobalWritableFileInfo> fGlobalWritableFileInfos; 281 BObjectList<BUserSettingsFileInfo> fUserSettingsFileInfos; 282 283 UserList fUsers; 284 BStringList fGroups; 285 286 BStringList fPostInstallScripts; 287 288 ResolvableList fProvidesList; 289 290 ResolvableExpressionList fRequiresList; 291 ResolvableExpressionList fSupplementsList; 292 ResolvableExpressionList fConflictsList; 293 ResolvableExpressionList fFreshensList; 294 295 BStringList fReplacesList; 296 297 BString fChecksum; 298 BString fInstallPath; 299 }; 300 301 302 } // namespace BPackageKit 303 304 305 #endif // _PACKAGE__PACKAGE_INFO_H_ 306