6363# - Sets the executable permission (`stat.S_IRWXU`) for the generated scripts on POSIX systems.
6464
6565from bs4 import BeautifulSoup
66+ import atexit
6667import logging
6768import re
6869import sys
@@ -129,13 +130,16 @@ def _resolve_concore_path():
129130 M_IS_OCTAVE = True #treat .m as octave 9/27/21
130131
131132if os .path .exists (CONCOREPATH + "/concore.mcr" ): # 11/12/21
132- MCRPATH = open (CONCOREPATH + "/concore.mcr" , "r" ).readline ().strip () #path to local Ubunta Matlab Compiler Runtime
133+ with open (CONCOREPATH + "/concore.mcr" , "r" ) as f :
134+ MCRPATH = f .readline ().strip () #path to local Ubunta Matlab Compiler Runtime
133135
134136if os .path .exists (CONCOREPATH + "/concore.sudo" ): # 12/04/21
135- DOCKEREXE = open (CONCOREPATH + "/concore.sudo" , "r" ).readline ().strip () #to omit sudo in docker
137+ with open (CONCOREPATH + "/concore.sudo" , "r" ) as f :
138+ DOCKEREXE = f .readline ().strip () #to omit sudo in docker
136139
137140if os .path .exists (CONCOREPATH + "/concore.repo" ): # 12/04/21
138- DOCKEREPO = open (CONCOREPATH + "/concore.repo" , "r" ).readline ().strip () #docker id for repo
141+ with open (CONCOREPATH + "/concore.repo" , "r" ) as f :
142+ DOCKEREPO = f .readline ().strip () #docker id for repo
139143
140144
141145prefixedgenode = ""
@@ -195,6 +199,12 @@ def _resolve_concore_path():
195199 funlock = open ("unlock" , "w" ) # 12/4/21
196200 fparams = open ("params" , "w" ) # 9/18/22
197201
202+ def cleanup_script_files ():
203+ for fh in [fbuild , frun , fdebug , fstop , fclear , fmaxtime , funlock , fparams ]:
204+ if not fh .closed :
205+ fh .close ()
206+ atexit .register (cleanup_script_files )
207+
198208os .mkdir ("src" )
199209os .chdir (".." )
200210
@@ -208,8 +218,8 @@ def _resolve_concore_path():
208218logging .info (f"MCR path: { MCRPATH } " )
209219logging .info (f"Docker repository: { DOCKEREPO } " )
210220
211- f = open (GRAPHML_FILE , "r" )
212- text_str = f .read ()
221+ with open (GRAPHML_FILE , "r" ) as f :
222+ text_str = f .read ()
213223
214224soup = BeautifulSoup (text_str , 'xml' )
215225
@@ -455,121 +465,125 @@ def _resolve_concore_path():
455465#copy proper concore.py into /src
456466try :
457467 if concoretype == "docker" :
458- fsource = open (CONCOREPATH + "/concoredocker.py" )
468+ with open (CONCOREPATH + "/concoredocker.py" ) as fsource :
469+ source_content = fsource .read ()
459470 else :
460- fsource = open (CONCOREPATH + "/concore.py" )
471+ with open (CONCOREPATH + "/concore.py" ) as fsource :
472+ source_content = fsource .read ()
461473except (FileNotFoundError , IOError ) as e :
462474 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
463475 quit ()
464476with open (outdir + "/src/concore.py" ,"w" ) as fcopy :
465- fcopy .write (fsource .read ())
466- fsource .close ()
477+ fcopy .write (source_content )
467478
468479#copy proper concore.hpp into /src 6/22/21
469480try :
470481 if concoretype == "docker" :
471- fsource = open (CONCOREPATH + "/concoredocker.hpp" )
482+ with open (CONCOREPATH + "/concoredocker.hpp" ) as fsource :
483+ source_content = fsource .read ()
472484 else :
473- fsource = open (CONCOREPATH + "/concore.hpp" )
485+ with open (CONCOREPATH + "/concore.hpp" ) as fsource :
486+ source_content = fsource .read ()
474487except (FileNotFoundError , IOError ) as e :
475488 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
476489 quit ()
477490with open (outdir + "/src/concore.hpp" ,"w" ) as fcopy :
478- fcopy .write (fsource .read ())
479- fsource .close ()
491+ fcopy .write (source_content )
480492
481493#copy proper concore.v into /src 6/25/21
482494try :
483495 if concoretype == "docker" :
484- fsource = open (CONCOREPATH + "/concoredocker.v" )
496+ with open (CONCOREPATH + "/concoredocker.v" ) as fsource :
497+ source_content = fsource .read ()
485498 else :
486- fsource = open (CONCOREPATH + "/concore.v" )
499+ with open (CONCOREPATH + "/concore.v" ) as fsource :
500+ source_content = fsource .read ()
487501except (FileNotFoundError , IOError ) as e :
488502 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
489503 quit ()
490504with open (outdir + "/src/concore.v" ,"w" ) as fcopy :
491- fcopy .write (fsource .read ())
492- fsource .close ()
505+ fcopy .write (source_content )
493506
494507#copy mkcompile into /src 5/27/21
495508try :
496- fsource = open (CONCOREPATH + "/mkcompile" )
509+ with open (CONCOREPATH + "/mkcompile" ) as fsource :
510+ source_content = fsource .read ()
497511except (FileNotFoundError , IOError ) as e :
498512 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
499513 quit ()
500514with open (outdir + "/src/mkcompile" ,"w" ) as fcopy :
501- fcopy .write (fsource .read ())
502- fsource .close ()
515+ fcopy .write (source_content )
503516os .chmod (outdir + "/src/mkcompile" ,stat .S_IRWXU )
504517
505518#copy concore*.m into /src 4/2/21
506519try : #maxtime in matlab 11/22/21
507- fsource = open (CONCOREPATH + "/concore_default_maxtime.m" )
520+ with open (CONCOREPATH + "/concore_default_maxtime.m" ) as fsource :
521+ source_content = fsource .read ()
508522except (FileNotFoundError , IOError ) as e :
509523 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
510524 quit ()
511525with open (outdir + "/src/concore_default_maxtime.m" ,"w" ) as fcopy :
512- fcopy .write (fsource .read ())
513- fsource .close ()
526+ fcopy .write (source_content )
514527try :
515- fsource = open (CONCOREPATH + "/concore_unchanged.m" )
528+ with open (CONCOREPATH + "/concore_unchanged.m" ) as fsource :
529+ source_content = fsource .read ()
516530except (FileNotFoundError , IOError ) as e :
517531 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
518532 quit ()
519533with open (outdir + "/src/concore_unchanged.m" ,"w" ) as fcopy :
520- fcopy .write (fsource .read ())
521- fsource .close ()
534+ fcopy .write (source_content )
522535try :
523- fsource = open (CONCOREPATH + "/concore_read.m" )
536+ with open (CONCOREPATH + "/concore_read.m" ) as fsource :
537+ source_content = fsource .read ()
524538except (FileNotFoundError , IOError ) as e :
525539 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
526540 quit ()
527541with open (outdir + "/src/concore_read.m" ,"w" ) as fcopy :
528- fcopy .write (fsource .read ())
529- fsource .close ()
542+ fcopy .write (source_content )
530543try :
531- fsource = open (CONCOREPATH + "/concore_write.m" )
544+ with open (CONCOREPATH + "/concore_write.m" ) as fsource :
545+ source_content = fsource .read ()
532546except (FileNotFoundError , IOError ) as e :
533547 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
534548 quit ()
535549with open (outdir + "/src/concore_write.m" ,"w" ) as fcopy :
536- fcopy .write (fsource .read ())
537- fsource .close ()
550+ fcopy .write (source_content )
538551try : #4/9/21
539- fsource = open (CONCOREPATH + "/concore_initval.m" )
552+ with open (CONCOREPATH + "/concore_initval.m" ) as fsource :
553+ source_content = fsource .read ()
540554except (FileNotFoundError , IOError ) as e :
541555 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
542556 quit ()
543557with open (outdir + "/src/concore_initval.m" ,"w" ) as fcopy :
544- fcopy .write (fsource .read ())
545- fsource .close ()
558+ fcopy .write (source_content )
546559try : #11/19/21
547- fsource = open (CONCOREPATH + "/concore_iport.m" )
560+ with open (CONCOREPATH + "/concore_iport.m" ) as fsource :
561+ source_content = fsource .read ()
548562except (FileNotFoundError , IOError ) as e :
549563 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
550564 quit ()
551565with open (outdir + "/src/concore_iport.m" ,"w" ) as fcopy :
552- fcopy .write (fsource .read ())
553- fsource .close ()
566+ fcopy .write (source_content )
554567try : #11/19/21
555- fsource = open (CONCOREPATH + "/concore_oport.m" )
568+ with open (CONCOREPATH + "/concore_oport.m" ) as fsource :
569+ source_content = fsource .read ()
556570except (FileNotFoundError , IOError ) as e :
557571 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
558572 quit ()
559573with open (outdir + "/src/concore_oport.m" ,"w" ) as fcopy :
560- fcopy .write (fsource .read ())
561- fsource .close ()
574+ fcopy .write (source_content )
562575try : # 4/4/21
563576 if concoretype == "docker" :
564- fsource = open (CONCOREPATH + "/import_concoredocker.m" )
577+ with open (CONCOREPATH + "/import_concoredocker.m" ) as fsource :
578+ source_content = fsource .read ()
565579 else :
566- fsource = open (CONCOREPATH + "/import_concore.m" )
580+ with open (CONCOREPATH + "/import_concore.m" ) as fsource :
581+ source_content = fsource .read ()
567582except (FileNotFoundError , IOError ) as e :
568583 logging .error (f"{ CONCOREPATH } is not correct path to concore: { e } " )
569584 quit ()
570585with open (outdir + "/src/import_concore.m" ,"w" ) as fcopy :
571- fcopy .write (fsource .read ())
572- fsource .close ()
586+ fcopy .write (source_content )
573587
574588# --- Generate iport and oport mappings ---
575589logging .info ("Generating iport/oport mappings..." )
@@ -638,25 +652,27 @@ def _resolve_concore_path():
638652 if not os .path .exists (outdir + "/src/Dockerfile." + dockername ): # 3/30/21
639653 try :
640654 if langext == "py" :
641- fsource = open ( CONCOREPATH + "/Dockerfile.py" )
655+ src_path = CONCOREPATH + "/Dockerfile.py"
642656 logging .info ("assuming .py extension for Dockerfile" )
643657 elif langext == "cpp" : # 6/22/21
644- fsource = open ( CONCOREPATH + "/Dockerfile.cpp" )
658+ src_path = CONCOREPATH + "/Dockerfile.cpp"
645659 logging .info ("assuming .cpp extension for Dockerfile" )
646660 elif langext == "v" : # 6/26/21
647- fsource = open ( CONCOREPATH + "/Dockerfile.v" )
661+ src_path = CONCOREPATH + "/Dockerfile.v"
648662 logging .info ("assuming .v extension for Dockerfile" )
649663 elif langext == "sh" : # 5/19/21
650- fsource = open ( CONCOREPATH + "/Dockerfile.sh" )
664+ src_path = CONCOREPATH + "/Dockerfile.sh"
651665 logging .info ("assuming .sh extension for Dockerfile" )
652666 else :
653- fsource = open ( CONCOREPATH + "/Dockerfile.m" )
667+ src_path = CONCOREPATH + "/Dockerfile.m"
654668 logging .info ("assuming .m extension for Dockerfile" )
669+ with open (src_path ) as fsource :
670+ source_content = fsource .read ()
655671 except :
656672 logging .error (f"{ CONCOREPATH } is not correct path to concore" )
657673 quit ()
658674 with open (outdir + "/src/Dockerfile." + dockername ,"w" ) as fcopy :
659- fcopy .write (fsource . read () )
675+ fcopy .write (source_content )
660676 if langext == "py" :
661677 fcopy .write ('CMD ["python", "-i", "' + sourcecode + '"]\n ' )
662678 if langext == "m" :
@@ -667,7 +683,6 @@ def _resolve_concore_path():
667683 if langext == "v" :
668684 fcopy .write ('RUN iverilog ./' + sourcecode + '\n ' ) # 7/02/21
669685 fcopy .write ('CMD ["./a.out"]\n ' ) # 7/02/21
670- fsource .close ()
671686
672687 fbuild .write ('#!/bin/bash' + "\n " )
673688 for node in nodes_dict :
@@ -1198,10 +1213,6 @@ def _resolve_concore_path():
11981213frun .close ()
11991214fbuild .close ()
12001215fdebug .close ()
1201- fstop .close ()
1202- fclear .close ()
1203- fmaxtime .close ()
1204- fparams .close ()
12051216if concoretype != "windows" :
12061217 os .chmod (outdir + "/build" ,stat .S_IRWXU )
12071218 os .chmod (outdir + "/run" ,stat .S_IRWXU )
0 commit comments