User:Luigi.scarso/luatex lunatic
Introduction
!! W A R N I N G !!
!! THIS CODE IS HIGHLY EXPERIMENTAL !!
!! THIS CODE IS TESTED ONLY UNDER LINUX !!
luatex_lunatic is a modification of lua side of luatex to host a python interpreter inside lua (see lunatic-python) .
I have made a set of patches because :
- by design, lua in luatex doesn't permit dynamic loading ("Dynamic loading of .so and .dll files is disabled on all platforms." see "LUA changes" in manual/luatexref-t.pdf of src and/or svn dist.)
- to prevent symbols collisions between luatex and an arbitrary library
Having a python interpreter hosted in luatex can make easy to use existing python's bindings (also Python releases includes at least from 2.5 a ctypes module that permit a binding to a .so without using SWIG or similar, similar to lua's loadlib) .
As general rule, I want the smallest set of patches ; so, for example, I have choose to not use a system libpng, even if it's easy to modify build.sh.linux to do so.
Also, I'm not concerned about portability: so I will talk only about Linux .
Please note that luatex_lunatic was born to answer to (my) question "Can I apply lunatic to luatex ?" and nothing else.
Every others meanings can be interestring, but are not mine , and I will not partecipate to any discussion about that.
How to
I prefear to put a bash script that can help to compile a luatex-lunatic binary. I have put all patches files here It's clear that some skills are needed, so I hope that this is barrier to avoid useless questions . Of course, I will try to correct all errors .
The trick is "hide all, then unhide what is needed" : in build.sh.linux change
CFLAGS="-g -O2 -Wno-write-strings" CXXFLAGS=$CFLAGS
in
CFLAGS="-g -O2 -Wno-write-strings -fvisibility=hidden" CXXFLAGS="$CFLAGS -fvisibility-inlines-hidden"
and build all. After that, make only what is needed (lua51) and re-compile luatex .
## ## Sec. 0 ## Safe exit ## uncomment exit to go on exit ## ## ## Sec. 1 ## Setup ## ## if [! -d Python-2.6.1 ]; then $HOME_LUN="/opt/luatex/luatex-lunatic" svn checkout svn://scm.foundry.supelec.fr/svn/luatex/tags/beta-0.35.0 #svn checkout svn://scm.foundry.supelec.fr/svn/luatex/trunk bzr branch lp:lunatic-python wget http://www.python.org/ftp/python/2.6.1/Python-2.6.1.tar.bz2 tar -xjvf Python-2.6.1.tar.bz2 cd Python-2.6.1 ./configure --prefix=$HOME_LUN --enable-unicode=ucs4 --enable-shared make && make install cp python2.6.conf /etc/ld.so.conf.d ldconfig ; fi ## ## install setuptools if [ ! -x bin/easy_install ]; then echo "Please install setuptools" echo "from http://pypi.python.org/pypi/setuptools" echo "in $HOME_LUN" echo "Please, pay attention to use $HOME_LUN/bin/python , not system python !" echo "Eventually modify first lines of setuptools to accomodate this," echo "or modify \$PATH=$HOME_LUN/bin:\$PATH" exit; fi ## ## ## Sec 2 ## Patch and build luatex ## ## cd $HOME_LUN #ln -s trunk luatex ## ## build lunatic ## ln -s beta-0.35.0 luatex patch -N --backup <0000_lunatic-python_setup.py.patch lunatic-python/setup.py cd lunatic-python ../bin/python setup.py build ../bin/python setup.py install --root=/ --prefix=$HOME_LUN --install-script=$HOME_LUN/bin cd $HOME_LUN ## ## This patch set ## CFLAGS="-g -O2 -Wno-write-strings -fvisibility=hidden" ## to avoid symbols conflicts patch -N --backup <0500_build.sh.linux.patch luatex/build.sh.linux ## ## These patches ## permits dynamic loading of shared libs. ## patch -N --backup <1000_luatex_src_libs_lua51_loadlib.c.patch luatex/src/libs/lua51/loadlib.c patch -N --backup <2000_luatex_src_libs_lua51_Makefile.patch luatex/src/libs/lua51/Makefile patch -N --backup <3000_luatex_src_texk_web2c_configure.patch luatex/src/texk/web2c/configure ## ## Build luatex ## cd luatex ./build.sh.linux &> out cd $HOME_LUN mkdir tests ## ## "Unhide" visibility of lua51 ## cd luatex-lunatic/luatex/build/libs/lua51 make -B posix ## ## Re-compile luatex ## cd $HOME_LUN cd luatex-lunatic/luatex/build/texk/web2c g++ -o luatex luatexini.o luatex0.o luatex1.o luatex2.o luatex3.o luatexextra.o luatex-pool.o luatexdir/libpdf.a ../../libs/libpng/libpng.a ../../libs/zlib/libz.a ../../libs/xpdf/xpdf/libxpdf.a ../../libs/xpdf/goo/libGoo.a ../../libs/xpdf/fofi/libfofi.a ../../libs/md5/md5.o ../../libs/obsdcompat/libopenbsd-compat.a ../../libs/lua51/liblua.a ../../libs/slnunicode/slnunico.o ../../libs/luazip/src/luazip.o ../../libs/zziplib/zzip/libzzip.a ../../libs/luafilesystem/src/lfs.o ../../libs/luasocket/src/socket.a ../../libs/luapeg/lpeg.o ../../libs/luamd5/md5lib.o ../../libs/luamd5/md5.o ../../libs/luazlib/lgzip.o ../../libs/luazlib/lzlib.o ../../libs/luafontforge/libff.a ../../libs/luaprofiler/libprofiler.a mpdir/lmplib.o mpdir/.libs/libmplib.a lib/lib.a ../kpathsea/.libs/libkpathsea.a -lm -nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -ldl -lm -lgcc_eh -lgcc -lc -lgcc_eh -lgcc -Wl,-E -ldl -lreadline -lhistory -lncurses ## ##
The last line is:
g++ -o luatex luatexini.o luatex0.o luatex1.o luatex2.o luatex3.o luatexextra.o luatex-pool.o luatexdir/libpdf.a ../../libs/libpng/libpng.a ../../libs/zlib/libz.a ../../libs/xpdf/xpdf/libxpdf.a ../../libs/xpdf/goo/libGoo.a ../../libs/xpdf/fofi/libfofi.a ../../libs/md5/md5.o ../../libs/obsdcompat/libopenbsd-compat.a ../../libs/lua51/liblua.a ../../libs/slnunicode/slnunico.o ../../libs/luazip/src/luazip.o ../../libs/zziplib/zzip/libzzip.a ../../libs/luafilesystem/src/lfs.o ../../libs/luasocket/src/socket.a ../../libs/luapeg/lpeg.o ../../libs/luamd5/md5lib.o ../../libs/luamd5/md5.o ../../libs/luazlib/lgzip.o ../../libs/luazlib/lzlib.o ../../libs/luafontforge/libff.a ../../libs/luaprofiler/libprofiler.a mpdir/lmplib.o mpdir/.libs/libmplib.a lib/lib.a ../kpathsea/.libs/libkpathsea.a -lm -nodefaultlibs -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -ldl -lm -lgcc_eh -lgcc -lc -lgcc_eh -lgcc -Wl,-E -ldl -lreadline -lhistory -lncurses
Python packages
- numpy ✔
- scipy ✔
- matplot ✔
- odfpy ✔
- PIL, python imaging library ✔
- TO FIX ; pygegl (I like its syntax, but need too much and it's easy only in python)
- TODO: binding of libtiff with ctypes (or use gdal ?)
- TODO :gle (for "Max" Dominici, GUIT)
- TODO : using the binding of VIPS
- TODO : using the binding of db xml
Bindings
- ghostscript 8.64 ✔
- graphviz 2.22.0 ✔
- ImageMagick-6.4.9 with pythonmagickwand ✔
- fontforge 20090224 ✔ Useful to check symbols collision, and if one want to play with the last fontforge, eg to make some font tables.
- R-2.8.1 with rpy2-2.0.3 (For "Mau" Himmelmann, GUIT) ✔ need an example with output in pdf
- quantalib 0.9.7 ✔ need an example with output in pdf
Dedicated systems
SageMath
Done, but need a deep cleaning.
I should be able to change only the lunatic part and don't recompile anything else.
Root (CERN) (Maybe)
ConTeXt mkIV examples (todo)
TODO