Skip to content

Commit f803ba5

Browse files
committed
build.py->library: refactor file selection, so it includes subfolders
1 parent 732c144 commit f803ba5

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

circuitpython_build_tools/build.py

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,31 +108,56 @@ def library(library_path, output_directory, mpy_cross=None, example_bundle=False
108108
for filename in os.listdir(library_path):
109109
full_path = os.path.join(library_path, filename)
110110
if os.path.isdir(full_path):
111-
files = os.listdir(full_path)
112-
files = filter(lambda x: x.endswith(".py") or x.startswith("font5x8.bin"), files)
111+
path_walk = [names for names in os.walk(full_path)]
112+
#print("- '{}' walk: {}".format(filename, path_walk))
113+
114+
# iterate through path_walk, appending each file to
115+
# 'walked_files' while retaining subdirectory structure
116+
walked_files = []
117+
for path in path_walk:
118+
path_tail_idx = path[0].rfind("/") + 1
119+
path_tail = path[0][path_tail_idx:]
120+
rel_path = ""
121+
# if this entry is the package top dir, keep it
122+
# empty so we don't double append the dir name
123+
if filename not in path_tail:
124+
rel_path = "{}/".format(path_tail)
125+
126+
for path_files in path[2]:
127+
walked_files.append("{}{}".format(rel_path, path_files))
128+
#print(" - expanded file walk: {}".format(walked_files))
129+
130+
files = filter(lambda x: x.endswith(".py") or x.startswith("font5x8.bin"), walked_files)
113131
files = map(lambda x: os.path.join(filename, x), files)
132+
114133
if filename.startswith("examples"):
115134
example_files.extend(files)
116-
#print(" - example files: {}".format(example_files))
135+
#print("- example files: {}".format(example_files))
117136
else:
118137
if pkg_folder_prefix:
119138
if (not example_bundle and
120139
not filename.startswith(pkg_folder_prefix)):
121-
print("skipped path: {}".format(full_path))
122-
continue
140+
#print("skipped path: {}".format(full_path))
141+
continue
123142
if not example_bundle:
124143
package_files.extend(files)
125-
#print(" - package files: {}".format(package_files))
144+
#print("- package files: {} | {}".format(filename, package_files))
126145

127146
if (filename.endswith(".py") and
128147
filename not in IGNORE_PY and
129148
not example_bundle):
130-
py_files.append(filename)
149+
py_files.append(filename)
131150

132151
if len(py_files) > 1:
133152
raise ValueError("Multiple top level py files not allowed. Please put them in a package "
134153
"or combine them into a single file.")
135154

155+
for fn in example_files:
156+
base_dir = os.path.join(output_directory.replace("/lib", "/"), os.path.dirname(fn))
157+
if not os.path.isdir(base_dir):
158+
os.makedirs(base_dir)
159+
total_size += 512
160+
136161
for fn in package_files:
137162
base_dir = os.path.join(output_directory, os.path.dirname(fn))
138163
if not os.path.isdir(base_dir):

0 commit comments

Comments
 (0)