18c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski#ifndef AAPT_MANIFEST_MERGER_H 28c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski#define AAPT_MANIFEST_MERGER_H 38c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 48c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski#include "Logger.h" 58c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski#include "Source.h" 68c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski#include "XmlDom.h" 78c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 88c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski#include <memory> 98c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski#include <string> 108c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 118c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinskinamespace aapt { 128c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 138c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinskiclass ManifestMerger { 148c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinskipublic: 158c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski struct Options { 168c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski }; 178c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 188c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski ManifestMerger(const Options& options); 198c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 208c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski bool setAppManifest(const Source& source, const std::u16string& package, 218c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski std::unique_ptr<xml::Node> root); 228c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 238c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski bool mergeLibraryManifest(const Source& source, const std::u16string& package, 248c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski std::unique_ptr<xml::Node> libRoot); 258c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 268c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski xml::Node* getMergedXml(); 278c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 288c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski bool printMerged(); 298c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 308c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinskiprivate: 318c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski bool mergeNewOrEqual(xml::Element* parentA, xml::Element* elA, xml::Element* elB); 328c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski bool mergePreferRequired(xml::Element* parentA, xml::Element* elA, xml::Element* elB); 338c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski bool checkEqual(xml::Element* elA, xml::Element* elB); 348c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski bool mergeApplication(xml::Element* applicationA, xml::Element* applicationB); 358c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski bool mergeUsesSdk(xml::Element* elA, xml::Element* elB); 368c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 378c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski Options mOptions; 388c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski std::unique_ptr<xml::Node> mRoot; 398c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski SourceLogger mAppLogger; 408c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski SourceLogger mLogger; 418c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski}; 428c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 438c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski} // namespace aapt 448c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski 458c831ca87bb7c8699b2a5cb34b8d35deedf9ce4eAdam Lesinski#endif // AAPT_MANIFEST_MERGER_H 46