97 lines
3.2 KiB
JavaScript
97 lines
3.2 KiB
JavaScript
//===----------------------------------------------------------------------===//
|
|
// Distributed under the 3-Clause BSD License. See accompanying file LICENSE or
|
|
// copy at https://opensource.org/licenses/BSD-3-Clause).
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Detect the dominant newline character of a string, from 'detect-newline'
|
|
// https://github.com/sindresorhus/detect-newline
|
|
//
|
|
// MIT License
|
|
// -----------------------------------------------------------------------------
|
|
function detectNewline(string) {
|
|
if (typeof string !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
const newlines = string.match(/(?:\r?\n)/g) || [];
|
|
|
|
if (newlines.length === 0) {
|
|
return;
|
|
}
|
|
|
|
const crlf = newlines.filter(newline => newline === '\r\n').length;
|
|
const lf = newlines.length - crlf;
|
|
|
|
return crlf > lf ? '\r\n' : '\n';
|
|
}
|
|
|
|
function detectNewlineGraceful(string) {
|
|
return (typeof string === 'string' && detectNewline(string)) || '\n';
|
|
}
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Version reader/updated for standard-version that uses the mETA information in
|
|
// the CmakeLists.txt file
|
|
// -----------------------------------------------------------------------------
|
|
|
|
const major_rex = /set\(META_VERSION_MAJOR\s+\"(\d+)\"\)/;
|
|
const minor_rex = /set\(META_VERSION_MINOR\s+\"(\d+)\"\)/;
|
|
const patch_rex = /set\(META_VERSION_PATCH\s+\"(\d+)\"\)/;
|
|
|
|
module.exports.readVersion = function (contents) {
|
|
var major = null, minor = null, patch = null;
|
|
|
|
const lines = contents.split(/\r?\n/);
|
|
for (let index in lines) {
|
|
let line = lines[index];
|
|
var match = null;
|
|
if (major == null) {
|
|
var match = major_rex.exec(line);
|
|
if (match != null) {
|
|
major = match[1];
|
|
}
|
|
}
|
|
if (match == null && minor == null) {
|
|
var match = minor_rex.exec(line);
|
|
if (match != null) {
|
|
minor = match[1];
|
|
}
|
|
}
|
|
if (match == null && patch == null) {
|
|
var match = patch_rex.exec(line);
|
|
if (match != null) {
|
|
patch = match[1];
|
|
}
|
|
}
|
|
if (major != null && minor != null && patch != null) break;
|
|
};
|
|
|
|
if (major == null)
|
|
console.error("Your CmakeLists.txt is missing META_VERSION_MAJOR variable!");
|
|
if (minor == null)
|
|
console.error("Your CmakeLists.txt is missing META_VERSION_MINOR variable!");
|
|
if (patch == null)
|
|
console.error("Your CmakeLists.txt is missing META_VERSION_PATCH variable!");
|
|
|
|
return major + "." + minor + "." + patch;
|
|
}
|
|
|
|
module.exports.writeVersion = function (contents, version) {
|
|
var [major, minor, patch] = version.split(".");
|
|
var newContents = [];
|
|
|
|
const lines = contents.split(/\r?\n/);
|
|
lines.forEach(line => {
|
|
var newLine = line.replace(major_rex, "set(META_VERSION_MAJOR \"" + major + "\")")
|
|
.replace(minor_rex, "set(META_VERSION_MINOR \"" + minor + "\")")
|
|
.replace(patch_rex, "set(META_VERSION_PATCH \"" + patch + "\")");
|
|
newContents.push(newLine);
|
|
});
|
|
|
|
let newline = detectNewlineGraceful(contents)
|
|
return newContents.join(newline);
|
|
}
|