diff --git a/Configure.pl b/Configure.pl index 24b8127a4e..762d27b95e 100755 --- a/Configure.pl +++ b/Configure.pl @@ -68,7 +68,7 @@ BEGIN 'github-user=s', 'nqp-repo=s', 'moar-repo=s', 'expand=s', 'out=s', 'set-var=s@', - 'relocatable', + 'relocatable', 'nqp-home=s', ) or do { print_help(); @@ -145,6 +145,7 @@ sub print_help { --sdkroot=dir When given, use for searching build tools here, e.g. nqp, java etc. --sysroot=dir When given, use for searching runtime components here + --nqp-home=dir Directory to install NQP files to --backends=list Backends to use: $backends --gen-moar Download, build, and install a copy of MoarVM to use before writing the Makefile --moar-option='--option=value' diff --git a/tools/build/gen-js-makefile.nqp b/tools/build/gen-js-makefile.nqp index 4ec4d93bfc..e1cc85c25f 100644 --- a/tools/build/gen-js-makefile.nqp +++ b/tools/build/gen-js-makefile.nqp @@ -74,7 +74,7 @@ sub combine(:$sources, :$stage, :$file, :$gen-version = 0) { rule($target, $sources, make_parents($target), - $gen-version ?? "\$(PERL5) \@script(gen-version.pl)@ \$(PREFIX) \$(NQP_LIB_DIR) > $version" !! '', + $gen-version ?? "\$(PERL5) \@script(gen-version.pl)@ \$(PREFIX) \$(NQP_HOME) \$(NQP_LIB_DIR) > $version" !! '', "\$(PERL5) \@script(gen-cat.pl)@ js \@nfp($sources)@ {$gen-version ?? $version !! ''} > \@nfp($target)@" ); } diff --git a/tools/build/gen-jvm-properties.pl b/tools/build/gen-jvm-properties.pl index 0cc6e7eeba..76a3ae0f75 100755 --- a/tools/build/gen-jvm-properties.pl +++ b/tools/build/gen-jvm-properties.pl @@ -10,7 +10,7 @@ binmode STDOUT, ':utf8'; -my ($prefix, $thirdPartyJars) = @ARGV; +my ($prefix, $nqp_home, $thirdPartyJars) = @ARGV; my $cpsep = $^O eq 'MSWin32' ? ';' : ':'; my $jardir = "."; @@ -18,8 +18,8 @@ my $slash = File::Spec->catdir('', ''); if ($prefix ne '.') { - $jardir = File::Spec->catdir($prefix, qw); - $libdir = File::Spec->catdir($prefix, qw); + $jardir = File::Spec->catdir($nqp_home, 'runtime'); + $libdir = File::Spec->catdir($nqp_home, 'lib'); my @jars = grep { s/^.*\Q${slash}\E// } split($cpsep, $thirdPartyJars); $thirdPartyJars = join($cpsep, grep { s/^/${jardir}${slash}/ } @jars); } diff --git a/tools/build/gen-version.pl b/tools/build/gen-version.pl index 735f5a28b0..6c53aa5f1a 100755 --- a/tools/build/gen-version.pl +++ b/tools/build/gen-version.pl @@ -15,6 +15,7 @@ =head1 TITLE use POSIX 'strftime'; my $prefix = shift // ''; +my $nqp_home = shift // ''; my $libdir = shift // ''; open(my $fh, '<', 'VERSION') or die $!; @@ -37,6 +38,7 @@ =head1 TITLE sub hll-config(\$config) { \$config := '$VERSION'; \$config := '$prefix'; + \$config := '$nqp_home'; \$config := '$libdir'; \$config := '$source_digest'; } diff --git a/tools/lib/NQP/Config/NQP.pm b/tools/lib/NQP/Config/NQP.pm index 990d02a8a5..de27644286 100644 --- a/tools/lib/NQP/Config/NQP.pm +++ b/tools/lib/NQP/Config/NQP.pm @@ -49,6 +49,7 @@ sub configure_backends { sub configure_refine_vars { my $self = shift; + my $config = $self->{config}; unless ( $self->cfg('prefix') ) { my $moar_conf = $self->moar_config; @@ -66,6 +67,13 @@ sub configure_refine_vars { } $self->SUPER::configure_refine_vars(@_); + + $config->{nqp_home} = $self->nfp( + File::Spec->rel2abs( + $config->{nqp_home} || + File::Spec->catdir( $config->{'prefix'}, 'share', 'nqp' ) + ) + ); } sub configure_misc { @@ -84,17 +92,6 @@ sub configure_misc { $config->{moar_stage0} = $self->nfp( "src/vm/moar/stage0", no_quote => 1 ); $config->{jvm_stage0} = $self->nfp( "src/vm/jvm/stage0", no_quote => 1 ); - - if ( !$config->{nqplibdir} ) { - $config->{nqplibdir} = $self->nfp( - ( - $self->opt('libdir') - ? $self->opt('libdir') . "/nqp" - : '$(NQP_HOME)/lib' - ), - no_quote => 1, - ); - } } sub configure_moar_backend { @@ -117,10 +114,7 @@ sub configure_moar_backend { } else { my $qchar = $config->{quote}; - $imoar->{config}{static_nqp_home} = - File::Spec->rel2abs( - File::Spec->catdir( $config->{'prefix'}, 'share', 'nqp' ) - ); + $imoar->{config}{static_nqp_home} = $config->{nqp_home}; $imoar->{config}{static_nqp_home_define} = '-DSTATIC_NQP_HOME=' . $qchar . $self->c_escape_string( $imoar->{config}{static_nqp_home} ) . $qchar; diff --git a/tools/templates/Makefile-common.in b/tools/templates/Makefile-common.in index 3574441e12..564b3e4505 100644 --- a/tools/templates/Makefile-common.in +++ b/tools/templates/Makefile-common.in @@ -120,8 +120,8 @@ RM_L = @rm_l@ SYSROOT = @nfp(@sysroot@)@ PREFIX = @nfp(@prefix@)@ BIN_DIR = @nfp(@prefix@/bin)@ -NQP_HOME = @nfp($(PREFIX)/share/nqp)@ -NQP_LIB_DIR = @nfp(@nqplibdir@)@ +NQP_HOME = @nfp(@nqp_home@)@ +NQP_LIB_DIR = @nfp($(NQP_HOME)/lib)@ PROVE_OPTIONS = -j0$(TEST_JOBS) PROVE = prove $(PROVE_OPTIONS) BASE_DIR = @nfp(@base_dir@)@ diff --git a/tools/templates/jvm/Makefile.in b/tools/templates/jvm/Makefile.in index 9b50f8cad1..2898bc3839 100644 --- a/tools/templates/jvm/Makefile.in +++ b/tools/templates/jvm/Makefile.in @@ -111,6 +111,7 @@ j-all: $(ALL_OUTPUT) $(J_RUNNER) $(P5QREGEX_JAR) j-install: j-all $(MKPATH) @q($(DESTDIR)$(BIN_DIR))@ $(MKPATH) @q($(DESTDIR)$(NQP_JAR_DIR))@ + $(MKPATH) @q($(DESTDIR)$(NQP_HOME))@ $(MKPATH) @q($(DESTDIR)$(NQP_LIB_DIR))@ $(CP) @q($(ASM))@ @q($(ASMTREE))@ @q($(DESTDIR)$(NQP_JAR_DIR))@ $(CP) @q($(JLINE))@ @q($(JNA))@ @q($(DESTDIR)$(NQP_JAR_DIR))@ @@ -131,8 +132,8 @@ j-install: j-all $(RUNTIME_JAR): $(RUNTIME_JAVAS) @mkquot(@script(gen-jvm-properties.pl)@)@ $(PERL5) -MExtUtils::Command -e mkpath bin $(JAVAC) --release 9 -cp @q($(THIRDPARTY_JARS))@ -g -d bin -encoding UTF8 $(RUNTIME_JAVAS) - $(PERL5) @shquot(@script(gen-jvm-properties.pl)@)@ . @q($(THIRDPARTY_JARS))@ > jvmconfig.properties - $(PERL5) @shquot(@script(gen-jvm-properties.pl)@)@ @nfpq(@prefix@)@ @q($(THIRDPARTY_JARS))@ > @nfpq(bin/jvmconfig.properties)@ + $(PERL5) @shquot(@script(gen-jvm-properties.pl)@)@ . @nfpq($(NQP_HOME))@ @q($(THIRDPARTY_JARS))@ > jvmconfig.properties + $(PERL5) @shquot(@script(gen-jvm-properties.pl)@)@ @nfpq(@prefix@)@ @nfpq($(NQP_HOME))@ @q($(THIRDPARTY_JARS))@ > @nfpq(bin/jvmconfig.properties)@ $(JAR) cf0 nqp-runtime.jar -C @nfp(bin/)@ . J_CLEANUPS = *.class *.jar @q($(J_STAGE1_DIR))@ @q($(J_STAGE2_DIR))@ bin nqp nqp.bat jvmconfig.properties @q($(J_RUNNER))@ @@ -204,7 +205,7 @@ $(J_STAGE1_DIR): $(J_STAGE1_OUTPUT) @nfp($(J_STAGE1_DIR)/$(NQP_JAR):)@ $(J_STAGE0_DIR) @nfp($(J_STAGE1_DIR)/$(P6QREGEX_JAR))@ $(J_SOURCES) $(MKPATH) $(J_STAGE1_DIR) - $(PERL5) @shquot(@script(gen-version.pl)@)@ $(PREFIX) $(NQP_LIB_DIR) > @nfp($(J_STAGE1_DIR)/nqp-config.nqp)@ + $(PERL5) @shquot(@script(gen-version.pl)@)@ @q($(PREFIX))@ @q($(NQP_HOME))@ @q($(NQP_LIB_DIR))@ > @nfp($(J_STAGE1_DIR)/nqp-config.nqp)@ $(PERL5) @shquot(@script(gen-cat.pl)@)@ jvm $(J_NQP_SOURCES) @nfp($(J_STAGE1_DIR)/nqp-config.nqp)@ > @nfp($(J_STAGE1_DIR)/$(NQP_COMBINED))@ $(J_STAGE0_NQP) --module-path=$(J_STAGE1_DIR) --setting-path=$(J_STAGE1_DIR) \ --setting=NQPCORE --target=jar --no-regex-lib --stable-sc=stage1 --javaclass=nqp \ @@ -272,7 +273,7 @@ $(J_STAGE2_DIR): $(J_STAGE2_OUTPUT) @nfp($(J_STAGE2_DIR)/$(NQP_JAR):)@ $(J_STAGE1_DIR) @nfp($(J_STAGE2_DIR)/$(P6QREGEX_JAR))@ $(J_SOURCES) $(MKPATH) $(J_STAGE2_DIR) - $(PERL5) @shquot(@script(gen-version.pl)@)@ $(PREFIX) $(NQP_LIB_DIR) > @nfp($(J_STAGE2_DIR)/nqp-config.nqp)@ + $(PERL5) @shquot(@script(gen-version.pl)@)@ @q($(PREFIX))@ @q($(NQP_HOME))@ @q($(NQP_LIB_DIR))@ > @nfp($(J_STAGE2_DIR)/nqp-config.nqp)@ $(PERL5) @shquot(@script(gen-cat.pl)@)@ jvm $(J_NQP_SOURCES) @nfp($(J_STAGE2_DIR)/nqp-config.nqp)@ > @nfp($(J_STAGE2_DIR)/$(NQP_COMBINED))@ $(J_STAGE1_NQP) --module-path=$(J_STAGE2_DIR) --setting-path=$(J_STAGE2_DIR) \ --setting=NQPCORE --target=jar --no-regex-lib --javaclass=nqp \ diff --git a/tools/templates/moar/Makefile.in b/tools/templates/moar/Makefile.in index 2c7ee6627f..01c80d4cf5 100644 --- a/tools/templates/moar/Makefile.in +++ b/tools/templates/moar/Makefile.in @@ -107,6 +107,7 @@ m-all: $(NQP_MOAR) $(M_BUILD_RUNNER) $(M_INST_NQP_M) $(M_INST_NQP) $(P5QREGEX_MO m-install: m-all @@configure_script@@ $(MKPATH) @q($(DESTDIR)$(BIN_DIR))@ + $(MKPATH) @q($(DESTDIR)$(NQP_HOME))@ $(MKPATH) @q($(DESTDIR)$(NQP_LIB_DIR))@ $(MKPATH) @nfpq($(DESTDIR)$(NQP_LIB_DIR)/profiler)@ $(CP) $(NQP_MO_MOAR) @q($(DESTDIR)$(NQP_LIB_DIR))@ @@ -209,7 +210,7 @@ $(M_STAGE1_DIR): $(M_STAGE1_OUTPUT) @nfp($(M_STAGE1_DIR)/$(NQP_MOAR))@: $(M_STAGE0_DIR) @nfp($(M_STAGE1_DIR)/$(P6QREGEX_MOAR))@ @nfp($(M_STAGE1_DIR)/$(QAST_MOAR))@ $(M_SOURCES) $(MKPATH) @nfpq($(M_STAGE1_DIR)/gen)@ - $(PERL5) @shquot(@script(gen-version.pl)@)@ @q($(PREFIX))@ @q($(NQP_LIB_DIR))@ > @nfpq($(M_STAGE1_DIR)/nqp-config.nqp)@ + $(PERL5) @shquot(@script(gen-version.pl)@)@ @q($(PREFIX))@ @q($(NQP_HOME))@ @q($(NQP_LIB_DIR))@ > @nfpq($(M_STAGE1_DIR)/nqp-config.nqp)@ $(PERL5) $(M_GEN_CAT) stage1 $(M_NQP_SOURCES) @nfpq($(M_STAGE1_DIR)/nqp-config.nqp)@ > @nfpq($(M_STAGE1_DIR)/$(NQP_COMBINED))@ $(M_STAGE0_NQP) --module-path=$(M_STAGE1_DIR) --setting-path=$(M_STAGE1_DIR) \ --setting=NQPCORE --target=mbc --no-regex-lib --stable-sc=stage1 \ @@ -280,7 +281,7 @@ $(M_STAGE2_DIR): $(M_STAGE1_OUTPUT) @nfp($(M_STAGE2_DIR)/$(NQP_MOAR))@: $(M_STAGE1_DIR) @nfp($(M_STAGE2_DIR)/$(QAST_MOAR))@ @nfp($(M_STAGE2_DIR)/$(P6QREGEX_MOAR))@ $(M_SOURCES) $(MKPATH) @nfpq($(M_STAGE2_DIR)/gen)@ - $(PERL5) @shquot(@script(gen-version.pl)@)@ @q($(PREFIX))@ @q($(NQP_LIB_DIR))@ > @nfpq($(M_STAGE2_DIR)/nqp-config.nqp)@ + $(PERL5) @shquot(@script(gen-version.pl)@)@ @q($(PREFIX))@ @q($(NQP_HOME))@ @q($(NQP_LIB_DIR))@ > @nfpq($(M_STAGE2_DIR)/nqp-config.nqp)@ $(PERL5) $(M_GEN_CAT) stage2 $(M_NQP_SOURCES) @nfpq($(M_STAGE2_DIR)/nqp-config.nqp)@ > @nfpq($(M_STAGE2_DIR)/$(NQP_COMBINED))@ $(M_STAGE1_NQP) --module-path=$(M_STAGE2_DIR) --setting-path=$(M_STAGE2_DIR) \ --setting=NQPCORE --target=mbc --no-regex-lib \