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