Add auto-lib.py python script to add included libraries automatically
This commit is contained in:
parent
e17b2a4781
commit
f33b14715b
1 changed files with 95 additions and 0 deletions
95
bin/auto-lib.py
Executable file
95
bin/auto-lib.py
Executable file
|
@ -0,0 +1,95 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
# Set variables
|
||||
USER_LIB_PATH = sys.argv[1]
|
||||
USER_LIBS = [] ;
|
||||
|
||||
includeRegex = re.compile("(?<=^\#include\s[\<\"])(.*)(?=\.h[\>\"])", re.DOTALL|re.M)
|
||||
|
||||
MAIN_SRCS = [] ;
|
||||
MAIN_LIBS = [] ;
|
||||
|
||||
LIBS_DEPS = [] ;
|
||||
LIBS_DEPS_STACK = [] ;
|
||||
|
||||
# Find local sources .ino, .c or .cpp
|
||||
for file in os.listdir(os.curdir):
|
||||
if file.endswith((".c", ".cpp", ".ino")):
|
||||
MAIN_SRCS.append(file)
|
||||
|
||||
# Find all USER_LIBS
|
||||
for path, dirs, files in os.walk(USER_LIB_PATH):
|
||||
for d in dirs:
|
||||
USER_LIBS.append(d)
|
||||
|
||||
# Find MAIN_LIBS included in MAIN_SRCS
|
||||
for src in MAIN_SRCS:
|
||||
currentFile = open(src)
|
||||
includes = []
|
||||
|
||||
for line in currentFile:
|
||||
match = includeRegex.search(line)
|
||||
if match:
|
||||
if match.group(1) in USER_LIBS:
|
||||
MAIN_LIBS.append(match.group(1))
|
||||
|
||||
MAIN_LIBS = list(sorted(MAIN_LIBS))
|
||||
|
||||
# Find LIBS_DEPS includes in MAIN_LIBS
|
||||
for lib in MAIN_LIBS:
|
||||
if lib in USER_LIBS:
|
||||
currentFile = open(USER_LIB_PATH + "/" + lib + "/" + lib + ".h")
|
||||
|
||||
for line in currentFile:
|
||||
match = includeRegex.search(line)
|
||||
if match:
|
||||
if match.group(1) in USER_LIBS and match.group(1) not in MAIN_LIBS:
|
||||
LIBS_DEPS_STACK.append(match.group(1))
|
||||
|
||||
LIBS_DEPS_STACK = sorted(set(LIBS_DEPS_STACK))
|
||||
|
||||
# Recursively find all dependencies of every libraries in USER_LIB_PATH
|
||||
while LIBS_DEPS_STACK:
|
||||
for lib in LIBS_DEPS_STACK:
|
||||
if lib in USER_LIBS:
|
||||
currentFile = open(USER_LIB_PATH + "/" + lib + "/" + lib + ".h")
|
||||
|
||||
for line in currentFile:
|
||||
match = includeRegex.search(line)
|
||||
if match:
|
||||
if match.group(1) in USER_LIBS and match.group(1) not in LIBS_DEPS_STACK or match.group(1) in LIBS_DEPS and match.group(1) not in MAIN_LIBS:
|
||||
LIBS_DEPS_STACK.append(match.group(1))
|
||||
|
||||
else:
|
||||
LIBS_DEPS.append(lib)
|
||||
if lib in LIBS_DEPS_STACK:
|
||||
LIBS_DEPS_STACK.remove(lib)
|
||||
|
||||
LIBS_DEPS_STACK = sorted(set(LIBS_DEPS_STACK))
|
||||
# print(LIBS_DEPS_STACK)
|
||||
|
||||
LIBS_DEPS = sorted(set(LIBS_DEPS))
|
||||
|
||||
# print("Main libraries: ")
|
||||
# print(MAIN_LIBS);
|
||||
# print("")
|
||||
# print("Dependencies stack: ")
|
||||
# print(LIBS_DEPS_STACK)
|
||||
# print("")
|
||||
# print("Libraries dependencies: ")
|
||||
# print(LIBS_DEPS);
|
||||
|
||||
def outputLibs(libArray):
|
||||
for lib in libArray:
|
||||
print(lib),
|
||||
print("")
|
||||
|
||||
print("MAIN_LIBS"),
|
||||
outputLibs(MAIN_LIBS)
|
||||
|
||||
print("LIBS_DEPS"),
|
||||
outputLibs(LIBS_DEPS)
|
Loading…
Reference in a new issue