Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rakudo build system needs to install; patch attached #1023

Closed
p6rt opened this issue May 27, 2009 · 6 comments
Closed

Rakudo build system needs to install; patch attached #1023

p6rt opened this issue May 27, 2009 · 6 comments

Comments

@p6rt
Copy link

p6rt commented May 27, 2009

Migrated from rt.perl.org#66056 (status was 'resolved')

Searchable as RT66056$

@p6rt
Copy link
Author

p6rt commented May 27, 2009

From wayland@wayland.id.au

  The attached patch depends on Parrot ticket 712. Some of the code
comes from stuff that Allison sent me, and the rest is of my own devising.

https://trac.parrot.org/parrot/ticket/712

  Hope this helps,


| Name​: Tim Nelson | Because the Creator is, |
| E-mail​: wayland@​wayland.id.au | I am |


----BEGIN GEEK CODE BLOCK----
Version 3.12
GCS d+++ s+​: a- C++$ U+++$ P+++$ L+++ E- W+ N+ w--- V-
PE(+) Y+>++ PGP->+++ R(+) !tv b++ DI++++ D G+ e++>++++ h! y-
-----END GEEK CODE BLOCK-----

@p6rt
Copy link
Author

p6rt commented May 27, 2009

From wayland@wayland.id.au

rakudo_build_rpm_3.patch
diff --git a/Configure.pl b/Configure.pl
index 07bbf0d..94c2a95 100644
--- a/Configure.pl
+++ b/Configure.pl
@@ -5,10 +5,14 @@ use 5.008;
 use strict;
 use warnings;
 use Getopt::Long;
