fix install libmscp.dylib to python package dir in macOS

This commit is contained in:
Ryo Nakamura
2023-03-13 14:46:04 +09:00
parent 6e17d0ddbc
commit 631d52b00d
3 changed files with 64 additions and 52 deletions

View File

@@ -9,5 +9,5 @@ GENERATE_MAN = NO
SOURCE_BROWSER = YES SOURCE_BROWSER = YES
INPUT = src include INPUT = src include mscp

View File

@@ -7,14 +7,21 @@ except ImportError:
_retry_import_pymscp = True _retry_import_pymscp = True
if _retry_import_pymscp: if _retry_import_pymscp:
""" """ libmscp.so is not installed on system library paths. So retry
libmscp.so is not installed on system library paths. So retry to to import libmscp.so installed on the mscp python module
import libmscp.so installed on the mscp python module directory. directory.
""" """
import os import os
import sys
import ctypes import ctypes
if sys.platform == "linux":
libmscp = "libmscp.so"
elif sys.platform == "darwin":
libmscp = "libmscp.dylib"
mscp_dir = os.path.dirname(__file__) mscp_dir = os.path.dirname(__file__)
ctypes.cdll.LoadLibrary("{}/libmscp.so".format(mscp_dir)) ctypes.cdll.LoadLibrary("{}/{}".format(mscp_dir, libmscp))
import pymscp import pymscp
@@ -28,32 +35,31 @@ SEVERITY_NOTICE = pymscp.SEVERITY_NOTICE
SEVERITY_INFO = pymscp.SEVERITY_INFO SEVERITY_INFO = pymscp.SEVERITY_INFO
SEVERITY_DEBUG = pymscp.SEVERITY_DEBUG SEVERITY_DEBUG = pymscp.SEVERITY_DEBUG
_STATE_INIT = 0 __STATE_INIT = 0
_STATE_CONNECTED = 1 __STATE_CONNECTED = 1
_STATE_PREPARED = 2 __STATE_PREPARED = 2
_STATE_RUNNING = 3 __STATE_RUNNING = 3
_STATE_STOPPED = 4 __STATE_STOPPED = 4
_STATE_JOINED = 5 __STATE_JOINED = 5
_STATE_CLEANED = 6 __STATE_CLEANED = 6
_STATE_RELEASED = 7 __STATE_RELEASED = 7
_state_str = { _state_str = {
_STATE_INIT: "init", __STATE_INIT: "init",
_STATE_CONNECTED: "connected", __STATE_CONNECTED: "connected",
_STATE_PREPARED: "prepared", __STATE_PREPARED: "prepared",
_STATE_RUNNING: "running", __STATE_RUNNING: "running",
_STATE_STOPPED: "stopped", __STATE_STOPPED: "stopped",
_STATE_JOINED: "joined", __STATE_JOINED: "joined",
_STATE_CLEANED: "cleaned", __STATE_CLEANED: "cleaned",
_STATE_RELEASED: "released", __STATE_RELEASED: "released",
} }
class mscp: class mscp:
def __init__(self, remote: str, direction: int, **kwargs): def __init__(self, remote: str, direction: int, **kwargs):
"""
See src/pymscp.c:wrap_mscp_init() to determine keyword arguments.
"""
self.remote = remote self.remote = remote
self.direction = direction self.direction = direction
kwargs["remote"] = remote kwargs["remote"] = remote
@@ -62,10 +68,10 @@ class mscp:
self.src_paths = [] self.src_paths = []
self.dst_path = None self.dst_path = None
self.state = _STATE_INIT self.state = __STATE_INIT
def __str__(self): def __str__(self):
return "mscp:{}:{}".format(self.remote, self._state2str()) return "mscp:{}:{}".format(self.remote, self.__state2str())
def __repr__(self): def __repr__(self):
return "<{}>".format(str(self)) return "<{}>".format(str(self))
@@ -75,23 +81,23 @@ class mscp:
if not hasattr(self, "state"): if not hasattr(self, "state"):
return # this instance failed on mscp_init return # this instance failed on mscp_init
if self.state == _STATE_RUNNING: if self.state == __STATE_RUNNING:
self.stop() self.stop()
if self.state == _STATE_STOPPED: if self.state == __STATE_STOPPED:
self.join() self.join()
self.cleanup() self.cleanup()
self.release() self.release()
def _state2str(self): def __state2str(self):
return _state_str[self.state] return _state_str[self.state]
def connect(self): def connect(self):
if not (self.state == _STATE_INIT or state.state == _STATE_CLEANED): if not (self.state == __STATE_INIT or state.state == __STATE_CLEANED):
raise RuntimeError("invalid mscp state: {}".format(self._state2str())) raise RuntimeError("invalid mscp state: {}".format(self.__state2str()))
pymscp.mscp_connect(m = self.m) pymscp.mscp_connect(m = self.m)
self.state = _STATE_CONNECTED self.state = __STATE_CONNECTED
def add_src_path(self, src_path: str): def add_src_path(self, src_path: str):
self.src_paths.append(src_path) self.src_paths.append(src_path)
@@ -102,53 +108,53 @@ class mscp:
pymscp.mscp_set_dst_path(m = self.m, dst_path = dst_path); pymscp.mscp_set_dst_path(m = self.m, dst_path = dst_path);
def prepare(self): def prepare(self):
if self.state != _STATE_CONNECTED: if self.state != __STATE_CONNECTED:
raise RuntimeError("invalid mscp state: {}".format(self._state2str())) raise RuntimeError("invalid mscp state: {}".format(self.__state2str()))
if not self.src_paths: if not self.src_paths:
raise RuntimeError("src path list is empty") raise RuntimeError("src path list is empty")
if not self.dst_path: if not self.dst_path:
raise RuntimeError("dst path is not set") raise RuntimeError("dst path is not set")
pymscp.mscp_prepare(m = self.m) pymscp.mscp_prepare(m = self.m)
self.state = _STATE_PREPARED self.state = __STATE_PREPARED
def start(self): def start(self):
if self.state != _STATE_PREPARED: if self.state != __STATE_PREPARED:
raise RuntimeError("invalid mscp state: {}".format(self._state2str())) raise RuntimeError("invalid mscp state: {}".format(self.__state2str()))
pymscp.mscp_start(m = self.m) pymscp.mscp_start(m = self.m)
self.state = _STATE_RUNNING self.state = __STATE_RUNNING
def stop(self): def stop(self):
if self.state != _STATE_RUNNING: if self.state != __STATE_RUNNING:
raise RuntimeError("invalid mscp state: {}".format(self._state2str())) raise RuntimeError("invalid mscp state: {}".format(self.__state2str()))
pymscp.mscp_stop(m = self.m) pymscp.mscp_stop(m = self.m)
self.state = _STATE_STOPPED self.state = __STATE_STOPPED
def join(self): def join(self):
if not (self.state == _STATE_RUNNING or self.state == _STATE_STOPPED): if not (self.state == __STATE_RUNNING or self.state == __STATE_STOPPED):
raise RuntimeError("invalid mscp state: {}".format(self._state2str())) raise RuntimeError("invalid mscp state: {}".format(self.__state2str()))
pymscp.mscp_join(m = self.m) pymscp.mscp_join(m = self.m)
self.state = _STATE_JOINED self.state = __STATE_JOINED
def stats(self): def stats(self):
return pymscp.mscp_get_stats(m = self.m) return pymscp.mscp_get_stats(m = self.m)
def cleanup(self): def cleanup(self):
if self.state == _STATE_RUNNING: if self.state == __STATE_RUNNING:
raise RuntimeError("invalid mscp state: {}".format(self._state2str())) raise RuntimeError("invalid mscp state: {}".format(self.__state2str()))
pymscp.mscp_cleanup(m = self.m) pymscp.mscp_cleanup(m = self.m)
self.state = _STATE_CLEANED self.state = __STATE_CLEANED
def release(self): def release(self):
if self.state != _STATE_CLEANED: if self.state != __STATE_CLEANED:
raise RuntimeError("invalid mscp state: {}".format(self._state2str())) raise RuntimeError("invalid mscp state: {}".format(self.__state2str()))
pymscp.mscp_free(m = self.m) pymscp.mscp_free(m = self.m)
self.state = _STATE_RELEASED self.state = __STATE_RELEASED
# Simple interface: mscp.copy(src, dst) # Simple interface: mscp.copy(src, dst)
def copy(self, src, dst, nonblock = False): def copy(self, src, dst, nonblock = False):
if self.state < _STATE_CONNECTED: if self.state < __STATE_CONNECTED:
self.connect() self.connect()
if type(src) == list: if type(src) == list:

View File

@@ -1,10 +1,16 @@
from setuptools import setup, Extension, find_packages from setuptools import setup, Extension, find_packages
import sys
import os import os
mypackage_root_dir = os.path.dirname(__file__) mypackage_root_dir = os.path.dirname(__file__)
with open(os.path.join(mypackage_root_dir, 'VERSION')) as version_file: with open(os.path.join(mypackage_root_dir, 'VERSION')) as version_file:
version = version_file.read().strip() version = version_file.read().strip()
if sys.platform == "linux":
libmscp = "libmscp.so"
elif sys.platform == "darwin":
libmscp = "libmscp.dylib"
setup( setup(
name='mscp', name='mscp',
version = version, version = version,
@@ -14,7 +20,7 @@ setup(
url = "https://github.com/upa/mscp", url = "https://github.com/upa/mscp",
packages = find_packages("mscp"), packages = find_packages("mscp"),
package_dir = {"": "mscp"}, package_dir = {"": "mscp"},
data_files = [ ("", ["build/libmscp.so"])], data_files = [ ("", ["build/" + libmscp])],
py_modules = [ "mscp" ], py_modules = [ "mscp" ],
ext_modules = [ ext_modules = [
Extension( Extension(