#!/bin/sh
# Compile mu from scratch.

set -v
set -e  # stop immediately on error

cd ../../tools
  # auto-generate various lists (ending in '_list' by convention) {
  # list of function declarations, so I can define them in any order
  grep -h "^[^ #].*) {" tangle.cc  |sed 's/ {.*/;/'  > tangle.function_list
  # list of tests to run
  grep -h "^[[:space:]]*void test_" tangle.cc  |sed 's/^\s*void \(.*\)() {$/\1,/'  > tangle.test_list
  grep -h "^\s*void test_" tangle.cc  |sed 's/^\s*void \(.*\)() {.*/"\1",/'  > tangle.test_name_list
  # }
  g++ -std=c++98 -g -O3 tangle.cc -o tangle
  ./tangle test
cd ../archive/1.vm

cd termbox
  gcc -g -O2 -c termbox.c
  gcc -g -O2 -c utf8.c
  ar rcs libtermbox.a *.o
cd ..

../../tools/tangle [0-9]*.cc > mu.cc
# auto-generate function declarations, so I can define them in any order
# functions start out unindented, have all args on the same line, and end in ') {'
#
#                                      \/ ignore struct/class methods
grep -h "^[^[:space:]#].*) {$" mu.cc  |grep -v ":.*("  |sed 's/ {.*/;/'  > function_list
# auto-generate list of tests to run
grep -h "^\s*void test_" mu.cc  |sed 's/^\s*void \(.*\)() {.*/\1,/'  > test_list
grep -h "^\s*void test_" mu.cc  |sed 's/^\s*void \(.*\)() {.*/"\1",/'  > test_name_list
g++ -std=c++98 -g -O2 mu.cc termbox/libtermbox.a -o mu_bin

cat [0-9]*.mu > core.mu
