mirror of
https://github.com/embarklabs/embark-solc.git
synced 2025-02-28 14:30:36 +00:00
Merge pull request #2 from embark-framework/map-paths
Add directories inside contracts/ to list of allowed paths for solc
This commit is contained in:
commit
456b143f56
@ -3,8 +3,9 @@ const shelljs = require('shelljs');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
function compileSolcContract(logger, filename, callback) {
|
||||
shelljs.exec(`solc --optimize --combined-json abi,bin,bin-runtime,compact-format,hashes,interface,metadata ${filename}`,
|
||||
function compileSolcContract(logger, filename, allowedDirectories, callback) {
|
||||
const command = `solc --optimize --combined-json abi,bin,bin-runtime,compact-format,hashes,interface,metadata --allow-paths ${allowedDirectories.join(',')} ${filename}`;
|
||||
shelljs.exec(command,
|
||||
{silent: true}, (code, stdout, stderr) => {
|
||||
|
||||
if (stderr) {
|
||||
@ -40,11 +41,14 @@ function compileSolc(embark, contractFiles, cb) {
|
||||
}
|
||||
|
||||
logger.info("compiling solidity contracts with command line solc...");
|
||||
|
||||
|
||||
const allowedDirectories = contractFiles.map((contractFile) => path.dirname(path.join(process.cwd(), contractFile.path)))
|
||||
.filter((x, i, a) => a.indexOf(x) == i);
|
||||
|
||||
let compiled_object = {};
|
||||
async.each(contractFiles,
|
||||
function (file, fileCb) {
|
||||
compileSolcContract(logger, file.filename, (err, compileString) => {
|
||||
compileSolcContract(logger, file.filename, allowedDirectories, (err, compileString) => {
|
||||
if (err) {
|
||||
return fileCb(err);
|
||||
}
|
||||
@ -55,16 +59,20 @@ function compileSolc(embark, contractFiles, cb) {
|
||||
|
||||
for (let contractFile in json.contracts) {
|
||||
let className = contractFile.substr( contractFile.indexOf(":") + 1);
|
||||
let fileName = contractFile.substr(0, contractFile.indexOf(":"));
|
||||
let filename = contractFile.substr(0, contractFile.indexOf(":"));
|
||||
|
||||
let contract = json.contracts[contractFile];
|
||||
|
||||
if(compiled_object[className] && compiled_object[className].filename != filename){
|
||||
logger.warn(`Duplicated contract '${className}' found. Using '${compiled_object[className].filename}' instead of '${file.filename}'`);
|
||||
continue;
|
||||
}
|
||||
|
||||
compiled_object[className] = {};
|
||||
compiled_object[className].code = contract.bin
|
||||
compiled_object[className].runtimeBytecode = contract["bin-runtime"];
|
||||
compiled_object[className].functionHashes = contract.hashes;
|
||||
compiled_object[className].abiDefinition = JSON.parse(contract.abi);
|
||||
compiled_object[className].filename = fileName;
|
||||
compiled_object[className].filename = filename;
|
||||
}
|
||||
|
||||
fileCb();
|
||||
|
Loading…
x
Reference in New Issue
Block a user