[llvm] r309050 - Revert "llvm-mt: implement simple merging of manifests, not factoring namespaces."

Eric Beckmann via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 25 16:06:46 PDT 2017


Author: ecbeckmann
Date: Tue Jul 25 16:06:46 2017
New Revision: 309050

URL: http://llvm.org/viewvc/llvm-project?rev=309050&view=rev
Log:
Revert "llvm-mt: implement simple merging of manifests, not factoring namespaces."

This reverts commit 813308e240792ca70ed2f998f21df24a5061ada0.

Removed:
    llvm/trunk/test/tools/llvm-mt/Inputs/additional.manifest
    llvm/trunk/test/tools/llvm-mt/Inputs/conflicting.manifest
    llvm/trunk/test/tools/llvm-mt/conflicting.test
    llvm/trunk/test/tools/llvm-mt/simple_merge.test
Modified:
    llvm/trunk/include/llvm/Support/WindowsManifestMerger.h
    llvm/trunk/lib/Support/WindowsManifestMerger.cpp
    llvm/trunk/test/tools/llvm-mt/Inputs/test_manifest.manifest
    llvm/trunk/tools/llvm-mt/llvm-mt.cpp

Modified: llvm/trunk/include/llvm/Support/WindowsManifestMerger.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/WindowsManifestMerger.h?rev=309050&r1=309049&r2=309050&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/WindowsManifestMerger.h (original)
+++ llvm/trunk/include/llvm/Support/WindowsManifestMerger.h Tue Jul 25 16:06:46 2017
@@ -57,8 +57,6 @@ private:
 
 class WindowsManifestMerger {
 public:
-  ~WindowsManifestMerger();
-
   Error merge(const MemoryBuffer &Manifest);
 
   // Returns vector containing merged xml manifest, or uninitialized vector for
@@ -70,8 +68,7 @@ private:
   Error getParseError();
 
 #if LLVM_LIBXML2_ENABLED
-  XMLDocumentImpl CombinedDoc = nullptr;
-  std::vector<XMLDocumentImpl> MergedDocs;
+  XMLNodeImpl CombinedRoot = nullptr;
 #endif
   bool ParseErrorOccurred = false;
 };

Modified: llvm/trunk/lib/Support/WindowsManifestMerger.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/WindowsManifestMerger.cpp?rev=309050&r1=309049&r2=309050&view=diff
==============================================================================
--- llvm/trunk/lib/Support/WindowsManifestMerger.cpp (original)
+++ llvm/trunk/lib/Support/WindowsManifestMerger.cpp Tue Jul 25 16:06:46 2017
@@ -16,11 +16,6 @@
 
 #include <stdarg.h>
 
-#define TO_XML_CHAR(X) reinterpret_cast<const unsigned char *>(X)
-#define FROM_XML_CHAR(X) reinterpret_cast<const char *>(X)
-
-using namespace llvm;
-
 namespace llvm {
 
 char WindowsManifestError::ID = 0;
@@ -29,148 +24,16 @@ WindowsManifestError::WindowsManifestErr
 
 void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; }
 
