Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fri Nov 24 17:01:27 CET 2006 Paolo Molaro <lupus@ximian.com>

	* Makefile, configure: added configure script and install/dist target.
	* coverage.c: updated to not require access to mono internals.


svn path=/trunk/monocov/; revision=68435
  • Loading branch information...
commit ed58314d3ba66277261508388bcd017cc31457d3 1 parent 700a359
@illupus illupus authored
Showing with 129 additions and 40 deletions.
  1. +5 −0 ChangeLog
  2. +3 −8 MANIFEST
  3. +20 −2 Makefile
  4. +59 −0 configure
  5. +42 −30 coverage.c
View
5 ChangeLog
@@ -1,4 +1,9 @@
+Fri Nov 24 17:01:27 CET 2006 Paolo Molaro <lupus@ximian.com>
+
+ * Makefile, configure: added configure script and install/dist target.
+ * coverage.c: updated to not require access to mono internals.
+
Fri Nov 24 16:25:51 CET 2006 Paolo Molaro <lupus@ximian.com>
* CoverageModel.cs: updated to use Cecil to load assemblies
View
11 MANIFEST
@@ -3,6 +3,7 @@ README
LICENSE
ChangeLog
Makefile
+configure
CoverageItem.cs
NamespaceCoverageItem.cs
ClassCoverageItem.cs
@@ -14,18 +15,12 @@ HtmlExporter.cs
MonoCovMain.cs
style.xsl
trans.gif
-gui/qt/MonoCov.cs
-gui/qt/CoverageView.cs
-gui/qt/SourceWindow.cs
-gui/qt/FilterDialog.cs
-gui/qt/filterdialog.ui
gui/gtk/MonoCov.cs
gui/gtk/CoverageView.cs
+gui/gtk/SourceWindow.cs
gui/gtk/monocov.glade
+gui/gtk/monocov.gladep
test.cs
symbols.cs
nunit-console.cs
coverage.c
-Qt-monocov.dll
-qtsharp.diff
-corlib-tests.cov
View
22 Makefile
@@ -1,7 +1,7 @@
+include config.make
PROJECTNAME = monocov
GUI = gtk
-MONO_ROOT = ../mono
LIBS=-r:Mono.Cecil
all: monocov.exe libmono-profiler-monocov.so symbols.exe
@@ -51,7 +51,14 @@ nunit-console.exe: nunit-console.cs
gmcs -r:nunit.framework -r:nunit.core -r:nunit.util -r:Mono.GetOptions nunit-console.cs
libmono-profiler-monocov.so: coverage.c
- $(CC) -g -I$(MONO_ROOT) `pkg-config --cflags glib-2.0` --shared -fPIC -o $@ $^
+ $(CC) -g `pkg-config --cflags glib-2.0` --shared -fPIC -o $@ $^
+
+install: all
+ mkdir -p $(prefix)/lib/monocov
+ cp Mono.Cecil.dll $(prefix)/lib/monocov
+ cp monocov.exe $(prefix)/lib/monocov
+ cp monocov $(prefix)/bin
+ cp libmono-profiler-monocov.so $(prefix)/lib/monocov
test:
gmcs -debug test.cs
@@ -80,5 +87,16 @@ test-colorizer.exe: test-colorizer.cs SyntaxHighlighter.cs
clean:
rm -f monocov.exe monocov.exe.mdb symbols.exe symbols.exe.mdb nunit-console.exe libmono-profiler-monocov.so
+distclean:
+ rm -f monocov Mono.Cecil.dll config.make
+
+dist:
+ tar -chzf $(PROJECTNAME)-$(VERSION).tar.gz `cat MANIFEST` \
+ && DIRNAME=$(PROJECTNAME)-$(VERSION) && rm -rf $$DIRNAME \
+ && mkdir $$DIRNAME && mv $(PROJECTNAME)-$(VERSION).tar.gz $$DIRNAME \
+ && cd $$DIRNAME && tar -xzf $(PROJECTNAME)-$(VERSION).tar.gz \
+ && rm $(PROJECTNAME)-$(VERSION).tar.gz && cd - && tar -cvzf $$DIRNAME.tar.gz $$DIRNAME \
+ && rm -rf $$DIRNAME
+
distrib:
tar -cvhzf $(PROJECTNAME).tar.gz `cat MANIFEST` && DIRNAME=$(PROJECTNAME)-`date +%d-%b-%y` && rm -rf $$DIRNAME && mkdir $$DIRNAME && mv $(PROJECTNAME).tar.gz $$DIRNAME && cd $$DIRNAME && tar -xzf $(PROJECTNAME).tar.gz && rm $(PROJECTNAME).tar.gz && cd - && tar -cvzf $$DIRNAME.tar.gz $$DIRNAME && rm -rf $$DIRNAME
View
59 configure
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+VERSION=0.1
+
+help()
+{
+ echo ""
+ echo "Usage is: configure [--prefix=PREFIX]"
+ echo ""
+}
+
+prefix=/usr/local
+
+while [ $# -ne 0 ]; do
+ case $1 in
+ --help)
+ help
+ exit 0
+ ;;
+ --prefix=*)
+ prefix=`echo $1 | sed 's/--prefix=//'`;
+ shift
+ ;;
+ --prefix)
+ shift
+ prefix="$1"
+ shift
+ ;;
+ *)
+ echo Unknown option: $1
+ help
+ shift
+ esac
+done
+
+cecilbin=`pkg-config --variable=Libraries mono-cecil`
+
+if test -z $cecilbin; then
+ echo "Cecil is not installed."
+ exit 1
+fi
+
+# copy Mono.Cecil here
+cp $cecilbin .
+
+echo "prefix=$prefix" > config.make
+echo "VERSION=$VERSION" > config.make
+
+echo "#!/bin/sh" > monocov
+echo "exec mono $prefix/lib/monocov/monocov.exe \$@" >> monocov
+chmod +x monocov
+
+echo ""
+echo "MonoCov module configured"
+echo ""
+echo " Prefix: $prefix"
+echo ""
+
+exit 0;
View
72 coverage.c
@@ -2,15 +2,13 @@
#include <stdio.h>
#include <string.h>
#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
-#include "mono/metadata/tabledefs.h"
-#include "mono/metadata/class.h"
-#include "mono/metadata/mono-debug.h"
-#include "mono/metadata/debug-helpers.h"
-#include "mono/metadata/profiler.h"
-
-#include "mono/metadata/metadata-internals.h"
-#include "mono/metadata/class-internals.h"
+#include <mono/metadata/class.h>
+#include <mono/metadata/assembly.h>
+#include <mono/metadata/debug-helpers.h>
+#include <mono/metadata/profiler.h>
struct _MonoProfiler {
/* Contains the methods for which we have coverage data */
@@ -136,27 +134,34 @@ collect_coverage_for (MonoProfiler *prof, MonoMethod *method)
char *fqn;
MonoMethodHeader *header;
gboolean has_positive, found;
+ guint32 iflags, flags, code_size;
+ MonoClass *klass;
+ MonoImage *image;
- if ((method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) ||
- (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL))
+ flags = mono_method_get_flags (method, &iflags);
+ if ((iflags & 0x1000 /*METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL*/) ||
+ (flags & 0x2000 /*METHOD_ATTRIBUTE_PINVOKE_IMPL*/))
return FALSE;
- if (method->wrapper_type != MONO_WRAPPER_NONE)
- return FALSE;
+ //if (method->wrapper_type != MONO_WRAPPER_NONE)
+ // return FALSE;
+ klass = mono_method_get_class (method);
+ image = mono_class_get_image (klass);
/* Hacky way of determining the executing assembly */
- if (! prof->outfile_name && (strcmp (method->name, "Main") == 0))
- prof->outfile_name = g_strdup_printf ("%s.cov", method->klass->image->assembly->image->name);
+ if (! prof->outfile_name && (strcmp (mono_method_get_name (method), "Main") == 0)) {
+ prof->outfile_name = g_strdup_printf ("%s.cov", mono_image_get_filename (image));
+ }
/* Check filters */
if (prof->filters) {
/* Check already filtered classes first */
- if (g_hash_table_lookup (prof->filtered_classes, method->klass))
+ if (g_hash_table_lookup (prof->filtered_classes, klass))
return FALSE;
- classname = mono_type_get_name (&method->klass->byval_arg);
+ classname = mono_type_get_name (mono_class_get_type (klass));
- fqn = g_strdup_printf ("[%s]%s", method->klass->image->assembly_name, classname);
+ fqn = g_strdup_printf ("[%s]%s", mono_image_get_name (image), classname);
// Check positive filters first
has_positive = FALSE;
@@ -184,7 +189,7 @@ collect_coverage_for (MonoProfiler *prof, MonoMethod *method)
// Skip '-'
filter = &filter [1];
if (strstr (fqn, filter) != NULL) {
- g_hash_table_insert (prof->filtered_classes, method->klass, method->klass);
+ g_hash_table_insert (prof->filtered_classes, klass, klass);
return FALSE;
}
}
@@ -192,19 +197,20 @@ collect_coverage_for (MonoProfiler *prof, MonoMethod *method)
g_free (classname);
}
- header = ((MonoMethodNormal *)method)->header;
+ header = mono_method_get_header (method);
- if (header->code_size > 20000) {
+ mono_method_header_get_code (header, &code_size, NULL);
+ if (code_size > 20000) {
exit (1);
- g_warning ("Unable to instrument method %s:%s since it is too complex.", method->klass->name, method->name);
+ g_warning ("Unable to instrument method %s:%s since it is too complex.", mono_class_get_name (klass), mono_method_get_name (method));
return FALSE;
}
g_hash_table_insert (prof->methods, method, method);
- g_hash_table_insert (prof->classes, method->klass, method->klass);
+ g_hash_table_insert (prof->classes, klass, klass);
- g_hash_table_insert (prof->assemblies, method->klass->image->assembly, method->klass->image->assembly);
+ g_hash_table_insert (prof->assemblies, mono_image_get_assembly (image), mono_image_get_assembly (image));
return TRUE;
}
@@ -242,7 +248,9 @@ output_filters (MonoProfiler *prof, FILE *outfile)
static void
output_assembly (MonoAssembly *assembly, MonoAssembly *assembly2, FILE *outfile)
{
- fprintf (outfile, "\t<assembly name=\"%s\" guid=\"%s\" filename=\"%s\"/>\n", assembly->image->assembly_name, assembly->image->guid, mono_image_get_filename (assembly->image));
+ MonoImage *image = mono_assembly_get_image (assembly);
+ fprintf (outfile, "\t<assembly name=\"%s\" guid=\"%s\" filename=\"%s\"/>\n",
+ mono_image_get_name (image), mono_image_get_guid (image), mono_image_get_filename (image));
}
static int count;
@@ -267,19 +275,23 @@ output_method (MonoMethod *method, gpointer dummy, MonoProfiler *prof)
char *classname;
char *tmpsig;
FILE *outfile;
+ MonoClass *klass;
+ MonoImage *image;
outfile = prof->outfile;
- header = ((MonoMethodNormal *)method)->header;
+ header = mono_method_get_header (method);
- tmpsig = mono_signature_get_desc (method->signature, TRUE);
+ tmpsig = mono_signature_get_desc (mono_method_signature (method), TRUE);
tmpsig = g_markup_escape_text (tmpsig, strlen (tmpsig));
- classname = mono_type_get_name (&method->klass->byval_arg);
+ klass = mono_method_get_class (method);
+ classname = mono_type_get_name (mono_class_get_type (klass));
+ image = mono_class_get_image (klass);
fprintf (outfile, "\t<method assembly=\"%s\" class=\"%s\" name=\"%s (%s)\" token=\"%d\">\n",
- method->klass->image->assembly_name,
- classname, method->name,
- tmpsig, method->token);
+ mono_image_get_name (image),
+ classname, mono_method_get_name (method),
+ tmpsig, mono_method_get_token (method));
g_free (tmpsig);
fprintf (outfile, "\t\t");
Please sign in to comment.
Something went wrong with that request. Please try again.