From a2ff7e03da07f75b4ce8e67e9e2ef065f45e3338 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 15 Feb 2015 22:01:18 -0600 Subject: [PATCH 01/19] Add an octave build script --- messenger/make_octave.py | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 messenger/make_octave.py diff --git a/messenger/make_octave.py b/messenger/make_octave.py new file mode 100644 index 0000000..859878d --- /dev/null +++ b/messenger/make_octave.py @@ -0,0 +1,43 @@ +#!/usr/bin/python +from __future__ import print_function +import os +import sys +import shutil +import subprocess + +# Check the system platform first +platform = sys.platform +print("This is a " + platform + " system") + +if platform.startswith('linux'): + messenger_dir = 'mexa64' +elif platform.startswith('darwin'): + messenger_dir = 'mexmaci64' +elif platform.startswith('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' + +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 + +print("Building messenger.oct...") + +paths = "-L%(octave_lib)s -I%(octave_inc)s -L%(zmq_lib)s -I%(zmq_inc)s" % cfg +make_cmd = "mkoctfile %s -lzmq ./src/messenger.c" % paths +print(make_cmd) +subprocess.check_output(make_cmd.split()) + +messenger_exe = 'messenger.oct' +messenger_loc = os.path.join(messenger_dir, messenger_exe) + +shutil.move(messenger_exe, messenger_loc) +os.remove('messenger.o') From 95701d554cbdbb7d79bd8f79e56350246ec5f6ab Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 15 Feb 2015 22:01:50 -0600 Subject: [PATCH 02/19] Add an octave config for win64 --- messenger/mexw64/local_octave.cfg | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 messenger/mexw64/local_octave.cfg diff --git a/messenger/mexw64/local_octave.cfg b/messenger/mexw64/local_octave.cfg new file mode 100644 index 0000000..d2aed82 --- /dev/null +++ b/messenger/mexw64/local_octave.cfg @@ -0,0 +1,4 @@ +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" From 627d27b733abe39038d2907e7c99af53b799742d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 15 Feb 2015 22:02:37 -0600 Subject: [PATCH 03/19] Rename function to avoid conflict --- messenger/src/messenger.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/messenger/src/messenger.c b/messenger/src/messenger.c index f14cb3c..8056bb1 100644 --- a/messenger/src/messenger.c +++ b/messenger/src/messenger.c @@ -28,7 +28,7 @@ int initialize(char *socket_addr) { * Now the receiver buffer is pre-allocated * In the future we can possibly use multi-part messaging */ -int listen(char *buffer, int buflen) { +int listen_zmq(char *buffer, int buflen) { if (!initialized) { mexErrMsgTxt("Error: ZMQ session not initialized"); } @@ -106,7 +106,7 @@ void mexFunction(int nlhs, mxArray *plhs[], } else if (strcmp(cmd, "listen") == 0) { char *recv_buffer = mxCalloc(BUFLEN, sizeof(char)); - int byte_recvd = listen(recv_buffer, BUFLEN); + int byte_recvd = listen_zmq(recv_buffer, BUFLEN); /* Check if the received data is complete and correct */ if ((byte_recvd > -1) && (byte_recvd <= BUFLEN)) { From 7dfdc1a532940ebfa17acfb74eaf666f1717f669 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 15 Feb 2015 22:02:55 -0600 Subject: [PATCH 04/19] Replace name of octave binary file --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index acd6769..42e61a4 100755 --- a/setup.py +++ b/setup.py @@ -31,9 +31,9 @@ def copy_bin(bin_path): for copy_this in ["./messenger/mexmaci64/messenger.mexmaci64", "./messenger/mexa64/messenger.mexa64", "./messenger/mexw64/messenger.mexw64", - "./messenger/octave/messenger.mex"]: + "./messenger/mexw64/messenger.oct"]: copy_bin(copy_this) - + # Get version and release info, which is all stored in pymatbridge/version.py ver_file = os.path.join('pymatbridge', 'version.py') exec(open(ver_file).read()) From e4d66a92890524b0c6808dd8d83f2b543aa8fadc Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 15 Feb 2015 22:03:09 -0600 Subject: [PATCH 05/19] Add win64 octave binary --- messenger/mexw64/messenger.oct | Bin 0 -> 97480 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 messenger/mexw64/messenger.oct diff --git a/messenger/mexw64/messenger.oct b/messenger/mexw64/messenger.oct new file mode 100644 index 0000000000000000000000000000000000000000..c61cf3a23e8dc8c04a053677e68eb4b4f385cebf GIT binary patch literal 97480 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 Date: Sun, 15 Feb 2015 22:03:58 -0600 Subject: [PATCH 06/19] Remove old octave dir --- messenger/octave/make.py | 7 ------- messenger/octave/messenger.mex | Bin 21121 -> 0 bytes 2 files changed, 7 deletions(-) delete mode 100644 messenger/octave/make.py delete mode 100755 messenger/octave/messenger.mex diff --git a/messenger/octave/make.py b/messenger/octave/make.py deleted file mode 100644 index 3ee5160..0000000 --- a/messenger/octave/make.py +++ /dev/null @@ -1,7 +0,0 @@ - -import os - -os.system('sudo apt-get install libzmq3-dev liboctave-dev') -os.system('cd ../src; mkoctfile --mex -lzmq messenger.c') -os.system('mv ../src/messenger.mex .') -os.system('cp messenger.mex ../pymatbridge/matlab') diff --git a/messenger/octave/messenger.mex b/messenger/octave/messenger.mex deleted file mode 100755 index 8a22d09d351d79c24f08d66e0d4b8c0a04a7e2c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21121 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 VH)-jN6X}Ug4?Z{ From ce17ee0c9f9d6346f412aad06af3dfa2559c3d62 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 15 Feb 2015 22:21:14 -0600 Subject: [PATCH 07/19] Update readme install instructions --- README.md | 54 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index dd7a6c6..0675f8c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ development of the two repositories has significantly diverged. This implementation also includes an [IPython](http://ipython.org) `matlab_magic` extension, which provides a simple interface for weaving python and -Matlab code together (requires ipython > 0.13). +Matlab code together (requires ipython > 0.13). ## Installation @@ -37,7 +37,7 @@ If you intend to use the Matlab magic extension, you'll also need [Scipy](http://scipy.org/) and [Numpy](http://www.numpy.org/). These can be installed from PyPI, or using distributions such as [Anaconda](https://store.continuum.io/cshop/anaconda/) or [Enthought -Canopy](https://store.enthought.com/downloads/) +Canopy](https://store.enthought.com/downloads/) Note thatIPython notebooks also depend on `pyzmq` so if you have IPython notebooks installed, you likely have `pyzmq` already. @@ -54,10 +54,10 @@ This creates a matlab session class instance, into which you will be able to inject code and variables, and query for results. By default, when you use `start`, this will open whatever gets called when you type `matlab` in your Terminal, but you can also specify the location of your Matlab -application when initializing your matlab session class: +application when initializing your matlab session class: mlab = Matlab(executable='/Applications/MATLAB_R2011a.app/bin/matlab') - + You can then start the Matlab server, which will kick off your matlab session, and create the connection between your Python interpreter and this session: @@ -80,7 +80,7 @@ In this case, the variable `a` is available on the Python side, by using the `get_variable` method: mlab.get_variable('a') - + You can run any MATLAB functions contained within a .m file of the same name. For example, to call the function jk in jk.m: @@ -121,7 +121,11 @@ Rather than `~/startup.m`, Octave looks for an `~/.octaverc` file for commands to execute before every session. (This is a good place to manipulate the runtime path, for example). -### Matlab magic: +Requires Version 3.8 or higher. Notice: it does not work with the MXE build on Windows +due to a Java error. + + +### Matlab magic: The Matlab magic allows you to use pymatbridge in the context of the IPython notebook format. @@ -132,7 +136,7 @@ These lines will automatically start the matlab session for you. Then, you can simply decorate a line/cell with the '%matlab' or '%%matlab' decorator and write matlab code: - %%matlab + %%matlab a = linspace(0.01,6*pi,100); plot(sin(a)) grid on @@ -143,14 +147,21 @@ More examples are provided in the `examples` directory ## Building the pymatbridge messenger from source -The installation of `pymatbridge` includes a binary of a mex function to communicate between -Python and Matlab using the [0MQ](http://zeromq.org/) messaging library. This should work +The installation of `pymatbridge` includes a binary of a mex function to communicate between +Python and Matlab using the [0MQ](http://zeromq.org/) messaging library. This should work without any need for compilation on most computers. However, in some cases, you might want to build the pymatbridge messenger from source. To do so, you will need to follow the instructions below: ### Install zmq library Please refer to the [official guide](http://zeromq.org/intro:get-the-software) on how to -build and install zmq. On Ubuntu, it is as simple as `sudo apt-get install libzmq3-dev`. After zmq is installed, make sure you can find the location where +build and install zmq. On Ubuntu, it is as simple as `sudo apt-get install libzmq3-dev`. +On Windows, suggest using the following method: +- Install MSYS2 +- Run `$ pacman -S make` +- From the zmq source directory, run: `$ sh configure --prefix=$(pwd) --build=x86_64-w64-mingw32` +- Run `$ make`. + +After zmq is installed, make sure you can find the location where libzmq is installed. The library extension name and default location on different systems are listed below. @@ -198,21 +209,22 @@ On MacOS, you can do this from the root of the pymatbridge code with: On Linux, you can add it to the RPATH: patchelf --set-rpath messenger/mexa64/messenger.mexa64 - + ### Install pyzmq -After step 1 is finished, please grab the latest version of -[pyzmq](http://zeromq.org/bindings:python) and follow the instructions on the official -page. Note that pymatbridge is developed with pyzmq 14.0.0 and older versions might not -be supported. If you have an old version of pyzmq, please update it. +After step 1 is finished, please grab the latest version of +[pyzmq](http://zeromq.org/bindings:python) and follow the instructions on the official +page. Note that pymatbridge is developed with pyzmq 14.0.0 and older versions might not +be supported. If you have an old version of pyzmq, please update it. ### Install pymatbridge -After the steps above are done, you can install pymatbridge. Download the zip file of the +After the steps above are done, you can install pymatbridge. Download the zip file of the latest release. Unzip it somewhere on your machine. For Matlab: cd messenger - python make.py + # edit local.cfg in the directory for your platform + python make.py cd .. python setup.py install @@ -220,14 +232,14 @@ For Matlab: For Octave: cd messenger/octave - # edit make.py if not using Ubuntu-derivative - python make.py + # edit local_octave.cfg in the directory for your platform + python make_octave.py cd .. python setup.py - + This should make the python-matlab-bridge import-able. - + ### Warnings Python communicates with Matlab via an ad-hoc zmq messenger. This is inherently From 07615987a8d8a0080d285a415eebc792b087d3ad Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 15 Feb 2015 22:21:27 -0600 Subject: [PATCH 08/19] Remove messenger binary --- messenger/mexw64/messenger.oct | Bin 97480 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 messenger/mexw64/messenger.oct diff --git a/messenger/mexw64/messenger.oct b/messenger/mexw64/messenger.oct deleted file mode 100644 index c61cf3a23e8dc8c04a053677e68eb4b4f385cebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97480 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 Date: Mon, 16 Feb 2015 07:20:03 -0600 Subject: [PATCH 09/19] Add a linux config --- messenger/mexa64/local_octave.cfg | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 messenger/mexa64/local_octave.cfg diff --git a/messenger/mexa64/local_octave.cfg b/messenger/mexa64/local_octave.cfg new file mode 100644 index 0000000..1d3f3d3 --- /dev/null +++ b/messenger/mexa64/local_octave.cfg @@ -0,0 +1,4 @@ +OCTAVE_INC=/usr/include +OCTAVE_LIB=/usr/lib/x86_64-linux-gnu/ +ZMQ_INC=/usr/include +ZMQ_LIB=/usr/lib/x86_64-linux-gnu/ From 2a902c6ae873f74a26b4bc41e998f68d7c379c05 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 16 Feb 2015 07:20:13 -0600 Subject: [PATCH 10/19] Add the linux octave binary --- messenger/mexa64/messenger.oct | Bin 0 -> 21133 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 messenger/mexa64/messenger.oct diff --git a/messenger/mexa64/messenger.oct b/messenger/mexa64/messenger.oct new file mode 100755 index 0000000000000000000000000000000000000000..2114d622b245ca93c04ea26fe35ccfcbe571c473 GIT binary patch literal 21133 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 Uh<>q_3_+I|5Uh$S Date: Mon, 16 Feb 2015 07:21:06 -0600 Subject: [PATCH 11/19] Stub out the mac octave config --- messenger/mexmaci64/local_octave.cfg | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 messenger/mexmaci64/local_octave.cfg diff --git a/messenger/mexmaci64/local_octave.cfg b/messenger/mexmaci64/local_octave.cfg new file mode 100644 index 0000000..1d3f3d3 --- /dev/null +++ b/messenger/mexmaci64/local_octave.cfg @@ -0,0 +1,4 @@ +OCTAVE_INC=/usr/include +OCTAVE_LIB=/usr/lib/x86_64-linux-gnu/ +ZMQ_INC=/usr/include +ZMQ_LIB=/usr/lib/x86_64-linux-gnu/ From d68c8f675cf06361ba71e8c39854ef0c6df3e2e1 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 16 Feb 2015 07:41:15 -0600 Subject: [PATCH 12/19] Commit linux64 messenger --- messenger/mexa64/messenger.mex | Bin 0 -> 21133 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 messenger/mexa64/messenger.mex diff --git a/messenger/mexa64/messenger.mex b/messenger/mexa64/messenger.mex new file mode 100755 index 0000000000000000000000000000000000000000..2114d622b245ca93c04ea26fe35ccfcbe571c473 GIT binary patch literal 21133 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 Uh<>q_3_+I|5Uh$S Date: Mon, 16 Feb 2015 07:41:31 -0600 Subject: [PATCH 13/19] Remove .oct file --- messenger/mexa64/messenger.oct | Bin 21133 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 messenger/mexa64/messenger.oct diff --git a/messenger/mexa64/messenger.oct b/messenger/mexa64/messenger.oct deleted file mode 100755 index 2114d622b245ca93c04ea26fe35ccfcbe571c473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21133 zcmeHPdwf*Yoj-Rb2{QzekN^fjxM&b;&4eH#D&ZA~6Urly1RubTlbM@`&LhrDVo z%jD~}S1Bs@LYR_3K1%SZm@ZNDrUbaZ&86rEbkBN(lHMGxH%IGnzfTW^dyg_BiqO;N zsOD$)HCm2)lBL%2S}IKNyAvdu(=SqF!9DA(haScG*R~2RxIz0Xl$YZ=e(p6Y$2Ji* z-1uCywq0Cy@cem8`@-%Yx}IsDdUx0UaNXVCB^Sh>j1T2;3_iOT4pxgnv)Qvk7&jGF zNZwS?XW%n#^w}S!x^61{($lX!_~>tLxvp{L^KZU*)g{yBf95L>i;_7@9@+i-GS}~V zOWyd8|0&yf@gw&_<g0H9Ic zsqMmNf|w)@nkJ!wkJCQDmBK5I>+{b#$ra)oh_eFnhqb&Wi(4dpqS&8B|B9B+rk8+D z_RaCi!kzm3a!mUj)NwA>4(Pb7%(HI43OdDqK>OwR>Da0iW5rYD+JNpJlyt9Hnq^-E z0$tH~ERakE6RAKz1bSjUDG}&ICj!lFYXV^_VRiK+Q&ysFO=Bb;v)Y0k5liv%a{{4( zAQ=codai-ss{X(RZJ{v|OeU?QARj%7eNFVLKqxg3h*?()^n&nYJana%5~>UIrV^6c z(Gv@c2t^VLKuScdft88Gnq*hoKuQWEtWdv5SjpZv1f?AdKqz7bV|~4n5Q@Z;7AdwQ zdSaFGdtzGU2Y4hGZ_hu;{&=q1WL5wOC+ zR1ovhkxZ&-0SN<9jjvBU-v{(Mt=88eruS<4zO41Z_|X}rG)UJ7I@fYL=AiSngm^DH z=+5iy%MLo7&$$gd=+0B_aR+@Y3!^{bpr7KPSL^u6wtXoEY&z(4P2o1jL3hSK*Fkq) z7Z*C{&iI!)=$upX;djt=ilyro2VEaxl75MUt`B)hzuZADlN9yU?Vvjk;a&%wuhpb6 z;GpYU1Zil{L3dt%ZgSA|t&x=9<`XnZz_iuaCHZ{7J%TibqU|KT0@F?MQ{hA0nKlbVNw}KEi1#M~?pqgjshHPE$DY zGI0Oy;{71_cQ@RQuHApu3IEV*{%t49u6AuXf&@P`Q6>28Eu$|}{vdyqlE18^`=VIngJTCw*QjKbLxYi+||p(O;APU_(9hMBi-xwuS)Ma5?l^YMg&( zLnY|LUqeX4-3W8b)5RVTjCYQ7QuCG1*p83|=Dnf25^AY45!@*{xKrB^{|1m@YxLNb zk&9uVe8wQjk9-PnT76Hef9S*E|E7WOoOGhf6pzzP`iGwJ54nc-DDt;J_7Ah|Tj7n?$)+RaGsHod9o=+fPy5h&WRjNS&f-mwfb2L#lfsG_j!T2ZmurKe z=j(sq-?`Ag?J3WuEh7mqJ2UmCruFBOex1@c^XlJ)z&bIWou>)n?>_e`45j`DkIDh< zym0si@croTqkeb8CB!{EyjoI=Kc-~uTsZvJM;HaT&5}FfBbyodUe?w;^ltmm^BClh zFvyA>&y{cYBMW4CkZkQZT)uq<4i^}i3nP!vk$~BL=brK%g8;XE?85BsZg>_V!vX31 zTF-Ek()14 zL-=&4JiSsFNNEM8Y}1xyo8jvyayJr!F6Ig7FwjTn090XZ_d*He7l};Ap^o-0fE?`$ z6z#Xj`%Xmb*8oBp-UT=vEe0@r1#xx24}3T}I`lh4*gW*q@JyP$&@un{Z$kF zT~s3@r7*FE20^1hu0lM+D_~{hUTCE0Pf(l~7>SS6fUl0fh9Ly!Nb~la$qXf6cf&Z0 zNs7ORK+0#VklA78QRqqLi;}sW-0RGXCx2TyybR>W36d-S$nZ?eL<8aFH{J-zPg82Q zAf}Nnd3Y&(8WauUSz@e}j6t$%2fhhb)I5AZ;~82};~Bmfp8PujjXW*6h!ZC2$wa9% zv6S%Ffe)Vz(UD(DDPrLG0C2>P# z#^Nb6ea9Du5L$aO*kxT{Mj>Oxx~#;U*(7qEy1%_t ze@zdJ$GXg5qN|VYwk|N$?V=eBhoPM$8EWfd7IV6TNi!J1yNHW|9 z>A1{=MQI@)Ew~*`T4rw|-ro}jyW6tGA&Ok+{G{y?&6deAX$|zGM60}EHs$SYc&uoQ z<92c&WzwxJZo?5OXu%lG1C3rf4aK9;Ae>RwGniRvWYh8%IBW)y=vm3Jwnrk<9Cykz z`1Jj`eHY#y!ysd+p3WZRh+PU}s{2Cv-AWhfH~%m?+J^q44@O6?L%$kp>kjn0&_9L# zS@dtBr*$|E3vwc0YQ{AigfUQIOdU7Ivj_AV(C9bv9@sO1i?WKQvg%dkrB{0f#gbDm z{KPpmr-LeGR-hk%zjZ`dR#vgiKomSW#+b` zi^}G@ZXa7_f&$OW%RK8!U0(#gjB$Ty$cZ+WZUX9O?y6G16J1m4+U%6}J8xlCKqtRX zX5eH7PG;a_22N(+WCl)V;A93)X5jxY1N=OjpI@_Ux}~R<(g5Rw8lVSq)Odf7pSAKn z$P~r4_jzfLk(#~@7pE#z@N;y!Z>Prm_x>~*C!F^^`5E}22I#j8wHExyr^e5=@6++| zjdrzS%Y9G@nx^cunz&8N^Y0vfCVh(5Gj%{rpQ{0m^SGAdXYT9|KR;yrctG+0s`0*g zc2Mu@0hH)OPS*XIx?iCCCf#q;eW&jGb$_Gozoh$nbpNpKpVs{gx_@2w@9Tb_o}Y^v z8!s^Dw0HEyQhnxp-$LKK+WPbRBwBx#B8amw2sMvtHje8_|4D(QUke{aa^N20R45vQ zKn?-Or|7yIOxI88ceC3whL)Av@T{ZGHKqg(+(ly^l*E$tl32VEl0`+u*jj=@@mr+b zNpjnI2t1d-?F7QwH-Hp-N<6m`YLr|817ki3_{F04rXd{9R=`E?ci>xi=m04C@bd(E z_7nXhf-5{Y4oBS@J=G9lZ_@IgWd;7=M7PQ649c)vr)Jfjvm2fa6w)A=&C!`{aT zSzz=-;3+ZoUBYf3^L-eqF4{+f^n8v~?<7!o8py$2G+dA8OoH#}0J%bxc+LQ=#B&F* zQkqW+dmKGKBr46Oq~6HXDo}R;8Belfhv2mMTr8JiV6-q`xx{ln_+_qh2wt}Y3|AEh zC6{&pET;#O#&`mG(XInb&A8(NSgRPtmoc8EoZ5s$NEl@#-iJ@+2l@z^hWV?i(C6^k zKxRQ}qS0o|7n5db@^X+ta?zu`@+D+-2HDBp&^GQkOm6?^A^~!H8$K1~_)_wJ08|y! zHn+g$ZPHb{*L{qHs7?N~X2+CE_d7=WL}R`89iz=-)_BY_CmI`!xrpMEH266bMfSG6 zaYqx5?24aLm~$wKjSxL0V#T!lcYs#i>4;)F#3vdVQ9Q2MU-DE`*SHYfK zsS%QuBWPneQQb(PEzYiWFz&b;C&-GYDLIQNdlNBP6*HwQap(xBh!J-QabE&dVMz1< zxToQYJ0TPe3u7rIHi0Yelx7_R&)`N5M8L{#k~p8RJl6WkR1=s z6BBxcvGxi0_!^L^tF%#CB#*(M9Na?MxuaHjjb?uUcGayM08Z(zD_NtS7I3|&yi@be z0(jU2%kOA!H#(uzLqmzqvl{Dh)=-TOF`lkV0dqgZ4dJD4S=yv)8;V4@%DYVcRo zf}{p7!4K$MIOPvn^7q*C*QVtq7)2_?v_X7b49%(E0bpE5GPG|qRW9zor`)*^73J>J zl)Fz+K4$1WZHo5;9?o$)cXKp*F;Y@FUn4S+O&Tc&rw&drSUZs$G>;NFDWDNL+Eo(i zR4KlQCfm?XzI%K z9JB)Yu?nqt9PQ7jd9IqF`E=U*AH~Pif~lm$q=Q-@3IlrHMdeaG8*=o!bmWw_xrj(k z^$D#err+;ipZ1>)WHZaY#LMEe6At#Z%>FL3r(4=6ou(#j)rh^ix>*iq|NEd^;<*{A zDe*ik;Y0WyuL$1+dB!VrY>uTodENJ$CVE`>w}CijKV6{Aw+Q?v0%uZ*kKx@70k8X@ z7Cn7FP$nMG#53-KxaU!ltl0#8&n5EuNf&`xM4UzLM9l_b{hhpkQt*mJ7dLU{A$)mT z=@dRo5^4@%Iz3@2OQ%#ND{a+6R2$quZabt9oe7oDJs{3<2+>8*bEy=f<5dcY*F4TIjPVuVVId`10rE;?egcrO|GcM6MEq$d7=B(J4W(JE6xlZZI$OC)|fSy%ZG#sp(lSyidKY--sA zqjF3Ieqy*L3wPNCr5BbqSK<0!BT7pbgO8&_gHSFm2Ni39I+7YwWw^^qOG(K9>KSia zSO_t%MvI%P2p!Azaq=^a<|@({H&ZlM)qy$wOaQpkI1|y9`-~-1R4B8jG*?l4ORK-U zdu_;lciQoEhu&_Z}- z8eKAF5q`PO1VM+jWQq$CIAqwTBAnq9&U}$ljU9Y3rErnV-K=7n<1=ku>1=qQh-N!U zEItRm#97%K&>q5KatSJ)HH;6-#^c)nMc`xj>XNw0tLsZ9>QLNP*A)uY4J=#`STMgf z(i7_&sO^gN)!_$JT~90&=?hy*QX{#N9X%+dlg9GOqjoOXZ`GcIA7u4)3csU`>f{_ z&y|-R@~rh-y8UPGxRGVV{eeCAuhRg0){JqOIF7{NpD=u;0 zd;Qz)nVyt;VQO%vC+hF_yPLl5UbM=+a+UkSl;6Gn=<9=vH$712p6Xe2se8P~=f36! z_e0m;;I8$&>c0GK_cTw+gEx`RD2RCh*#UCDU@TikR<8i+^2fp}+U5;d2BK(am{ ziOuT*P0g!UW>;aV63PI$NhDqtCMLV%3EJUD#U=_q1JcMmX@rU}WqqacDCE+pb50K# zLKuM#Y>JCOG?=*3N+eNSx-LLF)zW-4*+l_mlzZk>R%RAwqD-~RlwTB80411LVrrcQ zn;lzI7F>k-!y*vsO9VpkNMAH2dL!NN-WyNaJJ`_yZCV792$aIGD@FTa$)2tl?QC}k z6LKeA7qxQDsq~qrEHrs2>TRq5(-V9A-UIOmGG?s(LyOZG(iEhk@GT9ppS#`Zz zQ{C|x!c0Yi9km^ao^Y3yUSycbP(Q6P1SNVCm|wMCGm@K5A7@G>lX4ZHV`IU5tZPT{ zG3uMKDC06-S(q$GrRtWY0>oqFOlBPk=<8K8Lnjrx#uzI;jx!+1$mK5QjuJ>0{{W3(vARC$k4e|jo2LOLL~N0E25+)StqjtA z4mCrxG59$}!D*dB)rj4(dAcj321N#k6a}P>46;o_tY^?^zAeZ69&O`(+g3Y+M{QCo zga2le+8F$?CgqQw%^yfBGD!D*)DS&`Y!lHl=ro@j{am_)qfvb!HLM8+spgHEii@!? zYbpd8Aw;6(rxp60p9Qgw)4D^LC!1%yxz|95<3MO8RX0=LB=?_SZ56Kzgn;w8RX0=UB+HbJ7JI$rUV(| zoWUZ4oG>NG7(F+l20;cnVM>s(bo%H?c}B}k-v&6K% z4SN~moEc&RgPb!%v@*yEQ@V`(ChdelPM8v8>=SlYS{dYoDM7}fX+Z`#VM>s(FQf$- zq6OTy<3C-Vv|}Je8eWTD)IC;ADEBY?phf9 zl})mbtaJn$IReABowK%iwWgD|U@tExR(FX7dwJ!g6S}}oD36Ndco^vV>bU&*5{n|A>56;)7 zYdM~h7A@CZK)yoLS&p`esAc=%b+5RNZ(nk26gTj~mrNy8-^~yzu`M5-gZMi7dLrT4 zp0JP@3e>xWFT6DdP1WOPn=fHSf<)9%ZzLsrvTEB$Mc%?E|ElRr#O1#ReO7m%6Tif) zKsRpkZA@td9rEyagK*gw~maL;ul5RpwE zC5#F`Ahu0Jt_$J*xR%V0pZ(Lep;MphOt|N|6w;^Iv*V}yP)ykCk&WwcxaayB&6d6x zrv74locb?&6_^POxFVRvvfuZxNb7NzH5{=$OMh;qlH|UP9ccsXpY44P zKp8%~J}Rc0lEv?V$d=E>Z-+GPBC$T#QB_ZuX6*H%u=M(2{2l-lBI}#lzxh|{|1)%H z?Xf=B74dsI_UZ9+-Z*|<2j9-}&;O4;Is*(eI=-Ea^|^lpOlSPUG?lpS_9@K%WI;sZ;eIkKam=hOdg ztx|Y6i6Dz4$DJEL7$$E5*``->VIar1NV&|1aw&inP(} zY}x*uylmKw=#J)5aN}&t*LSCm8t+ydFr*Rf1`?t4Czol?QqolN<0_WOe}>Ei`oCo<_}cD-ySz1*&o&7@ZdK5u8z zC*XZarjsOLx2P0+o^>+a0{f9>KKY4)&x@JzlXBj_LVUM;n~+md!ES-A**wiHcr|7+ z-2&UGd79g<8qQ?81y>hm)2C$;H0Bnk<~g&()r}Wrc?UOo%h|^&VejDUy<^;>*pZo`Ns8>l%FK-*YnP&%R+fL zCgsPAK`a$#dr8uB^FuQE{JtUO^Q<>GHt=s#zK)VUHTn-K(X-d#6iLrr=Y`&TM5TlI z-rutTbbafl9O~~Cpqm*Kg|rr+cS$?B=ZC1I=NjrSU}uMv&wYQ=ZcWcFzog#@`QpE; zfPMNef4*_OSisIJ1?X=SpwkU?zIe(D(5Doj*MOeyeNl5jr}si-uao)GPVRf8=~sad z-}aU-y8^@B&M#E#px&OPiyKH-&v3s^?c Uh<>q_3_+I|5Uh$S Date: Mon, 16 Feb 2015 07:41:50 -0600 Subject: [PATCH 14/19] Clean up install and configs --- messenger/get_messenger_dir.py | 27 ++++++++++++++++++++++++++ messenger/make.py | 19 ++---------------- messenger/make_octave.py | 26 ++++++------------------- messenger/mexa64/local_octave.cfg | 4 ++-- messenger/mexmaci64/local_octave.cfg | 4 ++-- setup.py | 29 +++++++++------------------- 6 files changed, 48 insertions(+), 61 deletions(-) create mode 100644 messenger/get_messenger_dir.py diff --git a/messenger/get_messenger_dir.py b/messenger/get_messenger_dir.py new file mode 100644 index 0000000..4294f61 --- /dev/null +++ b/messenger/get_messenger_dir.py @@ -0,0 +1,27 @@ +import sys +import platform + + +def get_messenger_dir(): + # Check the system platform first + splatform = sys.platform + print("This is a " + splatform + " system") + + 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.maxint() + if maxint == 9223372036854775807: + messenger_dir = 'mexw64' + elif maxint == 2147483647: + messenger_dir = 'mexw32' + return messenger_dir diff --git a/messenger/make.py b/messenger/make.py index 5ada5d8..9962a3c 100755 --- a/messenger/make.py +++ b/messenger/make.py @@ -1,26 +1,11 @@ #!/usr/bin/python from __future__ import print_function import os -import sys -import fnmatch +from get_messenger_dir import get_messenger_dir import subprocess import shutil -# Check the system platform first -platform = sys.platform -print("This is a " + platform + " system") - -if platform.startswith('linux'): - messenger_dir = 'mexa64' -elif platform.startswith('darwin'): - messenger_dir = 'mexmaci64' -elif platform.startswith('win32'): - # We further need to differniate 32 from 64 bit: - maxint = sys.maxint() - if maxint == 9223372036854775807: - messenger_dir = 'mexw64' - elif maxint == 2147483647: - messenger_dir = 'mexw32' +messenger_dir = get_messenger_dir() # Open the configure file and start parsing with open(os.path.join(messenger_dir, 'local.cfg'), 'r') as config: diff --git a/messenger/make_octave.py b/messenger/make_octave.py index 859878d..107ff85 100644 --- a/messenger/make_octave.py +++ b/messenger/make_octave.py @@ -1,25 +1,11 @@ #!/usr/bin/python from __future__ import print_function import os -import sys +from get_messenger_dir import get_messenger_dir import shutil import subprocess -# Check the system platform first -platform = sys.platform -print("This is a " + platform + " system") - -if platform.startswith('linux'): - messenger_dir = 'mexa64' -elif platform.startswith('darwin'): - messenger_dir = 'mexmaci64' -elif platform.startswith('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' +messenger_dir = get_messenger_dir() with open(os.path.join(messenger_dir, 'local_octave.cfg')) as fid: lines = fid.readlines() @@ -27,16 +13,16 @@ cfg = {} for line in lines: name, path = line.split('=') - cfg[name.lower()] = path + cfg[name.lower()] = path.strip() or '.' -print("Building messenger.oct...") +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 %s -lzmq ./src/messenger.c" % paths +make_cmd = "mkoctfile --mex %s -lzmq ./src/messenger.c" % paths print(make_cmd) subprocess.check_output(make_cmd.split()) -messenger_exe = 'messenger.oct' +messenger_exe = 'messenger.mex' messenger_loc = os.path.join(messenger_dir, messenger_exe) shutil.move(messenger_exe, messenger_loc) diff --git a/messenger/mexa64/local_octave.cfg b/messenger/mexa64/local_octave.cfg index 1d3f3d3..76505f5 100644 --- a/messenger/mexa64/local_octave.cfg +++ b/messenger/mexa64/local_octave.cfg @@ -1,4 +1,4 @@ OCTAVE_INC=/usr/include OCTAVE_LIB=/usr/lib/x86_64-linux-gnu/ -ZMQ_INC=/usr/include -ZMQ_LIB=/usr/lib/x86_64-linux-gnu/ +ZMQ_INC= +ZMQ_LIB= diff --git a/messenger/mexmaci64/local_octave.cfg b/messenger/mexmaci64/local_octave.cfg index 1d3f3d3..76505f5 100644 --- a/messenger/mexmaci64/local_octave.cfg +++ b/messenger/mexmaci64/local_octave.cfg @@ -1,4 +1,4 @@ OCTAVE_INC=/usr/include OCTAVE_LIB=/usr/lib/x86_64-linux-gnu/ -ZMQ_INC=/usr/include -ZMQ_LIB=/usr/lib/x86_64-linux-gnu/ +ZMQ_INC= +ZMQ_LIB= diff --git a/setup.py b/setup.py index 42e61a4..4978b92 100755 --- a/setup.py +++ b/setup.py @@ -1,38 +1,27 @@ #!/usr/bin/env python """Setup file for python-matlab-bridge""" -import platform import os import sys import shutil +import glob +from distutils.core import setup + # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly # update it when the contents of directories change. if os.path.exists('MANIFEST'): os.remove('MANIFEST') -from distutils.core import setup - -# Find the messenger binary file and copy it to /matlab folder. -def copy_bin(bin_path): - if os.path.exists(bin_path): - shutil.copy(bin_path, "./pymatbridge/matlab") - return True - else: - return False +# Find the messenger binary file(s) and copy it to /matlab folder. +sys.path.insert(0, 'messenger') +from get_messenger_dir import get_messenger_dir +messenger_dir = get_messenger_dir() -if sys.platform == "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") +for f in glob.glob("./messenger/%s/messenger.*" % messenger_dir): + shutil.copy(f, "./pymatbridge/matlab") -for copy_this in ["./messenger/mexmaci64/messenger.mexmaci64", - "./messenger/mexa64/messenger.mexa64", - "./messenger/mexw64/messenger.mexw64", - "./messenger/mexw64/messenger.oct"]: - copy_bin(copy_this) # Get version and release info, which is all stored in pymatbridge/version.py ver_file = os.path.join('pymatbridge', 'version.py') From 072fe8d832cbced4701e34bca12602844e14decf Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 16 Feb 2015 08:07:15 -0600 Subject: [PATCH 15/19] Update the Readme --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0675f8c..bff998c 100644 --- a/README.md +++ b/README.md @@ -121,8 +121,7 @@ Rather than `~/startup.m`, Octave looks for an `~/.octaverc` file for commands to execute before every session. (This is a good place to manipulate the runtime path, for example). -Requires Version 3.8 or higher. Notice: it does not work with the MXE build on Windows -due to a Java error. +Requires Version 3.8 or higher. Notice: it does not work with the MXE build on Windows due to incomplete Java support. The Cygwin version has not been tested. ### Matlab magic: @@ -156,7 +155,7 @@ to build the pymatbridge messenger from source. To do so, you will need to follo Please refer to the [official guide](http://zeromq.org/intro:get-the-software) on how to build and install zmq. On Ubuntu, it is as simple as `sudo apt-get install libzmq3-dev`. On Windows, suggest using the following method: -- Install MSYS2 +- Install [MSYS2](http://sourceforge.net/projects/msys2/) - Run `$ pacman -S make` - From the zmq source directory, run: `$ sh configure --prefix=$(pwd) --build=x86_64-w64-mingw32` - Run `$ make`. @@ -223,7 +222,7 @@ latest release. Unzip it somewhere on your machine. For Matlab: cd messenger - # edit local.cfg in the directory for your platform + # edit local.cfg in the directory for your platform python make.py cd .. python setup.py install @@ -232,7 +231,7 @@ For Matlab: For Octave: cd messenger/octave - # edit local_octave.cfg in the directory for your platform + # edit local_octave.cfg in the directory for your platform python make_octave.py cd .. python setup.py From c96cd2ab8c5a9b6bdba63ab6d0587fd799f33742 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 16 Feb 2015 10:30:01 -0600 Subject: [PATCH 16/19] Update readme with Windows woes. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bff998c..3e9bb5d 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,8 @@ Rather than `~/startup.m`, Octave looks for an `~/.octaverc` file for commands to execute before every session. (This is a good place to manipulate the runtime path, for example). -Requires Version 3.8 or higher. Notice: it does not work with the MXE build on Windows due to incomplete Java support. The Cygwin version has not been tested. +Requires Version 3.8 or higher. Notice: Neither the MXE 3.8.1 nor the Cygwin 3.8.2 version is compatible on Windows. No Windows support will be available +until a working version of Octave 3.8+ with Java support is released. ### Matlab magic: From 04a41579cde85b20acba1d18315f9712bab4d35c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 16 Feb 2015 10:30:21 -0600 Subject: [PATCH 17/19] Make messenger a package --- messenger/get_messenger_dir.py | 3 +-- messenger/make.py | 2 +- messenger/make_octave.py | 2 +- setup.py | 7 ++++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/messenger/get_messenger_dir.py b/messenger/get_messenger_dir.py index 4294f61..50f482a 100644 --- a/messenger/get_messenger_dir.py +++ b/messenger/get_messenger_dir.py @@ -5,7 +5,6 @@ def get_messenger_dir(): # Check the system platform first splatform = sys.platform - print("This is a " + splatform + " system") if splatform.startswith('linux'): messenger_dir = 'mexa64' @@ -19,7 +18,7 @@ def get_messenger_dir(): raise ValueError("pymatbridge does not work on win32") # We further need to differniate 32 from 64 bit: - maxint = sys.maxint() + maxint = sys.maxsize if maxint == 9223372036854775807: messenger_dir = 'mexw64' elif maxint == 2147483647: diff --git a/messenger/make.py b/messenger/make.py index 9962a3c..7a17a3a 100755 --- a/messenger/make.py +++ b/messenger/make.py @@ -1,7 +1,7 @@ #!/usr/bin/python from __future__ import print_function import os -from get_messenger_dir import get_messenger_dir +from .get_messenger_dir import get_messenger_dir import subprocess import shutil diff --git a/messenger/make_octave.py b/messenger/make_octave.py index 107ff85..03d668c 100644 --- a/messenger/make_octave.py +++ b/messenger/make_octave.py @@ -1,7 +1,7 @@ #!/usr/bin/python from __future__ import print_function import os -from get_messenger_dir import get_messenger_dir +from .get_messenger_dir import get_messenger_dir import shutil import subprocess diff --git a/setup.py b/setup.py index 4978b92..ca6e07e 100755 --- a/setup.py +++ b/setup.py @@ -5,7 +5,6 @@ import sys import shutil import glob -from distutils.core import setup # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly @@ -14,9 +13,11 @@ os.remove('MANIFEST') +from distutils.core import setup + + # Find the messenger binary file(s) and copy it to /matlab folder. -sys.path.insert(0, 'messenger') -from get_messenger_dir import get_messenger_dir +from messenger.get_messenger_dir import get_messenger_dir messenger_dir = get_messenger_dir() for f in glob.glob("./messenger/%s/messenger.*" % messenger_dir): From 08138ae4fa2db087030c7b85a04fde0c272924b1 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 16 Feb 2015 10:31:01 -0600 Subject: [PATCH 18/19] Can not use relative imports in package --- messenger/make.py | 2 +- messenger/make_octave.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/messenger/make.py b/messenger/make.py index 7a17a3a..9962a3c 100755 --- a/messenger/make.py +++ b/messenger/make.py @@ -1,7 +1,7 @@ #!/usr/bin/python from __future__ import print_function import os -from .get_messenger_dir import get_messenger_dir +from get_messenger_dir import get_messenger_dir import subprocess import shutil diff --git a/messenger/make_octave.py b/messenger/make_octave.py index 03d668c..107ff85 100644 --- a/messenger/make_octave.py +++ b/messenger/make_octave.py @@ -1,7 +1,7 @@ #!/usr/bin/python from __future__ import print_function import os -from .get_messenger_dir import get_messenger_dir +from get_messenger_dir import get_messenger_dir import shutil import subprocess From ca8a877d48c12b5b554cf9ce7e42c31fa4e1796d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 16 Feb 2015 10:31:12 -0600 Subject: [PATCH 19/19] Add package __init__ --- messenger/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 messenger/__init__.py diff --git a/messenger/__init__.py b/messenger/__init__.py new file mode 100644 index 0000000..e69de29