-static bool xmlStringsEqual(const unsigned char *A, const unsigned char *B) {
-  return strcmp(FROM_XML_CHAR(A), FROM_XML_CHAR(B)) == 0;
-}
-
-bool isMergeableElement(const unsigned char *ElementName) {
-  for (StringRef S : {"application", "assembly", "assemblyIdentity",
-                      "compatibility", "noInherit", "requestedExecutionLevel",
-                      "requestedPrivileges", "security", "trustInfo"}) {
-    if (S == FROM_XML_CHAR(ElementName))
-      return true;
-  }
-  return false;
-}
-
-XMLNodeImpl getChildWithName(XMLNodeImpl Parent,
-                             const unsigned char *ElementName) {
-#if LLVM_LIBXML2_ENABLED
-  for (XMLNodeImpl Child = Parent->children; Child; Child = Child->next)
-    if (xmlStringsEqual(Child->name, ElementName)) {
-      return Child;
-    }
-#endif
-  return nullptr;
-}
-
-const unsigned char *getAttribute(XMLNodeImpl Node,
-                                  const unsigned char *AttributeName) {
-#if LLVM_LIBXML2_ENABLED
-  for (xmlAttrPtr Attribute = Node->properties; Attribute != nullptr;
-       Attribute = Attribute->next) {
-    if (xmlStringsEqual(Attribute->name, AttributeName))
-      return Attribute->children->content;
-  }
-#endif
-  return nullptr;
-}
-
-Error mergeAttributes(XMLNodeImpl OriginalNode, XMLNodeImpl AdditionalNode) {
-#if LLVM_LIBXML2_ENABLED
-  for (xmlAttrPtr Attribute = AdditionalNode->properties; Attribute != nullptr;
-       Attribute = Attribute->next) {
-    if (const unsigned char *OriginalValue =
-            getAttribute(OriginalNode, Attribute->name)) {
-      // Attributes of the same name must also have the same value.  Otherwise
-      // an error is thrown.
-      if (!xmlStringsEqual(OriginalValue, Attribute->children->content))
-        return make_error<WindowsManifestError>(
-            Twine("conflicting attributes for ") +
-            FROM_XML_CHAR(OriginalNode->name));
-    } else {
-      char *NameCopy = strdup(FROM_XML_CHAR(Attribute->name));
-      char *ContentCopy = strdup(FROM_XML_CHAR(Attribute->children->content));
-      xmlNewProp(OriginalNode, TO_XML_CHAR(NameCopy), TO_XML_CHAR(ContentCopy));
-    }
-  }
-#endif
-  return Error::success();
-}
-
-Error treeMerge(XMLNodeImpl OriginalRoot, XMLNodeImpl AdditionalRoot) {
-#if LLVM_LIBXML2_ENABLED
-  XMLNodeImpl AdditionalFirstChild = AdditionalRoot->children;
-  for (XMLNodeImpl Child = AdditionalFirstChild; Child; Child = Child->next) {
-    XMLNodeImpl OriginalChildWithName;
-    if (!isMergeableElement(Child->name) ||
-        !(OriginalChildWithName =
-              getChildWithName(OriginalRoot, Child->name))) {
-      XMLNodeImpl NewChild = xmlCopyNode(Child, 1);
-      if (!NewChild)
-        return make_error<WindowsManifestError>(Twine("error when copying ") +
-                                                FROM_XML_CHAR(Child->name));
-      if (NewChild->ns)
-        xmlFreeNs(NewChild->ns); // xmlCopyNode explicitly defines default
-                                 // namespace, undo this here.
-      if (!xmlAddChild(OriginalRoot, NewChild))
-        return make_error<WindowsManifestError>(Twine("could not merge ") +
-                                                FROM_XML_CHAR(NewChild->name));
-    } else if (auto E = treeMerge(OriginalChildWithName, Child)) {
-      return E;
-    }
-  }
-  if (auto E = mergeAttributes(OriginalRoot, AdditionalRoot))
-    return E;
-#endif
-  return Error::success();
-}
-
-void stripCommentsAndText(XMLNodeImpl Root) {
-  xmlNode StoreNext;
-  for (XMLNodeImpl Child = Root->children; Child; Child = Child->next) {
-    if (!xmlStringsEqual(Child->name, TO_XML_CHAR("text")) &&
-        !xmlStringsEqual(Child->name, TO_XML_CHAR("comment"))) {
-      stripCommentsAndText(Child);
-    } else {
-      StoreNext.next = Child->next;
-      XMLNodeImpl Remove = Child;
-      Child = &StoreNext;
-      xmlUnlinkNode(Remove);
-      xmlFreeNode(Remove);
-    }
-  }
-}
-
-WindowsManifestMerger::~WindowsManifestMerger() {
-#if LLVM_LIBXML2_ENABLED
-  for (auto &Doc : MergedDocs)
-    xmlFreeDoc(Doc);
-#endif
-}
-
 Error WindowsManifestMerger::merge(const MemoryBuffer &Manifest) {
 #if LLVM_LIBXML2_ENABLED
-  if (Manifest.getBufferSize() == 0)
-    return make_error<WindowsManifestError>(
-        "attempted to merge empty manifest");
   xmlSetGenericErrorFunc((void *)this, WindowsManifestMerger::errorCallback);
   XMLDocumentImpl ManifestXML =
       xmlReadMemory(Manifest.getBufferStart(), Manifest.getBufferSize(),
-                    "manifest.xml", nullptr, XML_PARSE_NOBLANKS);
+                    "manifest.xml", nullptr, 0);
   xmlSetGenericErrorFunc(nullptr, nullptr);
   if (auto E = getParseError())
     return E;
