Skip to content

Commit

Permalink
Merge pull request #3889 from patrickbkr/fix-reloc-build-nqp-home
Browse files Browse the repository at this point in the history
Fix relocatable build-time NQP-home
  • Loading branch information
patrickbkr committed Sep 11, 2020
2 parents e65466f + 077f8f9 commit c5cffd4
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 14 deletions.
16 changes: 10 additions & 6 deletions tools/build/create-jvm-runner.pl
Expand Up @@ -8,9 +8,9 @@
use File::Copy 'cp';
use Cwd 'abs_path';

my $USAGE = "Usage: $0 <type> <destdir> <prefix> <nqp-home> <rakudo-home> <third party jars>\n";
my $USAGE = "Usage: $0 <type> <basedir> <destdir> <prefix> <build-time-nqp-home> <nqp-home> <rakudo-home> <third party jars>\n";

my ($type, $destdir, $prefix, $static_nqp_home, $static_rakudo_home, $thirdpartyjars) = @ARGV
my ($type, $basedir, $destdir, $prefix, $nqp_home, $static_nqp_home, $static_rakudo_home, $thirdpartyjars) = @ARGV
or die $USAGE;

my $relocatable = $static_nqp_home eq '' && $static_rakudo_home eq '';
Expand All @@ -28,15 +28,14 @@
my $nqplibdir = $^O eq 'MSWin32' ? File::Spec->catfile($static_nqp_home, 'lib') : File::Spec->catfile('${NQP_HOME}', 'lib');

my $nqpjars;
if ($^O eq 'MSWin32') {
if ($^O eq 'MSWin32' || $type ne 'install') {
$nqpjars = $thirdpartyjars;
}
else {
# The following is a workaround turning the third-party JARS into relative
# paths. The clean solution would be to pass in relative paths and only
# prefix those with ${NQP_HOME} here.
my @thirdpartyjars = map { abs_path($_) } split($cpsep, $thirdpartyjars);
my $nqp_home = File::Spec->catdir(abs_path($prefix), 'share', 'nqp');
@thirdpartyjars = map { $_ =~ s,$nqp_home,\${NQP_HOME},; $_ } @thirdpartyjars;
$nqpjars = join($cpsep, @thirdpartyjars);
}
Expand Down Expand Up @@ -118,12 +117,17 @@
}
}
else {
# Hack: Explicitly set a dummy RAKUDO_HOME, so the autogenerated
# CompUnitRepo folder structure does not end up in the build directories
# parent folder.
my $rakudo_home = "$basedir/gen/build_rakudo_home";

$preamble = join("\n",
$preamble_unix,
"$NQP_LIB",
": \${NQP_HOME:=\"$static_nqp_home\"}",
"NQP_HOME=\"$nqp_home\"",
": \${NQP_JARS:=\"$nqpjars\"}",
": \${RAKUDO_HOME:=\"$prefix\"}",
"RAKUDO_HOME=\"$rakudo_home\"",
": \${RAKUDO_JARS:=\"$rakudo_jars\"}",
"exec "
);
Expand Down
7 changes: 7 additions & 0 deletions tools/lib/NQP/Config/Rakudo.pm
Expand Up @@ -161,6 +161,13 @@ sub configure_refine_vars {
)
);

$config->{nqp_home} = $self->nfp(
File::Spec->rel2abs(
$config->{nqp_home}
|| File::Spec->catdir( $config->{'prefix'}, 'share', 'nqp' )
)
);

$config->{static_rakudo_home} =
$config->{relocatable} eq 'reloc'
? ''
Expand Down
14 changes: 7 additions & 7 deletions tools/templates/jvm/Makefile.in
Expand Up @@ -47,9 +47,9 @@ $(RUNTIME_JAR): $(RUNTIME_JAVAS)
$(NOECHO)$(JAVAC) --release 9 -cp @q($(BLD_NQP_JARS))@ -g -d bin -encoding UTF8 $(RUNTIME_JAVAS)
$(NOECHO)$(JAR) cf0 rakudo-runtime.jar -C bin@slash@ .

