diff --git a/messenger/get_messenger_dir.py b/messenger/get_messenger_dir.py deleted file mode 100644 index 1a77024..0000000 --- a/messenger/get_messenger_dir.py +++ /dev/null @@ -1,26 +0,0 @@ -import sys -import platform - - -def get_messenger_dir(): - # Check the system platform first - splatform = sys.platform - - if splatform.startswith('linux'): - messenger_dir = 'mexa64' - elif splatform.startswith('darwin'): - messenger_dir = 'mexmaci64' - elif splatform.startswith('win32'): - if splatform == "win32": - # We have a win64 messenger, so we need to figure out if this is 32 - # or 64 bit Windows: - if not platform.machine().endswith('64'): - raise ValueError("pymatbridge does not work on win32") - - # We further need to differniate 32 from 64 bit: - maxint = sys.maxsize - if maxint == 9223372036854775807: - messenger_dir = 'mexw64' - elif maxint == 2147483647: - messenger_dir = 'mexw32' - return messenger_dir, splatform diff --git a/messenger/make.py b/messenger/make.py index 4f053dd..d257f78 100755 --- a/messenger/make.py +++ b/messenger/make.py @@ -1,71 +1,102 @@ #!/usr/bin/python from __future__ import print_function import os -from get_messenger_dir import get_messenger_dir -import subprocess +import platform +import sys +import shlex import shutil +import subprocess + + +def get_messenger_dir(): + # Check the system platform first + splatform = sys.platform + + if splatform.startswith('linux'): + messenger_dir = 'mexa64' + elif splatform.startswith('darwin'): + messenger_dir = 'mexmaci64' + elif splatform.startswith('win32'): + if splatform == "win32": + # We have a win64 messenger, so we need to figure out if this is 32 + # or 64 bit Windows: + if not platform.machine().endswith('64'): + raise ValueError("pymatbridge does not work on win32") + + # We further need to differniate 32 from 64 bit: + maxint = sys.maxsize + if maxint == 9223372036854775807: + messenger_dir = 'mexw64' + elif maxint == 2147483647: + messenger_dir = 'mexw32' + return messenger_dir + + +def get_config(): + messenger_dir = get_messenger_dir() + with open(os.path.join(messenger_dir, 'local.cfg')) as fid: + lines = fid.readlines() + + cfg = {} + for line in lines: + if '=' not in line: + continue + name, path = line.split('=') + cfg[name.lower()] = path.strip() or '.' + return cfg + + +def do_build(make_cmd, messenger_exe): + print('Building %s...' % messenger_exe) + print(make_cmd) + messenger_dir = get_messenger_dir() + subprocess.check_output(shlex.split(make_cmd)) + + messenger_loc = os.path.join(messenger_dir, messenger_exe) + + shutil.move(messenger_exe, messenger_loc) + + if os.path.exists('messenger.o'): + os.remove('messenger.o') + + +def build_octave(): + paths = "-L%(octave_lib)s -I%(octave_inc)s -L%(zmq_lib)s -I%(zmq_inc)s" + paths = paths % get_config() + make_cmd = "mkoctfile --mex %s -lzmq ./src/messenger.c" % paths + do_build(make_cmd, 'messenger.mex') + + +def build_matlab(): + cfg = get_config() + matlab_bin = cfg['matlab_bin'] + # Get the extension + if sys.platform == 'win32': + extcmd = '"%s\\mexext.bat"' % matlab_bin + else: + extcmd = matlab_bin + "/mexext" + + check_extension = subprocess.Popen(extcmd, stdout=subprocess.PIPE) + extension = check_extension.stdout.read() + extension = extension.decode('utf-8').rstrip('\r\n') + + # Build the mex file + if sys.platform == 'win32': + mex = matlab_bin + "\\mex.bat" + else: + mex = matlab_bin + "/mex" + paths = "-L%(zmq_lib)s -I%(zmq_inc)s" % cfg + make_cmd = '%s -O %s -lzmq ./src/messenger.c' % (mex, paths) + do_build(make_cmd, 'messenger.%s' % extension) -messenger_dir, splatform = get_messenger_dir() - -# Open the configure file and start parsing -with open(os.path.join(messenger_dir, 'local.cfg'), 'r') as config: - for line in config: - try: - line = line.decode('utf-8') - - # python3 - except: - pass - - path = line.split('=') - - if path[0] == "MATLAB_BIN": - print("Searching for Matlab bin folder in local.cfg ...") - matlab_bin = path[1].rstrip('\r\n') - if matlab_bin == "": - raise ValueError("Could not find Matlab bin folder. Please add it to local.cfg") - print("Matlab found in " + matlab_bin) - - elif path[0] == "HEADER_PATH": - print("Searching for zmq.h in local.cfg ...") - header_path = path[1].rstrip('\r\n') - if header_path == "": - raise ValueError("Could not find zmq.h. Please add its path to local.cfg") - print("zmq.h found in " + header_path) - - elif path[0] == "LIB_PATH": - print("Searching for zmq library in local.cfg ...") - lib_path = path[1].rstrip('\r\n') - if lib_path == "": - raise ValueError("Could not find zmq library. Please add its path to local.cfg") - - print("zmq library found in " + lib_path) - - - -# Get the extension -if splatform == 'win32': - extcmd = '"' + matlab_bin + "\\mexext.bat" + '"' -else: - extcmd = matlab_bin + "/mexext" - -check_extension = subprocess.Popen(extcmd, stdout = subprocess.PIPE) -extension = check_extension.stdout.read() -extension = extension.decode('utf-8').rstrip('\r\n') - -print("Building messenger." + extension + " ...") - -# Build the mex file -if splatform == 'win32': - mex = "\\mex.bat" -else: - mex = "/mex" -make_cmd = '"' + matlab_bin + mex + '"' + " -O -I" + header_path + " -L" + lib_path + " -lzmq ./src/messenger.c" -print(make_cmd) -os.system(make_cmd) - -messenger_exe = 'messenger.%s'%extension -messenger_loc = os.path.join(messenger_dir, messenger_exe) - -shutil.move(messenger_exe, messenger_loc) +if __name__ == '__main__': + usage = 'Please specify a valid make target (Matlab or Octave)' + if len(sys.argv) < 2: + print(usage) + elif sys.argv[1].lower() == 'matlab': + build_matlab() + elif sys.argv[1].lower() == 'octave': + build_octave() + else: + print(usage) diff --git a/messenger/make_octave.py b/messenger/make_octave.py deleted file mode 100644 index 36ae996..0000000 --- a/messenger/make_octave.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/python -from __future__ import print_function -import os -from get_messenger_dir import get_messenger_dir -import shutil -import subprocess - -messenger_dir, splatform = get_messenger_dir() - -with open(os.path.join(messenger_dir, 'local_octave.cfg')) as fid: - lines = fid.readlines() - -cfg = {} -for line in lines: - name, path = line.split('=') - cfg[name.lower()] = path.strip() or '.' - -print("Building messenger.mex...") - -paths = "-L%(octave_lib)s -I%(octave_inc)s -L%(zmq_lib)s -I%(zmq_inc)s" % cfg -make_cmd = "mkoctfile --mex %s -lzmq ./src/messenger.c" % paths -print(make_cmd) -subprocess.check_output(make_cmd.split()) - -messenger_exe = 'messenger.mex' -messenger_loc = os.path.join(messenger_dir, messenger_exe) - -shutil.move(messenger_exe, messenger_loc) -os.remove('messenger.o') diff --git a/messenger/mexa64/local.cfg b/messenger/mexa64/local.cfg index bc419a2..54ff2f8 100644 --- a/messenger/mexa64/local.cfg +++ b/messenger/mexa64/local.cfg @@ -1,3 +1,6 @@ -MATLAB_BIN=/white/local/matlab/r2012b/bin -HEADER_PATH=/home/haoxingz/zmq/include -LIB_PATH=/home/haoxingz/zmq/lib +MATLAB_BIN=/home/silvester/matlab2014b/bin/ +OCTAVE_INC=/usr/include +OCTAVE_LIB=/usr/lib/x86_64-linux-gnu/ +ZMQ_INC= +ZMQ_LIB= + diff --git a/messenger/mexa64/local_octave.cfg b/messenger/mexa64/local_octave.cfg deleted file mode 100644 index 76505f5..0000000 --- a/messenger/mexa64/local_octave.cfg +++ /dev/null @@ -1,4 +0,0 @@ -OCTAVE_INC=/usr/include -OCTAVE_LIB=/usr/lib/x86_64-linux-gnu/ -ZMQ_INC= -ZMQ_LIB= diff --git a/messenger/mexa64/messenger.mexa64 b/messenger/mexa64/messenger.mexa64 index eaf2c7e..80abad4 100755 Binary files a/messenger/mexa64/messenger.mexa64 and b/messenger/mexa64/messenger.mexa64 differ diff --git a/messenger/mexmaci64/local.cfg b/messenger/mexmaci64/local.cfg index b83ed1d..1de2d8b 100644 --- a/messenger/mexmaci64/local.cfg +++ b/messenger/mexmaci64/local.cfg @@ -1,3 +1,5 @@ MATLAB_BIN=/Applications/MATLAB_R2012b.app/bin -HEADER_PATH=/usr/include -LIB_PATH=/usr/local/lib +ZMQ_INC=/usr/include +ZMQ_LIB=/usr/lib/x86_64-linux-gnu/ +OCTAVE_INC= +OCTAVE_LIB= diff --git a/messenger/mexmaci64/local_octave.cfg b/messenger/mexmaci64/local_octave.cfg deleted file mode 100644 index 76505f5..0000000 --- a/messenger/mexmaci64/local_octave.cfg +++ /dev/null @@ -1,4 +0,0 @@ -OCTAVE_INC=/usr/include -OCTAVE_LIB=/usr/lib/x86_64-linux-gnu/ -ZMQ_INC= -ZMQ_LIB= diff --git a/messenger/mexw64/local.cfg b/messenger/mexw64/local.cfg index d8d9ff6..b6b5a9c 100644 --- a/messenger/mexw64/local.cfg +++ b/messenger/mexw64/local.cfg @@ -1,3 +1,5 @@ MATLAB_BIN=/Applications/MATLAB_R2012a.app/bin -HEADER_PATH=/usr/include -LIB_PATH=/usr/local/lib +OCTAVE_INC="C:\Octave\Octave-3.8.2\include\octave-3.8.2\octave" +OCTAVE_LIB="C:\Octave\Octave-3.8.2\lib\octave\3.8.2" +ZMQ_INC="C:\zeromq-4.0.5\include" +ZMQ_LIB="C:\zeromq-4.0.5\src\.libs" diff --git a/messenger/mexw64/local_octave.cfg b/messenger/mexw64/local_octave.cfg deleted file mode 100644 index d2aed82..0000000 --- a/messenger/mexw64/local_octave.cfg +++ /dev/null @@ -1,4 +0,0 @@ -OCTAVE_INC="C:\Octave\Octave-3.8.2\include\octave-3.8.2\octave" -OCTAVE_LIB="C:\Octave\Octave-3.8.2\lib\octave\3.8.2" -ZMQ_INC="C:\zeromq-4.0.5\include" -ZMQ_LIB="C:\zeromq-4.0.5\src\.libs" diff --git a/setup.py b/setup.py index d9d7aa5..ae9622a 100755 --- a/setup.py +++ b/setup.py @@ -17,8 +17,8 @@ # Find the messenger binary file(s) and copy it to /matlab folder. -from messenger.get_messenger_dir import get_messenger_dir -messenger_dir, splatform = get_messenger_dir() +from messenger.make import get_messenger_dir +messenger_dir = get_messenger_dir() for f in glob.glob("./messenger/%s/messenger.*" % messenger_dir): shutil.copy(f, "./pymatbridge/matlab")