+use Cwd qw(abs_path);
 
 MAIN: {
-    my %options;
-    GetOptions(\%options, 'help!', 'parrot-config=s',
+    my %options = (
+        'build-root' => '/',
+        'rakudo-version' => 'build17',
+    );
+    GetOptions(\%options, 'help!', 'parrot-config=s', 'build-root=s', 'rakudo-version=s',
                'gen-parrot!', 'gen-parrot-option=s@');
 
     # Print help if it's requested
@@ -52,7 +56,14 @@ MAIN: {
         $parrot_errors .= "Unable to locate parrot_config\n"; 
     }
     elsif ($required > $config{'revision'}) {
-        $parrot_errors .= "Parrot revision r$required required (currently r$config{'revision'})\n";
+        # If Parrot was built from a tarball or package, the revision number 
+        # is 0, so we'd need to use the Parrot version instead.  But even 
+        # that is unreliable, as someone may have built their own package 
+        # from SVN.  So just let them do their thing, and worry about it
+        # some other time.  
+        if($config{'revision'} != 0) {
+            $parrot_errors .= "Parrot revision r$required required (currently r$config{'revision'})\n";
+        }
     }
 
     if ($parrot_errors) {
@@ -65,8 +76,19 @@ the location of parrot_config to be used to build Rakudo Perl.
 END
     }
 
+    $options{'build-root'} =~ s#/#$config{slash}#g;
+
+    my($short);
+    my(%rakudo_config) = ();
+    foreach(qw(build-root rakudo-version)) {
+        $short = $_;
+	$short =~ s/-//g;
+        $rakudo_config{$short} = $options{$_};
+    }
+    $rakudo_config{buildroot} = abs_path($rakudo_config{buildroot});
+
 #  Create the Makefile using the information we just got
-    create_makefile(%config);
+    create_makefiles(\%config, \%rakudo_config);
     my $make = $config{'make'};
 
     {
@@ -110,26 +132,44 @@ sub read_parrot_config {
 
 
 #  Generate a Makefile from a configuration
-sub create_makefile {
-    my %config = @_;
-
-    my $maketext = slurp( 'build/Makefile.in' );
+sub create_makefiles {
+    my($config, $rakudo_config) = @_;
+    my %makefiles = (
+        "build/Makefile.in" => "Makefile",
+        "build/pmc_makefile.in" => "src/pmc/Makefile",
+        "build/ops_makefile.in" => "src/ops/Makefile",
+    );
+    my $build_tool = $config->{perl} . " " 
+        . $config->{libdir}
+        . $config->{versiondir}
+        . $config->{slash}
+        . "tools"
+        . $config->{slash}
+        . "dev"
+        . $config->{slash}
+        . "gen_makefile.pl";
+
+    my($text);
+    foreach my $template (keys %makefiles) {
+        my $makefile = $makefiles{$template};
+        print "Creating $makefile\n";
+        $text = slurp($template);
+        $config->{'win32_libparrot_copy'} = $^O eq 'MSWin32' ? 'copy $(BUILD_DIR)\libparrot.dll .' : '';
+        $text =~ s{\@(\w+)\@}{
+              defined($rakudo_config->{$1}) ? $rakudo_config->{$1} : $&
+        }eg;
+        if ($^O eq 'MSWin32') {
+            $text =~ s{/}{\\}g;
+            $text =~ s{\\\*}{\\\\*}g;
+            $text =~ s{http:\S+}{ do {my $t = $&; $t =~ s'\\'/'g; $t} }eg;
+        }
 
-    $config{'win32_libparrot_copy'} = $^O eq 'MSWin32' ? 'copy $(BUILD_DIR)\libparrot.dll .' : '';
-    $maketext =~ s/@(\w+)@/$config{$1}/g;
-    if ($^O eq 'MSWin32') {
-        $maketext =~ s{/}{\\}g;
-        $maketext =~ s{\\\*}{\\\\*}g;
-        $maketext =~ s{http:\S+}{ do {my $t = $&; $t =~ s'\\'/'g; $t} }eg;
+        open(FILE, ">$template.tmp") or die "Error opening file '$template.tmp' for writing: $!";
+        print FILE $text;
+        close(FILE);
+        system("$build_tool $template.tmp $makefile");
     }
 
-    my $outfile = 'Makefile';
-    print "\nCreating $outfile ...\n";
-    open(my $MAKEOUT, '>', $outfile) ||
-        die "Unable to write $outfile\n";
-    print {$MAKEOUT} $maketext;
-    close $MAKEOUT or die $!;
-
     return;
 }
 
@@ -157,6 +197,10 @@ General Options:
                        Set parrot config option when using --gen-parrot
     --parrot-config=(config)
                        Use configuration information from config
+    --build-root=(directory)
+                       Root of directory to build Rakudo in
+    --rakudo-version=(version)
+                       Version of Rakudo to call this build
 END
 
     return;
diff --git a/build/Makefile.in b/build/Makefile.in
index 954e204..da025ce 100644
--- a/build/Makefile.in
+++ b/build/Makefile.in
@@ -1,11 +1,11 @@
 # Copyright (C) 2006-2009, The Perl Foundation.
 # $Id$
 
-# arguments we want to run parrot with
-PARROT_ARGS =
-
 # values from parrot_config
-BUILD_DIR     = @build_dir@
+VERSION_DIR   = @versiondir@
+LIB_DIR       = @libdir@$(VERSION_DIR)
+BIN_DIR       = @bindir@
+TOOLS_DIR     = @libdir@$(VERSION_DIR)@slash@tools@slash@lib
 LOAD_EXT      = @load_ext@
 O             = @o@
 EXE           = @exe@
@@ -14,22 +14,23 @@ RM_F          = @rm_f@
 HAS_ICU       = @has_icu@
 
 # Various paths
-PARROT_DYNEXT = $(BUILD_DIR)/runtime/parrot/dynext
-PERL6GRAMMAR  = $(BUILD_DIR)/runtime/parrot/library/PGE/Perl6Grammar.pbc
-NQP           = $(BUILD_DIR)/compilers/nqp/nqp.pbc
-PCT           = $(BUILD_DIR)/runtime/parrot/library/PCT.pbc
+PARROT_DYNEXT = $(LIB_DIR)/dynext
+RAKUDO_DYNEXT = @buildroot@@slash@usr@slash@lib@slash@rakudo@slash@@rakudoversion@@slash@dynext
+PERL6GRAMMAR  = $(LIB_DIR)/library/PGE/Perl6Grammar.pbc
+NQP           = $(LIB_DIR)/languages/nqp/nqp.pbc
+PCT           = $(LIB_DIR)/library/PCT.pbc
 PMC_DIR       = src/pmc
-OPSDIR        = src/ops
+OPS_DIR       = src/ops
 OPSLIB        = perl6
-OPS_FILE      = src/ops/perl6.ops
+OPS_FILE      = $(OPS_DIR)/perl6.ops
+
+# arguments we want to run parrot with
+PARROT_ARGS   = -X$(RAKUDO_DYNEXT)
 
 # Setup some commands
-PARROT        = $(BUILD_DIR)/parrot$(EXE)
+PARROT        = $(BIN_DIR)/parrot$(EXE)
 CAT           = $(PERL) -MExtUtils::Command -e cat
-BUILD_DYNPMC  = $(PERL) $(BUILD_DIR)/tools/build/dynpmc.pl
-BUILD_DYNOPS  = $(PERL) $(BUILD_DIR)/tools/build/dynoplibs.pl
-RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-PBC_TO_EXE    = $(BUILD_DIR)/pbc_to_exe$(EXE)
+PBC_TO_EXE    = $(BIN_DIR)/pbc_to_exe$(EXE)
 
 SOURCES = perl6.pir \
   src/gen_grammar.pir \
@@ -48,7 +49,7 @@ SOURCES = perl6.pir \
   src/parrot/state.pir \
   src/gen_uprop.pir \
   $(PERL6_GROUP) \
-  src/ops/perl6_ops$(LOAD_EXT)
+  $(OPS_DIR)/perl6_ops$(LOAD_EXT)
 
 BUILTINS_PIR = \
   src/classes/Object.pir \
@@ -124,8 +125,6 @@ SETTING = \
   src/setting/Range.pm \
   src/setting/Whatever.pm \
 
-PMCS        = perl6str objectref perl6scalar mutablevar perl6multisub p6invocation
-
 PMC_SOURCES = $(PMC_DIR)/perl6str.pmc $(PMC_DIR)/objectref.pmc $(PMC_DIR)/perl6scalar.pmc \
               $(PMC_DIR)/mutablevar.pmc $(PMC_DIR)/perl6multisub.pmc $(PMC_DIR)/p6invocation.pmc
 
@@ -153,14 +152,14 @@ CLEANUPS = \
   $(PMC_DIR)/*.pdb \
   $(PMC_DIR)/*.lib \
   $(PMC_DIR)/objectref.pmc \
-  $(OPSDIR)/*.h \
-  $(OPSDIR)/*.c \
-  $(OPSDIR)/*$(O) \
-  $(OPSDIR)/*$(LOAD_EXT) \
+  $(OPS_DIR)/*.h \
+  $(OPS_DIR)/*.c \
+  $(OPS_DIR)/*$(O) \
+  $(OPS_DIR)/*$(LOAD_EXT) \
 
 # NOTE: eventually, we should remove --keep-exit-code and --fudge
 #       as the goal is that all tests must pass without fudge
-HARNESS_WITH_FUDGE = $(PERL) t/harness --fudge --keep-exit-code --icu=$(HAS_ICU)
+HARNESS_WITH_FUDGE = $(PERL) -I$(TOOLS_DIR) t/harness --bindir=$(BIN_DIR) --fudge --keep-exit-code --icu=$(HAS_ICU)
 HARNESS_WITH_FUDGE_JOBS = $(HARNESS_WITH_FUDGE) --jobs
 
 
@@ -172,7 +171,7 @@ xmas: perl6$(EXE)
 ##  targets for building a standalone perl6.
 perl6$(EXE): perl6.pbc
 	$(PBC_TO_EXE) perl6.pbc
-	@win32_libparrot_copy@
+#IF(win32):	copy $(LIB_DIR)\libparrot.dll .
 
 # the Perl 6 compiler
 perl6.pbc: perl6_s1.pbc src/gen_setting.pm
@@ -211,20 +210,15 @@ src/gen_uprop.pir: build/gen_uprop_pir.pl
 src/gen_setting.pm: build/gen_setting_pm.pl $(SETTING)
 	$(PERL) build/gen_setting_pm.pl $(SETTING) > src/gen_setting.pm
 
-$(PERL6_GROUP): $(PARROT) $(PMC_SOURCES)
-	cd $(PMC_DIR) && $(BUILD_DYNPMC) generate $(PMCS)
-	cd $(PMC_DIR) && $(BUILD_DYNPMC) compile $(PMCS)
-	cd $(PMC_DIR) && $(BUILD_DYNPMC) linklibs $(PMCS)
-	cd $(PMC_DIR) && $(BUILD_DYNPMC) copy --destination=$(PARROT_DYNEXT) $(PMCS)
+$(PERL6_GROUP): $(PARROT) $(PMC_SOURCES) $(PMC_DIR)/Makefile
+	$(MAKE) -C $(PMC_DIR)
+
+$(OPS_DIR)/perl6_ops$(LOAD_EXT) : $(OPS_FILE) $(OPS_DIR)/Makefile
+	$(MAKE) -C $(OPS_DIR)
 
-src/ops/perl6_ops$(LOAD_EXT) : $(PARROT) $(OPS_FILE)
-	@cd $(OPSDIR) && $(BUILD_DYNOPS) generate $(OPSLIB)
-	@cd $(OPSDIR) && $(BUILD_DYNOPS) compile $(OPSLIB)
-	@cd $(OPSDIR) && $(BUILD_DYNOPS) linklibs $(OPSLIB)
-	@cd $(OPSDIR) && $(BUILD_DYNOPS) copy "--destination=$(PARROT_DYNEXT)" $(OPSLIB)
 
 $(PMC_DIR)/objectref.pmc : $(PMC_DIR)/objectref_pmc.template build/gen_objectref_pmc.pl
-	$(PERL) -I$(BUILD_DIR)/lib build/gen_objectref_pmc.pl $(PMC_DIR)/objectref_pmc.template \
+	$(PERL) -I$(TOOLS_DIR) build/gen_objectref_pmc.pl $(PMC_DIR)/objectref_pmc.template \
 		$(PMC_DIR)/objectref.pmc
 
 
@@ -237,7 +231,7 @@ test    : coretest
 fulltest: coretest spectest
 
 coretest: perl6$(EXE)
-	$(PERL) t/harness t/00-parrot t/01-sanity
+	$(PERL) -I$(TOOLS_DIR) t/harness --bindir=$(BIN_DIR) t/00-parrot t/01-sanity
 
 # Run the spectests that we know work.
 spectest_regression: spectest
@@ -338,7 +332,8 @@ parrot: build/PARROT_REVISION build/gen_parrot.pl
 $(PARROT): 
 
 
-CRITIC_FILES=Configure.pl t/harness build/ tools/
+# Next line must not end with a slash; I added a space
+CRITIC_FILES=Configure.pl t/harness build/ tools/ 
 
 perlcritic:
 	perlcritic -1 --profile tools/util/perlcritic.conf $(CRITIC_FILES)
@@ -357,3 +352,21 @@ release: manifest
 	$(PERL) -ne 'print "rakudo-$(VERSION)/$$_"' MANIFEST | \
 	    tar -zcv -T - -f rakudo-$(VERSION).tar.gz
 	rm rakudo-$(VERSION)
+
+install:
+	$(PERL) -I/usr/lib/parrot/1.2.0-devel/tools/lib/ tools/build/install_files.pl \
+    --buildprefix=$(BUILDPREFIX) \
+    --prefix=$(PREFIX) \
+    --exec-prefix=$(EXEC_PREFIX) \
+    --bindir=$(BIN_DIR) \
+    --libdir=$(LIB_DIR) \
+    --includedir=$(INCLUDE_DIR) \
+    --destdir=$(DESTDIR) \
+    --docdir=$(DOC_DIR) \
+    --datadir=$(DATA_DIR) \
+    --srcdir=@srcdir@ \
+    --versiondir=$(VERSION_DIR) \
+    MANIFEST
+
+
+#
diff --git a/t/harness b/t/harness
index b67d164..71bf09b 100644
--- a/t/harness
+++ b/t/harness
@@ -21,10 +21,20 @@ GetOptions(
     'tests-from-file=s' => \my $list_file,
     'fudge'             => \my $do_fudge,
     'verbosity=i'       => \$Test::Harness::verbose,
+    'bindir=s'          => \$harness_args{bindir},
     'jobs:3'            => \my $jobs,
     'icu:1'             => \my $do_icu,
 );
 
+if ($harness_args{bindir}) {
+    $harness_args{exec}     = [$harness_args{bindir}.'/parrot', 'perl6.pbc'];
+} elsif (-d 'parrot') {
+    $harness_args{exec}     = ['parrot/parrot', 'perl6.pbc'];
+} else {
+    $harness_args{compiler} = 'perl6.pbc';
+}
+
+
 my @pass_through_options = grep m/^--?[^-]/, @ARGV;
 my @files = grep m/^[^-]/, @ARGV;
 
@@ -56,7 +66,8 @@ if ($do_fudge) {
 
 if (eval { require TAP::Harness; 1 }) {
     my %harness_options = (
-        exec      => ['./perl6'],
+        %harness_args,
+#        exec      => ['./perl6'],
         verbosity => 0+$Test::Harness::verbose,
         jobs      => $jobs || 1,
     );

@p6rt
Copy link
Author

p6rt commented May 30, 2009

From wayland@wayland.id.au

Just for everyone's reference​:
a) This patch is incomplete, thanks to my git skills
b) pmichaud has stated that he will not accept it in its current form,
so there will be some reworking before it's applied.

@p6rt
Copy link
Author

p6rt commented May 30, 2009

wayland@wayland.id.au - Status changed from 'new' to 'open'

@p6rt
Copy link
Author

p6rt commented May 30, 2009

@p6rt
Copy link
Author

p6rt commented May 30, 2009

wayland@wayland.id.au - Status changed from 'open' to 'resolved'

@p6rt p6rt closed this as completed May 30, 2009
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant