zoukankan      html  css  js  c++  java
  • cygwin install lua modules

    写一篇博客纪念我今天的辛苦工作,虽然最后也不完美,但是这一点工作也许能给大家一点帮助,省得大家再重复走路了。


    最近用总用Lua和Cygwin,但Lua用的是LuaForWindows,因此不是原生态的cygwin的东西,其实我很想用cygwin中的Lua,但是cygwin中的lua没有模块啊,都要自己整,想想都觉得费劲。总希望有个人来做这件事,但是今天我终于忍不了了。整了一天,也没有把tecgraf的IUP/IM/CD给整上去,太菜了,没办法,先把整了的东西放上来吧。


    安装Cygwin

    安装时必须保证安装如下模块:

    lua autoconf automake autobuild gcc4 gcc4-g++ wget curl unzip make cmake git libzzip-devel libxml2-devel diff patch libgd-devel libgd2 pkg-config libcurl4 libcurl-devel libsqlite3-devel

    安装Lua的模块们

    安装了如下模块:

    luarocks luazip luaxml lunit luasocket luafilesystem lualogging luadoc md5 date bit32 lpeg luacurl luasql-sqlite3 stdlib lbase64 lpack luaprofiler luagd luacom

    安装的步骤有很多,写了3个脚本,生成了一个patch,把这它们下载下来,放到一个文件夹中,切换到那个文件夹,执行 ./install.sh 即可


    install.sh

    #!/bin/sh
    
    START_DIR=$PWD # gd.patch MUST be here
    LUA_CLIB_DIR=/usr/local/lib/lua/5.1
    LUA_LLIB_DIR=/usr/local/share/lua/5.1
    RUN_DIR=~/tmp/luainstall
    
    # run in ~/tmp
    mkdir -p $RUN_DIR
    cd $RUN_DIR
    
    # install luarocks
    echo "####################### Installing luarocks #################"
    wget "http://luarocks.org/releases/luarocks-2.0.10.tar.gz"
    tar xzf luarocks-2.0.10.tar.gz
    cd luarocks-2.0.10
    ./configure
    make
    make install
    cd $RUN_DIR
    
    # install lua modules by luarocks
    MODULES="luazip luaxml lunit luasocket luafilesystem lualogging luadoc md5 date bit32 lpeg luacurl luasql-sqlite3 stdlib lbase64 lpack luaprofiler"
    
    for mod in $MODULES ; do
    	echo "############### Installing $mod #####################"
    	luarocks install $mod
    done
    
    # install lua modules that cannot by luarocks
    echo "##################### Installing luagd #######################"
    wget "http://files.luaforge.net/releases/lua-gd/lua-gd/lua-gd-2.0.33r2forLua5.1/lua-gd-2.0.33r2.tar.gz"
    tar xzf lua-gd-2.0.33r2.tar.gz
    cd lua-gd-2.0.33r2
    patch < $START_DIR/gd.patch # the script must run at the $RUNDIR
    make
    cp -f gd.so $LUA_CLIB_DIR/
    cd $RUN_DIR
    
    # install luacom
    echo "####################### Installing luacom #####################"
    rm -rf luacom #enable run more than once
    git clone https://github.com/davidm/luacom.git
    cd luacom
    mkdir -p build
    cd build
    cmake ..
    make
    cp luacom.dll $LUA_CLIB_DIR/
    cd $RUN_DIR
    
    # change the default lua path
    echo "###################### Changing the default lua path/cpath ######################"
    # enable run more than once
    CHANGED=$(cat ~/.bashrc | grep "# CYGWIN LUA INSTALL")
    
    if [[ -z $CHANGED ]] ; then
    	echo "# CYGWIN LUA INSTALL" >> ~/.bashrc
    	echo "export LUA_PATH=\"./?.lua;$LUA_LLIB_DIR/?.lua;$LUA_LLIB_DIR/?/init.lua;$LUA_LLIB_DIR/?.lua;$LUA_LLIB_DIR/?/init.lua\"" >> ~/.bashrc
    	echo "export LUA_CPATH=\"./?.so;$LUA_CLIB_DIR/?.so;./?.dll;$LUA_CLIB_DIR/?.dll\"" >> ~/.bashrc
    	echo "Lua path/cpath changed"
    else
    	echo "Previous changed detected, cancelled"	
    fi
    
    # do it now
    export LUA_PATH="./?.lua;$LUA_LLIB_DIR/?.lua;$LUA_LLIB_DIR/?/init.lua;$LUA_LLIB_DIR/?.lua;$LUA_LLIB_DIR/?/init.lua"
    export LUA_CPATH="./?.so;$LUA_CLIB_DIR/?.so;./?.dll;$LUA_CLIB_DIR/?.dll"
    
    # test lua install
    echo "############### Testing using require #################"
    lua $START_DIR/test_require.lua
    
    echo ""
    echo "Enjoy Lua!"
    
    

    uninstall.sh

    #!/bin/sh
    
    LUALOCAL=/usr/local
    
    # dirs
    LUAROCKS_CONFIG_DIR=$LUALOCAL/etc/luarocks
    LUAROCKS_ROCK_DIR=$LUALOCAL/lib/luarocks
    LUA_CLIB_DIR=$LUALOCAL/lib/lua
    LUA_LLIB_DIR=$LUALOCAL/share/lua
    rm -rf $LUAROCKS_CONFIG_DIR $LUAROCKS_ROCK_DIR $LUA_CLIB_DIR $LUA_LLIB_DIR
    
    # bin files
    LUAROCKS=$LUALOCAL/bin/luarocks
    LUAROCKS_ADMIN=$LUALOCAL/bin/luarocks-admin
    LUADOC=$LUALOCAL/bin/luadoc
    LUAUNIT=$LUALOCAL/bin/lunit
    rm -f $LUAROCKS $LUAROCKS_ADMIN $LUADOC $LUAUNIT
    
    echo "Please manually remove LUA_PATH and LUA_CPATH in your .bashrc file"
    
    

    gd.patch

    --- Makefile	2006-05-04 09:03:48.000000000 +0800
    +++ Makefile.update	2012-07-29 22:08:03.546875000 +0800
    @@ -33,7 +33,7 @@
     # change the next ones.
     
     # Name of .pc file. "lua5.1" on Debian/Ubuntu
    -LUAPKG=lua5.1
    +LUAPKG=lua
     OUTFILE=gd.so
     CFLAGS=`gdlib-config --cflags` `pkg-config $(LUAPKG) --cflags` -O3 -Wall
     GDFEATURES=`gdlib-config --features |sed -e "s/GD_/-DGD_/g"`
    @@ -67,11 +67,7 @@
     all: $(OUTFILE)
     
     $(OUTFILE): luagd.c
    -	$(CC) -o $(OUTFILE) $(GDFEATURES) $(CFLAGS) $(LFLAGS) luagd.c
    -	lua test_features.lua
    -
    -install: $(OUTFILE)
    -	install -s $(OUTFILE) $(INSTALL_PATH)
    +	$(CC) -o $(OUTFILE) $(GDFEATURES) $(CFLAGS) luagd.c $(LFLAGS)
     
     clean:
     	rm -f $(OUTFILE) *.o
    

    test_require.lua

    #!/usr/bin/lua
    
    local modules = {
    	"zip",
    	"luaXML",
    	"lunit",
    	"socket",
    	"lfs",
    	"logging",
    	"luadoc",
    	"md5",
    	"date",
    	"bit32",
    	"lpeg",
    	"luacurl",
    	"luasql.sqlite3",
    	"base64",
    	"pack", 
    	"profiler",
    	"gd",
    	"luacom",
    }
    
    for _,mod in ipairs(modules) do
    	require(mod)
    end
    
    print "########## all passed #########"
    

    遇到的问题解释

    库路径

    cygwin默认安装的Lua,库路径是 /usr/share/lua/5.1 和 /usr/lib/lua/5.1,luarocks编译时应该配置为 ./configure --prefix=/usr

    但是在我的电脑上,如果这样做,luarocks在安装其他模块时会提示:

    Error: Your user does not have write permissions in /
    -- you may want to run as a privileged user or use your local tree with --local.

    于是我只好接受默认的/usr/local,这就带来了问题,即后面要修改 LUA_PATH 和 LUA_CPATH,另外cygwin中有些库是.so,有些是.dll,所以cpath比较特殊

    luagd Makefile

    luagd的Makefile默认是编译不过去的。是因为debian和cygwin的差别造成的。大家看看gd.patch就知道哪里需要改了

    卸载

    安装完之后要卸载就运行 ./uninstall 即可

    临时文件夹

    安装时使用了 ~/tmp/luainstall 作为临时文件夹,安装完后并没有删除,如果不想再看到它,请有空删除即可

    运行

    我只能保证安装没有问题,具体是否能运行,还不知^_^

    TODO

    IUP或wxLua

    Patch:整不明白GUI了,转战 MinGW,参见我的下一篇文章



  • 相关阅读:
    Atitit 趋势管理之道 attilax著
    Atitit 循环处理的新特性 for...else...
    Atitit 2017年的技术趋势与未来的大技术趋势
    atitit 用什么样的维度看问题.docx 如何了解 看待xxx
    atitit prj mnrs 项目中的几种经理角色.docx
    Atitit IT办公场所以及度假村以及网点以及租房点建设之道 attilax总结
    Atitit 工具选型的因素与方法 attilax总结
    Atitit.团队文化建设影响组织的的一些原理 法则 定理 效应 p826.v4
    Atiitt 管理方面的误区总结 attilax总结
    Atitit 未来趋势把控的书籍 attilax总结 v3
  • 原文地址:https://www.cnblogs.com/windtail/p/2623170.html
Copyright © 2011-2022 走看看