]> git.lizzy.rs Git - metalua.git/blob - src/make.sh
configurable installation and build paths
[metalua.git] / src / make.sh
1 # --- BEGINNING OF USER-EDITABLE PART ---
2
3 # Metalua sources
4 BASE=${PWD}
5
6 # Temporary building location.
7 # Upon installation, everything will be moved to ${INSTALL_LIB} and ${INSTALL_BIN}
8
9 if [ -z "${BUILD}" ]; then
10   BUILD=/tmp/metalua-build
11 fi
12
13 if [ -z "${BUILD_BIN}" ]; then
14   BUILD_BIN=${BUILD}/bin
15 fi
16
17 if [ -z "${BUILD_LIB}" ]; then
18   BUILD_LIB=${BUILD}/lib
19 fi
20
21 # Where to place the final results
22 # INSTALL_BIN=/usr/local/bin
23 # INSTALL_LIB=/usr/local/lib/lua/5.1
24 if [ -z "${INSTALL_BIN}" ]; then
25   INSTALL_BIN=~/local/bin
26 fi
27
28 if [ -z "${INSTALL_LIB}" ]; then
29   INSTALL_LIB=~/local/lib/lua
30 fi
31
32 # Where to find Lua executables.
33 # On many Debian-based systems, those can be installed with "sudo apt-get install lua5.1"
34 LUA=$(which lua)
35 LUAC=$(which luac)
36
37 # --- END OF USER-EDITABLE PART ---
38
39
40 echo '*** Lua paths setup ***'
41
42 export LUA_PATH="?.luac;?.lua;${BUILD_LIB}/?.luac;${BUILD_LIB}/?.lua"
43 export LUA_MPATH="?.mlua;${BUILD_LIB}/?.mlua"
44
45 echo '*** Create the distribution directories, populate them with lib sources ***'
46
47 mkdir -p ${BUILD_BIN}
48 mkdir -p ${BUILD_LIB}
49 cp -R lib/* ${BUILD_LIB}/
50 # cp -R bin/* ${BUILD_BIN}/ # No binaries provided for unix (for now)
51
52 echo '*** Generate a callable metalua shell script ***'
53
54 cat > ${BUILD_BIN}/metalua <<EOF
55 #!/bin/sh
56 export LUA_PATH='?.luac;?.lua;${BUILD_LIB}/?.luac;${BUILD_LIB}/?.lua'
57 export LUA_MPATH='?.mlua;${BUILD_LIB}/?.mlua'
58 ${LUA} ${BUILD_LIB}/metalua.luac \$*
59 EOF
60 chmod a+x ${BUILD_BIN}/metalua
61
62 echo '*** Compiling the parts of the compiler written in plain Lua ***'
63
64 cd compiler
65 ${LUAC} -o ${BUILD_LIB}/metalua/bytecode.luac lopcodes.lua lcode.lua ldump.lua compile.lua
66 ${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
67 cd ..
68
69 echo '*** Bootstrap the parts of the compiler written in metalua ***'
70
71 ${LUA} ${BASE}/build-utils/bootstrap.lua ${BASE}/compiler/mlc.mlua output=${BUILD_LIB}/metalua/mlc.luac
72 ${LUA} ${BASE}/build-utils/bootstrap.lua ${BASE}/compiler/metalua.mlua output=${BUILD_LIB}/metalua.luac
73
74 echo '*** Finish the bootstrap: recompile the metalua parts of the compiler with itself ***'
75
76 ${BUILD_BIN}/metalua -vb -f compiler/mlc.mlua     -o ${BUILD_LIB}/metalua/mlc.luac
77 ${BUILD_BIN}/metalua -vb -f compiler/metalua.mlua -o ${BUILD_LIB}/metalua.luac
78
79 echo '*** Precompile metalua libraries ***'
80 for SRC in $(find ${BUILD_LIB} -name '*.mlua'); do
81     DST=$(dirname $SRC)/$(basename $SRC .mlua).luac
82     if [ $DST -nt $SRC ]; then
83         echo "+ $DST already up-to-date"
84     else
85         echo "- $DST generated from $SRC"
86         ${BUILD_BIN}/metalua $SRC -o $DST
87     fi
88 done
89
90 echo '*** Generate make-install.sh script ***'
91
92 cat > make-install.sh <<EOF2
93 #!/bin/sh
94 mkdir -p ${INSTALL_BIN}
95 mkdir -p ${INSTALL_LIB}
96
97 cat > ${INSTALL_BIN}/metalua <<EOF
98 #!/bin/sh
99 METALUA_LIB=${INSTALL_LIB}
100 export LUA_PATH="?.luac;?.lua;\\\${METALUA_LIB}/?.luac;\\\${METALUA_LIB}/?.lua"
101 export LUA_MPATH="?.mlua;\\\${METALUA_LIB}/?.mlua"
102 ${LUA} \\\${METALUA_LIB}/metalua.luac \\\$*
103 EOF
104
105 chmod a+x ${INSTALL_BIN}/metalua
106
107 cp -R ${BUILD_LIB}/* ${INSTALL_LIB}/
108 EOF2
109 chmod a+x make-install.sh
110
111 echo
112 echo "Build completed, proceed to installation with './make-install.sh' or 'sudo ./make-install.sh'"
113 echo