$(J_RUNNER): @@script(create-jvm-runner.pl)@@
$(J_RUNNER): @@script(create-jvm-runner.pl)@@
@echo(+++ Setting up $@)@
$(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ dev . . @q(@static_nqp_home@)@ @q(@static_rakudo_home@)@ @q($(NQP_JARS))@
$(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ dev @q($(BASE_DIR))@ . . @q(@nqp_home@)@ @q(@static_nqp_home@)@ @q(@static_rakudo_home@)@ @q($(NQP_JARS))@

@backend_prefix@-runner-default: @backend_prefix@-all
@echo(+++ Setting up @uc(@backend@)@ runner)@
Expand All @@ -58,7 +58,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(@static_nqp_home@)@ @q(@static_rakudo_home@)@ @q($(NQP_JARS))@
$(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ dev-debug @q($(BASE_DIR))@ . . @q(@nqp_home@)@ @q(@static_nqp_home@)@ @q(@static_rakudo_home@)@ @q($(NQP_JARS))@

eval-client.pl:
@echo(+++ Setting up $@)@
Expand Down Expand Up @@ -86,16 +86,16 @@ eval-client.pl:
sometests: @backend_prefix@-all
@$(J_HARNESS5_WITH_FUDGE) $(TESTFILES)

@backend_prefix@-runner-default-install: @backend_prefix@-install
@backend_prefix@-runner-default-install: @backend_prefix@-install @@script(create-jvm-runner.pl)@@
@echo(+++ Installing @uc(@backend@)@ launcher)@
$(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)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install @q($(BASE_DIR))@ @q($(DESTDIR))@ @q($(PREFIX))@ @q(@nqp_home@)@ @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(@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))@
$(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install @q($(BASE_DIR))@ @q($(DESTDIR))@ @q($(PREFIX))@ @q(@nqp_home@)@ @q(@static_nqp_home@)@ @q(@static_rakudo_home@)@ @q($(NQP_JARS))@
$(NOECHO)$(PERL5) @shquot(@script(create-jvm-runner.pl)@)@ install-debug @q($(BASE_DIR))@ @q($(DESTDIR))@ @q($(PREFIX))@ @q(@nqp_home@)@ @q(@static_nqp_home@)@ @q(@static_rakudo_home@)@ @q($(NQP_JARS))@

## cleaning
@backend_prefix@-clean:
Expand Down
3 changes: 2 additions & 1 deletion tools/templates/moar/Makefile.in
Expand Up @@ -123,7 +123,8 @@ $(R_SETTING_MOAR): @bsm(RAKUDO)@@for_specs( @bsm(SETTING_@ucspec@)@)@ $(R_SETTIN
--set-var=base_dir=@shquot(@nfp(@base_dir@)@)@ \
--set-var=nqp_lib_dir=@shquot(@nfp(@nqp::libdir@)@)@ \
--set-var=exec_name=@shquot(@nfp(@base_dir@/@bpm(RUNNER)@)@)@ \
--set-var=mbc=@bsm(RAKUDO)@
--set-var=mbc=@bsm(RAKUDO)@ \
--set-var=nqp_home=@shquot(@nfp(@nqp_home@)@)@
$(NOECHO)@bpm(CC)@ @moar::ccswitch@ @bpm(CFLAGS)@ @moar::ccout@rakudo-m@moar::obj@ rakudo-m.c
$(NOECHO)@bpm(LD)@ @moar::ldout@$@ @bpm(LDFLAGS)@ @bpm(MINGW_UNICODE)@ rakudo-m@moar::obj@

Expand Down
2 changes: 2 additions & 0 deletions tools/templates/moar/rakudo-m-build.c.in
Expand Up @@ -35,6 +35,8 @@ int main(int argc, char *argv[])

exec_argv[exec_argc - 1] = NULL;

setenv("NQP_HOME", "@c_escape(@nfp(@nqp_home@)@)@", 1);

// Hack: Explicitly set a dummy RAKUDO_HOME, so the autogenerated
// CompUnitRepo folder structure does not end up in the build directories
// parent folder.
Expand Down
2 changes: 2 additions & 0 deletions tools/templates/moar/rakudo-m-build.c.windows
Expand Up @@ -119,6 +119,8 @@ int wmain(int argc, wchar_t *argv[]) {
}
cmd_line[cmd_line_size - 1] = 0;

_wputenv_s(L"NQP_HOME", L"@c_escape(@nfp(@nqp_home@)@)@");

// Hack: Explicitly set a dummy RAKUDO_HOME, so the autogenerated CompUnitRepo
// folder structure does not end up in the build directories parent folder.
_wputenv_s(L"RAKUDO_HOME", L"@c_escape(@nfp(@base_dir@/gen/build_rakudo_home)@)@");
Expand Down

0 comments on commit c5cffd4

Please sign in to comment.