summaryrefslogtreecommitdiffstats
path: root/scripts/sdks/agl/list
diff options
context:
space:
mode:
authorSebastien Douheret <sebastien.douheret@iot.bzh>2017-12-22 21:26:40 +0100
committerSebastien Douheret <sebastien.douheret@iot.bzh>2017-12-22 21:29:59 +0100
commitf1c182ede3c4aed0d6196d05b0a64ff93372e755 (patch)
tree2cf95732a06808aac8325bccb5199346b33165a2 /scripts/sdks/agl/list
parent285332c351777b74abca638b8b2a2cde3c68edc6 (diff)
Added SDKs management support.
Signed-off-by: Sebastien Douheret <sebastien.douheret@iot.bzh>
Diffstat (limited to 'scripts/sdks/agl/list')
-rwxr-xr-xscripts/sdks/agl/list137
1 files changed, 137 insertions, 0 deletions
diff --git a/scripts/sdks/agl/list b/scripts/sdks/agl/list
new file mode 100755
index 0000000..dc748a4
--- /dev/null
+++ b/scripts/sdks/agl/list
@@ -0,0 +1,137 @@
+#! /usr/bin/env node
+
+/**************************************************************************
+ * Copyright 2017 IoT.bzh
+ *
+ * author: Sebastien Douheret <sebastien@iot.bzh>
+ *
+ * Licensed 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.
+ **************************************************************************/
+
+const fs = require('fs');
+const process = require('process');
+const execSync = require('child_process').execSync;
+const path = require('path');
+
+
+// Only used for debug purpose
+const DEBUG = false || (process.argv.length > 2 && process.argv[2] == '-debug');
+dbgPrint = function () {
+ if (DEBUG) console.log.apply(console, arguments);
+}
+// Get env vars
+var envMap = {};
+envData = execSync(path.join(__dirname, '_env-init.sh -print'));
+envData.toString().split('\n').forEach(e => envMap[e.split('=')[0]] = e.split('=')[1]);
+const opts = {
+ cwd: __dirname,
+ env: envMap
+};
+
+// Get list of available SDKs
+sdksDBFile = path.join(__dirname, "sdks_latest.json")
+try {
+ // Fetch SDK Json database file when not existing
+ if (!fs.existsSync(sdksDBFile)) {
+ var data = execSync(path.join(__dirname, 'update'), opts);
+ }
+ // Read SDK Json database file
+ var data = fs.readFileSync(sdksDBFile);
+ var sdks = JSON.parse(data);
+
+ // Force some default fields value
+ sdks.forEach(sdk => {
+ sdk.status = 'Not Installed';
+ });
+} catch (err) {
+ dbgPrint('ERROR: ', err);
+ process.exit(-1)
+}
+
+// Get list of installed SDKs
+try {
+ const cmd = 'find "${SDK_ROOT_DIR}" -maxdepth 4 -name "${SDK_ENV_SETUP_FILENAME}"';
+ var data = execSync(cmd, opts);
+ data.toString().split('\n').forEach(envFile => {
+ if (envFile == '') return;
+
+ dbgPrint('Processing ', envFile);
+ const profile = envFile.split('/')[3];
+ const version = envFile.split('/')[4];
+ const arch = envFile.split('/')[5];
+ const dir = path.dirname(envFile);
+ if (profile == '' || version == '' || arch == '' || dir == '') {
+ return;
+ }
+
+ sdkDate = ''
+ versionFile = path.join(path.dirname(envFile), 'version-*')
+ try {
+ cmdVer = "[ -f " + versionFile + " ] && grep Timestamp " + versionFile + " |cut -d' ' -f2"
+ var data = execSync(cmdVer);
+ } catch (err) {
+ dbgPrint('IGNORING SDK ', dir);
+ dbgPrint(err.toString());
+ if (DEBUG) {
+ process.exit(-1);
+ } else {
+ return;
+ }
+ }
+ d = data.toString()
+ if (d != "") {
+ sdkDate = d.substring(0, 4) + "-" + d.substring(4, 6) + "-" + d.substring(6, 8)
+ sdkDate += " " + d.substring(8, 10) + ":" + d.substring(10, 12)
+ }
+
+ var found = false;
+ sdks.forEach(sdk => {
+ // Update sdk with local info when found
+ if (profile == sdk.profile && version == sdk.version && arch == sdk.arch) {
+ found = true;
+ dbgPrint(" OK found, updating...");
+ sdk.path = dir;
+ sdk.status = 'Installed';
+ sdk.data = sdkDate;
+ sdk.setupFile = envFile;
+ return
+ }
+ });
+ if (found == false) {
+ dbgPrint(" NOT found in database, adding it...");
+ sdks.push({
+ name: profile + '-' + arch + '-' + version,
+ description: 'AGL SDK ' + arch + ' (version ' + version + ')',
+ profile: profile,
+ version: version,
+ arch: arch,
+ path: dir,
+ url: "",
+ status: "Installed",
+ date: sdkDate,
+ size: "",
+ md5sum: "",
+ setupFile: envFile
+ });
+ }
+ });
+
+} catch (err) {
+ dbgPrint('ERROR: ', err);
+ process.exit(-1)
+}
+
+// Print result
+console.log(JSON.stringify(sdks));
+
+process.exit(0)