blob: 3c213e415d8007cb741907dd0efb05a1ea31b7f2 [file] [log] [blame]
/* --COPYRIGHT--,EPL
* Copyright (c) 2008 Texas Instruments and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Texas Instruments - initial implementation
*
* --/COPYRIGHT--*/
/*
* ======== rel.js ========
*/
/*
* ======== rel.js ========
* This command performs all release data gathering and validation
* for a package.
*
* Generate package/package.rel.xml files, check that the declared import
* requirements are consistent with the actual versions imported via
* the package path, and check that all import requirements are
* (recursively) consistent.
*
* usage: rel.js [-f] package-base-dir [output-file]
*
* Options:
* -f (force) consistency checks to not fail; check failures are
* always displayed, but the creation of the release normally
* fails if compatibility failures are detected.
*
* -v verbose mode; display information during processing
*/
/* set-up the om */
utils.loadCapsule('xdc/xdc.tci');
/* om2.xs capsule accesses xdc.global assuming it's the top-level scope, while
* xdc.tci sets xdc.global to the local scope of the capsule.
*/
xdc.global = this;
/* setCurPkgBase must be called before loadCapsule is called because
* setCurPkgBase impacts the path in loadCapsule, when '^' is used.
*/
xdc.setCurPkgBase(".");
xdc.loadCapsule('xdc/om2.xs');
/* This is where xs executable loads a model, if needed, and then gives
* control to the user script.
*/
/* -------------------------------------------------------------------------*/
xdc.$$make_om('rel');
utils.importFile("rel.tci");
/*
* ======== main ========
*/
if (arguments.length >= 1) {
var verbose = false;
var topdir = arguments.shift();
if (topdir[0] == '-') {
switch (topdir[1]) {
case 'f': {
environment["xdc.bld.release.check.fatal"] = "false";
topdir = arguments.shift();
break;
}
case 'v': {
verbose = true;
environment["xdc.bld.release.verbose"] = "true";
topdir = arguments.shift();
break;
}
default: {
print("usage: rel.js [-f] package-base-dir [output-file]");
java.lang.System.exit(1);
}
}
}
var outputFileName = null;
if (arguments.length >= 1) {
outputFileName = arguments.shift();
}
/* set the package path for the current package under review */
var ppath = rel.getPackagePath(topdir + '/.xdcenv.mak');
environment["xdc.path"] = ppath;
/* load java run-time support */
xdc.loadPackage('xdc.services.intern.cmd');
/* generate the referenced package information first; this ensures that
* we have the information about references even if the import
* requirements are determined to be incompatible with the package path.
*/
var builtWith = rel.genXML(topdir, outputFileName);
/* get the current package name */
var curPkg = new Packages.xdc.services.intern.cmd.Scan(
xdc.$$private.Env
);
var curPkgName = "" + curPkg.read(topdir + "/package.xdc");
if (verbose == true) {
print("Package " + curPkgName + " built with the following packages:");
for (var p in builtWith) {
print(" " + p + " [" + builtWith[p] + "]");
}
}
/* verify consistency of existing verses required imports */
if (verbose == true) {
print("Checking that the requirements of " + curPkgName
+ " match versions actually built with ... ");
}
rel.checkImports(curPkg.getImports(), builtWith, curPkgName);
/* check compatibility of import statements and built-with versions */
if (verbose == true) {
print("Checking compatibility of " + curPkgName
+ "'s requirements with packages imported ... ");
}
rel.verify([curPkgName]);
}