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