#!/usr/bin/perl -w use strict; my $outfile = shift || usage (); my $soname = shift || usage (); my $dllname = shift || usage (); my @symbols = (); my %excludes = (); my $cmd = "nm -D $soname"; @excludes {qw( mono_class_setup_vtable_general_new mono_debugger_init mono_debugger_main mono_once mono_pthread_key_for_tls mono_gc_pthread_create mono_gc_pthread_detach mono_gc_pthread_join mono_gc_pthread_exit mono_file_map_fileio mono_file_unmap_fileio mono_file_map_set_allocator )} = (); open (SYMS, "$cmd |") || die "Cannot run \$cmd': $!\n"; while () { next unless / T (mono_.*)/; next if exists $excludes {$1}; push @symbols, $1; } close (SYMS); push @symbols, "MonoFixupCorEE"; @symbols = sort @symbols; open (OUT, ">$outfile") || die "Cannot open '$outfile': $!\n"; print OUT "; file generated by create-windef.pl\n"; print OUT "EXPORTS\n"; print OUT join ("\n", @symbols); print OUT "\n"; close (OUT); sub usage { print "Usage: create-windef.pl output_file soname dllname\n"; exit (1); }