compile the mex file on the fly

Dimitri Papadopoulos-Orfanos dimitri.papadopoulos at CEA.FR
Tue Sep 1 03:00:36 CEST 2009


Hi,

I see a few FieldTrip files attempt to compile MEX files on the fly.

For example @uint64/abs.m:

	% determine the name and full path of this function
	funname = mfilename('fullpath');
	mexsrc  = [funname '.c'];
	[mexdir, mexname] = fileparts(funname);
	
	try
	  % try to compile the mex file on the fly
	  warning('trying to compile MEX file from %s', mexsrc);
	  cd(mexdir);
	  mex(mexsrc);

I fear this may fail when FieldTrip is installed on an application 
server and run by users who cannot write into the FieldTrip directory.

I understand this is a reasonable fallback for exotic platforms which 
lack the proper MEX file. It is also a good way to always have the MEX 
file rebuilt after a change in the associated C file. Unfortunately it 
also breaks FieldTrip installations on application servers - quite 
common on 32-bit or 64-bit Linux using NFS. Making MEX files available 
for such common platforms would fix this issue, wouldn't it? Also see my 
previous "64-bit Linux" message.

I hope I'm not completely misunderstanding the issue at hand.


Here is a list of Matlab files which call mex() and their associated C 
and MEX files:

@uint64/max.m
	@uint64/max.c
		@uint64/max.mexa64
		@uint64/max.mexglx
		@uint64/max.mexmac
		@uint64/max.mexmaci
		@uint64/max.mexw32
@uint64/min.m
	@uint64/min.c
		@uint64/min.mexa64
		@uint64/min.mexglx
		@uint64/min.mexmac
		@uint64/min.mexmaci
		@uint64/min.mexw32
@uint64/minus.m
	@uint64/minus.c
		@uint64/minus.mexa64
		@uint64/minus.mexglx
		@uint64/minus.mexmac
		@uint64/minus.mexmaci
		@uint64/minus.mexw32
@uint64/plus.m
	@uint64/plus.c
		@uint64/plus.mexa64
		@uint64/plus.mexglx
		@uint64/plus.mexmac
		@uint64/plus.mexmaci
		@uint64/plus.mexw32
@uint64/rdivide.m
	@uint64/rdivide.c
		@uint64/rdivide.mexa64
		@uint64/rdivide.mexglx
		@uint64/rdivide.mexmac
		@uint64/rdivide.mexmaci
		@uint64/rdivide.mexw32
@uint64/times.m
	@uint64/times.c
		@uint64/times.mexa64
		@uint64/times.mexglx
		@uint64/times.mexmac
		@uint64/times.mexmaci
		@uint64/times.mexw32
@uint64/abs.m
	@uint64/abs.c
		@uint64/abs.mexa64
		@uint64/abs.mexmaci
fileio/private/mxDeserialize.m
	fileio/private/mxDeserialize.c
		fileio/private/mxDeserialize.mexa64
		fileio/private/mxDeserialize.mexmac
		fileio/private/mxDeserialize.mexw32
fileio/private/mxSerialize.m
	fileio/private/mxSerialize.c
		fileio/private/mxSerialize.mexa64
		fileio/private/mxSerialize.mexglx
		fileio/private/mxSerialize.mexmac
		fileio/private/mxSerialize.mexw32
fileio/private/read_24bit.m
	fileio/private/read_24bit.c
		fileio/private/read_24bit.mexa64
		fileio/private/read_24bit.mexglx
		fileio/private/read_24bit.mexmac
		fileio/private/read_24bit.mexmaci
		fileio/private/read_24bit.mexw32
fileio/private/read_ctf_shm.m
	fileio/private/read_ctf_shm.c
		fileio/private/read_ctf_shm.mexa64
		fileio/private/read_ctf_shm.mexglx
		fileio/private/read_ctf_shm.mexmaci
