From 59fe24bce94505c1c9b0f9b1b5a7a4412b7760d2 Mon Sep 17 00:00:00 2001 From: Patrick Boeker Date: Wed, 15 Apr 2020 21:17:38 +0200 Subject: [PATCH] Fix up JVM backend to work again after the static nqp home changes While on it clean up support for non-relocatable JVM builds. --- tools/build/create-jvm-runner.pl | 65 +++++++++++++++++++++++--------- tools/templates/jvm/Makefile.in | 10 ++--- 2 files changed, 53 insertions(+), 22 deletions(-) diff --git a/tools/build/create-jvm-runner.pl b/tools/build/create-jvm-runner.pl index 3acf65cb3db..0f25f6db80d 100755 --- a/tools/build/create-jvm-runner.pl +++ b/tools/build/create-jvm-runner.pl @@ -6,12 +6,15 @@ use 5.008; use File::Spec; use File::Copy 'cp'; +use Cwd 'abs_path'; my $USAGE = "Usage: $0 \n"; my ($type, $destdir, $prefix, $static_nqp_home, $static_rakudo_home, $blib, $thirdpartyjars) = @ARGV or die $USAGE; +my $relocatable = $static_nqp_home eq '' && $static_rakudo_home eq ''; + my $debugger = 0; if ($type =~ /^(\w+)\-debug$/) { $type = $1; @@ -20,11 +23,21 @@ die "Invalid target type $type" unless $type eq 'dev' || $type eq 'install'; -my $cpsep = $^O eq 'MSWin32' ? ';' : ':'; -my $bat = $^O eq 'MSWin32' ? '.bat' : ''; - +my $cpsep = $^O eq 'MSWin32' ? ';' : ':'; +my $bat = $^O eq 'MSWin32' ? '.bat' : ''; my $nqplibdir = $^O eq 'MSWin32' ? File::Spec->catfile($static_nqp_home, 'lib') : File::Spec->catfile('${NQP_HOME}', 'lib'); -my $nqpjars = $^O eq 'MSWin32' ? $thirdpartyjars : join( $cpsep, map { $_ =~ s,$static_nqp_home,\${NQP_HOME},g; $_ } split($cpsep, $thirdpartyjars) ); + +my $nqpjars; +if ($^O eq 'MSWin32' || !$relocatable) { + $nqpjars = $thirdpartyjars; +} +elsif ($relocatable) { + my @thirdpartyjars = map { abs_path($_) } split($cpsep, $thirdpartyjars); + my $nqp_home = abs_path(File::Spec->catpath($prefix, 'share', 'nqp')); + @thirdpartyjars = map { $_ =~ s,$nqp_home,\${NQP_HOME},; $_ } @thirdpartyjars; + $nqpjars = join($cpsep, @thirdpartyjars); +} + my $bindir = $type eq 'install' ? File::Spec->catfile($prefix, 'bin') : $prefix; my $jardir = $type eq 'install' ? File::Spec->catfile($^O eq 'MSWin32' ? $static_rakudo_home : '${RAKUDO_HOME}', 'runtime') : $prefix; my $libdir = $type eq 'install' ? File::Spec->catfile($^O eq 'MSWin32' ? $static_rakudo_home : '${RAKUDO_HOME}', 'lib') : 'blib'; @@ -73,20 +86,38 @@ EOS +my $preamble; +if ($^O eq 'MSWin32') { + $preamble = '@'; +} +elsif ($type eq 'install') { + if ($relocatable) { + $preamble = $preamble_unix + . ": \${NQP_HOME:=\"\$DIR/../share/nqp\"}" + . ": \${NQP_JARS:=\"$nqpjars\"}" + . ": \${RAKUDO_HOME:=\"\$DIR/../share/perl6\"}" + . ": \${RAKUDO_JARS:=\"$rakudo_jars\"}" + . "exec "; + } + else { + $preamble = $preamble_unix + . ": \${NQP_HOME:=\"$static_nqp_home\"}" + . ": \${NQP_JARS:=\"$nqpjars\"}" + . ": \${RAKUDO_HOME:=\"$static_rakudo_home\"}" + . ": \${RAKUDO_JARS:=\"$rakudo_jars\"}" + . "exec "; + } +} +else { + $preamble = $preamble_unix + . "$NQP_LIB" + . ": \${NQP_HOME:=\"$static_nqp_home\"}" + . ": \${NQP_JARS:=\"$nqpjars\"}" + . ": \${RAKUDO_HOME:=\"$prefix\"}" + . ": \${RAKUDO_JARS:=\"$rakudo_jars\"}" + . "exec "; +} -my $preamble = $^O eq 'MSWin32' ? '@' : - $type eq 'install' -? $preamble_unix . ": \${NQP_HOME=\"\$DIR/../share/nqp\"} -: \${NQP_JARS:=\"$nqpjars\"} -: \${RAKUDO_HOME:=\"\$DIR/../share/perl6\"} -: \${RAKUDO_JARS:=\"$rakudo_jars\"} -exec " -: $preamble_unix . "$NQP_LIB -: \${NQP_HOME:=\"$static_nqp_home\"} -: \${NQP_JARS:=\"$nqpjars\"} -: \${RAKUDO_HOME:=\"$prefix\"} -: \${RAKUDO_JARS:=\"$rakudo_jars\"} -exec "; my $postamble = $^O eq 'MSWin32' ? ' %*' : ' "$@"'; sub install { diff --git a/tools/templates/jvm/Makefile.in b/tools/templates/jvm/Makefile.in index c8f8b5b9eb7..9bd4c30f606 100644 --- a/tools/templates/jvm/Makefile.in +++ b/tools/templates/jvm/Makefile.in @@ -45,7 +45,7 @@ $(RUNTIME_JAR): $(RUNTIME_JAVAS) $(J_RUNNER): @@script(create-jvm-runner.pl)@@ @echo(+++ Setting up $@)@ - $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ dev . . @q(@bpm(NQP_HOME)@)@ @q($(RAKUDO_HOME))@ --nqp-lib=blib @q($(NQP_JARS))@ + $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ dev . . @q(@static_nqp_home@)@ @q(@static_rakudo_home@)@ --nqp-lib=blib @q($(NQP_JARS))@ @backend_prefix@-runner-default: @backend_prefix@-all @echo(+++ Setting up @uc(@backend@)@ runner)@ @@ -54,7 +54,7 @@ $(J_RUNNER): @@script(create-jvm-runner.pl)@@ @bpm(DEBUG_RUNNER)@: @@script(create-jvm-runner.pl)@@ @bsm(RAKUDO_DEBUG)@ @echo(+++ Setting up $@)@ - $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ dev-debug . . @q(@bpm(NQP_HOME)@)@ @q($(RAKUDO_HOME))@ --nqp-lib=blib @q($(NQP_JARS))@ + $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ dev-debug . . @q(@static_nqp_home@)@ @q(@static_rakudo_home@)@ --nqp-lib=blib @q($(NQP_JARS))@ eval-client.pl: @echo(+++ Setting up $@)@ @@ -84,14 +84,14 @@ sometests: @backend_prefix@-all @backend_prefix@-runner-default-install: @backend_prefix@-install @echo(+++ Installing @uc(@backend@)@ launcher)@ - $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install @q($(DESTDIR))@ @q($(PREFIX))@ @q(@bpm(NQP_HOME)@)@ @q($(RAKUDO_HOME))@ "" @q($(NQP_JARS))@ + $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install @q($(DESTDIR))@ @q($(PREFIX))@ @q(@static_nqp_home@)@ @q(@static_rakudo_home@)@ "" @q($(NQP_JARS))@ $(NOECHO)$(CP) @nfpq($(DESTDIR)$(PREFIX)/bin/rakudo-j$(J_BAT))@ @nfpq($(DESTDIR)$(PREFIX)/bin/rakudo$(J_BAT))@ $(NOECHO)$(CHMOD) 755 @nfpq($(DESTDIR)$(PREFIX)/bin/rakudo$(J_BAT))@ @backend_prefix@-install-main:: $(RUNTIME_JAR) @@script(create-jvm-runner.pl)@@ $(NOECHO)$(CP) $(RUNTIME_JAR) @nfpq($(DESTDIR)$(RAKUDO_HOME)/runtime)@ - $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install @q($(DESTDIR))@ @q($(PREFIX))@ @q(@bpm(NQP_HOME)@)@ @q($(NQP_PREFIX))@ "" @q($(NQP_JARS))@ - $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install-debug @q($(DESTDIR))@ @q($(PREFIX))@ @q(@bpm(NQP_HOME)@)@ @q($(NQP_PREFIX))@ "" @q($(NQP_JARS))@ + $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install @q($(DESTDIR))@ @q($(PREFIX))@ @q(@static_nqp_home@)@ @q($(NQP_PREFIX))@ "" @q($(NQP_JARS))@ + $(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install-debug @q($(DESTDIR))@ @q($(PREFIX))@ @q(@static_nqp_home@)@ @q($(NQP_PREFIX))@ "" @q($(NQP_JARS))@ ## cleaning @backend_prefix@-clean: