Hi,

#1 The problem
Right now the simplest (and also the most correct IMO) way to specify plugin 
restrictions to specific cordova version is the following:

plugin.xml:

 <engines>
   <engine name="cordova" version=">=2.7.0" />
 </engines>

But in this case as per plugman engines definition 
(plugman/src/util/default-engines.js) plugman will always try to find version 
verification script in some predefined location, not taking into account 
currently running platform, and will fail on WP since correct script name is 
version.bat, not just version.

module.exports = function(project_dir){
    return {
        'cordova': 
            { 'platform':'*', 'scriptSrc': 
path.join(project_dir,'cordova','version') }, <- works in general, but NOT for 
WP7/8 
         ...
        'cordova-wp8': 
            { 'platform':'wp8', 'scriptSrc': 
path.join(project_dir,'cordova','version.bat') }, <- correct location, not used 
in case of example above


This means that right now there is no way to specify platform dependent 
location of version verification script for 'cordova' engine check which  is 
going to be the most popular. 

#2 Proposed solution

Taking into account we have platform context when we are looking for the 
appropriate engine 
plugman/src/install.js
        function getEngines(pluginElement, platform, project_dir, plugin_dir){

I propose to think about 'cordova' engine settings (in default-engines.js) as a 
fallback in case we don't have any platform specific engine for some platform. 
So in case of  engine.attrib["name"] == 'cordova' we should check if there is 
engine with ['cordova-' + platform] name first and if it does not exist use 
'cordova' engine settings only.  For example we already do this by the 
following line, but we need both engines (cordova and cordova-wp8) specified in 
plugin.xml file. Thoughts? 

// make sure we check for platform req's and not just cordova reqs
    if(cordovaEngineIndex && cordovaPlatformEngineIndex) 
uncheckedEngines.pop(cordovaEngineIndex);

PS. Another minor potential issue seems to be in check above; 
cordovaEngineIndex && cordovaPlatformEngineIndex will return false if one of 
indexes is zero (zero is valid/correct index in this context so it must be 
true).

Thx!
Sergey

Reply via email to