| def _copy_cmd(ctx, file_list, target_dir): |
| dest_list = [] |
| |
| if file_list == None or len(file_list) == 0: |
| return dest_list |
| |
| shell_content = "" |
| batch_file_name = "%s-copy-files.bat" % (ctx.label.name) |
| bat = ctx.actions.declare_file(batch_file_name) |
| src_file_list = [] |
| for (src_file, relative_dest_file) in file_list: |
| src_file_list.append(src_file) |
| dest_file = ctx.actions.declare_file("{}/{}".format(target_dir, relative_dest_file)) |
| dest_list.append(dest_file) |
| shell_content += "@copy /Y \"%s\" \"%s\" >NUL\n" % ( |
| src_file.path.replace("/", "\\"), |
| dest_file.path.replace("/", "\\"), |
| ) |
| |
| ctx.actions.write( |
| output = bat, |
| content = shell_content, |
| is_executable = True, |
| ) |
| ctx.actions.run( |
| inputs = src_file_list, |
| tools = [bat], |
| outputs = dest_list, |
| executable = "cmd.exe", |
| arguments = ["/C", bat.path.replace("/", "\\")], |
| mnemonic = "CopyFile", |
| progress_message = "Copying files", |
| use_default_shell_env = True, |
| ) |
| |
| return dest_list |
| |
| def _copy_bash(ctx, src_list, target_dir): |
| dest_list = [] |
| for (src_file, relative_dest_file) in src_list: |
| dest_file = ctx.actions.declare_file("{}/{}".format(target_dir, relative_dest_file)) |
| dest_list.append(dest_file) |
| |
| ctx.actions.run_shell( |
| tools = [src_file], |
| outputs = [dest_file], |
| command = "cp -f \"$1\" \"$2\"", |
| arguments = [src_file.path, dest_file.path], |
| mnemonic = "CopyFile", |
| progress_message = "Copying files", |
| use_default_shell_env = True, |
| ) |
| |
| return dest_list |
| |
| def copy_files(ctx, file_list, base_dest_directory, is_windows): |
| dest_list = [] |
| if is_windows: |
| dest_list = _copy_cmd(ctx, file_list, base_dest_directory) |
| else: |
| dest_list = _copy_bash(ctx, file_list, base_dest_directory) |
| |
| return dest_list |