-  XMLNodeImpl AdditionalRoot = xmlDocGetRootElement(ManifestXML);
-  stripCommentsAndText(AdditionalRoot);
-  if (CombinedDoc == nullptr) {
-    CombinedDoc = ManifestXML;
-  } else {
-    XMLNodeImpl CombinedRoot = xmlDocGetRootElement(CombinedDoc);
-    if (xmlStringsEqual(CombinedRoot->name, AdditionalRoot->name) &&
-        isMergeableElement(AdditionalRoot->name)) {
-      if (auto E = treeMerge(CombinedRoot, AdditionalRoot)) {
-        return E;
-      }
-    } else {
-      XMLNodeImpl NewChild = xmlCopyNode(AdditionalRoot, 1);
-      if (!NewChild)
-        return make_error<WindowsManifestError>("could not copy manifest");
-      if (!xmlAddChild(CombinedRoot, NewChild))
-        return make_error<WindowsManifestError>("could not append manifest");
-    }
-  }
-  MergedDocs.push_back(ManifestXML);
+  CombinedRoot = xmlDocGetRootElement(ManifestXML);
 #endif
   return Error::success();
 }
@@ -179,16 +42,15 @@ std::unique_ptr<MemoryBuffer> WindowsMan
 #if LLVM_LIBXML2_ENABLED
   unsigned char *XmlBuff;
   int BufferSize = 0;
-  if (CombinedDoc) {
+  if (CombinedRoot) {
     std::unique_ptr<xmlDoc> OutputDoc(xmlNewDoc((const unsigned char *)"1.0"));
-    xmlDocSetRootElement(OutputDoc.get(), xmlDocGetRootElement(CombinedDoc));
-    xmlKeepBlanksDefault(0);
-    xmlDocDumpFormatMemory(OutputDoc.get(), &XmlBuff, &BufferSize, 1);
+    xmlDocSetRootElement(OutputDoc.get(), CombinedRoot);
+    xmlDocDumpMemory(OutputDoc.get(), &XmlBuff, &BufferSize);
   }
   if (BufferSize == 0)
     return nullptr;
   return MemoryBuffer::getMemBuffer(
-      StringRef(FROM_XML_CHAR(XmlBuff), (size_t)BufferSize));
+      StringRef(reinterpret_cast<const char *>(XmlBuff), (size_t)BufferSize));
 #else
   return nullptr;
 #endif

Removed: llvm/trunk/test/tools/llvm-mt/Inputs/additional.manifest
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/Inputs/additional.manifest?rev=309049&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mt/Inputs/additional.manifest (original)
+++ llvm/trunk/test/tools/llvm-mt/Inputs/additional.manifest (removed)
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-  <trustInfo>
-    <security>
-      <requestedPrivileges>
-<!--Comment will be removed-->
-         <requestedExecutionLevel level="3" admin="false"/>
-      </requestedPrivileges>
-    </security>
-  </trustInfo>
-  <dependency>
-    <dependentAssembly>
-      <assemblyIdentity program="logDisplay"/>
-    </dependentAssembly>
-  </dependency>
-  <compatibility>
-    <dependency>
-      <assemblyIdentity program="compatibilityCheck2"/>
-    </dependency>
-    <application>
-      <supportedOS Id="BarOS"/>
-    </application>
-  </compatibility>
-</assembly>

Removed: llvm/trunk/test/tools/llvm-mt/Inputs/conflicting.manifest
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/Inputs/conflicting.manifest?rev=309049&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mt/Inputs/conflicting.manifest (original)
+++ llvm/trunk/test/tools/llvm-mt/Inputs/conflicting.manifest (removed)
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1">
-  <trustInfo>
-    <security>
-      <requestedPrivileges>
-        <requestedExecutionLevel level="2" uiAccess="1"/>
-      </requestedPrivileges>
-    </security>
-  </trustInfo>
-</assembly>

Modified: llvm/trunk/test/tools/llvm-mt/Inputs/test_manifest.manifest
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/Inputs/test_manifest.manifest?rev=309050&r1=309049&r2=309050&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-mt/Inputs/test_manifest.manifest (original)
+++ llvm/trunk/test/tools/llvm-mt/Inputs/test_manifest.manifest Tue Jul 25 16:06:46 2017
@@ -1,9 +1,9 @@
 <?xml version="1.0"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1">
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <trustInfo>
     <security>
       <requestedPrivileges>
