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 <ObjectList.h> 10 #include <String.h> 11 12 #include <package/PackageArchitecture.h> 13 #include <package/PackageFlags.h> 14 #include <package/PackageInfoAttributes.h> 15 #include <package/PackageResolvable.h> 16 #include <package/PackageResolvableExpression.h> 17 #include <package/PackageVersion.h> 18 19 20 class BEntry; 21 22 23 namespace BPackageKit { 24 25 26 /* 27 * Keeps a list of package info elements (e.g. name, version, vendor, ...) which 28 * will be converted to package attributes when creating a package. Usually, 29 * these elements have been parsed from a ".PackageInfo"-file. 30 * Alternatively, the package reader populates a BPackageInfo object by 31 * collecting package attributes from an existing package. 32 */ 33 class BPackageInfo { 34 public: 35 struct ParseErrorListener { 36 virtual ~ParseErrorListener(); 37 virtual void OnError(const BString& msg, int line, int col) = 0; 38 }; 39 40 public: 41 BPackageInfo(); 42 ~BPackageInfo(); 43 44 status_t ReadFromConfigFile( 45 const BEntry& packageInfoEntry, 46 ParseErrorListener* listener = NULL); 47 status_t ReadFromConfigString( 48 const BString& packageInfoString, 49 ParseErrorListener* listener = NULL); 50 51 status_t InitCheck() const; 52 53 const BString& Name() const; 54 const BString& Summary() const; 55 const BString& Description() const; 56 const BString& Vendor() const; 57 const BString& Packager() const; 58 const BString& Checksum() const; 59 60 uint32 Flags() const; 61 62 BPackageArchitecture Architecture() const; 63 64 const BPackageVersion& Version() const; 65 66 const BObjectList<BString>& CopyrightList() const; 67 const BObjectList<BString>& LicenseList() const; 68 69 const BObjectList<BPackageResolvable>& ProvidesList() const; 70 const BObjectList<BPackageResolvableExpression>& 71 RequiresList() const; 72 const BObjectList<BPackageResolvableExpression>& 73 SupplementsList() const; 74 const BObjectList<BPackageResolvableExpression>& 75 ConflictsList() const; 76 const BObjectList<BPackageResolvableExpression>& 77 FreshensList() const; 78 const BObjectList<BString>& ReplacesList() const; 79 80 void SetName(const BString& name); 81 void SetSummary(const BString& summary); 82 void SetDescription(const BString& description); 83 void SetVendor(const BString& vendor); 84 void SetPackager(const BString& packager); 85 void SetChecksum(const BString& checksum); 86 87 void SetFlags(uint32 flags); 88 89 void SetArchitecture( 90 BPackageArchitecture architecture); 91 92 void SetVersion(const BPackageVersion& version); 93 94 void ClearCopyrightList(); 95 status_t AddCopyright(const BString& copyright); 96 97 void ClearLicenseList(); 98 status_t AddLicense(const BString& license); 99 100 void ClearProvidesList(); 101 status_t AddProvides(const BPackageResolvable& provides); 102 103 void ClearRequiresList(); 104 status_t AddRequires( 105 const BPackageResolvableExpression& expr); 106 107 void ClearSupplementsList(); 108 status_t AddSupplements( 109 const BPackageResolvableExpression& expr); 110 111 void ClearConflictsList(); 112 status_t AddConflicts( 113 const BPackageResolvableExpression& expr); 114 115 void ClearFreshensList(); 116 status_t AddFreshens( 117 const BPackageResolvableExpression& expr); 118 119 void ClearReplacesList(); 120 status_t AddReplaces(const BString& replaces); 121 122 void Clear(); 123 124 public: 125 static status_t GetArchitectureByName(const BString& name, 126 BPackageArchitecture& _architecture); 127 128 static const char* kElementNames[]; 129 static const char* kArchitectureNames[]; 130 131 private: 132 class Parser; 133 134 private: 135 BString fName; 136 BString fSummary; 137 BString fDescription; 138 BString fVendor; 139 BString fPackager; 140 141 uint32 fFlags; 142 143 BPackageArchitecture fArchitecture; 144 145 BPackageVersion fVersion; 146 147 BObjectList<BString> fCopyrightList; 148 BObjectList<BString> fLicenseList; 149 150 BObjectList<BPackageResolvable> fProvidesList; 151 152 BObjectList<BPackageResolvableExpression> fRequiresList; 153 BObjectList<BPackageResolvableExpression> fSupplementsList; 154 155 BObjectList<BPackageResolvableExpression> fConflictsList; 156 157 BObjectList<BPackageResolvableExpression> fFreshensList; 158 159 BObjectList<BString> fReplacesList; 160 161 BString fChecksum; 162 }; 163 164 165 } // namespace BPackageKit 166 167 168 #endif // _PACKAGE__PACKAGE_INFO_H_ 169