-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
81 lines (74 loc) · 1.8 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
const fs = require('fs');
const os = require('os');
const join = require('path').join;
const dirname = require('path').dirname;
const normalize = require('path').normalize;
function getIncludeFiles(path) {
return getIncludeFilesFromString(fs.readFileSync(path).toString(), { origin: path, });
}
function getIncludeFilesFromString(str, opt) {
var m, files = [];
var r = /^\s*#include\s*(?:"([^"]+)"|<([^>]+)>)/mg;
var opt = opt || {};
var origin = opt.origin || "";
while ((m = r.exec(str)) != null)
files.push({ path: m[1] || m[2],
local: m[1] ? true : false,
find: find,
origin: origin })
return files;
}
function ENV(env) {
return (process.env[env] || "").split(os.platform() != 'win32' ? /:/g : /;/g).
filter(p => p.length > 0);
}
function INCLUDE() {
return ENV(os.platform() != 'win32' ? "CPATH" : "INCLUDE");
}
function findpath(path, dirs) {
for (var d of dirs) {
var full = normalize(join(d, path));
try {
fs.accessSync(full);
return full;
}
catch (e) {
continue;
}
}
}
function ensureDirname(path) {
try {
return fs.statSync(path).isDirectory()
? path : dirname(path);
}
catch (e) {
return typeof(path) === 'string' ?
dirname(path) : ".";
}
}
function ensureArray(obj) {
if (obj == null)
return [];
if (!(obj instanceof Array))
return [obj];
return obj;
}
function find(dirs) {
dirs = ensureArray(dirs).concat(INCLUDE());
if (this.local)
dirs.splice(0, 0, ensureDirname(this.origin));
return findpath(this.path, dirs);
}
module.exports = {
getIncludeFiles: getIncludeFiles,
getIncludeFilesFromString: getIncludeFilesFromString,
_: {
ensureDirname: ensureDirname,
ensureArray: ensureArray,
find: find,
findpath: findpath,
ENV: ENV,
INCLUDE: INCLUDE,
}
}