-        <requestedExecutionLevel level="3" uiAccess="1"/>
+         <requestedExecutionLevel level="3" uiAccess="1"/>
       </requestedPrivileges>
     </security>
   </trustInfo>
@@ -12,12 +12,4 @@
       <assemblyIdentity program="displayDriver"/>
     </dependentAssembly>
   </dependency>
-  <compatibility>
-    <dependency>
-      <assemblyIdentity program="compatibilityCheck1"/>
-    </dependency>
-    <application>
-      <supportedOS Id="FooOS"/>
-    </application>
-  </compatibility>
 </assembly>

Removed: llvm/trunk/test/tools/llvm-mt/conflicting.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/conflicting.test?rev=309049&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mt/conflicting.test (original)
+++ llvm/trunk/test/tools/llvm-mt/conflicting.test (removed)
@@ -1,7 +0,0 @@
-REQUIRES: libxml2
-UNSUPPORTED: windows
-
-RUN: not llvm-mt /manifest %p/Inputs/test_manifest.manifest /manifest \
-RUN:   %p/Inputs/conflicting.manifest /out:%t 2>&1 >/dev/null | FileCheck %s
-
-CHECK: llvm-mt error: conflicting attributes for requestedExecutionLevel

Removed: llvm/trunk/test/tools/llvm-mt/simple_merge.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/simple_merge.test?rev=309049&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mt/simple_merge.test (original)
+++ llvm/trunk/test/tools/llvm-mt/simple_merge.test (removed)
@@ -1,39 +0,0 @@
-REQUIRES: libxml2
-UNSUPPORTED: windows
-
-RUN: llvm-mt /manifest %p/Inputs/test_manifest.manifest /manifest \
-RUN:   %p/Inputs/additional.manifest /out:%t
-RUN: FileCheck %s -input-file=%t
-
-CHECK:      <?xml version="1.0"?>
-CHECK-NEXT: <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-CHECK-NEXT:   <trustInfo>
-CHECK-NEXT:     <security>
-CHECK-NEXT:       <requestedPrivileges>
-CHECK-NEXT:         <requestedExecutionLevel level="3" uiAccess="1" admin="false"/>
-CHECK-NEXT:       </requestedPrivileges>
-CHECK-NEXT:     </security>
-CHECK-NEXT:   </trustInfo>
-CHECK-NEXT:   <dependency>
-CHECK-NEXT:     <dependentAssembly>
-CHECK-NEXT:       <assemblyIdentity program="displayDriver"/>
-CHECK-NEXT:     </dependentAssembly>
-CHECK-NEXT:   </dependency>
-CHECK-NEXT:   <compatibility>
-CHECK-NEXT:     <dependency>
-CHECK-NEXT:       <assemblyIdentity program="compatibilityCheck1"/>
-CHECK-NEXT:     </dependency>
-CHECK-NEXT:     <application>
-CHECK-NEXT:       <supportedOS Id="FooOS"/>
-CHECK-NEXT:       <supportedOS Id="BarOS"/>
-CHECK-NEXT:     </application>
-CHECK-NEXT:     <dependency>
-CHECK-NEXT:       <assemblyIdentity program="compatibilityCheck2"/>
-CHECK-NEXT:     </dependency>
-CHECK-NEXT:   </compatibility>
-CHECK-NEXT:   <dependency>
-CHECK-NEXT:     <dependentAssembly>
-CHECK-NEXT:       <assemblyIdentity program="logDisplay"/>
-CHECK-NEXT:     </dependentAssembly>
-CHECK-NEXT:   </dependency>
-CHECK-NEXT: </assembly>

Modified: llvm/trunk/tools/llvm-mt/llvm-mt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mt/llvm-mt.cpp?rev=309050&r1=309049&r2=309050&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mt/llvm-mt.cpp (original)
+++ llvm/trunk/tools/llvm-mt/llvm-mt.cpp Tue Jul 25 16:06:46 2017
@@ -95,6 +95,7 @@ int main(int argc, const char **argv) {
   SpecificBumpPtrAllocator<char> ArgAllocator;
   ExitOnErr(errorCodeToError(sys::Process::GetArgumentVector(
       argv_buf, makeArrayRef(argv, argc), ArgAllocator)));
+
   llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
 
   CvtResOptTable T;




More information about the llvm-commits mailing list