diff --git a/src/Makefile.src b/src/Makefile.src
new file mode 100644
index 0000000000000000000000000000000000000000..d5cf8c8acef395b90f02c652922437ac3df8d262
--- /dev/null
+++ b/src/Makefile.src
@@ -0,0 +1,230 @@
+# This line is needed on some machines.
+@SET_MAKE@
+
+# Don't change this line.  Define EXTRALIBS before this line if you
+# wish to add any libraries.
+LIBS=@LIBS@ $(EXTRALIBS)
+
+# not used yet
+INSTALL=@INSTALL@
+
+SRCDIR=@srcdir@
+VPATH=@srcdir@
+
+# These are used while compiling
+TMP_LIBDIR = @LIBDIR@
+TMP_BINDIR = @BINDIR@
+TMP_BUILDDIR = @BUILDDIR@
+TMP_DOCDIR = @DOCDIR@
+
+prefix = @prefix@
+exec_prefix = $(prefix)/bin
+lib_prefix = $(prefix)/lib/ulpc
+
+#
+# use bison please, yacc doesn't always work good enough.
+#
+YACC=@YACC@
+YFLAGS=-d -v
+
+# If you don't have 'strchr', then add next flag to CFLAGS.
+# -Dstrchr=index -Dstrrchr=rindex
+#
+PROFIL=
+#PROFIL=-pg
+
+#
+#Enable warnings from the compiler, if wanted.
+#
+WARN=@WARN@
+#WARN=-W -Wunused -Wformat
+#WARN -Wunused -Wformat -Wuninitialized
+#WARN= -Wall -Wshadow -Dlint
+
+#add extra defines here
+# Be sure to use -g and -DDEBUG when looking for bugs
+DEFINES=-DDEBUG -DDEFAULT_MASTER=\"$(lib_prefix)/master.lpc\"
+
+# -O should work with all compilers
+OPTIMIZE=@OPTIMIZE@
+
+# Preprocessor flags.
+PREFLAGS=-I. -I$(SRCDIR) $(DEFINES)
+OTHERFLAGS=$(OSFLAGS) $(OPTIMIZE) $(WARN) $(PROFIL)
+CFLAGS=$(PREFLAGS) $(OTHERFLAGS)
+
+CC=@CC@
+CPP=@CPP@
+
+LD=$(CC)
+LDFLAGS=$(CFLAGS)
+
+RUNULPC=$(TMP_BUILDDIR)/ulpc -m $(TMP_LIBDIR)/master.lpc
+FIXDEP=$(TMP_BINDIR)/fixdepends.sh
+
+MAKE_FLAGS = "prefix=$(prefix)" "exex_prefix=$(exex_prefix)" "CC=$(CC)" "OTHERFLAGS=$(OTHERFLAGS)" "FIXDEP=$(FIXDEP)"
+
+# Add alloca.o if you don't have alloca() on your machine.
+# Add ualarm.o if you don't have ualarm() on your machine.
+#
+OBJ=language.o peep.o add_efun.o array.o builtin_efuns.o backend.o \
+    call_out.o docode.o dynamic_buffer.o error.o fd_control.o \
+    fsort.o hashtable.o interpret.o lex.o las.o list.o \
+    lpc_types.o main.o mapping.o memory.o module.o object.o \
+    opcodes.o operators.o port.o program.o rusage.o stralloc.o \
+    stuff.o svalue.o gc.o callback.o lpc_signal.o @EXTRA_OBJS@
+
+#
+MODULES=@subdirs@
+MODULE_OBJS=@MODULE_OBJS@
+
+#
+# User callable targets
+#
+
+all: ulpc
+
+ulpc: $(OBJ) module_objects
+	-mv ulpc ulpc.old
+	$(LD) $(LDFLAGS) $(OBJ) $(MODULE_OBJS) -o ulpc $(LIBS)
+
+
+# purify
+pure: $(OBJ) module_objects
+	-mv ulpc ulpc.old
+	purify -free-queue-length=500 -inuse-at-exit=yes -chain-length=12 $(LD) $(LDFLAGS) $(OBJ) $(MODULE_OBJS) -o ulpc $(LIBS)
+
+# purecov
+cover: $(OBJ) module_objects
+	-mv ulpc ulpc.old
+	purecov purify -free-queue-length=500 -inuse-at-exit=yes -chain-length=12 $(LD) $(LDFLAGS) $(OBJ) $(MODULE_OBJS) -o ulpc $(LIBS)
+
+# quantify
+quant: $(OBJ) module_objects
+	-mv ulpc ulpc.old
+	quantify $(LD) $(LDFLAGS) $(OBJ) $(MODULE_OBJS) -o ulpc $(LIBS)
+
+# install
+install:
+	if [ ! -d "$(prefix)" ]; then mkdir "$(prefix)" ; chmod 755 "$(prefix)" ; fi
+	if [ ! -d "$(exec_prefix)" ]; then mkdir "$(exec_prefix)" ; chmod 755 "$(exec_prefix)" ; fi
+	$(INSTALL) ./ulpc $(exec_prefix)
+	if [ ! -d "$(prefix)/lib" ]; then mkdir "$(prefix)/lib" ; chmod 755 "$(prefix)/lib" ; fi
+	if [ ! -d "$(lib_prefix)" ]; then mkdir "$(lib_prefix)" ; chmod 755 "$(lib_prefix)" ; fi
+	$(INSTALL) $(TMP_LIBDIR)/master.lpc $(lib_prefix)
+	$(INSTALL) $(TMP_LIBDIR)/simulate.lpc $(lib_prefix)
+
+# tidy up a bit
+tidy:
+	-rm -f *.o core $(MUD_LIB)/core y.output y.tab.c y.tab.h
+	-rm -f $(TMP_BINDIR)/core *.o *.i *.i~
+
+# make clean
+clean: tidy
+	-for a in $(MODULES) ; do ( cd $$a ; ${MAKE} $(MAKE_FLAGS) clean ) ; done
+	-for a in $(MODULES) ; do rm -f $$a/*.o ; done
+	-rm -f TAGS tags
+	-rm -f yacc.acts yacc.debug yacc.tmp *.debug.log a.out
+
+# make _really_ clean
+spotless: clean
+	rm -f Makefile machine.h
+	find . -type f '(' -name '*~' -o -name '.*~' -o -name core -o -name '.nfs*' -name '#*#' ')' -print | xargs rm -f
+	-rm -f lexical.c mon.out *.ln config.status
+	-rm -f $(TMP_BINDIR)/driver $(TMP_BINDIR)/*~ $(TMP_BINDIR)/#*#
+	-rm -f .pure driver* l.outa*
+
+# create tags
+tags:
+	ctags *.c
+
+TAGS:
+	etags -t *.h *.c
+
+# verify / debug
+verify_manual:
+	$(RUNULPC) $(SRCDIR)/test/verifymanual.lpc $(TMP_DOCDIR)
+
+verify: $(SRCDIR)/test/testsuite
+	$(RUNULPC) $(SRCDIR)/test/test_lpc.lpc $(SRCDIR)/test/testsuite
+
+# verify / debug verbose
+verbose_verify: $(SRCDIR)/test/testsuite
+	$(RUNULPC) $(SRCDIR)/test/test_lpc.lpc $(SRCDIR)/test/testsuite --verbose
+
+# verify & debug VERBOSE
+gdb_verify: $(SRCDIR)/test/testsuite
+	echo >.gdbinit handle SIGUSR1 nostop noprint pass
+	echo >>.gdbinit run -m $(TMP_LIBDIR)/master.lpc $(SRCDIR)/test/test_lpc.lpc $(SRCDIR)/test/testsuite -v -v -f
+	gdb ./ulpc
+
+# run hilfe, for interactive testing
+run_hilfe:
+	$(RUNULPC) $(TMP_BINDIR)/hilfe
+
+# make export archive (requires compiled uLPC)
+# Do not compile in source tree if you want to use this!
+# Beware that export archive this includes bison/yacc/byacc source
+# and thus has to follow the rules stated in that code.
+export: $(SRCDIR)/test/testsuite new_peep_engine $(SRCDIR)/language.c $(SRCDIR)/language.h depend
+	chmod +x $(SRCDIR)/install-sh
+	$(RUNULPC) $(TMP_BINDIR)/export.lpc
+
+new_peep_engine:
+	$(RUNULPC) $(TMP_BINDIR)/mkpeep.lpc $(SRCDIR)/peep.in >$(SRCDIR)/peep_engine.c
+
+peep_engine.c: peep.in
+	echo "" >$(SRCDIR)/peep_engine.c
+	-$(RUNULPC) $(TMP_BINDIR)/mkpeep.lpc $(SRCDIR)/peep.in >$(SRCDIR)/peep_engine.c
+
+# make dependencies (requires compiled uLPC)
+depend: language.c
+	gcc -MM $(PREFLAGS) $(SRCDIR)/*.c | $(FIXDEP) $(SRCDIR)
+	for a in $(MODULES) ; do ( cd $$a ; ${MAKE} $(MAKE_FLAGS) depend ) ; done
+
+docs:
+	mkdir docs
+
+html_docs: docs
+	$(RUNULPC) $(TMP_BINDIR)/htmlify_docs $(TMP_DOCDIR) docs
+
+#
+# uLPC internal targets
+#
+module_objects:
+	for a in $(MODULES) ; do ( cd $$a ; ${MAKE} $(MAKE_FLAGS) ) ; done
+
+lang.o: lang.c config.h object.h interpret.h program.h
+
+$(SRCDIR)/language.h: language.y
+	@echo "Expect 1 shift/reduce conflict."
+	$(YACC) $(YFLAGS) $(SRCDIR)/language.y
+	mv y.tab.c $(SRCDIR)/language.c
+	mv y.tab.h $(SRCDIR)/language.h
+
+$(SRCDIR)/language.c: language.h
+	touch $(SRCDIR)/language.c
+
+module.c: modlist.h
+
+configure: configure.in
+	cd $(SRCDIR) && autoconf
+
+config.status: configure
+	./config.status --recheck
+
+Makefile: Makefile.in config.status
+	./config.status
+
+machine.h: stamp-h
+
+stamp-h: machine.h.in config.status
+	./config.status
+
+modlist.h:
+	./config.status
+
+$(SRCDIR)/test/testsuite: $(SRCDIR)/test/create_testsuite
+	m4 <$(SRCDIR)/test/create_testsuite >$(SRCDIR)/test/testsuite
+
+
diff --git a/src/modules/files/Makefile.src b/src/modules/files/Makefile.src
new file mode 100644
index 0000000000000000000000000000000000000000..2366499c367626bf586c76bed68d6055e2259302
--- /dev/null
+++ b/src/modules/files/Makefile.src
@@ -0,0 +1,18 @@
+SRCDIR=@srcdir@
+VPATH=@srcdir@:@srcdir@/../..:../..
+PREFLAGS=-I. -I$(SRCDIR) -I$(SRCDIR)/../.. -I../..
+CFLAGS=$(PREFLAGS) $(OTHERFLAGS)
+
+FILES=file.o efuns.o socket.o
+
+files.a: $(FILES)
+	-rm -f files.a
+	ar cq files.a $(FILES)
+	-@RANLIB@ files.a
+
+clean:
+	-rm -f *.o *.a
+
+depend:
+	gcc -MM $(PREFLAGS) $(SRCDIR)/*.c | $(FIXDEP) $(SRCDIR)
+
diff --git a/src/modules/math/Makefile.src b/src/modules/math/Makefile.src
new file mode 100644
index 0000000000000000000000000000000000000000..919399491d100e05c2e6651a7516d333a8336417
--- /dev/null
+++ b/src/modules/math/Makefile.src
@@ -0,0 +1,17 @@
+SRCDIR=@srcdir@
+VPATH=@srcdir@:@srcdir@/../..:../..
+PREFLAGS=-I$(SRCDIR) -I$(SRCDIR)/../.. -I../..
+CFLAGS=$(PREFLAGS) $(OTHERFLAGS)
+
+FILES=math.o
+
+math.a: $(FILES)
+	-rm -f math.a
+	ar cq math.a $(FILES)
+	-@RANLIB@ math.a
+
+clean:
+	-rm -f *.o
+
+depend:
+	gcc -MM $(PREFLAGS) $(SRCDIR)/*.c | $(FIXDEP) $(SRCDIR)
diff --git a/src/modules/regexp/Makefile.src b/src/modules/regexp/Makefile.src
new file mode 100644
index 0000000000000000000000000000000000000000..0ca33fdcc447e431db40c7e52e44cd1eaabbe542
--- /dev/null
+++ b/src/modules/regexp/Makefile.src
@@ -0,0 +1,17 @@
+SRCDIR=@srcdir@
+VPATH=@srcdir@:@srcdir@/../..:../..
+PREFLAGS=-I$(SRCDIR) -I$(SRCDIR)/../.. -I../..
+CFLAGS=$(PREFLAGS) $(OTHERFLAGS)
+
+FILES=regexp.o glue.o
+
+regexp.a: $(FILES)
+	-rm -f regexp.a
+	ar cq regexp.a $(FILES)
+	-@RANLIB@ regexp.a
+
+clean:
+	-rm -f *.o *.a
+
+depend:
+	gcc -MM $(PREFLAGS) $(SRCDIR)/*.c | $(FIXDEP) $(SRCDIR)
diff --git a/src/modules/sprintf/Makefile.src b/src/modules/sprintf/Makefile.src
new file mode 100644
index 0000000000000000000000000000000000000000..a6a33e732228bf75a025a436b544148ff1480acf
--- /dev/null
+++ b/src/modules/sprintf/Makefile.src
@@ -0,0 +1,17 @@
+SRCDIR=@srcdir@
+VPATH=@srcdir@:@srcdir@/../..:../..
+PREFLAGS=-I$(SRCDIR) -I$(SRCDIR)/../.. -I../..
+CFLAGS=$(PREFLAGS) $(OTHERFLAGS)
+
+FILES=sprintf.o
+
+sprintf.a: $(FILES)
+	-rm -f sprintf.a
+	ar cq sprintf.a $(FILES)
+	-@RANLIB@ sprintf.a
+
+clean:
+	-rm -f *.o *.a
+
+depend:
+	gcc -MM $(PREFLAGS) $(SRCDIR)/*.c | $(FIXDEP) $(SRCDIR)