90 lines
1.9 KiB
JavaScript
Executable file
90 lines
1.9 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
const parseArgs = require('minimist')
|
|
const path = require('path')
|
|
const os = require('os')
|
|
const toml = require('toml')
|
|
const fs = require('fs')
|
|
|
|
let tomlContentString
|
|
let tomlContent
|
|
let moduleName
|
|
|
|
try {
|
|
tomlContentString = fs.readFileSync(
|
|
path.join(process.cwd(), 'Cargo.toml'),
|
|
'utf-8',
|
|
)
|
|
} catch {
|
|
throw new TypeError('Can not find Cargo.toml in process.cwd')
|
|
}
|
|
|
|
try {
|
|
tomlContent = toml.parse(tomlContentString)
|
|
} catch {
|
|
throw new TypeError('Can not parse the Cargo.toml')
|
|
}
|
|
|
|
if (tomlContent.package && tomlContent.package.name) {
|
|
moduleName = tomlContent.package.name.replace(/-/g, '_')
|
|
} else {
|
|
throw new TypeError('No package.name field in Cargo.toml')
|
|
}
|
|
|
|
const argv = parseArgs(process.argv.slice(2), {
|
|
boolean: ['release', 'platform', 'musl'],
|
|
})
|
|
|
|
const platform = os.platform()
|
|
let libExt
|
|
let dylibName = moduleName
|
|
|
|
// Platform based massaging for build commands
|
|
switch (platform) {
|
|
case 'darwin':
|
|
libExt = '.dylib'
|
|
dylibName = `lib${moduleName}`
|
|
break
|
|
case 'win32':
|
|
libExt = '.dll'
|
|
break
|
|
case 'linux':
|
|
dylibName = `lib${moduleName}`
|
|
libExt = '.so'
|
|
break
|
|
default:
|
|
console.error(
|
|
'Operating system not currently supported or recognized by the build script',
|
|
)
|
|
process.exit(1)
|
|
}
|
|
|
|
const targetDir = argv.release ? 'release' : 'debug'
|
|
|
|
const platformName = argv.musl ? '.musl' : argv.platform ? `.${platform}` : ''
|
|
|
|
let subcommand =
|
|
argv._[0] ||
|
|
path.join('target', targetDir, `${moduleName}${platformName}.node`)
|
|
const parsedDist = path.parse(subcommand)
|
|
|
|
if (!parsedDist.name || parsedDist.name === '.') {
|
|
subcommand = moduleName
|
|
}
|
|
|
|
if (!parsedDist.ext) {
|
|
subcommand = `${subcommand}${platformName}.node`
|
|
}
|
|
|
|
const pos = __dirname.indexOf('node_modules')
|
|
|
|
const dylibContent = fs.readFileSync(
|
|
path.join(
|
|
__dirname.substring(0, pos),
|
|
'target',
|
|
targetDir,
|
|
`${dylibName}${libExt}`,
|
|
),
|
|
)
|
|
|
|
fs.writeFileSync(subcommand, dylibContent)
|