It causes testeina.c build to fail linking to internal eina_.*_{init,shutdown} symbols
as reported in:
http://lists.alioth.debian.org/pipermail/pkg-fso-maint/2010-May/003056.html

Upstream-Status: Pending

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>

diff -uNr vala/tests/testeina.vala ../../../arm920tt-oe-linux-gnueabi/libeflvala/1_2011.01.13.1+svnr82070-r2/vala/tests/testeina.vala
--- vala/tests/testeina.vala	2014-01-13 16:16:53.984999035 +0100
+++ ../../../arm920tt-oe-linux-gnueabi/libeflvala/1_2011.01.13.1+svnr82070-r2/vala/tests/testeina.vala	2010-02-26 09:02:06.000000000 +0100
@@ -153,22 +153,22 @@
 
 void test_eina_benchmark()
 {
-    assert( Eina.Module.init() );
-    assert( Eina.List.init() );
-    assert( Eina.Array.init() );
-    assert( Eina.Benchmark.init() );
-    assert( Eina.Mempool.init() );
+//  assert( Eina.Module.init() );
+//  assert( Eina.List.init() );
+//  assert( Eina.Array.init() );
+//  assert( Eina.Benchmark.init() );
+//  assert( Eina.Mempool.init() );
     var b = new Eina.Benchmark( "test", "test");
     assert( b.register( "bogus", spec_one, 0, 100, 5 ) );
     unowned Eina.Array<string> result = b.run();
     assert( result.count_get() == 2 );
     result = null;
     b = null;
-    assert( Eina.Mempool.shutdown() );
-    assert( Eina.Benchmark.shutdown() );
-    assert( Eina.Array.shutdown() );
-    assert( Eina.List.shutdown() );
-    assert( Eina.Module.shutdown() );
+//  assert( Eina.Mempool.shutdown() );
+//  assert( Eina.Benchmark.shutdown() );
+//  assert( Eina.Array.shutdown() );
+//  assert( Eina.List.shutdown() );
+//  assert( Eina.Module.shutdown() );
 }
 
 //===========================================================================
