cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ste...@apache.org
Subject [02/12] cordova-lib git commit: CB-8123 Plugin references can target specific windows platforms.
Date Fri, 13 Feb 2015 00:53:58 GMT
CB-8123 Plugin references can target specific windows platforms.

Adds support for `target`, `versions` and `arch` attributes on `<lib-file>` and `<framework>` elements in the windows platform of plugin.xml. This allows plugin authors to target different references to different target platforms.

Also adds support for `src` attribute as an alias for the `Include` attribute on the `<lib-file>` element (since `src` is documented, but `Include` is used by existing plugins).

Adds some tests to cover the new attributes. Updates existing plugin tests for windows8 platform to also test windows platform (left in windows8 tests to help verify backward compatibility with old windows8 platform).

As part of this change, refactored `jsproj` to `jsprojManager` to reflect the fact that, with the windows platform, this class now manages multiple jsproj files.

Note that I plan to rename some windows8 files and folders to windows, and jsproj.js to jsprojManager.js in a subsequent commit.


Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/8b6f7b9b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/8b6f7b9b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/8b6f7b9b

Branch: refs/heads/CB-8416
Commit: 8b6f7b9b443fe6b35e070bd1ad8ff81df53f559f
Parents: 89795f2
Author: Tim Barham <tim.barham@microsoft.com>
Authored: Wed Jan 28 11:15:39 2015 -0800
Committer: Tim Barham <tim.barham@microsoft.com>
Committed: Wed Jan 28 11:15:39 2015 -0800

----------------------------------------------------------------------
 .../spec-plugman/platforms/windows8.spec.js     | 483 +++++++++++++----
 .../org.test.plugins.dummyplugin/plugin.xml     |  20 +-
 .../src/windows8/dummy1.dll                     |   0
 .../src/windows8/dummy1.vcxproj                 |   7 +
 .../src/windows8/dummy2.dll                     |   0
 .../src/windows8/dummy2.vcxproj                 |   7 +
 .../src/windows8/dummy3.dll                     |   0
 .../src/windows8/dummy3.vcxproj                 |   7 +
 .../src/windows8/dummy4.dll                     |   0
 .../src/windows8/dummy4.vcxproj                 |   7 +
 .../org.test.plugins.faultyplugin/plugin.xml    |   8 +-
 .../projects/windows/CordovaApp.Phone.jsproj    |  99 ++++
 .../projects/windows/CordovaApp.Windows.jsproj  |  99 ++++
 .../windows/CordovaApp.Windows80.jsproj         |  93 ++++
 .../projects/windows/CordovaApp.projitems       |  32 ++
 .../projects/windows/CordovaApp.shproj          |  30 ++
 .../projects/windows/CordovaApp.sln             | 134 +++++
 .../projects/windows/CordovaApp.vs2012.sln      |  64 +++
 .../windows/CordovaApp_TemporaryKey.pfx         | Bin 0 -> 2544 bytes
 .../spec-plugman/projects/windows/VERSION       |   1 +
 .../spec-plugman/projects/windows/config.xml    |  14 +
 .../projects/windows/package.phone.appxmanifest |  57 ++
 .../windows/package.windows.appxmanifest        |  58 ++
 .../windows/package.windows80.appxmanifest      |  50 ++
 cordova-lib/src/PluginInfo.js                   |   9 +-
 cordova-lib/src/plugman/platforms/windows.js    |  52 +-
 cordova-lib/src/util/windows/jsproj.js          | 528 +++++++++++++------
 27 files changed, 1575 insertions(+), 284 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/platforms/windows8.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/platforms/windows8.spec.js b/cordova-lib/spec-plugman/platforms/windows8.spec.js