fileio/private/write_ctf_shm.m
	fileio/private/write_ctf_shm.c
		fileio/private/write_ctf_shm.mexa64
		fileio/private/write_ctf_shm.mexglx
		fileio/private/write_ctf_shm.mexmaci
forwinv/private/meg_leadfield1.m
	forwinv/private/meg_leadfield1.c
		forwinv/private/meg_leadfield1.mexa64
		forwinv/private/meg_leadfield1.mexglx
		forwinv/private/meg_leadfield1.mexmac
		forwinv/private/meg_leadfield1.mexmaci
		forwinv/private/meg_leadfield1.mexw32
forwinv/private/plgndr.m
	forwinv/private/plgndr.c
		forwinv/private/plgndr.mexa64
		forwinv/private/plgndr.mexglx
		forwinv/private/plgndr.mexmac
		forwinv/private/plgndr.mexmaci
		forwinv/private/plgndr.mexw32
private/write_ctf_shm.m
private/read_ctf_shm.m
private/meg_leadfield1.m
	private/meg_leadfield1.c
		private/meg_leadfield1.mexa64
		private/meg_leadfield1.mexglx
		private/meg_leadfield1.mexmac
		private/meg_leadfield1.mexmaci
		private/meg_leadfield1.mexw32
private/splint_gh.m
	private/splint_gh.c
		private/splint_gh.mexa64
		private/splint_gh.mexglx
		private/splint_gh.mexmac
		private/splint_gh.mexmaci
		private/splint_gh.mexw32
private/read_24bit.m
	private/read_24bit.c
		private/read_24bit.mexa64
		private/read_24bit.mexglx
		private/read_24bit.mexmac
		private/read_24bit.mexmaci
		private/read_24bit.mexw32
private/plgndr.m
	private/plgndr.c
		private/plgndr.mexa64
		private/plgndr.mexglx
		private/plgndr.mexmac
		private/plgndr.mexmaci
		private/plgndr.mexw32
classification/utilities/repop/repop.m
	classification/utilities/repop/repop.c
		classification/utilities/repop/repop.mexglx
classification/utilities/tprod/tprod.m
	classification/utilities/tprod/tprod.c
		classification/utilities/tprod/tprod.mexglx
@config/private/deepcopy.m
	@config/private/deepcopy.c
		@config/private/deepcopy.mexa64
		@config/private/deepcopy.mexglx
		@config/private/deepcopy.mexmac
		@config/private/deepcopy.mexmaci
@config/private/increment.m
	@config/private/increment.c
		@config/private/increment.mexa64
		@config/private/increment.mexglx
		@config/private/increment.mexmac
		@config/private/increment.mexmaci
@config/private/reset.m
	@config/private/reset.c
		@config/private/reset.mexa64
		@config/private/reset.mexglx
		@config/private/reset.mexmac
		@config/private/reset.mexmaci


A few remarks:

1. Files private/write_ctf_shm.m and private/read_ctf_shm.m are 
duplicates of fileio/private/read_ctf_shm.m and 
fileio/private/read_ctf_shm.m and they are missing associated C files. 
They are therefore broken. Shouldn't they be deleted?

2. I've left out all files in
	fileio/@uint64/
since they directory is identical to:
	@uint64/

3. When a *.c file is changed, does your distribution process rebuild 
relevant MEX files before distribution? I guess not... In which case all 
users using FieldTrip from an application server may be using outdated 
MEX files.


Regards,
-- 
Dimitri Papadopoulos
CEA, I2BM, NeuroSpin
91191 Gif-sur-Yvette cedex, France


----------------------------------
The aim of this list is to facilitate the discussion between users of the FieldTrip  toolbox, to share experiences and to discuss new ideas for MEG and EEG analysis. See also http://listserv.surfnet.nl/archives/fieldtrip.html and http://www.ru.nl/neuroimaging/fieldtrip.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4743 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20090901/5f747559/attachment.bin>


More information about the fieldtrip mailing list