import atexit import os import shutil import tempfile from .display import print_warning def try_remove(path): try: os.remove(path) except: # pylint: disable=bare-except print_warning("Please manually remove the file `{}`".format(path)) def copy_release(target, source, env): # target filename and subdir for release files name = env["ESPURNA_RELEASE_NAME"] version = env["ESPURNA_RELEASE_VERSION"] destdir = env["ESPURNA_RELEASE_DESTINATION"] if not name or not version or not destdir: raise ValueError("Cannot set up release without release variables present") if not os.path.exists(destdir): os.makedirs(destdir) dest = os.path.join( destdir, "espurna-{version}-{name}.bin".format(version=version, name=name) ) src = env.subst("$BUILD_DIR/${PROGNAME}.bin") shutil.copy(src, dest) # emulate .ino concatenation to speed up compilation times def merge_cpp(sources, output): with tempfile.TemporaryFile() as tmp: tmp.write(b"// !!! Automatically generated file; DO NOT EDIT !!! \n") tmp.write(b'#include "espurna.h"\n') for source in sources: with open(source, "rb") as fobj: tmp.write('# 1 "{}"\n'.format(source.replace("\\", "/")).encode('utf-8')); shutil.copyfileobj(fobj, tmp) tmp.seek(0) with open(output, "wb") as fobj: shutil.copyfileobj(tmp, fobj) atexit.register(try_remove, output)