@@ -785,33 +785,37 @@ def cleanup_script_files():
785785 fcopy .write ('CMD ["./a.out"]\n ' ) # 7/02/21
786786
787787 fbuild .write ('#!/bin/bash' + "\n " )
788- for node in nodes_dict :
789- containername ,sourcecode = nodes_dict [node ].split (':' )
790- if len (sourcecode )!= 0 and sourcecode .find ("." )!= - 1 : #3/28/21
791- dockername ,langext = sourcecode .rsplit ("." , 1 )
792- fbuild .write ("mkdir docker-" + dockername + "\n " )
793- fbuild .write ("cd docker-" + dockername + "\n " )
794- fbuild .write ("cp ../src/Dockerfile." + dockername + " Dockerfile\n " )
795- #copy sourcefiles from ./src into corresponding directories
796- fbuild .write ("cp ../src/" + sourcecode + " .\n " )
797- if langext == "py" : #4/29/21
798- fbuild .write ("cp ../src/concore.py .\n " )
799- elif langext == "cpp" : #6/22/21
800- fbuild .write ("cp ../src/concore.hpp .\n " )
801- elif langext == "v" : #6/25/21
802- fbuild .write ("cp ../src/concore.v .\n " )
803- if langext == "m" :
804- fbuild .write ("cp ../src/concore_*.m .\n " )
805- fbuild .write ("cp ../src/import_concore.m .\n " )
806- if langext == "sh" : #5/27/21
807- fbuild .write ("chmod u+x " + sourcecode + "\n " )
808- fbuild .write ("cp ../src/" + dockername + ".iport concore.iport\n " )
809- fbuild .write ("cp ../src/" + dockername + ".oport concore.oport\n " )
810- #include data files in here if they exist
811- if os .path .isdir (sourcedir + "/" + dockername + ".dir" ):
812- fbuild .write ("cp -r ../src/" + dockername + ".dir/* .\n " )
813- fbuild .write (DOCKEREXE + " build -t docker-" + dockername + " .\n " )
814- fbuild .write ("cd ..\n " )
788+ for node in nodes_dict :
789+ containername ,sourcecode = nodes_dict [node ].split (':' )
790+ if len (sourcecode )!= 0 and sourcecode .find ("." )!= - 1 : #3/28/21
791+ dockername ,langext = sourcecode .rsplit ("." , 1 )
792+ # dockername can include subdirectories (e.g. subdir/script).
793+ # Compute a stable prefix to reach study root from docker build dir.
794+ docker_subpath_depth = dockername .count ("/" ) + dockername .count ("\\ " )
795+ docker_rel_prefix = "../" * (docker_subpath_depth + 1 )
796+ fbuild .write ("mkdir docker-" + dockername + "\n " )
797+ fbuild .write ("cd docker-" + dockername + "\n " )
798+ fbuild .write ("cp " + docker_rel_prefix + "src/Dockerfile." + dockername + " Dockerfile\n " )
799+ #copy sourcefiles from ./src into corresponding directories
800+ fbuild .write ("cp " + docker_rel_prefix + "src/" + sourcecode + " .\n " )
801+ if langext == "py" : #4/29/21
802+ fbuild .write ("cp " + docker_rel_prefix + "src/concore.py .\n " )
803+ elif langext == "cpp" : #6/22/21
804+ fbuild .write ("cp " + docker_rel_prefix + "src/concore.hpp .\n " )
805+ elif langext == "v" : #6/25/21
806+ fbuild .write ("cp " + docker_rel_prefix + "src/concore.v .\n " )
807+ if langext == "m" :
808+ fbuild .write ("cp " + docker_rel_prefix + "src/concore_*.m .\n " )
809+ fbuild .write ("cp " + docker_rel_prefix + "src/import_concore.m .\n " )
810+ if langext == "sh" : #5/27/21
811+ fbuild .write ("chmod u+x " + sourcecode + "\n " )
812+ fbuild .write ("cp " + docker_rel_prefix + "src/" + dockername + ".iport concore.iport\n " )
813+ fbuild .write ("cp " + docker_rel_prefix + "src/" + dockername + ".oport concore.oport\n " )
814+ #include data files in here if they exist
815+ if os .path .isdir (sourcedir + "/" + dockername + ".dir" ):
816+ fbuild .write ("cp -r " + docker_rel_prefix + "src/" + dockername + ".dir/* .\n " )
817+ fbuild .write (DOCKEREXE + " build -t docker-" + dockername + " .\n " )
818+ fbuild .write ("cd " + docker_rel_prefix + "\n " )
815819
816820 fbuild .close ()
817821
0 commit comments