lib/qx/tool/cli/commands/Compile.js
async function(maker, contribs) {
      let errors = [];
      let libs = maker.getAnalyser().getLibraries();
      const SDK_VERSION = await this.getUserQxVersion();
      // check all requieres
      for (let lib of libs) {
        let requires = lib.getRequires();
        if (!requires) {
          requires = {};
        }
        if (!contribs) {
          contribs = {};
        }
        // check for qooxdoo-range
        let range = lib.getLibraryInfo()["qooxdoo-range"];
        if (range) {
          if (this.argv.verbose) {
            console.warn(`${lib.getNamespace()}: The configuration setting "qooxdoo-range" in Manifest.json has been deprecated in favor of "requires.qooxdoo-sdk")`);
          }
          if (!requires["qooxdoo-sdk"]) {
            requires["qooxdoo-sdk"] = range;
          }
        }
        let requires_uris = Object.getOwnPropertyNames(requires).filter(name => !name.startsWith("qooxdoo-"));
        let contrib_libs = Object.getOwnPropertyNames(contribs);
        if (requires_uris.length > 0 && contrib_libs.length === 0) {
            // if we don't have contrib data
            if (this.argv.download) {
              // but we're instructed to download the libraries
              if (this.argv.verbose) {
                console.info(`>>> Installing latest compatible version of required libraries...`);
              }
              const installer = new qx.tool.cli.commands.contrib.Install({
                verbose: this.argv.verbose,
                save: false // save to contrib.json only, not to manifest
              });
              await installer.process();
              throw new qx.tool.cli.Utils.UserError("Added missing library information from Manifest. Please restart the compilation.");
            } else {
              throw new qx.tool.cli.Utils.UserError("No library information available. Try 'qx compile --download'");
            }
          }

          for (let reqUri of Object.getOwnPropertyNames(requires)) {
            let reqVersion = requires[reqUri];
            switch (reqUri) {
              // npm release only
              case "qooxdoo-compiler": {
                let qxVer = qx.tool.compiler.Version.VERSION;
                if (!semver.satisfies(qxVer, reqVersion, {loose: true})) {
                  errors.push(`${lib.getNamespace()}: Needs qooxdoo-compiler version ${reqVersion}, found ${qxVer}`);
                }
                break;
              }
              // npm release only
              case "qooxdoo-sdk": {
                let qxVer = SDK_VERSION;
                if (!semver.satisfies(qxVer, reqVersion, {loose: true})) {
                  errors.push(`${lib.getNamespace()}: Needs qooxdoo-sdk version ${reqVersion}, found ${qxVer}`);
                }
                break;
              }
              // github repository release or commit-ish identifier
              default: {
                let l = libs.find(entry => path.relative("", entry.getRootDir()) === contribs[reqUri]);
                if (!l) {
                  errors.push(`${lib.getNamespace()}: Cannot find required library '${reqUri}'`);
                  break;
                }
                // github release in contrib registry
                let libVersion = l.getLibraryInfo().version;
                if (!semver.valid(libVersion, {loose: true})) {
                  console.warn(`${reqUri}: Version is not valid: ${libVersion}`);
                } else if (!semver.satisfies(libVersion, reqVersion, {loose: true})) {
                  errors.push(`${lib.getNamespace()}: Needs ${reqUri} version ${reqVersion}, found ${libVersion}`);
                }
                break;
            }
          }
        }
      }
      return errors;
    }
async function(maker, contribs) {
      let errors = [];
      let libs = maker.getAnalyser().getLibraries();
      const SDK_VERSION = await this.getUserQxVersion();
      // check all requieres
      for (let lib of libs) {
        let requires = lib.getRequires();
        if (!requires) {
          requires = {};
        }
        if (!contribs) {
          contribs = {};
        }
        // check for qooxdoo-range
        let range = lib.getLibraryInfo()["qooxdoo-range"];
        if (range) {
          if (this.argv.verbose) {
            console.warn(`${lib.getNamespace()}: The configuration setting "qooxdoo-range" in Manifest.json has been deprecated in favor of "requires.qooxdoo-sdk")`);
          }
          if (!requires["qooxdoo-sdk"]) {
            requires["qooxdoo-sdk"] = range;
          }
        }
        let requires_uris = Object.getOwnPropertyNames(requires).filter(name => !name.startsWith("qooxdoo-"));
        let contrib_libs = Object.getOwnPropertyNames(contribs);
        if (requires_uris.length > 0 && contrib_libs.length === 0) {
            // if we don't have contrib data
            if (this.argv.download) {
              // but we're instructed to download the libraries
              if (this.argv.verbose) {
                console.info(`>>> Installing latest compatible version of required libraries...`);
              }
              const installer = new qx.tool.cli.commands.contrib.Install({
                verbose: this.argv.verbose,
                save: false // save to contrib.json only, not to manifest
              });
              await installer.process();
              throw new qx.tool.cli.Utils.UserError("Added missing library information from Manifest. Please restart the compilation.");
            } else {
              throw new qx.tool.cli.Utils.UserError("No library information available. Try 'qx compile --download'");
            }
          }

          for (let reqUri of Object.getOwnPropertyNames(requires)) {
            let reqVersion = requires[reqUri];
            switch (reqUri) {
              // npm release only
              case "qooxdoo-compiler": {
                let qxVer = qx.tool.compiler.Version.VERSION;
                if (!semver.satisfies(qxVer, reqVersion, {loose: true})) {
                  errors.push(`${lib.getNamespace()}: Needs qooxdoo-compiler version ${reqVersion}, found ${qxVer}`);
                }
                break;
              }
              // npm release only
              case "qooxdoo-sdk": {
                let qxVer = SDK_VERSION;
                if (!semver.satisfies(qxVer, reqVersion, {loose: true})) {
                  errors.push(`${lib.getNamespace()}: Needs qooxdoo-sdk version ${reqVersion}, found ${qxVer}`);
                }
                break;
              }
              // github repository release or commit-ish identifier
              default: {
                let l = libs.find(entry => path.relative("", entry.getRootDir()) === contribs[reqUri]);
                if (!l) {
                  errors.push(`${lib.getNamespace()}: Cannot find required library '${reqUri}'`);
                  break;
                }
                // github release in contrib registry
                let libVersion = l.getLibraryInfo().version;
                if (!semver.valid(libVersion, {loose: true})) {
                  console.warn(`${reqUri}: Version is not valid: ${libVersion}`);
                } else if (!semver.satisfies(libVersion, reqVersion, {loose: true})) {
                  errors.push(`${lib.getNamespace()}: Needs ${reqUri} version ${reqVersion}, found ${libVersion}`);
                }
                break;
            }
          }
        }
      }
      return errors;
    }
Checks the dependencies of the current library
@param {qx.tool.compiler.makers.Maker} maker
The maker object
@param {Object|*} contribs
If given, an object mapping library uris to library paths
@return {Promise<Array>} Array of error messages
@private