Re: invoking JPL on the perl side

[email protected] Mon, 26 Feb 2001 14:10:55 -0800 (PST)
Newsgroups perl.jpl
Message-ID <[email protected]>
> Has anyone actually got jpl to work as a perl program with Java embedded
> in it. It says in Appendix A of the perl utilities guide (from the Perl
> unix resource kit) that this is theoretically doable, or should be as soon
> as native threads are supported. Native threads are supported in the JDK I
> run ( 1.1.8_12 on Solaris 2.5.1, 2.6 and 2.7) but whenever I run:

> perl ButtonExample.pl

> I get the annoying message:

> You must install a Solaris patch to run this version of the Java runtime.
> Please see the README and release notes for more information.
> Exiting.

> Is what I am trying to do feesible? I have installed all the recommended
> patches in the README.sparc file that came with 1.1.8_12 but no luck.

I'm suprised  you see this particular message if you're got all 
the requisite patches.  That pest departed on my system once I 
had patches installed.  But, even, on Solaris 2.6 with all the 
patches and native threads, I generate the core Appendix A warns 
about when trying to embed java in perl. 

However, if any consolation can be found, with jdk1.3 and 
Jarkko's core patch, the ButtonExample worked the other way:  
perl embeddded in java.   

[ I'm including Jarkko's patch in case you're interested in
  rebuilding Perl before the patch enters the mainstream. ] 

Rgds,
--
Charles DeRykus

Change 8803 by jhi@alpha on 2001/02/14 03:14:14

	Duplicate environment for JPL so that JDK 1.2/1.3 don't get upset.

Affected files ...

... //depot/perl/perl.c#300 edit
... //depot/perl/perl.h#315 edit

Differences ...

==== //depot/perl/perl.c#300 (text) ====
Index: perl/perl.c
--- perl/perl.c.~1~	Wed Feb 14 05:19:55 2001
+++ perl/perl.c	Wed Feb 14 05:19:55 2001
@@ -3257,6 +3257,8 @@
     char *s;
     SV *sv;
     GV* tmpgv;
+    char **dup_env_base = 0;
+    int dup_env_count = 0;
 
     argc--,argv++;	/* skip name of script */
     if (PL_doswitches) {
@@ -3325,6 +3327,23 @@
 	    env = environ;
 	if (env != environ)
 	    environ[0] = Nullch;
+#ifdef NEED_ENVIRON_DUP_FOR_MODIFY
+	{
+	    char **env_base;
+	    for (env_base = env; *env; env++) 
+		dup_env_count++;
+	    if ((dup_env_base = (char **)
+		 safemalloc( sizeof(char *) * (dup_env_count+1) ))) {
+		char **dup_env;
+		for (env = env_base, dup_env = dup_env_base;
+		     *env;
+		     env++, dup_env++)
+		    *dup_env = savepv(*env);
+		*dup_env = Nullch;
+		env = dup_env_base;
+	    } /* else what? */
+	}
+#endif /* NEED_ENVIRON_DUP_FOR_MODIFY */
 	for (; *env; env++) {
 	    if (!(s = strchr(*env,'=')))
 		continue;
@@ -3340,7 +3359,13 @@
 	    (void)PerlEnv_putenv(savepv(*env));
 #endif
 	}
-#endif
+	if (dup_env_base) {
+	    char **dup_env;
+	    for (dup_env = dup_env_base; *dup_env; dup_env++)
+		Safefree(*dup_env);
+	    Safefree(dup_env_base);
+	}
+#endif /* USE_ENVIRON_ARRAY */
 #ifdef DYNAMIC_ENV_FETCH
 	HvNAME(hv) = savepv(ENV_HV_NAME);
 #endif

==== //depot/perl/perl.h#315 (text) ====
Index: perl/perl.h
--- perl/perl.h.~1~	Wed Feb 14 05:19:55 2001
+++ perl/perl.h	Wed Feb 14 05:19:55 2001
@@ -1692,6 +1692,13 @@
 #  define USE_ENVIRON_ARRAY
 #endif
 
+#ifdef JPL
+    /* E.g. JPL needs to operate on a copy of the real environment.
+     * JDK 1.2 and 1.3 seem to get upset if the original environment
+     * is diddled with. */
+#   define NEED_ENVIRON_DUP_FOR_MODIFY
+#endif
+
 #ifndef PERL_SYS_INIT3
 #  define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
 #endif
End of Patch.


-- 
$jhi++; # http://www.iki.fi/jhi/
        # There is this special biologist word we use for 'stable'.
        # It is 'dead'. -- Jack Cohen