Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Variables to compile go client
GO_CLIENT=bitwrk-client
GO_RELEASE_DIST=./dist
CLIENT_LINUX=$(GO_RELEASE_DIST)/bitwrk_linux_amd64/$(GO_CLIENT)
CLIENT_DARWIN=$(GO_RELEASE_DIST)/bitwrk_darwin_amd64/$(GO_CLIENT)
CLIENT_WINDOWS=$(GO_RELEASE_DIST)/bitwrk_windows_amd64/$(GO_CLIENT).exe
ADDON_NAME_ROOT=render_bitwrk
VERSION=0.7.0

# Variables to zip addon and client daemon into one
TMPDIR=tmp
CLIENT_DIR=bitwrk_client
RESOURCE_DIR=resources
RENDER_DIR=bitwrk-blender
ADDON_DIR=render_bitwrk
SUFFIX_DARWIN=_osx.x64
SUFFIX_LINUX=_linux.x64
SUFFIX_WINDOWS=_windows.x64

all: build-go prep-addon package-darwin package-linux package-windows cleanup-addon

build-go:
goreleaser --snapshot --skip-publish --rm-dist

prep-addon:
echo "CLEAN UP PREVIOUS BUILD"
rm -rf $(TMPDIR)
echo "CREATE ADDON DIRECTORY STRUCTURE"
mkdir $(TMPDIR) && \
cp -r $(RENDER_DIR)/$(ADDON_DIR) $(TMPDIR)/ && \
mkdir $(TMPDIR)/$(ADDON_DIR)/$(CLIENT_DIR) && \
cp -r $(RESOURCE_DIR) $(TMPDIR)/$(ADDON_DIR)/$(CLIENT_DIR)/

package-darwin:
echo "DARWIN: COPY CLIENT EXECUTABLE TO ADDON STRUCTURE"
cp $(CLIENT_DARWIN) $(TMPDIR)/$(ADDON_DIR)/$(CLIENT_DIR)/ && \
echo "DARWIN: ZIP ADDON" && \
cd $(TMPDIR) && \
zip -r ../$(ADDON_NAME_ROOT)$(SUFFIX_DARWIN).zip * && \
echo "DARWIN: REMOVE CLIENT EXECUTABLE" && \
cd .. && \
rm $(TMPDIR)/$(ADDON_DIR)/$(CLIENT_DIR)/$(GO_CLIENT)

package-linux:
echo "LINUX: COPY CLIENT EXECUTABLE TO ADDON STRUCTURE"
cp $(CLIENT_LINUX) $(TMPDIR)/$(ADDON_DIR)/$(CLIENT_DIR)/ && \
echo "LINUX: ZIP ADDON" && \
cd $(TMPDIR) && \
zip -r ../$(ADDON_NAME_ROOT)$(SUFFIX_LINUX).zip * && \
echo "LINUX: REMOVE CLIENT EXECUTABLE" && \
cd .. && \
rm $(TMPDIR)/$(ADDON_DIR)/$(CLIENT_DIR)/$(GO_CLIENT)

package-windows:
echo "WINDOWS: COPY CLIENT EXECUTABLE TO ADDON STRUCTURE" && \
cp $(CLIENT_WINDOWS) $(TMPDIR)/$(ADDON_DIR)/$(CLIENT_DIR)/ && \
echo "WINDOWS: ZIP ADDON" && \
cd $(TMPDIR) && \
zip -r ../$(ADDON_NAME_ROOT)$(SUFFIX_WINDOWS).zip * && \
echo "WINDOWS: REMOVE CLIENT EXECUTABLE" && \
cd .. && \
rm $(TMPDIR)/$(ADDON_DIR)/$(CLIENT_DIR)/$(GO_CLIENT).exe

cleanup-addon:
rm -rf $(TMPDIR)
29 changes: 28 additions & 1 deletion bitwrk-blender/render_bitwrk/bitwrkclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,17 @@
#
# ##### END GPL LICENSE BLOCK #####

import atexit, bpy.path, time, http, re, os, subprocess, threading
import atexit, bpy.path, time, http, re, os, subprocess, threading, stat, platform

# Functions for probing host:port settings for a running BitWrk client
LAST_PROBE_LOCK = threading.RLock()
LAST_PROBE_TIME = time.time() - 10.0
LAST_PROBE_RESULT = False
LAST_PROBE_SETTINGS = None
LAST_PROBE_THREAD = None
EXECUTABLE_RELATIVE_PATH = 'bitwrk_client/bitwrk-client'
EXECUTABLE_EXTENSION_WINDOWS = '.exe'

def probe_bitwrk_client(settings):
global LAST_PROBE_LOCK, LAST_PROBE_TIME, LAST_PROBE_RESULT, LAST_PROBE_SETTINGS, LAST_PROBE_THREAD
with LAST_PROBE_LOCK:
Expand Down Expand Up @@ -74,9 +77,23 @@ def do_probe_bitwrk_client_pure(settings):
pass
return False


def client_executable_path(settings):
"""Return the full path to the client executable:

1. of the client embedded within the addon, OR
2. (for older version compatibility and only when in expert mode) of the client path configured via the Bitwrk property panel"""

if not settings.bitwrk_client_executable_path or not settings.expert_mode:
exec_dirname = os.path.dirname(os.path.abspath(__file__))
executable_fullpath = os.path.join(exec_dirname, EXECUTABLE_RELATIVE_PATH)
if platform.system() == 'Windows':
executable_fullpath += EXECUTABLE_EXTENSION_WINDOWS
return executable_fullpath

return bpy.path.abspath(settings.bitwrk_client_executable_path)


CLIENT_PROC = None

def _exithandler():
Expand All @@ -95,12 +112,22 @@ def bitwrk_client_alive():
return False
return True


def make_bitwrk_client_executable(clientpath):
"""Set the client permissions to executable for both owner and group"""
statinfo = os.stat(clientpath)
os.chmod(clientpath, statinfo.st_mode | stat.S_IXUSR | stat.S_IXGRP)


def can_start_bitwrk_client(settings):
if bitwrk_client_alive():
return False
if probe_bitwrk_client(settings):
return False
clientpath = client_executable_path(settings)

make_bitwrk_client_executable(clientpath)

return os.path.isfile(clientpath)

def start_bitwrk_client(settings):
Expand Down
5 changes: 3 additions & 2 deletions bitwrk-blender/render_bitwrk/settings_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ def draw(self, context):
layout = self.layout.column()
layout.enabled = not is_render_active() and not worker.worker_alive()
row = layout.split(factor=0.5)
row.label(text="BitWrk client executable file:")
row.prop(settings, "bitwrk_client_executable_path", text="")
row = layout.split(factor=0.5)
row.label(text="BitWrk client host:")
row.prop(settings, "bitwrk_client_host", text="")
row = layout.split(factor=0.5)
Expand All @@ -139,8 +142,6 @@ def draw(self, context):

if not bitwrkclient.probe_bitwrk_client(settings):
row = self.layout.split(factor=0.5)
row.label(text="BitWrk client executable file:")
row.prop(settings, "bitwrk_client_executable_path", text="")
if settings.expert_mode:
self.layout.label(text="BitWrk can dispatch jobs to local network computers:")
row = self.layout.split(factor=0.02)
Expand Down