make compile
diff --git a/src/cmd/mpm/mkfile b/src/cmd/mpm/mkfile
index 5c9df7d..9a8a7f6 100644
--- a/src/cmd/mpm/mkfile
+++ b/src/cmd/mpm/mkfile
@@ -12,7 +12,8 @@
 LD=g++
 
 <$PLAN9/src/mkone
-CFLAGS=
+CC=g++
+CFLAGS=-c
 
 slug.$O:	slug.h
 range.$O:	range.h slug.h
diff --git a/src/cmd/mpm/range.h b/src/cmd/mpm/range.h
index 401035a..54994cd 100644
--- a/src/cmd/mpm/range.h
+++ b/src/cmd/mpm/range.h
@@ -18,6 +18,7 @@
   public:
 	range()		{ first = 0; accumV = 0; }
 	range(slug *p)	{ first = p; accumV = 0; }
+	virtual ~range() { }
 	char	*headstr()		{
 		return first ? first->headstr() : (char*)""; }
 	char	*typename()		{ return first->typename(); }
@@ -307,6 +308,7 @@
 
 extern stream	ptlist, btlist;		// page titles
 
+#undef INFINITY
 #define INFINITY 1000001
 
 // A queue is a distinguished kind of stream.
diff --git a/src/cmd/mpm/slug.cc b/src/cmd/mpm/slug.cc
index b4ae0ff..92d48db 100644
--- a/src/cmd/mpm/slug.cc
+++ b/src/cmd/mpm/slug.cc
@@ -1,7 +1,6 @@
 #include	"misc.h"
 #include	"slug.h"
 #include	<math.h>
-#include	<utf.h>
 
 static char	*bufptr(int);
 
@@ -149,6 +148,19 @@
 		addc(*p);
 }
 
+static int fullrune(char *c, int n)
+{
+	if(n <= 0)
+		return 0;
+	if(n>=1 && (unsigned char)c[0] < 0x80)
+		return 1;
+	if(n>=2 && (unsigned char)c[0] < 0xE0)
+		return 1;
+	if(n>=3)
+		return 1;
+	return 0;
+}
+
 static char *getutf(FILE *fp)	// get 1 utf-encoded char (might be multiple bytes)
 {
 	static char buf[100];