Inline-Java

 view release on metacpan or  search on metacpan

lib/Inline/Java.pm  view on Meta::CPAN


	foreach my $a (@_){
		if ($a eq 'jar'){
			print Inline::Java::Portable::get_server_jar();
			exit();
		}
		elsif ($a eq 'j2sdk'){
			print Inline::Java->find_default_j2sdk() . " says '" .
				Inline::Java::get_default_j2sdk() . "'\n";
			exit();
		}
		elsif ($a eq 'so_dirs'){
			print Inline::Java::Portable::portable('SO_LIB_PATH_VAR') . "=" . 
				join(Inline::Java::Portable::portable('ENV_VAR_PATH_SEP'), 
				Inline::Java::get_default_j2sdk_so_dirs());
			exit();
		}
	}
    $class->export_to_level(1, $class, @_);
}



######################## Inline interface ########################



# Register this module as an Inline language support module
sub register {
	return {
		language => 'Java',
		aliases => ['JAVA', 'java'],
		type => 'interpreted',
		suffix => 'jdat',
	};
}


# Here validate is overridden because some of the config options are needed
# at load as well.
sub validate {
	my $o = shift;

	# This might not print since debug is set further down...
	Inline::Java::debug(1, "Starting validate.");
	
	my $jdk = Inline::Java::get_default_j2sdk();
	my $dbg = $Inline::Java::DEBUG;
	my %opts = @_;
	$o->set_option('DEBUG',					$dbg,			'i', 1, \%opts);
	$o->set_option('J2SDK',					$jdk,			's', 1, \%opts);
	$o->set_option('CLASSPATH',				'',				's', 1, \%opts);

	$o->set_option('BIND',					'localhost',	's', 1, \%opts);
	$o->set_option('HOST',					'localhost',	's', 1, \%opts);
	$o->set_option('PORT',					-1,				'i', 1, \%opts);
	$o->set_option('STARTUP_DELAY',			15,				'i', 1, \%opts);
	$o->set_option('SHARED_JVM',			0,				'b', 1, \%opts);
	$o->set_option('START_JVM',				1,				'b', 1, \%opts);
	$o->set_option('JNI',					0,				'b', 1, \%opts);
	$o->set_option('EMBEDDED_JNI',			0,				'b', 1, \%opts);
	$o->set_option('NATIVE_DOUBLES',		0,				'b', 1, \%opts);

	$o->set_option('WARN_METHOD_SELECT',	0,				'b', 1, \%opts);
	$o->set_option('STUDY',					undef,			'a', 0, \%opts);
	$o->set_option('AUTOSTUDY',				0,				'b', 1, \%opts);

	$o->set_option('EXTRA_JAVA_ARGS',		'',				's', 1, \%opts);
	$o->set_option('EXTRA_JAVAC_ARGS',		'',				's', 1, \%opts);
	$o->set_option('DEBUGGER',				0,				'b', 1, \%opts);

	$o->set_option('PRIVATE',				'',				'b', 1, \%opts);
	$o->set_option('PACKAGE',				'',				's', 1, \%opts);

	my @left_overs = keys(%opts);
	if (scalar(@left_overs)){
		croak "'$left_overs[0]' is not a valid configuration option for Inline::Java";
	}

	# Now for the post processing
	$Inline::Java::DEBUG = $o->get_java_config('DEBUG');

	# Embedded JNI turns on regular JNI
	if ($o->get_java_config('EMBEDDED_JNI')){
		$o->set_java_config('JNI', 1);
	}

	if ($o->get_java_config('PORT') == -1){
		if ($o->get_java_config('SHARED_JVM')){
			$o->set_java_config('PORT', 7891);
		}
		else{
			$o->set_java_config('PORT', -7890);
		}
	}

	if (($o->get_java_config('JNI'))&&($o->get_java_config('SHARED_JVM'))){
		croak("You can't use the 'SHARED_JVM' option in 'JNI' mode");
	}
	if (($o->get_java_config('JNI'))&&($o->get_java_config('DEBUGGER'))){
		croak("You can't invoke the Java debugger ('DEBUGGER' option) in 'JNI' mode");
	}
	if ((! $o->get_java_config('SHARED_JVM'))&&(! $o->get_java_config('START_JVM'))){
		croak("Disabling the 'START_JVM' option only makes sense in 'SHARED_JVM' mode");
	}

	if ($o->get_java_config('JNI')){
		require Inline::Java::JNI;
	}

	if ($o->get_java_config('DEBUGGER')){
		# Here we want to tweak a few settings to help debugging...
		Inline::Java::debug(1, "Debugger mode activated");
		# Add the -g compile option
		$o->set_java_config('EXTRA_JAVAC_ARGS', $o->get_java_config('EXTRA_JAVAC_ARGS') . " -g ");
		# Add the -sourcepath runtime option
		$o->set_java_config('EXTRA_JAVA_ARGS', $o->get_java_config('EXTRA_JAVA_ARGS') .
			" -sourcepath " . $o->get_api('build_dir') .
			Inline::Java::Portable::portable("ENV_VAR_PATH_SEP_CP") .
			Inline::Java::Portable::get_source_dir()
		);
	}	

	my $study = $o->get_java_config('STUDY');
	if ((defined($study))&&(ref($study) ne 'ARRAY')){
		croak "Configuration option 'STUDY' must be an array of Java class names";
	}

	Inline::Java::debug(1, "validate done.");
}


sub set_option {
	my $o = shift;
	my $name = shift;
	my $default = shift;
	my $type = shift;
	my $env_or = shift;
	my $opts = shift;
	my $desc = shift;

	if (! exists($o->{ILSM}->{$name})){
		my $val = undef;
		if (($env_or)&&(exists($ENV{"PERL_INLINE_JAVA_$name"}))){



( run in 0.697 second using v1.01-cache-2.11-cpan-71847e10f99 )