index 22eae93..3d0215a 100644
--- a/cordova-lib/spec-plugman/platforms/windows8.spec.js
+++ b/cordova-lib/spec-plugman/platforms/windows8.spec.js
@@ -1,138 +1,413 @@
 /**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-var windows8 = require('../../src/plugman/platforms/windows'),
-    common  = require('../../src/plugman/platforms/common'),
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+var windows = require('../../src/plugman/platforms/windows'),
+    common = require('../../src/plugman/platforms/common'),
     install = require('../../src/plugman/install'),
-    path    = require('path'),
-    fs      = require('fs'),
-    shell   = require('shelljs'),
-    et      = require('elementtree'),
-    os      = require('osenv'),
-    temp    = path.join(os.tmpdir(), 'plugman'),
-    plugins_dir = path.join(temp, 'cordova', 'plugins'),
+    path = require('path'),
+    fs = require('fs'),
+    shell = require('shelljs'),
+    et = require('elementtree'),
+    os = require('osenv'),
+    cordovaProjectDir = path.join(os.tmpdir(), 'plugman'),
+    cordovaProjectWindowsPlatformDir = path.join(cordovaProjectDir, 'platforms', 'windows'),
+    cordovaProjectPluginsDir = path.join(cordovaProjectDir, 'plugins'),
     xml_helpers = require('../../src/util/xml-helpers'),
-    plugins_module = require('../../src/plugman/util/plugins'),
     dummyplugin = path.join(__dirname, '..', 'plugins', 'org.test.plugins.dummyplugin'),
-    faultyplugin = path.join(__dirname, '..', 'plugins', 'org.test.plugins.faultyplugin'),
-    windows8_project = path.join(__dirname, '..', 'projects', 'windows8');
+    faultyplugin = path.join(__dirname, '..', 'plugins', 'org.test.plugins.faultyplugin');
 
 var PluginInfo = require('../../src/PluginInfo');
 
 var dummyPluginInfo = new PluginInfo(dummyplugin);
 var dummy_id = dummyPluginInfo.id;
-var valid_source = dummyPluginInfo.getSourceFiles('windows8');
+var valid_source = dummyPluginInfo.getSourceFiles('windows');
+var valid_libfiles = dummyPluginInfo.getLibFiles('windows');
+var valid_frameworks = dummyPluginInfo.getFrameworks('windows');
 
 var faultyPluginInfo = new PluginInfo(faultyplugin);
 var faulty_id = faultyPluginInfo.id;
-var invalid_source = faultyPluginInfo.getSourceFiles('windows8');
-
-shell.mkdir('-p', temp);
-shell.cp('-rf', path.join(windows8_project, '*'), temp);
-var proj_files = windows8.parseProjectFile(temp);
-shell.rm('-rf', temp);
+var invalid_source = faultyPluginInfo.getSourceFiles('windows');
+var invalid_libfiles = faultyPluginInfo.getLibFiles('windows');
 
 function copyArray(arr) {
     return Array.prototype.slice.call(arr, 0);
 }
 
-describe('windows8 project handler', function() {
+beforeEach(function () {
+    this.addMatchers({
+        toContainXmlPath: function (xpath) {
+            var xml = this.actual;
+            var notText = this.isNot ? 'not ' : '';
+            this.message = function () {
+                return 'Expected xml \'' + et.tostring(xml) + '\' ' + notText + 'to contain elements matching \'' + xpath + '\'.';
+            };
 
-    beforeEach(function() {
-        shell.mkdir('-p', temp);
-        shell.mkdir('-p', plugins_dir);
-    });
-    afterEach(function() {
-        shell.rm('-rf', temp);
-    });
+            return xml.find(xpath) != null;
+        }    });
+});
+
+['windows', 'windows8'].forEach(function (platform) {
+    var windows_project = path.join(__dirname, '..', 'projects', platform);
 
-    describe('www_dir method', function() {
-        it('should return cordova-windows8 project www location using www_dir', function() {
-            expect(windows8.www_dir(path.sep)).toEqual(path.sep + 'www');
+    shell.mkdir('-p', cordovaProjectWindowsPlatformDir);
+    shell.cp('-rf', path.join(windows_project, '*'), cordovaProjectWindowsPlatformDir);
+    var proj_files = windows.parseProjectFile(cordovaProjectWindowsPlatformDir);
+    shell.rm('-rf', cordovaProjectDir);
+
+    var platformProjects = {
+        windows: {
+            all: 'CordovaApp.projitems',
+            phone: 'CordovaApp.Phone.jsproj',
+            windows: 'CordovaApp.Windows.jsproj',
+            windows8: 'CordovaApp.Windows80.jsproj'
+        }, windows8: {
+            all: 'TestApp.jsproj',
+            windows8: 'TestApp.jsproj'
+        }
+    }[platform];
+
+    describe(platform + ' project handler', function () {
+        beforeEach(function () {
+            shell.mkdir('-p', cordovaProjectWindowsPlatformDir);
+            shell.mkdir('-p', cordovaProjectPluginsDir);
         });
-    });
-    describe('package_name method', function() {
-        it('should return a windows8 project\'s proper package name', function() {
-            expect(windows8.package_name(windows8_project)).toEqual("CordovaApp");
+        afterEach(function () {
+            shell.rm('-rf', cordovaProjectDir);
         });
-    });
 
-    describe('parseProjectFile method', function() {
-        it('should throw if project is not an windows8 project', function() {
-            expect(function() {
-                windows8.parseProjectFile(temp);
-            }).toThrow(windows8.InvalidProjectPathError);
+        describe('www_dir method', function () {
+            it('should return cordova-windows project www location using www_dir', function () {
+                expect(windows.www_dir(path.sep)).toEqual(path.sep + 'www');
+            });
         });
-    });
-
-    describe('installation', function() {
-        beforeEach(function() {
-            shell.mkdir('-p', temp);
+        describe('package_name method', function () {
+            it('should return a windows project\'s proper package name', function () {
+                expect(windows.package_name(windows_project)).toEqual("CordovaApp");
+            });
         });
-        afterEach(function() {
-            shell.rm('-rf', temp);
+
+        describe('parseProjectFile method', function () {
+            it('should throw if project is not an windows project', function () {
+                expect(function () {
+                    windows.parseProjectFile(cordovaProjectWindowsPlatformDir);
+                }).toThrow(windows.InvalidProjectPathError);
+            });
         });
-        describe('of <source-file> elements', function() {
-            beforeEach(function() {
-                shell.cp('-rf', path.join(windows8_project, '*'), temp);
+
+        describe('installation', function () {
+            beforeEach(function () {
+                shell.mkdir('-p', cordovaProjectWindowsPlatformDir);
+                shell.cp('-rf', path.join(windows_project, '*'), cordovaProjectWindowsPlatformDir);
             });
-            it('should copy stuff from one location to another by calling common.copyFile', function() {
-                var source = copyArray(valid_source);
-                var s = spyOn(common, 'copyFile');
-                windows8['source-file'].install(source[0], dummyplugin, temp, dummy_id, null, proj_files);
-                expect(s).toHaveBeenCalledWith(dummyplugin, 'src/windows8/dummer.js', temp, path.join('plugins', 'org.test.plugins.dummyplugin', 'dummer.js'), false);
+            afterEach(function () {
+                shell.rm('-rf', cordovaProjectDir);
             });
-            it('should throw if source-file src cannot be found', function() {
-                var source = copyArray(invalid_source);
-                expect(function() {
-                    windows8['source-file'].install(source[1], faultyplugin, temp, faulty_id, null, proj_files);
-                }).toThrow('"' + path.resolve(faultyplugin, 'src/windows8/NotHere.js') + '" not found!');
+
+            function validateInstalledProjects(tag, elementToInstall, xpath, supportedPlatforms) {
+                jasmine.getEnv().currentSpec.removeAllSpies();
+
+                var projects = copyArray(proj_files.projects);
+                if (platform === 'windows') {
+                    projects.push(proj_files.master);
+                }
+
+                var appendToRootFake = function (itemGroup) {
+                    expect(itemGroup).toContainXmlPath(xpath);
+                };
+
+                var projectsAddedToSpies = [];
+                var projectsNotAddedToSpies = [];
+
+                var projectsAddedTo = [];
+                supportedPlatforms.forEach(function (platform) {
+                    var platformProject = platformProjects[platform];
+                    if (platformProject) {
+                        projectsAddedTo.push(platformProjects[platform]);
+                    }
+                });
+
+                projects.forEach(function (project) {
+                    if (projectsAddedTo.indexOf(path.basename(project.location)) > -1) {
+                        projectsAddedToSpies.push(spyOn(project, 'appendToRoot').andCallFake(appendToRootFake));
+                    } else {
+                        projectsNotAddedToSpies.push(spyOn(project, 'appendToRoot'));
+                    }
+                });
+
+                windows[tag].install(elementToInstall, dummyplugin, cordovaProjectWindowsPlatformDir, dummy_id, null, proj_files);
+
+                projectsAddedToSpies.forEach(function (spy) {
+                    expect(spy).toHaveBeenCalled();
+                });
+
+                projectsNotAddedToSpies.forEach(function (spy) {
+                    expect(spy).not.toHaveBeenCalled();
+                });
+            }
+
+            describe('of <source-file> elements', function () {
+                it('should copy stuff from one location to another by calling common.copyFile', function () {
+                    var source = copyArray(valid_source);
+                    var s = spyOn(common, 'copyFile');
+                    windows['source-file'].install(source[0], dummyplugin, cordovaProjectWindowsPlatformDir, dummy_id, null, proj_files);
+                    expect(s).toHaveBeenCalledWith(dummyplugin, 'src/windows8/dummer.js', cordovaProjectWindowsPlatformDir, path.join('plugins', 'org.test.plugins.dummyplugin', 'dummer.js'), false);
+                });
+                it('should throw if source-file src cannot be found', function () {
+                    var source = copyArray(invalid_source);
+                    expect(function () {
+                        windows['source-file'].install(source[1], faultyplugin, cordovaProjectWindowsPlatformDir, faulty_id, null, proj_files);
+                    }).toThrow('"' + path.resolve(faultyplugin, 'src/windows8/NotHere.js') + '" not found!');
+                });
+                it('should throw if source-file target already exists', function () {
+                    var source = copyArray(valid_source);
+                    var target = path.join(cordovaProjectWindowsPlatformDir, 'plugins', dummy_id, 'dummer.js');
+                    shell.mkdir('-p', path.dirname(target));
+                    fs.writeFileSync(target, 'some bs', 'utf-8');
+                    expect(function () {
+                        windows['source-file'].install(source[0], dummyplugin, cordovaProjectWindowsPlatformDir, dummy_id, null, proj_files);
+                    }).toThrow('"' + target + '" already exists!');
+                });
             });
-            it('should throw if source-file target already exists', function() {
-                var source = copyArray(valid_source);
-                var target = path.join(temp, 'plugins', dummy_id, 'dummer.js');
-                shell.mkdir('-p', path.dirname(target));
-                fs.writeFileSync(target, 'some bs', 'utf-8');
-                expect(function() {
-                    windows8['source-file'].install(source[0], dummyplugin, temp, dummy_id, null, proj_files);
-                }).toThrow('"' + target + '" already exists!');
+
+            describe('of <lib-file> elements', function () {
+                var libfiles = copyArray(valid_libfiles);
+                var invalidLibFiles = copyArray(invalid_libfiles);
+
+                // This could be separated into individual specs, but that results in a lot of copying and deleting the
+                // project files, which is not needed.
+                it('should write to correct project files when conditions are specified', function () {
+                    var xpath = 'SDKReference[@Include="TestSDK1, Version=1.0"][@Condition="\'$(Platform)\'==\'x86\'"]';
+                    validateInstalledProjects('lib-file', libfiles[0], xpath, ['all']);
+
+                    xpath = 'SDKReference[@Include="TestSDK2, Version=1.0"]';
+                    validateInstalledProjects('lib-file', libfiles[1], xpath, ['windows', 'phone']);
+
+                    xpath = 'SDKReference[@Include="TestSDK3, Version=1.0"]';
+                    validateInstalledProjects('lib-file', libfiles[2], xpath, ['phone']);
+
+                    xpath = 'SDKReference[@Include="TestSDK4, Version=1.0"]';
+                    validateInstalledProjects('lib-file', libfiles[3], xpath, ['windows8']);
+                });
+
+                it('should throw if conditions are invalid', function () {
+                    expect(function () {
+                        windows['lib-file'].install(invalidLibFiles[0], faultyplugin, cordovaProjectWindowsPlatformDir, faulty_id, null, proj_files);
+                    }).toThrow('Invalid lib-file arch attribute (must be "x86", "x64" or "ARM"): x85');
+
+                    expect(function () {
+                        windows['lib-file'].install(invalidLibFiles[1], faultyplugin, cordovaProjectWindowsPlatformDir, faulty_id, null, proj_files);
+                    }).toThrow('Invalid lib-file versions attribute (must be a valid a valid node semantic version range): 8.0a');
+
+                    expect(function () {
+                        windows['lib-file'].install(invalidLibFiles[2], faultyplugin, cordovaProjectWindowsPlatformDir, faulty_id, null, proj_files);
+                    }).toThrow('Invalid lib-file target attribute (must be "all", "phone", "windows" or "win"): daphne');
+                });
             });
-        });
-    });
 
-    describe('uninstallation', function() {
-        beforeEach(function() {
-            shell.mkdir('-p', temp);
-            shell.mkdir('-p', plugins_dir);
-            shell.cp('-rf', path.join(windows8_project, '*'), temp);
-        });
-        afterEach(function() {
-            shell.rm('-rf', temp);
+            describe('of <framework> elements', function () {
+                var frameworks = copyArray(valid_frameworks);
+
+                // This could be separated into individual specs, but that results in a lot of copying and deleting the
+                // project files, which is not needed.
+                it('should write to correct project files when conditions are specified', function () {
+                    var xpath = 'Reference[@Include="dummy1"][@Condition="\'$(Platform)\'==\'x64\'"]/HintPath';
+                    validateInstalledProjects('framework', frameworks[0], xpath, ['all']);
+
+                    xpath = 'Reference[@Include="dummy2"]/HintPath';
+                    validateInstalledProjects('framework', frameworks[1], xpath, ['all']);
+
+                    xpath = 'Reference[@Include="dummy3"]/HintPath';
+                    validateInstalledProjects('framework', frameworks[2], xpath, ['windows', 'windows8']);
+
+                    xpath = 'Reference[@Include="dummy4"][@Condition="\'$(Platform)\'==\'ARM\'"]/HintPath';
+                    validateInstalledProjects('framework', frameworks[3], xpath, ['phone']);
+                });
+            });
+
+            describe('of <framework> elements of type \'projectReference\'', function () {
+                var frameworks = copyArray(valid_frameworks);
+
+                it('should write to correct project files when conditions are specified', function () {
+                    var xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows8\\dummy1.vcxproj"][@Condition="\'$(Platform)\'==\'x64\'"]';
+                    validateInstalledProjects('framework', frameworks[4], xpath, ['all']);
+
+                    xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows8\\dummy2.vcxproj"]';
+                    validateInstalledProjects('framework', frameworks[5], xpath, ['windows8']);
+
+                    xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows8\\dummy3.vcxproj"]';
+                    validateInstalledProjects('framework', frameworks[6], xpath, ['windows', 'windows8']);
+
+                    xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows8\\dummy4.vcxproj"][@Condition="\'$(Platform)\'==\'x86\'"]';
+                    validateInstalledProjects('framework', frameworks[7], xpath, ['windows', 'phone']);
+                });
+            });
         });
-        describe('of <source-file> elements', function() {
-            it('should remove stuff by calling common.removeFile', function(done) {
-                var s = spyOn(common, 'removeFile');
-                install('windows8', temp, dummyplugin, plugins_dir, {})
-                .then(function() {
-                    var source = copyArray(valid_source);
-                    windows8['source-file'].uninstall(source[0], temp, dummy_id, null, proj_files);
-                    expect(s).toHaveBeenCalledWith(temp, path.join('plugins',  'org.test.plugins.dummyplugin', 'dummer.js'));
-                    done();
+
+        describe('uninstallation', function () {
+            beforeEach(function () {
+                shell.mkdir('-p', cordovaProjectWindowsPlatformDir);
+                shell.mkdir('-p', cordovaProjectPluginsDir);
+                shell.cp('-rf', path.join(windows_project, '*'), cordovaProjectWindowsPlatformDir);
+            });
+            afterEach(function () {
+                shell.rm('-rf', cordovaProjectDir);
+            });
+
+            function validateUninstalledProjects(tag, elementToUninstall, xmlPath, incText, targetConditions, supportedPlatforms) {
+                jasmine.getEnv().currentSpec.removeAllSpies();
+
+                var projects = copyArray(proj_files.projects);
+                if (platform === 'windows') {
+                    projects.push(proj_files.master);
+                }
+
+                var projectsAddedToSpies = [];
+                var projectsNotAddedToSpies = [];
+
+                var projectsAddedTo = [];
+                supportedPlatforms.forEach(function (platform) {
+                    var platformProject = platformProjects[platform];
+                    if (platformProject) {
+                        projectsAddedTo.push(platformProjects[platform]);
+                    }
+                });
+
+                projects.forEach(function (project) {
+                    var spy = spyOn(project, 'removeReferenceElementItemGroup');
+                    if (projectsAddedTo.indexOf(path.basename(project.location)) > -1) {
+                        projectsAddedToSpies.push(spy);
+                    } else {
+                        projectsNotAddedToSpies.push(spy);
+                    }
+                });
+
+                windows[tag].uninstall(elementToUninstall, cordovaProjectWindowsPlatformDir, dummy_id, null, proj_files);
+
+                projectsAddedToSpies.forEach(function (spy) {
+                    expect(spy).toHaveBeenCalledWith(xmlPath, incText, targetConditions);
+                });
+
+                projectsNotAddedToSpies.forEach(function (spy) {
+                    expect(spy).not.toHaveBeenCalled();
+                });
+            }
+
+            describe('of <source-file> elements', function () {
+                it('should remove stuff by calling common.removeFile', function (done) {
+                    var s = spyOn(common, 'removeFile');
+
+                    install('windows', cordovaProjectWindowsPlatformDir, dummyplugin, cordovaProjectPluginsDir, {})
+                        .then(function () {
+                            var source = copyArray(valid_source);
+                            windows['source-file'].uninstall(source[0], cordovaProjectWindowsPlatformDir, dummy_id, null, proj_files);
+                            expect(s).toHaveBeenCalledWith(cordovaProjectWindowsPlatformDir, path.join('plugins', 'org.test.plugins.dummyplugin', 'dummer.js'));
+                            done();
+                        });
+                });
+            });
+
+            describe('of <lib-file> elements', function () {
+                // This could be separated into individual specs, but that results in a lot of copying and deleting the
+                // project files, which is not needed.
+                it('should remove from correct project files when conditions specified', function (done) {
+                    var libfiles = copyArray(valid_libfiles);
+
+                    install('windows', cordovaProjectWindowsPlatformDir, dummyplugin, cordovaProjectPluginsDir, {})
+                        .then(function () {
+                            var path = 'ItemGroup/SDKReference';
+                            var incText = 'TestSDK1, Version=1.0';
+                            var targetConditions = {versions: undefined, target: undefined, arch: 'x86'};
+                            validateUninstalledProjects('lib-file', libfiles[0], path, incText, targetConditions, ['all']);
+
+                            incText = 'TestSDK2, Version=1.0';
+                            targetConditions = {versions: '>=8.1', target: undefined, arch: undefined};
+                            validateUninstalledProjects('lib-file', libfiles[1], path, incText, targetConditions, ['windows', 'phone']);
+
+                            incText = 'TestSDK3, Version=1.0';
+                            targetConditions = {versions: undefined, target: 'phone', arch: undefined};
+                            validateUninstalledProjects('lib-file', libfiles[2], path, incText, targetConditions, ['phone']);
+
+                            incText = 'TestSDK4, Version=1.0';
+                            targetConditions = {versions: '8.0', target: 'windows', arch: 'x86'};
+                            validateUninstalledProjects('lib-file', libfiles[3], path, incText, targetConditions, ['windows8']);
+
+                            done();
+                        });
+                });
+            });
+
+            describe('of <framework> elements', function () {
+                // This could be separated into individual specs, but that results in a lot of copying and deleting the
+                // project files, which is not needed.
+                it('should remove from correct project files when conditions specified', function (done) {
+                    var frameworks = copyArray(valid_frameworks);
+
+                    install('windows', cordovaProjectWindowsPlatformDir, dummyplugin, cordovaProjectPluginsDir, {})
+                        .then(function () {
+                            var path = 'ItemGroup/Reference';
+                            var incText = 'dummy1';
+                            var targetConditions = {versions: undefined, target: undefined, arch: 'x64'};
+                            validateUninstalledProjects('framework', frameworks[0], path, incText, targetConditions, ['all']);
+
+                            incText = 'dummy2';
+                            targetConditions = {versions: '>=8.0', target: undefined, arch: undefined};
+                            validateUninstalledProjects('framework', frameworks[1], path, incText, targetConditions, ['all']);
+
+                            incText = 'dummy3';
+                            targetConditions = {versions: undefined, target: 'windows', arch: undefined};
+                            validateUninstalledProjects('framework', frameworks[2], path, incText, targetConditions, ['windows', 'windows8']);
+
+                            incText = 'dummy4';
+                            targetConditions = {versions: '8.1', target: 'phone', arch: 'ARM'};
+                            validateUninstalledProjects('framework', frameworks[3], path, incText, targetConditions, ['phone']);
+
+                            done();
+                        });
+                });
+            });
+
+            describe('of <framework> elements of type \'projectReference\'', function () {
+                // This could be separated into individual specs, but that results in a lot of copying and deleting the
+                // project files, which is not needed.
+                it('should remove from correct project files when conditions specified', function (done) {
+                    var frameworks = copyArray(valid_frameworks);
+
+                    install('windows', cordovaProjectWindowsPlatformDir, dummyplugin, cordovaProjectPluginsDir, {})
+                        .then(function () {
+                            var path = 'ItemGroup/ProjectReference';
+                            var incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows8\\dummy1.vcxproj';
+                            var targetConditions = {versions: undefined, target: undefined, arch: 'x64'};
+                            validateUninstalledProjects('framework', frameworks[4], path, incText, targetConditions, ['all']);
+
+                            incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows8\\dummy2.vcxproj';
+                            targetConditions = {versions: '<8.1', target: undefined, arch: undefined};
+                            validateUninstalledProjects('framework', frameworks[5], path, incText, targetConditions, ['windows8']);
+
+                            incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows8\\dummy3.vcxproj';
+                            targetConditions = {versions: undefined, target: 'win', arch: undefined};
+                            validateUninstalledProjects('framework', frameworks[6], path, incText, targetConditions, ['windows', 'windows8']);
+
+                            incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows8\\dummy4.vcxproj';
+                            targetConditions = {versions: '8.1', target: 'all', arch: 'x86'};
+                            validateUninstalledProjects('framework', frameworks[7], path, incText, targetConditions, ['windows', 'phone']);
+
+                            done();
+                        });
                 });
             });
         });

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml
index 0d7d94b..1f265dd 100644
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml
@@ -172,13 +172,29 @@
         <source-file src="src/tizen/dummer.js"/>
     </platform>
 
-    <!-- windows8 -->
-    <platform name="windows8">
+    <!-- windows -->
+    <platform name="windows">
         <config-file target="config.xml" parent="/*">
             <feature id="dummyPlugin" required="true" version="1.0.0.0"/>
         </config-file>
 
         <source-file src="src/windows8/dummer.js"/>
+
+        <lib-file src="TestSDK1, Version=1.0" arch="x86"/>
+        <lib-file src="TestSDK2, Version=1.0" versions=">=8.1"/>
+        <lib-file src="TestSDK3, Version=1.0" target="phone"/>
+        <lib-file src="TestSDK4, Version=1.0" target="windows" versions="8.0" arch="x86"/>
+
+        <framework src="src/windows8/dummy1.dll" arch="x64"/>
+        <framework src="src/windows8/dummy2.dll" versions=">=8.0"/>
+        <framework src="src/windows8/dummy3.dll" target="windows"/>
+        <framework src="src/windows8/dummy4.dll" target="phone" versions="8.1" arch="ARM"/>
+
+        <framework src="src/windows8/dummy1.vcxproj" type="projectReference" arch="x64"/>
+        <framework src="src/windows8/dummy2.vcxproj" type="projectReference" versions="<8.1"/>
+        <framework src="src/windows8/dummy3.vcxproj" type="projectReference" target="win"/>
+        <framework src="src/windows8/dummy4.vcxproj" type="projectReference" target="all" versions="8.1" arch="x86"/>
+
         <js-module src="www/dummyplugin.js" name="Dummy">
             <clobbers target="dummy" />
         </js-module>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.dll
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.vcxproj
new file mode 100644
index 0000000..c454905
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.vcxproj
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup Label="Globals">
+        <ProjectGuid>{ef7dd979-6f12-4bdf-8754-9468ce799c4d}</ProjectGuid>
+        <ProjectName>dummy1</ProjectName>
+    </PropertyGroup>
+</Project>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.dll
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.vcxproj
new file mode 100644
index 0000000..8edd706
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.vcxproj
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup Label="Globals">
+        <ProjectGuid>{6a760eea-8c27-442e-b98b-a487964ded42}</ProjectGuid>
+        <ProjectName>dummy2</ProjectName>
+    </PropertyGroup>
+</Project>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.dll
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.vcxproj
new file mode 100644
index 0000000..600167c
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.vcxproj
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup Label="Globals">
+        <ProjectGuid>{5318c3c8-0921-4870-b4ad-8cce06c88238}</ProjectGuid>
+        <ProjectName>dummy3</ProjectName>
+    </PropertyGroup>
+</Project>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.dll
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.vcxproj
new file mode 100644
index 0000000..d7acf04
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.vcxproj
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup Label="Globals">
+        <ProjectGuid>{8e430a1b-094b-4c27-8b76-fdd7021dbfe9}</ProjectGuid>
+        <ProjectName>dummy4</ProjectName>
+    </PropertyGroup>
+</Project>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml b/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml
index 08079f2..1b38414 100644
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml
@@ -131,8 +131,8 @@
         <source-file src="src/wp8/NotHere.cs" />
     </platform>
 
-    <!-- wp8 -->
-    <platform name="windows8">
+    <!-- windows -->
+    <platform name="windows">
         <config-file target="config.xml" parent="/*">
             <feature name="org.test.plugins.faultyplugin">
                 <param name="windows8-package" value="org.test.plugins.faultyplugin"/>
@@ -141,6 +141,10 @@
 
         <source-file src="src/windows8/faultyPlugin.js" />
 
+        <lib-file src="TestSDK1, Version=1.0" arch="x85"/>
+        <lib-file src="TestSDK2, Version=1.0" versions="8.0a"/>
+        <lib-file src="TestSDK3, Version=1.0" target="daphne"/>
+
         <!-- does not exist -->
         <source-file src="src/windows8/NotHere.js" />
     </platform>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Phone.jsproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/CordovaApp.Phone.jsproj b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Phone.jsproj
new file mode 100644
index 0000000..43e4fe2
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Phone.jsproj
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <OutputPath>build\phone\$(Configuration)\$(Platform)\</OutputPath>
+    <IntermediateOutputPath>build\phone\bld\</IntermediateOutputPath>
+  </PropertyGroup>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|AnyCPU">
+      <Configuration>Debug</Configuration>
+      <Platform>AnyCPU</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x86">
+      <Configuration>Debug</Configuration>
+      <Platform>x86</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|AnyCPU">
+      <Configuration>Release</Configuration>
+      <Platform>AnyCPU</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x86">
+      <Configuration>Release</Configuration>
+      <Platform>x86</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>31b67a35-9503-4213-857e-f44eb42ae549</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0'">
+    <VisualStudioVersion>12.0</VisualStudioVersion>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).Default.props" />
+  <PropertyGroup Label="Configuration">
+    <TargetPlatformIdentifier>WindowsPhoneApp</TargetPlatformIdentifier>
+    <TargetPlatformVersion>8.1</TargetPlatformVersion>
+    <RequiredPlatformVersion>8.1</RequiredPlatformVersion>
+    <MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).props" />
+  <PropertyGroup>
+    <DefaultLanguage>en-US</DefaultLanguage>
+  </PropertyGroup>
+  <ItemGroup>
+    <AppxManifest Include="package.phone.appxmanifest">
+      <SubType>Designer</SubType>
+    </AppxManifest>
+    <Content Include="images\*.png" Exclude="images\*.scale-180.*" />
+  </ItemGroup>
+  <ItemGroup>
+    <SDKReference Include="Microsoft.Phone.WinJS.2.1, Version=1.0" />
+  </ItemGroup>
+  <Import Project="CordovaApp.projitems" Label="Shared" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).targets" />
+  <!-- To modify your build process, add your task inside one of the targets below then uncomment
+       that target and the DisableFastUpToDateCheck PropertyGroup. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  <PropertyGroup>
+    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
+  </PropertyGroup>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Windows.jsproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/CordovaApp.Windows.jsproj b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Windows.jsproj
new file mode 100644
index 0000000..6905ba6
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Windows.jsproj
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <OutputPath>build\windows\$(Configuration)\$(Platform)\</OutputPath>
+  <IntermediateOutputPath>build\windows\bld\</IntermediateOutputPath>
+  </PropertyGroup>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|AnyCPU">
+      <Configuration>Debug</Configuration>
+      <Platform>AnyCPU</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x86">
+      <Configuration>Debug</Configuration>
+      <Platform>x86</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|AnyCPU">
+      <Configuration>Release</Configuration>
+      <Platform>AnyCPU</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x86">
+      <Configuration>Release</Configuration>
+      <Platform>x86</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>58950fb6-2f93-4963-b9cd-637f83f3efbf</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0'">
+    <VisualStudioVersion>12.0</VisualStudioVersion>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).Default.props" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).props" />
+  <PropertyGroup>
+    <TargetPlatformIdentifier>Windows</TargetPlatformIdentifier>
+    <TargetPlatformVersion>8.1</TargetPlatformVersion>
+    <RequiredPlatformVersion>8.1</RequiredPlatformVersion>
+    <MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
+    <DefaultLanguage>en-US</DefaultLanguage>
+    <PackageCertificateKeyFile>CordovaApp_TemporaryKey.pfx</PackageCertificateKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <AppxManifest Include="package.windows.appxmanifest">
+      <SubType>Designer</SubType>
+    </AppxManifest>
+    <Content Include="images\*.png" Exclude="images\*.scale-240.*" />
+    <None Include="CordovaApp_TemporaryKey.pfx" />
+  </ItemGroup>
+  <ItemGroup>
+    <SDKReference Include="Microsoft.WinJS.2.0, Version=1.0" />
+  </ItemGroup>
+  <Import Project="CordovaApp.projitems" Label="Shared" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).targets" />
+  <!-- To modify your build process, add your task inside one of the targets below then uncomment
+       that target and the DisableFastUpToDateCheck PropertyGroup. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  <PropertyGroup>
+    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
+  </PropertyGroup>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Windows80.jsproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/CordovaApp.Windows80.jsproj b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Windows80.jsproj
new file mode 100644
index 0000000..34d1985
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/CordovaApp.Windows80.jsproj
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <OutputPath>build\windows80\$(Configuration)\$(Platform)\</OutputPath>
+    <IntermediateOutputPath>build\windows80\bld\</IntermediateOutputPath>
+  </PropertyGroup>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|AnyCPU">
+      <Configuration>Debug</Configuration>
+      <Platform>AnyCPU</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x86">
+      <Configuration>Debug</Configuration>
+      <Platform>x86</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|AnyCPU">
+      <Configuration>Release</Configuration>
+      <Platform>AnyCPU</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x86">
+      <Configuration>Release</Configuration>
+      <Platform>x86</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>efffab2f-bfc5-4eda-b545-45ef4995f55a</ProjectGuid>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '11.0'">
+    <VisualStudioVersion>11.0</VisualStudioVersion>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).Default.props" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).props" />
+  <PropertyGroup>
+    <TargetPlatformIdentifier>Windows</TargetPlatformIdentifier>
+    <TargetPlatformVersion>8.0</TargetPlatformVersion>
+    <DefaultLanguage>en-US</DefaultLanguage>
+    <PackageCertificateKeyFile>CordovaApp_TemporaryKey.pfx</PackageCertificateKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <AppxManifest Include="package.windows80.appxmanifest">
+      <SubType>Designer</SubType>
+    </AppxManifest>
+    <Content Include="images\*.png" Exclude="images\*.scale-240.*" />
+    <None Include="CordovaApp_TemporaryKey.pfx" />
+  </ItemGroup>
+  <ItemGroup>
+    <SDKReference Include="Microsoft.WinJS.1.0, Version=1.0" />
+  </ItemGroup>
+  <Import Project="CordovaApp.projitems" Label="Shared" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).targets" />
+  <PropertyGroup>
+    <BuildFromCordovaTooling>false</BuildFromCordovaTooling>
+    <PreBuildEvent Condition="$(BuildFromCordovaTooling) != true">
+      cd /d $(MSBuildThisFileDirectory)
+      node -e "require('./cordova/lib/prepare.js').applyPlatformConfig()"
+    </PreBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/CordovaApp.projitems
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/CordovaApp.projitems b/cordova-lib/spec-plugman/projects/windows/CordovaApp.projitems
new file mode 100644
index 0000000..972a1a4
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/CordovaApp.projitems
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+    <HasSharedItems>true</HasSharedItems>
+    <SharedGUID>9ebdb27f-d75b-4d8c-b53f-7be4a1fe89f9</SharedGUID>
+  </PropertyGroup>
+  <ItemGroup>
+    <Content Include="$(MSBuildThisFileDirectory)www\**" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="$(MSBuildThisFileDirectory)config.xml" />
+  </ItemGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/CordovaApp.shproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/CordovaApp.shproj b/cordova-lib/spec-plugman/projects/windows/CordovaApp.shproj
new file mode 100644
index 0000000..08b59df
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/CordovaApp.shproj
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{9ebdb27f-d75b-4d8c-b53f-7be4a1fe89f9}</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.Default.props" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.props" />
+  <PropertyGroup />
+  <Import Project="CordovaApp.projitems" Label="Shared" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.CodeSharing.JavaScript.targets" />
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/CordovaApp.sln
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/CordovaApp.sln b/cordova-lib/spec-plugman/projects/windows/CordovaApp.sln
new file mode 100644
index 0000000..71caade
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/CordovaApp.sln
@@ -0,0 +1,134 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+VisualStudioVersion = 12.0.30324.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CordovaApp", "CordovaApp", "{3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "CordovaApp", "CordovaApp.shproj", "{9EBDB27F-D75B-4D8C-B53F-7BE4A1FE89F9}"
+EndProject
+Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "CordovaApp.Windows8.0", "CordovaApp.Windows80.jsproj", "{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}"
+EndProject
+Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "CordovaApp.Windows", "CordovaApp.Windows.jsproj", "{58950FB6-2F93-4963-B9CD-637F83F3EFBF}"
+EndProject
+Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "CordovaApp.Phone", "CordovaApp.Phone.jsproj", "{31B67A35-9503-4213-857E-F44EB42AE549}"
+EndProject
+Global
+	GlobalSection(SharedMSBuildProjectFiles) = preSolution
+		CordovaApp.projitems*{58950fb6-2f93-4963-b9cd-637f83f3efbf}*SharedItemsImports = 5
+		CordovaApp.projitems*{efffab2f-bfc5-4eda-b545-45ef4995f55a}*SharedItemsImports = 5
+		CordovaApp.projitems*{9ebdb27f-d75b-4d8c-b53f-7be4a1fe89f9}*SharedItemsImports = 13
+		CordovaApp.projitems*{31b67a35-9503-4213-857e-f44eb42ae549}*SharedItemsImports = 5
+	EndGlobalSection
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|ARM = Debug|ARM
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|ARM = Release|ARM
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|ARM.ActiveCfg = Debug|ARM
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|ARM.Build.0 = Debug|ARM
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|ARM.Deploy.0 = Debug|ARM
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|x64.ActiveCfg = Debug|x64
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|x64.Build.0 = Debug|x64
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|x64.Deploy.0 = Debug|x64
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|x86.ActiveCfg = Debug|x86
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|x86.Build.0 = Debug|x86
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Debug|x86.Deploy.0 = Debug|x86
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|Any CPU.Deploy.0 = Release|Any CPU
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|ARM.ActiveCfg = Release|ARM
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|ARM.Build.0 = Release|ARM
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|ARM.Deploy.0 = Release|ARM
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|x64.ActiveCfg = Release|x64
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|x64.Build.0 = Release|x64
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|x64.Deploy.0 = Release|x64
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|x86.ActiveCfg = Release|x86
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|x86.Build.0 = Release|x86
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF}.Release|x86.Deploy.0 = Release|x86
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|ARM.ActiveCfg = Debug|ARM
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|ARM.Build.0 = Debug|ARM
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|ARM.Deploy.0 = Debug|ARM
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|x64.ActiveCfg = Debug|x64
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|x64.Build.0 = Debug|x64
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|x64.Deploy.0 = Debug|x64
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|x86.ActiveCfg = Debug|x86
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|x86.Build.0 = Debug|x86
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Debug|x86.Deploy.0 = Debug|x86
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|Any CPU.Build.0 = Release|Any CPU
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|Any CPU.Deploy.0 = Release|Any CPU
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|ARM.ActiveCfg = Release|ARM
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|ARM.Build.0 = Release|ARM
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|ARM.Deploy.0 = Release|ARM
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|x64.ActiveCfg = Release|x64
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|x64.Build.0 = Release|x64
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|x64.Deploy.0 = Release|x64
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|x86.ActiveCfg = Release|x86
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|x86.Build.0 = Release|x86
+		{31B67A35-9503-4213-857E-F44EB42AE549}.Release|x86.Deploy.0 = Release|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|ARM.ActiveCfg = Debug|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|ARM.Build.0 = Debug|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|ARM.Deploy.0 = Debug|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x64.ActiveCfg = Debug|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x64.Build.0 = Debug|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x64.Deploy.0 = Debug|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x86.ActiveCfg = Debug|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x86.Build.0 = Debug|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x86.Deploy.0 = Debug|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|Any CPU.Deploy.0 = Release|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|ARM.ActiveCfg = Release|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|ARM.Build.0 = Release|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|ARM.Deploy.0 = Release|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x64.ActiveCfg = Release|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x64.Build.0 = Release|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x64.Deploy.0 = Release|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.ActiveCfg = Release|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.Build.0 = Release|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.Deploy.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{9EBDB27F-D75B-4D8C-B53F-7BE4A1FE89F9} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
+		{58950FB6-2F93-4963-B9CD-637F83F3EFBF} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
+		{31B67A35-9503-4213-857E-F44EB42AE549} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
+	EndGlobalSection
+EndGlobal

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/CordovaApp.vs2012.sln
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/CordovaApp.vs2012.sln b/cordova-lib/spec-plugman/projects/windows/CordovaApp.vs2012.sln
new file mode 100644
index 0000000..b08ca94
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/CordovaApp.vs2012.sln
@@ -0,0 +1,64 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "CordovaApp.Windows8.0", "CordovaApp.Windows80.jsproj", "{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|AnyCPU = Debug|AnyCPU
+		Debug|ARM = Debug|ARM
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|AnyCPU = Release|AnyCPU
+		Release|ARM = Release|ARM
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|AnyCPU.Build.0 = Debug|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|AnyCPU.Deploy.0 = Debug|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|ARM.ActiveCfg = Debug|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|ARM.Build.0 = Debug|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|ARM.Deploy.0 = Debug|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x64.ActiveCfg = Debug|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x64.Build.0 = Debug|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x64.Deploy.0 = Debug|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x86.ActiveCfg = Debug|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x86.Build.0 = Debug|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Debug|x86.Deploy.0 = Debug|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|AnyCPU.ActiveCfg = Release|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|AnyCPU.Build.0 = Release|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|AnyCPU.Deploy.0 = Release|Any CPU
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|ARM.ActiveCfg = Release|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|ARM.Build.0 = Release|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|ARM.Deploy.0 = Release|ARM
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x64.ActiveCfg = Release|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x64.Build.0 = Release|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x64.Deploy.0 = Release|x64
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.ActiveCfg = Release|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.Build.0 = Release|x86
+		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.Deploy.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/CordovaApp_TemporaryKey.pfx
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/CordovaApp_TemporaryKey.pfx b/cordova-lib/spec-plugman/projects/windows/CordovaApp_TemporaryKey.pfx
new file mode 100644
index 0000000..90d7ab2
Binary files /dev/null and b/cordova-lib/spec-plugman/projects/windows/CordovaApp_TemporaryKey.pfx differ

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/VERSION
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/VERSION b/cordova-lib/spec-plugman/projects/windows/VERSION
new file mode 100644
index 0000000..a76ccff
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/VERSION
@@ -0,0 +1 @@
+3.7.1

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/config.xml
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/config.xml b/cordova-lib/spec-plugman/projects/windows/config.xml
new file mode 100644
index 0000000..621d9c9
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/config.xml
@@ -0,0 +1,14 @@
+<?xml version='1.0' encoding='utf-8'?>
+<widget id="io.cordova.cordovaapp" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+    <preference name="windows-target-version" value="8.0" />
+    <preference name="windows-phone-target-version" value="8.1" />
+    <name>CordovaApp</name>
+    <description>
+        A sample Apache Cordova application that responds to the deviceready event.
+    </description>
+    <author email="dev@cordova.apache.org" href="http://cordova.io">
+        Apache Cordova Team
+    </author>
+    <content src="index.html" />
+    <access origin="*" />
+</widget>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/package.phone.appxmanifest
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/package.phone.appxmanifest b/cordova-lib/spec-plugman/projects/windows/package.phone.appxmanifest
new file mode 100644
index 0000000..c8644d4
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/package.phone.appxmanifest
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest">
+  <Identity Name="d409db80-9793-11e4-8ffa-f71ca5ee087f" Version="1.0.0.0" Publisher="CN=$username$" />
+  <mp:PhoneIdentity PhoneProductId="d409db80-9793-11e4-8ffa-f71ca5ee087f" PhonePublisherId="db093ed5-53b1-45f7-af72-751e8f36ab80" />
+  <Properties>
+    <DisplayName>CordovaApp</DisplayName>
+    <PublisherDisplayName>$username$</PublisherDisplayName>
+    <Logo>images\StoreLogo.png</Logo>
+  </Properties>
+  <Prerequisites>
+    <OSMinVersion>6.3.1</OSMinVersion>
+    <OSMaxVersionTested>6.3.1</OSMaxVersionTested>
+  </Prerequisites>
+  <Resources>
+    <Resource Language="x-generate" />
+  </Resources>
+  <Applications>
+    <Application Id="io.cordova.cordovaapp" StartPage="www/index.html">
+      <m3:VisualElements DisplayName="CordovaApp"
+                         Square150x150Logo="images\Square150x150Logo.png"
+                         Square44x44Logo="images\Square44x44Logo.png"
+                         Description="CordovaApp"
+                         ForegroundText="light"
+                         BackgroundColor="transparent">
+        <m3:DefaultTile Wide310x150Logo="images\Wide310x150Logo.png"
+                        Square71x71Logo="images\Square71x71Logo.png">
+          <m3:ShowNameOnTiles>
+            <m3:ShowOn Tile="square150x150Logo" />
+            <m3:ShowOn Tile="wide310x150Logo" />
+          </m3:ShowNameOnTiles>
+        </m3:DefaultTile>
+        <m3:SplashScreen Image="images\SplashScreenPhone.png" />
+      </m3:VisualElements>
+    </Application>
+  </Applications>
+  <Capabilities>
+    <Capability Name="internetClientServer" />
+  </Capabilities>
+</Package>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/package.windows.appxmanifest
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/package.windows.appxmanifest b/cordova-lib/spec-plugman/projects/windows/package.windows.appxmanifest
new file mode 100644
index 0000000..782980e
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/package.windows.appxmanifest
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest">
+  <Identity Name="d409db80-9793-11e4-8ffa-f71ca5ee087f" Version="1.0.0.0" Publisher="CN=$username$" />
+  <Properties>
+    <DisplayName>CordovaApp</DisplayName>
+    <PublisherDisplayName>$username$</PublisherDisplayName>
+    <Logo>images\StoreLogo.png</Logo>
+  </Properties>
+  <Prerequisites>
+    <OSMinVersion>6.3.0</OSMinVersion>
+    <OSMaxVersionTested>6.3.0</OSMaxVersionTested>
+  </Prerequisites>
+  <Resources>
+    <Resource Language="x-generate" />
+  </Resources>
+  <Applications>
+    <Application Id="io.cordova.cordovaapp" StartPage="www/index.html">
+      <m2:VisualElements DisplayName="CordovaApp"
+                         Description="CordovaApp"
+                         ForegroundText="light"
+                         BackgroundColor="#464646"
+                         Square150x150Logo="images\Square150x150Logo.png"
+                         Square30x30Logo="images\Square30x30Logo.png">
+        <m2:DefaultTile Square70x70Logo="images\Square70x70Logo.png"
+                        Square310x310Logo="images\Square310x310Logo.png"
+                        Wide310x150Logo="images\Wide310x150Logo.png">
+          <m2:ShowNameOnTiles>
+            <m2:ShowOn Tile="square150x150Logo" />
+            <m2:ShowOn Tile="wide310x150Logo" />
+            <m2:ShowOn Tile="square310x310Logo" />
+          </m2:ShowNameOnTiles>
+        </m2:DefaultTile>
+        <m2:SplashScreen Image="images\SplashScreen.png" />
+      </m2:VisualElements>
+    </Application>
+  </Applications>
+  <Capabilities>
+    <Capability Name="internetClient" />
+  </Capabilities>
+</Package>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/spec-plugman/projects/windows/package.windows80.appxmanifest
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/windows/package.windows80.appxmanifest b/cordova-lib/spec-plugman/projects/windows/package.windows80.appxmanifest
new file mode 100644
index 0000000..af9b9d9
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/windows/package.windows80.appxmanifest
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest">
+  <Identity Name="d409db80-9793-11e4-8ffa-f71ca5ee087f" Version="1.0.0.0" Publisher="CN=$username$" />
+  <Properties>
+    <DisplayName>CordovaApp</DisplayName>
+    <PublisherDisplayName>$username$</PublisherDisplayName>
+    <Logo>images\storelogo.png</Logo>
+  </Properties>
+  <Prerequisites>
+    <OSMinVersion>6.2.1</OSMinVersion>
+    <OSMaxVersionTested>6.2.1</OSMaxVersionTested>
+  </Prerequisites>
+  <Resources>
+    <Resource Language="x-generate" />
+  </Resources>
+  <Applications>
+    <Application Id="io.cordova.cordovaapp" StartPage="www/index.html">
+      <VisualElements DisplayName="CordovaApp"
+                      Logo="images\Square150x150Logo.png" 
+                      SmallLogo="images\Square30x30Logo.png"
+                      Description="CordovaApp" 
+                      ForegroundText="light" 
+                      BackgroundColor="#464646">
+        <DefaultTile ShowName="allLogos" WideLogo="images\Wide310x150Logo.png"/>
+        <SplashScreen Image="images\splashscreen.png" />
+      </VisualElements>
+    </Application>
+  </Applications>
+  <Capabilities>
+    <Capability Name="internetClient" />
+  </Capabilities>
+</Package>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/8b6f7b9b/cordova-lib/src/PluginInfo.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/PluginInfo.js b/cordova-lib/src/PluginInfo.js
index 8375d74..a9c06b6 100644
--- a/cordova-lib/src/PluginInfo.js
+++ b/cordova-lib/src/PluginInfo.js
@@ -205,7 +205,9 @@ function PluginInfo(dirname) {
             return {
                 src: tag.attrib.src,
                 arch: tag.attrib.arch,
-                Include: tag.attrib.Include
+                Include: tag.attrib.Include,
+                versions: tag.attrib.versions,
+                target: tag.attrib.target
             };
         });
         return libFiles;
@@ -273,7 +275,10 @@ function PluginInfo(dirname) {
                 parent: el.attrib.parent,
                 custom: isStrTrue(el.attrib.custom),
                 src: el.attrib.src,
-                weak: isStrTrue(el.attrib.weak)
+                weak: isStrTrue(el.attrib.weak),
+                versions: el.attrib.versions,
+                target: el.attrib.target,
+                arch: el.attrib.arch
             };
             return ret;
         });


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


Mime
View raw message