[QBS] Platform probe procedure

André Somers andre at familiesomers.nl
Tue Mar 6 11:08:33 CET 2012


Op 6-3-2012 10:50, BogDan schreef:
> Hello,
>
>    I've check current "platform probe" procedure and I don't find it very flexible, IMHO creating an application to probe a platform is too complicated, as long as you have a very powerful scripting language.  So, my proposal is to use QML to probe the platforms also.
> Because to probe for a platform you need some extra informations (e.g where is the toolchain, etc.),  I tried to make it IDE friendly, meaning that the IDE can create dynamic forms to collect all the informations needed to probe for that platform.
>
>
> Here is a proof of concept android platform probe (I didn't check if the syntax if is correct or not):
>
> //////////
>
>
> import qbs.base 1.0
>
> Platform {
>      name: "android" // Name of the platform
>      description: "Android O.S. support" // Description, used by the IDE to show some info about the probe
>
>      property var ndkPath
>      PropertyOptions {
>          name: "ndkPath" // Name of the property
>          description: "Android NDK path" // The IDE will use this information to fill a lable before the control
>          type: "path" // the type is very important for IDE, in this case the IDE will create a control which accepts only a path
>          isValid: { // is this property valid ?  This info will be used by the IDE to enable/disable any control which depends by this one (e.g. the toolchain version should be disabled till this values will become true)
>              if (!File.exists(ndkPath+'/toolchains') || !File.exists(ndkPath+'/platforms'))
>                  throw "Selected path doesn't seems to contains an Android NDK"
>              return true
>          }
>      }
>
>      property var toolchainVersion
>      PropertyOptions {
>          Depends { name: "ndkPath" } // The IDE will use this info to enable/dissble the control if the ndkPath is valid or not
>          name: "toolchainVersion" // Name of the property
>          description: "Please select the toolchain version" // The IDE will use this information to fill the label before the control
>          type: "combobox" // the IDE will create a combobox control
>          value: { // the IDE will fill the control (combobox) with these values and it will use only one to set the property
>              if (!ndkPath.isValid) // check if the ndkPath property is set correctly
>                  throw "Please select Android NDK path first"
>              var versions
>              var versionFiles = File.ls(ndkPath+'/toolchains/*') // dir all the files from toolchains folder
>              for (var ver in versionFiles)
>              {
>                  var match = /.*-(\d+.\d+.\d+)/(ver) // get the version number, the files will have the following patter platform-abi-x.y.z where x.y.z is the gcc version.
>                  if (!versions.contains(match[1]))
>                      versions.push(match[1])
>              }
>              return versions
>          }
>
>          isValid: { // check if the version is valid
>              return ndkPath.isValid&&  toolchainVersion.value.contains(toolchainVersion)
>          }
>      }
>
>      property bool isValid : false
>
>      probe: {
>          isValid = ndkPath.isValid&&  toolchainVersion.isValid
>          return isValid
>      }
> }
>
>
> //////////
>
>
Disclaimer: I'm very new around here (following this more out of 
interest than that I have technical knowhow to contribute), so forgive 
me if I speak nonsense (but please do correct me).

I find that prescribing the IDE what control to use (type: "combobox") 
to make a selection a bit weird. Why don't you limit yourself to 
describing that you have a list of options of which only one can be 
chosen, and let the IDE figure out if it wants to use a combo box, a 
list box, a spin control or whatever else is deemed appropriate by the IDE?

André




More information about the Qbs mailing list