Skip to content

Commit 7408e96

Browse files
committed
tools: make js2c.py usable for other build systems
1 parent 31156a7 commit 7408e96

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

test/tools/test_js2c.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,27 @@
11
import unittest
22
import sys, os
3-
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),
4-
'..', '..', 'tools')))
3+
4+
rootdir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
5+
sys.path.append(os.path.join(rootdir, 'tools'))
6+
57
from js2c import NormalizeFileName
68

79
class Js2ctest(unittest.TestCase):
810
def testNormalizeFileName(self):
9-
self.assertEqual(NormalizeFileName('dir/mod.js'), 'mod')
10-
self.assertEqual(NormalizeFileName('deps/mod.js'), 'internal/deps/mod')
11-
self.assertEqual(NormalizeFileName('mod.js'), 'mod')
11+
self.assertEqual(NormalizeFileName(None, 'dir/mod.js'), 'mod')
12+
self.assertEqual(NormalizeFileName(None, 'deps/mod.js'), 'internal/deps/mod')
13+
self.assertEqual(NormalizeFileName(None, 'mod.js'), 'mod')
14+
15+
def testNormalizeFileNameWithRoot(self):
16+
self.assertEqual(
17+
NormalizeFileName(rootdir, os.path.join(rootdir, 'dir/mod.js')),
18+
'mod')
19+
self.assertEqual(
20+
NormalizeFileName(rootdir, os.path.join(rootdir, 'deps/mod.js')),
21+
'internal/deps/mod')
22+
self.assertEqual(
23+
NormalizeFileName(rootdir, os.path.join(rootdir, 'mod.js')),
24+
'mod')
1225

1326
if __name__ == '__main__':
1427
unittest.main()

tools/js2c.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,19 @@ def GetDefinition(var, source, step=30):
119119
return definition, len(code_points)
120120

121121

122-
def AddModule(filename, definitions, initializers):
122+
def AddModule(root, filename, definitions, initializers):
123123
code = ReadFile(filename)
124-
name = NormalizeFileName(filename)
124+
name = NormalizeFileName(root, filename)
125125
slug = SLUGGER_RE.sub('_', name)
126126
var = slug + '_raw'
127127
definition, size = GetDefinition(var, code)
128128
initializer = INITIALIZER.format(name, var, size)
129129
definitions.append(definition)
130130
initializers.append(initializer)
131131

132-
def NormalizeFileName(filename):
132+
def NormalizeFileName(root, filename):
133+
if root:
134+
filename = os.path.relpath(filename, root)
133135
split = filename.split('/')
134136
if split[0] == 'deps':
135137
split = ['internal'] + split
@@ -140,15 +142,15 @@ def NormalizeFileName(filename):
140142
return os.path.splitext(filename)[0]
141143

142144

143-
def JS2C(source_files, target):
145+
def JS2C(root, source_files, target):
144146
# Build source code lines
145147
definitions = []
146148
initializers = []
147149

148150
for filename in source_files['.js']:
149-
AddModule(filename, definitions, initializers)
151+
AddModule(root, filename, definitions, initializers)
150152
for filename in source_files['.mjs']:
151-
AddModule(filename, definitions, initializers)
153+
AddModule(root, filename, definitions, initializers)
152154

153155
config_def, config_size = handle_config_gypi(source_files['config.gypi'])
154156
definitions.append(config_def)
@@ -215,6 +217,10 @@ def main():
215217
'--directory',
216218
default=None,
217219
help='input file directory')
220+
parser.add_argument(
221+
'--root',
222+
default=None,
223+
help='root directory containing the sources')
218224
parser.add_argument('--verbose', action='store_true', help='output file')
219225
parser.add_argument('sources', nargs='*', help='input files')
220226
options = parser.parse_args()
@@ -231,9 +237,10 @@ def main():
231237
# Should have exactly 3 types: `.js`, `.mjs` and `.gypi`
232238
assert len(source_files) == 3
233239
# Currently config.gypi is the only `.gypi` file allowed
234-
assert source_files['.gypi'] == ['config.gypi']
240+
assert len(source_files['.gypi']) == 1
241+
assert os.path.basename(source_files['.gypi'][0]) == 'config.gypi'
235242
source_files['config.gypi'] = source_files.pop('.gypi')[0]
236-
JS2C(source_files, options.target)
243+
JS2C(options.root, source_files, options.target)
237244

238245

239246
if __name__ == "__main__":

0 commit comments

Comments
 (0)