# Tests for ClassLoader and native library loader code.

# Compute the correct name for an object file.
# This is an awful hack.
proc gcj_object_file_name {compiler base} {
  verbose "OBJECT: compiler = $compiler"
  if {[string match *libtool* $compiler]} {
    return $base.lo
  }
  return $base.o
}

# Do all the work for a single JNI test.  Return 0 on failure.
proc gcj_loader_test_one {srcfile} {
  global objdir srcdir subdir

  set resfile $srcdir/$subdir/[file rootname [file tail $srcfile]].out

  regsub "^.*/(\[^/.\]+)\[.\]\[^/]*$" "$srcfile" "\\1" out
  set executable "${objdir}/$out.exe"

  set errname [file rootname [file tail $srcfile]]
  set args [libjava_arguments link]
  lappend args "additional_flags=--main=[file rootname [file tail $srcfile]] $srcdir/$subdir/MyLoader.java $objdir/[gcj_object_file_name $args dummy]"
  set x [libjava_prune_warnings \
	     [libjava_tcompile $srcfile "$executable" executable $args]]

    if { $x != "" } {
	verbose "target_compile failed: $x" 2

	fail "$errname compilation from source"
	untested "$errname execution from source compiled test"
	return
    }
    pass "$errname compilation from source"

    libjava_invoke $executable $executable "" $executable "" $resfile ""

  return 1
}

# Run the bytecode loader tests.
proc gcj_loader_run {} {
  global srcdir subdir objdir
  global build_triplet host_triplet
  global GCJ_UNDER_TEST

  set file "${srcdir}/${subdir}/dummy.java"
  if {! [bytecompile_file $file [pwd]]} {
    fail "bytecompile $file"
    # FIXME - should use `untested' on all remaining tests.
    # But that is hard.
    return 0
  }
  pass "bytecompile $file"

  set args [libjava_arguments compile]
  lappend args "additional_flags=--resource $objdir/dummy.class"
  set x [libjava_prune_warnings \
	   [libjava_tcompile "$objdir/dummy.class" "$objdir/[gcj_object_file_name $args dummy]" object $args]]

    if { $x != "" } {
	verbose "resource compilation failed: $x" 2

	fail "resource compilation dummy.class"
	return 0;
    }
  pass "resource compilation: dummy.class"

  catch { lsort [glob -nocomplain ${srcdir}/${subdir}/Test*.java] } srcfiles

  foreach x $srcfiles {
    gcj_loader_test_one $x
  }
}

gcj_loader_run
