diff --git a/platformio.ini b/platformio.ini index 5eb4f29..9ff77aa 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,6 +12,8 @@ platform = espressif32 board = node32s +extra_scripts = pre:timelib_fix.py + framework = arduino monitor_speed = 115200 diff --git a/timelib_fix.py b/timelib_fix.py new file mode 100644 index 0000000..84c0ec1 --- /dev/null +++ b/timelib_fix.py @@ -0,0 +1,31 @@ +import os +import sys +import re +Import("env") + +# Find files under 'root' of a given 'fileName' in directories matching 'subDirectoryPattern' +# This will allow us to safely find the offending Time.h file for removal prior to building +def findSubDirectoryFiles(root, subDirectoryPattern, fileName): + subDirectories = os.listdir(root) + subDirectories = filter(lambda d: re.match(subDirectoryPattern, d), subDirectories) + result = [] + for subDirectory in subDirectories: + candidateFile = os.path.join(root, subDirectory, fileName) + if os.path.isfile(candidateFile): + result.append(candidateFile) + return result + +# lib deps directory +libDepsDir = os.path.join(env.subst('$PROJECT_DIR'), '.piolibdeps') +timeHeaderFile = "Time.h" +timeLibDirectoryPattern = "Time(_ID[0-9]+)?" + +# delete the file, as long as we only find one +if os.path.isdir(libDepsDir) : + deletionCandidates = findSubDirectoryFiles(libDepsDir, timeLibDirectoryPattern, timeHeaderFile) + numDeletionCandidates = len(deletionCandidates) + if numDeletionCandidates == 1: + os.remove(deletionCandidates[0]) + elif numDeletionCandidates > 1: + os.write(2, 'Can\'t delete Time.h, more than one instance found:\n' + '\n'.join(deletionCandidates)) + sys.exit(1)