CMake changes to enable creating independent nuget packages according to the platform.
Packages names are:
- Microsoft.MSIX.Packaging.n.n.n.nupkg
- Microsoft.MSIX.Packaging.AOSP.n.n.n.nupkg
- Microsoft.MSIX.Packaging.iOS.n.n.n.nupkg
- Microsoft.MSIX.Packaging.Linux.n.n.n.nupkg
- Microsoft.MSIX.Packaging.MacOS.n.n.n.nupkg
- Microsoft.MSIX.Packaging.Windows.n.n.n.nupkg
where n.n.n is the version of the SDK.
Other changes:
1. Fix bug where iOS couldn't find git, so the SDK version was always 0.0.0
2. Change iOS BVT to link agains libmsix.dylib and libmsixtestcommon.dylib instead of libmsix.0.0.0.dylib and libmsixtestcommon.0.0.0.dylib
3. Change testios.sh to exit if compiling the test app fails
4. Remove extra space between THIRD and PARTY in "THIRD PARTY CODE NOTICE" file name
5. Removed unnecessary cmakein files
reducing the msix sdk binary size for android by ~3.5MB by switching to use the inbox android java xml no validation parser instead of xerces. This reduces the libmsix.so from ~5.8MB to ~2.3 MB.
- Need to use JNI interop for accessing the java xml parser elements. Made sure that local refs to java objects are released when done.
-by default on android, it will use javaxml. For flexibility, if one still wants to use the native xerces parse, they can use the -parser-xerces build flag.
- verified that androidBVT tests pass.
Related work items: #18565184
Enable the user to disable bundle support for the SDK by specifying -DSKIP_BUNDLES=on on CMake. If the user tries to unpack a bundle or create a bundle factory they will get 0x80070032 (E_NOTSUPPORTED). The binary size decreases ~60k.
Win x64
- bundle: 464 k
- no bundle: 413 k
Win x86
- bundle: 330 k
- no bundle: 293 k
Linux
- bundle: 5,424 k
- no bundle: 5,330 k
AOSP arm
- bundle: 4,381 k
- no bundle: 4,313 k
AOSP arm v7a
- bundle: 4,288 k
- no bundle: 4,220 k
MacOS
- bundle: 4,487 k
- no bundle: 4,413 k
iOS arm64
- bundle: 4,516 k
- no bundle: 4,458 k
Related work items: #18753331
This changes includes
- Adding version number to makemsix
- Fix multiple warning in different platforms
- Add implementation for IStream::Stat. This is specially required for Gdiplus::Image::FromStream, otherwise the image won't load.
Related work items: #18849745, #18849764, #18849775
To enable statically link the runtime library use "makewin <arch> -mt" or pass "-DUSE_STATIC_MSVC=on". Default is off.
Note: This increase the size of the binary considerably.
Related work items: #18288248
Implement missing functionality of IAppxManifestReader (except two methods that didn't seem relevant for now) and new public API to get any element from the AppxManifest.xml.
IMSIXDocumentElement
- GetDocumentElement - returns a IMSIXElement.
IMSIXElement
- GetAttributeValue - takes an attribute name and returns its value. Null if not present.
- GetText - returns the text of the node. Null if not present.
- GetElements - takes an xpath string and returns an IMSIXElementEnumerator with the result.
IMSIXElementEnumerator
- GetCurrent - returns current IMSIXElement
- GetHasCurrent - return true if there's an element in the current position of the list, false if not
- MoveNext - move to the next element on the list.
For example, the Appx Packaging APIs don't have a way to obtain the extension element. With the new interfaces, this can be done like this:
`ComPtr<IMSIXDocumentElement> msixDocument;`
`RETURN_IF_FAILED(manifestReader->QueryInterface(UuidOfImpl<IMSIXDocumentElement>::iid, reinterpret_cast<void**>(&msixDocument)));`
`ComPtr<IMSIXElementEnumerator> elementEnum;`
`// xpath valid for MSXML6`
`RETURN_IF_FAILED(manifestElement->GetElements(L"/*[local-name()='Package']/*[local-name()='Extensions']/*[local-name()='Extension']", &elementEnum));`
`// iterate the elementEnum...`
Related work items: #17990214
Remove test files build for openssl. Also allow users to have a dynamic dependency on openssl by adding a cmake switch. Use -DUSE_SHARED_OPENSSL=on in the cmake command to enable it.
Related work items: #17881939
Create XML_PARSER CMAKE switch for selecting parser PAL implementation.
Create USING_XERCES #define for use in ResultOf ABI boundary.
Make inclusion of Xerces-C project dependent on XML_PARSER setting.
This change contains the renaming from xPlatAppx to MSIX Packaging SDK
Binaries
- xPlatAppx.dll -> msix.dll
- MakexPlatAppx.exe -> makemsix.exe
Export rename
- UnpackAppx ->UnpackPackage
Related work items: #15704951
Basically, we needed to implement Zip64 support as HelloWorld.appx (SDX) was, under the covers built with a Zip64-based OPC container. None of our prior collateral was built as such. Also, we didn't have the ability for a client to override unpacking an unsigned appx package (which was blocking end-to-end validation of HelloWorld.appx as it was not signed).
Related work items: #14681942
Verified that it builds and releases successfully and downloaded the package and installed it on a dummy project in VS.
Added Microsoft.xPlat.AppxPackaging.targets which allows everyone that installs the package to already have our headers in their include path.
Move stuff around in our CMakeLists.txt so we can complete the NUSPEC on clean runs without depending on an specific target.
Structure of the nuget package
- build
-- native
---MACOS
---WIN32
---Microsoft.xPlat.AppxPackaging.targets
A bug on the CMakeLists.txt file that zlib provides makes zlib fail to compile when is used via add_subdirectory() by another project. For some reason, this issue only happens for Linux.
There's an already existing open PR since Feb 2017 with the fix (https://github.com/madler/zlib/pull/219). This PR changes the zlib submodule to point to that commit.
This change replaces the series of VS build solutions and one-off Xcode workspace/projects that had to constantly be kept in sync with each other with a single CMake-based build system. This new system has a single build authoring mechanism (CMakeLists.txt) that describes each logical sub-project of the entire project. Builds in VS2017, Xcode, VS NMake, and unix make have been confirmed as working. Automated continuous integration of this new build system is now turned-on, meaning that once this change goes live, you'll need to update your client view of the project. At a minimum, you'll need to run: git submodule update && git submodule init once this change is pulled into your branch. For those not entirely familiar with CMake, you can use https://cmake.org/Wiki/CMake as a good starting point for how to get up and running.
Related work items: #13953155, #13953165