3 # --- BEGINNING OF USER-EDITABLE PART ---
8 # Temporary building location.
9 # Upon installation, everything will be moved to ${INSTALL_LIB} and ${INSTALL_BIN}
11 if [ -z "${BUILD}" ]; then
12 BUILD=$(mkdir -p ../build; cd ../build; pwd)
15 if [ -z "${BUILD_BIN}" ]; then
16 BUILD_BIN=${BUILD}/bin
19 if [ -z "${BUILD_LIB}" ]; then
20 BUILD_LIB=${BUILD}/lib
23 # Where to place the final results
24 # INSTALL_BIN=/usr/local/bin
25 # INSTALL_LIB=/usr/local/lib/lua/5.1
26 if [ -z "${INSTALL_BIN}" ]; then
27 INSTALL_BIN=~/local/bin
30 if [ -z "${INSTALL_LIB}" ]; then
31 INSTALL_LIB=~/local/lib/lua
34 # Where to find Lua executables.
35 # On many Debian-based systems, those can be installed with "sudo apt-get install lua5.1"
39 # --- END OF USER-EDITABLE PART ---
41 if [ -z ${LUA} ] ; then echo "Error: no lua interpreter found"; fi
42 if [ -z ${LUAC} ] ; then echo "Error: no lua compiler found"; fi
44 if [ -f ~/.metaluabuildrc ] ; then . ~/.metaluabuildrc; fi
46 echo '*** Lua paths setup ***'
48 export LUA_PATH="?.luac;?.lua;${BUILD_LIB}/?.luac;${BUILD_LIB}/?.lua"
49 export LUA_MPATH="?.mlua;${BUILD_LIB}/?.mlua"
51 echo '*** Create the distribution directories, populate them with lib sources ***'
55 cp -Rp lib/* ${BUILD_LIB}/
56 # cp -R bin/* ${BUILD_BIN}/ # No binaries provided for unix (for now)
58 echo '*** Generate a callable metalua shell script ***'
60 cat > ${BUILD_BIN}/metalua <<EOF
62 export LUA_PATH='?.luac;?.lua;${BUILD_LIB}/?.luac;${BUILD_LIB}/?.lua'
63 export LUA_MPATH='?.mlua;${BUILD_LIB}/?.mlua'
64 ${LUA} ${BUILD_LIB}/metalua.luac \$*
66 chmod a+x ${BUILD_BIN}/metalua
68 echo '*** Compiling the parts of the compiler written in plain Lua ***'
71 ${LUAC} -o ${BUILD_LIB}/metalua/bytecode.luac lopcodes.lua lcode.lua ldump.lua compile.lua
72 ${LUAC} -o ${BUILD_LIB}/metalua/mlp.luac lexer.lua gg.lua mlp_lexer.lua mlp_misc.lua mlp_table.lua mlp_meta.lua mlp_expr.lua mlp_stat.lua mlp_ext.lua
75 echo '*** Bootstrap the parts of the compiler written in metalua ***'
77 ${LUA} ${BASE}/build-utils/bootstrap.lua ${BASE}/compiler/mlc.mlua output=${BUILD_LIB}/metalua/mlc.luac
78 ${LUA} ${BASE}/build-utils/bootstrap.lua ${BASE}/compiler/metalua.mlua output=${BUILD_LIB}/metalua.luac
80 echo '*** Finish the bootstrap: recompile the metalua parts of the compiler with itself ***'
82 ${BUILD_BIN}/metalua -vb -f compiler/mlc.mlua -o ${BUILD_LIB}/metalua/mlc.luac
83 ${BUILD_BIN}/metalua -vb -f compiler/metalua.mlua -o ${BUILD_LIB}/metalua.luac
85 echo '*** Precompile metalua libraries ***'
86 for SRC in $(find ${BUILD_LIB} -name '*.mlua'); do
87 DST=$(dirname $SRC)/$(basename $SRC .mlua).luac
88 if [ $DST -nt $SRC ]; then
89 echo "+ $DST already up-to-date"
91 echo "- $DST generated from $SRC"
92 ${BUILD_BIN}/metalua $SRC -o $DST
96 echo '*** Generate make-install.sh script ***'
98 cat > make-install.sh <<EOF2
100 mkdir -p ${INSTALL_BIN}
101 mkdir -p ${INSTALL_LIB}
103 cat > ${INSTALL_BIN}/metalua <<EOF
105 METALUA_LIB=${INSTALL_LIB}
106 export LUA_PATH="?.luac;?.lua;\\\${METALUA_LIB}/?.luac;\\\${METALUA_LIB}/?.lua"
107 export LUA_MPATH="?.mlua;\\\${METALUA_LIB}/?.mlua"
108 exec ${LINEREADER} ${LUA} \\\${METALUA_LIB}/metalua.luac "\\\$@"
111 chmod a+x ${INSTALL_BIN}/metalua
113 cp -R ${BUILD_LIB}/* ${INSTALL_LIB}/
115 echo "metalua libs installed in ${INSTALL_LIB};"
116 echo "metalua executable in ${INSTALL_BIN}."
118 chmod a+x make-install.sh
121 echo "Build completed, proceed to installation with './make-install.sh' or 'sudo ./make-install.sh'"