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