From 5511989854671aa28628a43cf723603211297241 Mon Sep 17 00:00:00 2001
From: Patrick Spek
Date: Thu, 31 Oct 2019 12:01:34 +0100
Subject: Use a work directory
---
.gitignore | 6 +-
.gitlab-ci.yml | 14 +--
Configure.pl | 319 ---------------------------------------------------
README | 229 ------------------------------------
bin/mkrelease.sh | 23 ++++
build_msi.bat | 10 --
bundle/Configure.pl | 319 +++++++++++++++++++++++++++++++++++++++++++++++++++
bundle/README.md | 229 ++++++++++++++++++++++++++++++++++++
bundle/build_msi.bat | 10 ++
tools/star/Makefile | 90 +++++++++------
10 files changed, 644 insertions(+), 605 deletions(-)
delete mode 100644 Configure.pl
delete mode 100644 README
create mode 100755 bin/mkrelease.sh
delete mode 100644 build_msi.bat
create mode 100644 bundle/Configure.pl
create mode 100644 bundle/README.md
create mode 100644 bundle/build_msi.bat
diff --git a/.gitignore b/.gitignore
index 3e45564..435fc1e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,11 +6,7 @@
# Temporary files used to build a new Rakudo Star release
MANIFEST
Makefile
-MoarVM
config.status
-install
-nqp
perl6
-rakudo
release
-src
+work
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cda7a00..b5977fd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,26 +10,24 @@ Tarball:
script:
- git submodule sync
- git submodule update --init --recursive
- - make -f tools/star/Makefile
- - make -f tools/star/Makefile release VERSION=$CI_COMMIT_REF_NAME
+ - bin/mkrelease.sh "$CI_COMMIT_REF_NAME"
artifacts:
paths:
- - release
+ - work/release
MoarVM:
stage: Build
image: alpine:latest
before_script:
- apk add --no-cache bash build-base git perl
- - cd "$(mktemp -d)"
- - tar xf "$CI_PROJECT_DIR/release/rakudo-star-$CI_COMMIT_REF_NAME.tar.gz"
+ - cd -- "$(mktemp -d)"
+ - tar xzf "$CI_PROJECT_DIR/work/release/rakudo-star-$CI_COMMIT_REF_NAME.tar.gz"
script:
- cd "rakudo-star-$CI_COMMIT_REF_NAME"
- - perl Configure.pl --prefix=/usr/local --backend=moar --gen-moar --make-install
+ - perl Configure.pl --prefix="$CI_PROJECT_DIR/work/install" --backend=moar --gen-moar --make-install
artifacts:
paths:
- - "$CI_COMMIT_REF_NAME/release"
- - /usr/local
+ - work/install
# TODO: Run tests
# TODO: Release an updated Docker container
diff --git a/Configure.pl b/Configure.pl
deleted file mode 100644
index 4a1984e..0000000
--- a/Configure.pl
+++ /dev/null
@@ -1,319 +0,0 @@
-#! perl
-# Copyright (C) 2009-2018 The Perl Foundation
-
-use 5.008;
-use strict;
-use warnings;
-use Text::ParseWords;
-use Getopt::Long;
-use File::Spec;
-use Cwd;
-use lib 'tools/lib';
-use NQP::Configure qw(sorry slurp cmp_rev gen_nqp read_config
- fill_template_text fill_template_file
- system_or_die verify_install);
-
-my $lang = 'Rakudo';
-my $lclang = lc $lang;
-my $uclang = uc $lang;
-my $slash = $^O eq 'MSWin32' ? '\\' : '/';
-
-
-MAIN: {
- if (-r 'config.default') {
- unshift @ARGV, shellwords(slurp('config.default'));
- }
-
- my %config = (perl => $^X);
- my $config_status = "${lclang}_config_status";
- $config{$config_status} = join ' ', map { qq("$_") } @ARGV;
-
- my $exe = $NQP::Configure::exe;
-
- my %options;
- GetOptions(\%options, 'help!', 'prefix=s',
- 'sysroot=s', 'sdkroot=s',
- 'backends=s', 'no-clean!',
- 'gen-nqp:s', 'gen-moar:s', 'moar-option=s@',
- 'make-install!', 'makefile-timing!',
- 'force!',
- ) or do {
- print_help();
- exit(1);
- };
-
- # Print help if it's requested
- if ($options{'help'}) {
- print_help();
- exit(0);
- }
-
- if (-d '.git') {
- worry(
- $options{'force'},
- "I see a .git directory here -- you appear to be trying",
- "to run Configure.pl from a clone of the Rakudo Star git",
- "repository.",
- "You most probably should be following",
- " tools/star/release-guide.pod",
- "instead. Please be aware that running Configure.pl from",
- "a clone of the rakudo star git repo will never be",
- "the right thing to do.",
- $options{'force'} ? '--force specified, continuing' : download_text()
- );
- }
-
- unless (defined $options{prefix}) {
-
- my $default = defined($options{sysroot}) ? '/usr' : File::Spec->catdir(getcwd, 'install');
- print "ATTENTION: no --prefix supplied, building and installing to $default\n";
-
- $options{prefix} = $default;
- }
-
- $options{prefix} = File::Spec->rel2abs($options{prefix});
-
- my $prefix = $options{'prefix'};
- my %known_backends = (jvm => 1, moar => 1);
- my %letter_to_backend;
- my $default_backend;
-
- for (keys %known_backends) {
- $letter_to_backend{ substr($_, 0, 1) } = $_;
- }
-
- my %backends;
-
- if (defined $options{backends}) {
- $options{backends} = 'moar,jvm' if lc($options{backends}) eq 'all';
-
- for my $b (split /,\s*/, $options{backends}) {
- $b = lc $b;
-
- if (!$known_backends{$b}) {
- die "Unknown backend '$b'; Supported backends are: " . join(", ", sort keys %known_backends) . "\n";
- }
-
- $backends{$b} = 1;
- $default_backend ||= $b;
- }
-
- if (!%backends) {
- die "--prefix given, but no valid backend?!\n";
- }
- }
- else {
- for my $l (sort keys %letter_to_backend) {
- # TODO: needs .exe/.bat magic on windows?
- if (-x "$prefix/bin/nqp-$l") {
- my $b = $letter_to_backend{$l};
- print "Found $prefix/bin/nqp-$l (backend $b)\n";
- $backends{$b} = 1;
- $default_backend ||= $b;
- }
- }
- if (exists $options{'gen-moar'}) {
- $backends{moar} = 1;
- $default_backend ||= 'moar';
- }
- unless (%backends) {
- die "No suitable nqp executables found! Please specify some --backends, or a --prefix that contains nqp-{p,j,m} executables\n\n"
- . "Example to build for all backends (which will take a while):\n"
- . "\tperl Configure.pl --backends=moar,jvm --gen-moar\n\n"
- . "Example to build for MoarVM only:\n"
- . "\tperl Configure.pl --gen-moar\n\n"
- . "Example to build for JVM only:\n"
- . "\tperl Configure.pl --backends=jvm --gen-nqp\n\n";
- }
- }
-
- $config{backends} = join ',', keys %backends;
- $config{backend_exes} = join ' ', map
- { '$(RAKUDO_DIR)/$(PERL6_' . uc(substr $_, 0, 1) . '_EXE)' }
- keys %backends;
- $config{backend_modules_install} = join ' ', map
- { 'modules-install-' . lc(substr $_, 0, 1) }
- keys %backends;
- $config{backend_modules_test} = join ' ', map
- { 'modules-test-' . lc(substr $_, 0, 1) }
- keys %backends;
- $config{verbose_backend_modules_test} = join ' ', map
- { 'verbose-modules-test-' . lc(substr $_, 0, 1) }
- keys %backends;
- $config{default_backend_exe} = '$(PERL6_' .
- uc(substr $default_backend, 0, 1) .
- '_INSTALL)';
-
- if ($backends{jvm}) {
- warn "Warning: JVM backend does not yet support all modules\n";
- }
-
- # Save options in config.status
- unlink('config.status');
- if (open(my $CONFIG_STATUS, '>', 'config.status')) {
- print $CONFIG_STATUS
- "$^X Configure.pl $config{$config_status} \$*\n";
- close($CONFIG_STATUS);
- }
-
- $config{prefix} = $prefix;
- $config{sdkroot} = $options{sdkroot};
- $config{sysroot} = $options{sysroot};
- $config{pass_rakudo_config} = "";
- $config{pass_rakudo_config} .= $options{sdkroot} ? " --sdkroot=\"\$(SDKROOT_DIR)\"" : "";
- $config{pass_rakudo_config} .= $options{sysroot} ? " --sysroot=\"\$(SYSROOT_DIR)\"" : "";
- $config{slash} = $slash;
- $config{'makefile-timing'} = $options{'makefile-timing'};
- $config{'stagestats'} = '--stagestats' if $options{'makefile-timing'};
- $config{'cpsep'} = $^O eq 'MSWin32' ? ';' : ':';
- $config{'shell'} = $^O eq 'MSWin32' ? 'cmd' : 'sh';
- $config{'bat'} = $^O eq 'MSWin32' ? '.bat' : '';
- $config{'path'} = $^O ne 'MSWin32' ? 'sh -c "PATH=\'$(STAR_BIN_DIR):$(PATH)\'' : 'cmd /c "path $(STAR_BIN_DIR);$(PATH) && ';
- my $make = $config{'make'} = $^O eq 'MSWin32' ? 'nmake' : 'make';
-
- my @prefixes = sort map substr($_, 0, 1), keys %backends;
-
- # determine the version of NQP we want
- my ($nqp_want) = split(' ', slurp('rakudo/tools/templates/NQP_REVISION'));
-
- my %binaries;
- my %impls = gen_nqp($nqp_want, prefix => $prefix, backends => join(',', sort keys %backends), %options);
-
- my @errors;
- my %errors;
- if ($backends{jvm}) {
- $config{j_nqp} = $impls{jvm}{bin};
- $config{j_nqp} =~ s{/}{\\}g if $^O eq 'MSWin32';
- my %nqp_config;
- if ( $impls{jvm}{config} ) {
- %nqp_config = %{ $impls{jvm}{config} };
- }
- else {
- push @errors, "Unable to read configuration from NQP on the JVM";
- }
- my $bin = $impls{jvm}{bin};
-
- if (!@errors && !defined $nqp_config{'jvm::runtime.jars'}) {
- push @errors, "jvm::runtime.jars value not available from $bin --show-config.";
- }
-
- $errors{jvm}{'no gen-nqp'} = @errors && !defined $options{'gen-nqp'};
-
- unless (@errors) {
- %config = (%nqp_config, %config);
- print "Using $bin.\n";
- }
- }
- if ($backends{moar}) {
- $config{m_nqp} = $impls{moar}{bin};
- $config{m_nqp} =~ s{/}{\\}g if $^O eq 'MSWin32';
- my %nqp_config;
- if ( $impls{moar}{config} ) {
- %nqp_config = %{ $impls{moar}{config} };
- }
- else {
- push @errors, "Unable to read configuration from NQP on MoarVM";
- }
-
- $errors{moar}{'no gen-nqp'} = @errors && !defined $options{'gen-nqp'};
-
- unless (@errors) {
- %config = (%nqp_config, %config);
- print "Using $config{m_nqp} (version $nqp_config{'nqp::version'} / MoarVM $nqp_config{'moar::version'}).\n";
- }
- }
-
- if ($errors{jvm}{'no gen-nqp'} || $errors{moar}{'no gen-nqp'}) {
- my @options_to_pass;
- push @options_to_pass, "--gen-moar" if $backends{moar};
- push @options_to_pass, "--gen-nqp" unless @options_to_pass;
- my $options_to_pass = join ' ', @options_to_pass;
- my $want_executables =
- $backends{moar}
- ? ' and MoarVM'
- : '';
- my $s1 = @options_to_pass > 1 ? 's' : '';
- my $s2 = $want_executables ? 's' : '';
- push @errors,
- "\nTo automatically clone (git) and build a copy of NQP $nqp_want,",
- "try re-running Configure.pl with the '$options_to_pass' option$s1.",
- "Or, use '--prefix=' to explicitly specify the path where the NQP$want_executables",
- "executable$s2 can be found that are use to build $lang.";
- }
- sorry(@errors) if @errors;
-
- fill_template_file('tools/build/Makefile.in', 'Makefile', %config);
-
- unless ($options{'no-clean'}) {
- no warnings;
- print "Cleaning up ...\n";
- for my $p ('', map { "-$_" } @prefixes) {
- if (open my $CLEAN, '-|', "$make configclean$p") {
- my @slurp = <$CLEAN>;
- close($CLEAN);
- }
- }
- }
-
- if ($options{'make-install'}) {
- system_or_die($make);
- system_or_die($make, 'install');
- print "\n$lang has been built and installed.\n";
- }
- else {
- print "\nYou can now use '$make' to build $lang.\n";
- print "After that, '$make test' will run some tests and\n";
- print "'$make install' will install $lang.\n";
- }
-
- exit 0;
-}
-
-
-# Print some help text.
-sub print_help {
- print <<"END";
-Configure.pl - $lang Configure
-
-General Options:
- --help Show this text
- --prefix=dir Install files in dir; also look for executables there
- --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
- --backends=jvm,moar
- Which backend(s) to use
- --gen-moar[=branch]
- Download and build a copy of MoarVM
- --gen-nqp[=branch]
- Download and build a copy of NQP
- --makefile-timing Enable timing of individual makefile commands
- --moar-option='--option=value'
- Options to pass to MoarVM's Configure.pl
-
-Configure.pl also reads options from 'config.default' in the current directory.
-END
-
- return;
-}
-
-sub download_text {
- ("The git repository contains the tools needed to build a Rakudo Star",
- "release, but does not contain a complete Rakudo Star release.",
- "To download and build the latest release of Rakudo Star, please",
- "download a .tar.gz file from https://rakudo.perl6.org/downloads/star/ .")
-}
-
-sub worry {
- my ($force, @text) = @_;
- sorry(@text) unless $force;
- print join "\n", @text, '';
-}
-
-
-# Local Variables:
-# mode: cperl
-# cperl-indent-level: 4
-# fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/README b/README
deleted file mode 100644
index 857b3a6..0000000
--- a/README
+++ /dev/null
@@ -1,229 +0,0 @@
-This is Rakudo Star, a useful, usable Rakudo Perl 6 production distribution.
-
-This is the 2019.03 release of Rakudo Star for the 6.d version of Perl 6.
-
-Rakudo Star is Copyright (C) 2010 - 2019 by the Rakudo Star Team.
-
-
-License Information
--------------------
-Rakudo Star is distributed under the terms of the Artistic License 2.0.
-This distribution contains software collected from other sources; see the
-individual source subdirectories (in rakudo/, MoarVM/ and modules/)
-for copyright and licensing information of those components.
-
-
-Overview
---------
-The Rakudo Perl 6 compiler can target MoarVM and the JVM. Rakudo Star fully
-supports MoarVM; not all modules work on the JVM at present. You can choose
-to build and install Rakudo for one or more of these virtual machines at
-configure time.
-
-
-Build Prerequisites for Rakudo on MoarVM
-----------------------------------------
-To build Rakudo Star on MoarVM, you need at least a 'make' utility, a C
-compiler, and Perl 5.10.0 or newer. Building Rakudo on MoarVM needs a
-machine with a gigabyte of memory; for a 32-bit build, you may get by
-with less.
-
-
-Build Prerequisites for Rakudo on the JVM
------------------------------------------
-Please note that this release of Rakudo Star is *not* fully functional with the
-JVM backend from the Rakudo compiler. Use the JVM backend only if you are
-trying to help with fixing JVM support (which is best done upstream with the
-monthly Rakudo release). This is a known issue and it's not worth reporting
-JVM failures as bugs unless you have patches.
-
-To build an experimental Rakudo Star on the JVM, you need at least a 'make'
-utility, both 'java' and 'javac' available in your path, and Perl 5.10.0 or
-newer. The 'java' and 'javac' are obtained by installing a Java Development
-kit, for example openjdk-8 or the Oracle JDK.
-
-The newer the JDK you have the better; due to bugs in the invokedynamic
-instruction in early releases, JDK 8 or above is needed. The build can
-complete within a gigabyte of memory.
-
-
-Configuring Rakudo Star
------------------------
-The easiest way to build Rakudo Star for a particular backend is:
-
- $ perl Configure.pl --backend=moar --gen-moar # MoarVM
- $ perl Configure.pl --backend=jvm --gen-nqp # JVM
-
-You can also build for all backends:
-
- $ perl Configure.pl --backend=moar,jvm --gen-moar
-
-Note that --gen-moar automatically builds a MoarVM for you, and implies
---gen-nqp, which builds NQP, a subset of Perl 6 that is used to implement
-Rakudo.
-
-Configured this way, one or more Perl 6 executables and selected Perl 6
-modules will be installed into the install/ subdirectory, which resides inside
-the source archive directory. Running make install will *not* install anything
-into /usr/local. If you want to change this behavior, specify the install
-prefix using the --prefix option.
-
-Configuring with the --prefix option
-------------------------------------
-If you want to install rakudo into a system-wide directory, you must either
-have root privileges or own the desired installation directory. Assuming you
-are root, use any of the desired configuration commands shown above and add
-"--prefix=$INSTDIR" to the end where $INSTDIR is the installation directory
-of choice.
-
-Building Rakudo Star
---------------------
-After configuration, build Rakudo Star on a UNIX-like system with:
-
- $ make
- $ make install
-
-Rakudo Star can be built on Windows either using Microsoft tools (MSVC) and
-nmake or using gcc and gmake as bundled with Strawberry Perl. In the latter
-case use cmd.exe rather than bash as a shell.
-
-Note that possible platform-specific errata may be covered under:
-https://perl6.org/downloads/
-
-Setting up the environment
---------------------------
-To set up the environment under a UNIX type system you will need to add the
-absolute path of the local "install/bin" directory under your source build
-directory or system-wide "${INSTDIR}/bin" directory (if you used the
---prefix option) to your PATH environment variable.
-
-Note also that other executable scripts such as "p6doc" will be installed
-under "${INSTDIR}/share/perl6/site/bin" so you also need to add that to the
-PATH for development convenience.
-
-You will have to append the %PATH% in a similar way under Windows. You
-may have to use Windows type directory path separators.
-
-You will be reminded of the two additions to the PATH by a welcome message
-after the source build completes.
-
-Once Rakudo Star is installed (and assuming perl6 is in your PATH), you can
-run Perl 6 programs by doing:
-
- $ perl6 hello.p6
-
-If the Rakudo compiler is invoked without an explicit script to run, it
-enters a small interactive mode that allows Perl 6 statements to be executed
-from the command line.
-
-
-Running the Perl 6 test suite
------------------------------
-Entering "make rakudo-test" will run a small test suite that comes bundled
-with Rakudo. This is a simple suite of tests, designed to make sure that the
-Rakudo compiler is basically working and that it's capable of running a simple
-test harness.
-
-Running "make rakudo-spectest" will run the Perl 6 specification test suite
-("roast") that was bundled with the Rakudo compiler release.
-
-Running "make modules-test" will run the test suites of any installed modules.
-The modules currently have to be installed (via 'make install' or 'make
-modules-install') before the tests can be run.
-
-Currently a number of roast tests may be reported as missing due to a known
-issue with test suite versioning. This can be ignored and it's hoped this will
-be fixed shortly.
-
-
-Perl 6 Documentation
---------------------
-The official documentation site is https://docs.perl6.org/
-
-This distribution also contains documentation in the docs/ directory:
-
- docs/cheatsheet.txt — Perl 6 cheat sheet
- docs/2015-spw-perl6-course.pdf — A short Perl 6 course
- docs/perl6intro.pdf — Recent snapshot of https://perl6intro.com/
- docs/announce/ — Detailed release announcements
-
-https://perl6intro.com/ is available in multiple languages, French, German,
-Japanese, Spanish, Portuguese, Dutch, Bulgarian, Chinese, Italian, Turkish,
-Indonesian and Russian at the time of writing.
-
-
-Installing Perl 6 Modules
--------------------------
-zef is a module installer bundled with Rakudo Star.
-
-See https://github.com/ugexe/zef for zef documentation.
-
-A list of modules available in the "ecosystem" is at https://modules.perl6.org/
-
-Git is useful for zef.
-
-When upgrading between versions of perl 6 it may be necessary to remove
-~/.perl6 and/or ~/.zef due to a possible toolchain bug. If you see this issue
-please email details as suggested in the "Reporting Bugs" section below.
-
-
-Where to get help or answers to questions
------------------------------------------
-'p6doc faq' will display a version of the FAQ.
-
-Also see https://faq.perl6.org/
-
-There are several mailing lists, IRC channels, and wikis available with help
-for Perl 6 and Rakudo.
-
-A friendly IRC channel for new starter questions is irc.freenode.net/#perl6
-
-The Rakudo and MoarVM development teams tend to hang out on IRC a fair bit, on
-irc.freenode.net/#perl6-dev and irc.freenode.net/#moarvm, respectively.
-
-IRC tends to be busier than the mailing lists but if you have a question about
-Perl 6 syntax or the right way to approach a problem using Perl 6, you could
-use the perl6-users@perl.org mailing list. This list is primarily for the
-people who want to use Perl 6 to write programs, as opposed to those who are
-implementing or developing the Perl 6 language itself.
-
-Questions about the Rakudo compiler can go to perl6-compiler@perl.org.
-
-The https://perl6.org/ website contains a great many links to resources for Perl
-6 development, and is generally the starting point for information about Perl
-6.
-
-Rakudo's official web site is https://rakudo.org/, where you can
-find useful information for developers and users alike.
-
-
-Reporting bugs
---------------
-Bug reports about Rakudo Star or the Perl 6 specification should be sent to
-rakudobug@perl.org with the moniker [BUG] (including the brackets) at the
-start of the subject so that it gets appropriately tagged in the RT system
-(https://rt.perl.org/rt3/). Please include or attach any sample source code
-that exhibits the bug, and include either the release name/date or the git
-commit identifier. You find this information in the output from "perl6
---version". There's no need to Cc: the perl6-compiler mailing list, as the RT
-system will handle this on its own.
-
-
-Submitting patches
-------------------
-Patches to the Rakudo compiler itself should be submitted to
-'rakudobug@perl.org'. Patches for individual modules should be submitted to
-the module authors (see the module source code for details).
-
-We'll generally accept patches in any form if we can get them to work, but
-unified diff from the 'git' command is greatly preferred. See further
-instructions in the rakudo/ subdirectory for more details. Other ways to
-create and submit patches are discussed at
-https://github.com/rakudo/rakudo/wiki/contrib-introduction
-
-
-AUTHOR
-------
-Patrick Michaud (pmichaud@pobox.com) was originally the primary author and
-maintainer for Rakudo Star. See docs/CREDITS for further Rakudo Star authors,
-and */CREDITS for authors of other collected components.
diff --git a/bin/mkrelease.sh b/bin/mkrelease.sh
new file mode 100755
index 0000000..7c712e0
--- /dev/null
+++ b/bin/mkrelease.sh
@@ -0,0 +1,23 @@
+#! /usr/bin/env sh
+
+readonly BASEDIR=$(CDPATH="" cd -- "$(dirname -- "$0")/.." && pwd -P)
+
+main()
+{
+ if [ -z "$1" ]
+ then
+ usage
+ exit 1
+ fi
+
+ cd -- "$BASEDIR"
+ make -f tools/star/Makefile all VERSION="$1"
+ make -f tools/star/Makefile release VERSION="$1"
+}
+
+usage()
+{
+ print "NYI"
+}
+
+main "$@"
diff --git a/build_msi.bat b/build_msi.bat
deleted file mode 100644
index 270c5f9..0000000
--- a/build_msi.bat
+++ /dev/null
@@ -1,10 +0,0 @@
-rem needs strawberry perl installed and WiX Toolset in the %path%
-rmdir /q/s \rakudo
-perl Configure.pl --prefix=C:\rakudo --gen-moar
-gmake install
-rem following two lines are temporary hack
-rem main rakudo star Configure.pl needs fixing for windows
-copy c:\strawberry\perl\bin\libgcc_s_sjlj-1.dll c:\rakudo\bin
-copy c:\strawberry\perl\bin\libwinpthread-1.dll c:\rakudo\bin
-copy c:\strawberry\perl\bin\libgcc_s_seh-1.dll c:\rakudo\bin
-gmake msi
diff --git a/bundle/Configure.pl b/bundle/Configure.pl
new file mode 100644
index 0000000..4a1984e
--- /dev/null
+++ b/bundle/Configure.pl
@@ -0,0 +1,319 @@
+#! perl
+# Copyright (C) 2009-2018 The Perl Foundation
+
+use 5.008;
+use strict;
+use warnings;
+use Text::ParseWords;
+use Getopt::Long;
+use File::Spec;
+use Cwd;
+use lib 'tools/lib';
+use NQP::Configure qw(sorry slurp cmp_rev gen_nqp read_config
+ fill_template_text fill_template_file
+ system_or_die verify_install);
+
+my $lang = 'Rakudo';
+my $lclang = lc $lang;
+my $uclang = uc $lang;
+my $slash = $^O eq 'MSWin32' ? '\\' : '/';
+
+
+MAIN: {
+ if (-r 'config.default') {
+ unshift @ARGV, shellwords(slurp('config.default'));
+ }
+
+ my %config = (perl => $^X);
+ my $config_status = "${lclang}_config_status";
+ $config{$config_status} = join ' ', map { qq("$_") } @ARGV;
+
+ my $exe = $NQP::Configure::exe;
+
+ my %options;
+ GetOptions(\%options, 'help!', 'prefix=s',
+ 'sysroot=s', 'sdkroot=s',
+ 'backends=s', 'no-clean!',
+ 'gen-nqp:s', 'gen-moar:s', 'moar-option=s@',
+ 'make-install!', 'makefile-timing!',
+ 'force!',
+ ) or do {
+ print_help();
+ exit(1);
+ };
+
+ # Print help if it's requested
+ if ($options{'help'}) {
+ print_help();
+ exit(0);
+ }
+
+ if (-d '.git') {
+ worry(
+ $options{'force'},
+ "I see a .git directory here -- you appear to be trying",
+ "to run Configure.pl from a clone of the Rakudo Star git",
+ "repository.",
+ "You most probably should be following",
+ " tools/star/release-guide.pod",
+ "instead. Please be aware that running Configure.pl from",
+ "a clone of the rakudo star git repo will never be",
+ "the right thing to do.",
+ $options{'force'} ? '--force specified, continuing' : download_text()
+ );
+ }
+
+ unless (defined $options{prefix}) {
+
+ my $default = defined($options{sysroot}) ? '/usr' : File::Spec->catdir(getcwd, 'install');
+ print "ATTENTION: no --prefix supplied, building and installing to $default\n";
+
+ $options{prefix} = $default;
+ }
+
+ $options{prefix} = File::Spec->rel2abs($options{prefix});
+
+ my $prefix = $options{'prefix'};
+ my %known_backends = (jvm => 1, moar => 1);
+ my %letter_to_backend;
+ my $default_backend;
+
+ for (keys %known_backends) {
+ $letter_to_backend{ substr($_, 0, 1) } = $_;
+ }
+
+ my %backends;
+
+ if (defined $options{backends}) {
+ $options{backends} = 'moar,jvm' if lc($options{backends}) eq 'all';
+
+ for my $b (split /,\s*/, $options{backends}) {
+ $b = lc $b;
+
+ if (!$known_backends{$b}) {
+ die "Unknown backend '$b'; Supported backends are: " . join(", ", sort keys %known_backends) . "\n";
+ }
+
+ $backends{$b} = 1;
+ $default_backend ||= $b;
+ }
+
+ if (!%backends) {
+ die "--prefix given, but no valid backend?!\n";
+ }
+ }
+ else {
+ for my $l (sort keys %letter_to_backend) {
+ # TODO: needs .exe/.bat magic on windows?
+ if (-x "$prefix/bin/nqp-$l") {
+ my $b = $letter_to_backend{$l};
+ print "Found $prefix/bin/nqp-$l (backend $b)\n";
+ $backends{$b} = 1;
+ $default_backend ||= $b;
+ }
+ }
+ if (exists $options{'gen-moar'}) {
+ $backends{moar} = 1;
+ $default_backend ||= 'moar';
+ }
+ unless (%backends) {
+ die "No suitable nqp executables found! Please specify some --backends, or a --prefix that contains nqp-{p,j,m} executables\n\n"
+ . "Example to build for all backends (which will take a while):\n"
+ . "\tperl Configure.pl --backends=moar,jvm --gen-moar\n\n"
+ . "Example to build for MoarVM only:\n"
+ . "\tperl Configure.pl --gen-moar\n\n"
+ . "Example to build for JVM only:\n"
+ . "\tperl Configure.pl --backends=jvm --gen-nqp\n\n";
+ }
+ }
+
+ $config{backends} = join ',', keys %backends;
+ $config{backend_exes} = join ' ', map
+ { '$(RAKUDO_DIR)/$(PERL6_' . uc(substr $_, 0, 1) . '_EXE)' }
+ keys %backends;
+ $config{backend_modules_install} = join ' ', map
+ { 'modules-install-' . lc(substr $_, 0, 1) }
+ keys %backends;
+ $config{backend_modules_test} = join ' ', map
+ { 'modules-test-' . lc(substr $_, 0, 1) }
+ keys %backends;
+ $config{verbose_backend_modules_test} = join ' ', map
+ { 'verbose-modules-test-' . lc(substr $_, 0, 1) }
+ keys %backends;
+ $config{default_backend_exe} = '$(PERL6_' .
+ uc(substr $default_backend, 0, 1) .
+ '_INSTALL)';
+
+ if ($backends{jvm}) {
+ warn "Warning: JVM backend does not yet support all modules\n";
+ }
+
+ # Save options in config.status
+ unlink('config.status');
+ if (open(my $CONFIG_STATUS, '>', 'config.status')) {
+ print $CONFIG_STATUS
+ "$^X Configure.pl $config{$config_status} \$*\n";
+ close($CONFIG_STATUS);
+ }
+
+ $config{prefix} = $prefix;
+ $config{sdkroot} = $options{sdkroot};
+ $config{sysroot} = $options{sysroot};
+ $config{pass_rakudo_config} = "";
+ $config{pass_rakudo_config} .= $options{sdkroot} ? " --sdkroot=\"\$(SDKROOT_DIR)\"" : "";
+ $config{pass_rakudo_config} .= $options{sysroot} ? " --sysroot=\"\$(SYSROOT_DIR)\"" : "";
+ $config{slash} = $slash;
+ $config{'makefile-timing'} = $options{'makefile-timing'};
+ $config{'stagestats'} = '--stagestats' if $options{'makefile-timing'};
+ $config{'cpsep'} = $^O eq 'MSWin32' ? ';' : ':';
+ $config{'shell'} = $^O eq 'MSWin32' ? 'cmd' : 'sh';
+ $config{'bat'} = $^O eq 'MSWin32' ? '.bat' : '';
+ $config{'path'} = $^O ne 'MSWin32' ? 'sh -c "PATH=\'$(STAR_BIN_DIR):$(PATH)\'' : 'cmd /c "path $(STAR_BIN_DIR);$(PATH) && ';
+ my $make = $config{'make'} = $^O eq 'MSWin32' ? 'nmake' : 'make';
+
+ my @prefixes = sort map substr($_, 0, 1), keys %backends;
+
+ # determine the version of NQP we want
+ my ($nqp_want) = split(' ', slurp('rakudo/tools/templates/NQP_REVISION'));
+
+ my %binaries;
+ my %impls = gen_nqp($nqp_want, prefix => $prefix, backends => join(',', sort keys %backends), %options);
+
+ my @errors;
+ my %errors;
+ if ($backends{jvm}) {
+ $config{j_nqp} = $impls{jvm}{bin};
+ $config{j_nqp} =~ s{/}{\\}g if $^O eq 'MSWin32';
+ my %nqp_config;
+ if ( $impls{jvm}{config} ) {
+ %nqp_config = %{ $impls{jvm}{config} };
+ }
+ else {
+ push @errors, "Unable to read configuration from NQP on the JVM";
+ }
+ my $bin = $impls{jvm}{bin};
+
+ if (!@errors && !defined $nqp_config{'jvm::runtime.jars'}) {
+ push @errors, "jvm::runtime.jars value not available from $bin --show-config.";
+ }
+
+ $errors{jvm}{'no gen-nqp'} = @errors && !defined $options{'gen-nqp'};
+
+ unless (@errors) {
+ %config = (%nqp_config, %config);
+ print "Using $bin.\n";
+ }
+ }
+ if ($backends{moar}) {
+ $config{m_nqp} = $impls{moar}{bin};
+ $config{m_nqp} =~ s{/}{\\}g if $^O eq 'MSWin32';
+ my %nqp_config;
+ if ( $impls{moar}{config} ) {
+ %nqp_config = %{ $impls{moar}{config} };
+ }
+ else {
+ push @errors, "Unable to read configuration from NQP on MoarVM";
+ }
+
+ $errors{moar}{'no gen-nqp'} = @errors && !defined $options{'gen-nqp'};
+
+ unless (@errors) {
+ %config = (%nqp_config, %config);
+ print "Using $config{m_nqp} (version $nqp_config{'nqp::version'} / MoarVM $nqp_config{'moar::version'}).\n";
+ }
+ }
+
+ if ($errors{jvm}{'no gen-nqp'} || $errors{moar}{'no gen-nqp'}) {
+ my @options_to_pass;
+ push @options_to_pass, "--gen-moar" if $backends{moar};
+ push @options_to_pass, "--gen-nqp" unless @options_to_pass;
+ my $options_to_pass = join ' ', @options_to_pass;
+ my $want_executables =
+ $backends{moar}
+ ? ' and MoarVM'
+ : '';
+ my $s1 = @options_to_pass > 1 ? 's' : '';
+ my $s2 = $want_executables ? 's' : '';
+ push @errors,
+ "\nTo automatically clone (git) and build a copy of NQP $nqp_want,",
+ "try re-running Configure.pl with the '$options_to_pass' option$s1.",
+ "Or, use '--prefix=' to explicitly specify the path where the NQP$want_executables",
+ "executable$s2 can be found that are use to build $lang.";
+ }
+ sorry(@errors) if @errors;
+
+ fill_template_file('tools/build/Makefile.in', 'Makefile', %config);
+
+ unless ($options{'no-clean'}) {
+ no warnings;
+ print "Cleaning up ...\n";
+ for my $p ('', map { "-$_" } @prefixes) {
+ if (open my $CLEAN, '-|', "$make configclean$p") {
+ my @slurp = <$CLEAN>;
+ close($CLEAN);
+ }
+ }
+ }
+
+ if ($options{'make-install'}) {
+ system_or_die($make);
+ system_or_die($make, 'install');
+ print "\n$lang has been built and installed.\n";
+ }
+ else {
+ print "\nYou can now use '$make' to build $lang.\n";
+ print "After that, '$make test' will run some tests and\n";
+ print "'$make install' will install $lang.\n";
+ }
+
+ exit 0;
+}
+
+
+# Print some help text.
+sub print_help {
+ print <<"END";
+Configure.pl - $lang Configure
+
+General Options:
+ --help Show this text
+ --prefix=dir Install files in dir; also look for executables there
+ --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
+ --backends=jvm,moar
+ Which backend(s) to use
+ --gen-moar[=branch]
+ Download and build a copy of MoarVM
+ --gen-nqp[=branch]
+ Download and build a copy of NQP
+ --makefile-timing Enable timing of individual makefile commands
+ --moar-option='--option=value'
+ Options to pass to MoarVM's Configure.pl
+
+Configure.pl also reads options from 'config.default' in the current directory.
+END
+
+ return;
+}
+
+sub download_text {
+ ("The git repository contains the tools needed to build a Rakudo Star",
+ "release, but does not contain a complete Rakudo Star release.",
+ "To download and build the latest release of Rakudo Star, please",
+ "download a .tar.gz file from https://rakudo.perl6.org/downloads/star/ .")
+}
+
+sub worry {
+ my ($force, @text) = @_;
+ sorry(@text) unless $force;
+ print join "\n", @text, '';
+}
+
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
diff --git a/bundle/README.md b/bundle/README.md
new file mode 100644
index 0000000..857b3a6
--- /dev/null
+++ b/bundle/README.md
@@ -0,0 +1,229 @@
+This is Rakudo Star, a useful, usable Rakudo Perl 6 production distribution.
+
+This is the 2019.03 release of Rakudo Star for the 6.d version of Perl 6.
+
+Rakudo Star is Copyright (C) 2010 - 2019 by the Rakudo Star Team.
+
+
+License Information
+-------------------
+Rakudo Star is distributed under the terms of the Artistic License 2.0.
+This distribution contains software collected from other sources; see the
+individual source subdirectories (in rakudo/, MoarVM/ and modules/)
+for copyright and licensing information of those components.
+
+
+Overview
+--------
+The Rakudo Perl 6 compiler can target MoarVM and the JVM. Rakudo Star fully
+supports MoarVM; not all modules work on the JVM at present. You can choose
+to build and install Rakudo for one or more of these virtual machines at
+configure time.
+
+
+Build Prerequisites for Rakudo on MoarVM
+----------------------------------------
+To build Rakudo Star on MoarVM, you need at least a 'make' utility, a C
+compiler, and Perl 5.10.0 or newer. Building Rakudo on MoarVM needs a
+machine with a gigabyte of memory; for a 32-bit build, you may get by
+with less.
+
+
+Build Prerequisites for Rakudo on the JVM
+-----------------------------------------
+Please note that this release of Rakudo Star is *not* fully functional with the
+JVM backend from the Rakudo compiler. Use the JVM backend only if you are
+trying to help with fixing JVM support (which is best done upstream with the
+monthly Rakudo release). This is a known issue and it's not worth reporting
+JVM failures as bugs unless you have patches.
+
+To build an experimental Rakudo Star on the JVM, you need at least a 'make'
+utility, both 'java' and 'javac' available in your path, and Perl 5.10.0 or
+newer. The 'java' and 'javac' are obtained by installing a Java Development
+kit, for example openjdk-8 or the Oracle JDK.
+
+The newer the JDK you have the better; due to bugs in the invokedynamic
+instruction in early releases, JDK 8 or above is needed. The build can
+complete within a gigabyte of memory.
+
+
+Configuring Rakudo Star
+-----------------------
+The easiest way to build Rakudo Star for a particular backend is:
+
+ $ perl Configure.pl --backend=moar --gen-moar # MoarVM
+ $ perl Configure.pl --backend=jvm --gen-nqp # JVM
+
+You can also build for all backends:
+
+ $ perl Configure.pl --backend=moar,jvm --gen-moar
+
+Note that --gen-moar automatically builds a MoarVM for you, and implies
+--gen-nqp, which builds NQP, a subset of Perl 6 that is used to implement
+Rakudo.
+
+Configured this way, one or more Perl 6 executables and selected Perl 6
+modules will be installed into the install/ subdirectory, which resides inside
+the source archive directory. Running make install will *not* install anything
+into /usr/local. If you want to change this behavior, specify the install
+prefix using the --prefix option.
+
+Configuring with the --prefix option
+------------------------------------
+If you want to install rakudo into a system-wide directory, you must either
+have root privileges or own the desired installation directory. Assuming you
+are root, use any of the desired configuration commands shown above and add
+"--prefix=$INSTDIR" to the end where $INSTDIR is the installation directory
+of choice.
+
+Building Rakudo Star
+--------------------
+After configuration, build Rakudo Star on a UNIX-like system with:
+
+ $ make
+ $ make install
+
+Rakudo Star can be built on Windows either using Microsoft tools (MSVC) and
+nmake or using gcc and gmake as bundled with Strawberry Perl. In the latter
+case use cmd.exe rather than bash as a shell.
+
+Note that possible platform-specific errata may be covered under:
+https://perl6.org/downloads/
+
+Setting up the environment
+--------------------------
+To set up the environment under a UNIX type system you will need to add the
+absolute path of the local "install/bin" directory under your source build
+directory or system-wide "${INSTDIR}/bin" directory (if you used the
+--prefix option) to your PATH environment variable.
+
+Note also that other executable scripts such as "p6doc" will be installed
+under "${INSTDIR}/share/perl6/site/bin" so you also need to add that to the
+PATH for development convenience.
+
+You will have to append the %PATH% in a similar way under Windows. You
+may have to use Windows type directory path separators.
+
+You will be reminded of the two additions to the PATH by a welcome message
+after the source build completes.
+
+Once Rakudo Star is installed (and assuming perl6 is in your PATH), you can
+run Perl 6 programs by doing:
+
+ $ perl6 hello.p6
+
+If the Rakudo compiler is invoked without an explicit script to run, it
+enters a small interactive mode that allows Perl 6 statements to be executed
+from the command line.
+
+
+Running the Perl 6 test suite
+-----------------------------
+Entering "make rakudo-test" will run a small test suite that comes bundled
+with Rakudo. This is a simple suite of tests, designed to make sure that the
+Rakudo compiler is basically working and that it's capable of running a simple
+test harness.
+
+Running "make rakudo-spectest" will run the Perl 6 specification test suite
+("roast") that was bundled with the Rakudo compiler release.
+
+Running "make modules-test" will run the test suites of any installed modules.
+The modules currently have to be installed (via 'make install' or 'make
+modules-install') before the tests can be run.
+
+Currently a number of roast tests may be reported as missing due to a known
+issue with test suite versioning. This can be ignored and it's hoped this will
+be fixed shortly.
+
+
+Perl 6 Documentation
+--------------------
+The official documentation site is https://docs.perl6.org/
+
+This distribution also contains documentation in the docs/ directory:
+
+ docs/cheatsheet.txt — Perl 6 cheat sheet
+ docs/2015-spw-perl6-course.pdf — A short Perl 6 course
+ docs/perl6intro.pdf — Recent snapshot of https://perl6intro.com/
+ docs/announce/ — Detailed release announcements
+
+https://perl6intro.com/ is available in multiple languages, French, German,
+Japanese, Spanish, Portuguese, Dutch, Bulgarian, Chinese, Italian, Turkish,
+Indonesian and Russian at the time of writing.
+
+
+Installing Perl 6 Modules
+-------------------------
+zef is a module installer bundled with Rakudo Star.
+
+See https://github.com/ugexe/zef for zef documentation.
+
+A list of modules available in the "ecosystem" is at https://modules.perl6.org/
+
+Git is useful for zef.
+
+When upgrading between versions of perl 6 it may be necessary to remove
+~/.perl6 and/or ~/.zef due to a possible toolchain bug. If you see this issue
+please email details as suggested in the "Reporting Bugs" section below.
+
+
+Where to get help or answers to questions
+-----------------------------------------
+'p6doc faq' will display a version of the FAQ.
+
+Also see https://faq.perl6.org/
+
+There are several mailing lists, IRC channels, and wikis available with help
+for Perl 6 and Rakudo.
+
+A friendly IRC channel for new starter questions is irc.freenode.net/#perl6
+
+The Rakudo and MoarVM development teams tend to hang out on IRC a fair bit, on
+irc.freenode.net/#perl6-dev and irc.freenode.net/#moarvm, respectively.
+
+IRC tends to be busier than the mailing lists but if you have a question about
+Perl 6 syntax or the right way to approach a problem using Perl 6, you could
+use the perl6-users@perl.org mailing list. This list is primarily for the
+people who want to use Perl 6 to write programs, as opposed to those who are
+implementing or developing the Perl 6 language itself.
+
+Questions about the Rakudo compiler can go to perl6-compiler@perl.org.
+
+The https://perl6.org/ website contains a great many links to resources for Perl
+6 development, and is generally the starting point for information about Perl
+6.
+
+Rakudo's official web site is https://rakudo.org/, where you can
+find useful information for developers and users alike.
+
+
+Reporting bugs
+--------------
+Bug reports about Rakudo Star or the Perl 6 specification should be sent to
+rakudobug@perl.org with the moniker [BUG] (including the brackets) at the
+start of the subject so that it gets appropriately tagged in the RT system
+(https://rt.perl.org/rt3/). Please include or attach any sample source code
+that exhibits the bug, and include either the release name/date or the git
+commit identifier. You find this information in the output from "perl6
+--version". There's no need to Cc: the perl6-compiler mailing list, as the RT
+system will handle this on its own.
+
+
+Submitting patches
+------------------
+Patches to the Rakudo compiler itself should be submitted to
+'rakudobug@perl.org'. Patches for individual modules should be submitted to
+the module authors (see the module source code for details).
+
+We'll generally accept patches in any form if we can get them to work, but
+unified diff from the 'git' command is greatly preferred. See further
+instructions in the rakudo/ subdirectory for more details. Other ways to
+create and submit patches are discussed at
+https://github.com/rakudo/rakudo/wiki/contrib-introduction
+
+
+AUTHOR
+------
+Patrick Michaud (pmichaud@pobox.com) was originally the primary author and
+maintainer for Rakudo Star. See docs/CREDITS for further Rakudo Star authors,
+and */CREDITS for authors of other collected components.
diff --git a/bundle/build_msi.bat b/bundle/build_msi.bat
new file mode 100644
index 0000000..270c5f9
--- /dev/null
+++ b/bundle/build_msi.bat
@@ -0,0 +1,10 @@
+rem needs strawberry perl installed and WiX Toolset in the %path%
+rmdir /q/s \rakudo
+perl Configure.pl --prefix=C:\rakudo --gen-moar
+gmake install
+rem following two lines are temporary hack
+rem main rakudo star Configure.pl needs fixing for windows
+copy c:\strawberry\perl\bin\libgcc_s_sjlj-1.dll c:\rakudo\bin
+copy c:\strawberry\perl\bin\libwinpthread-1.dll c:\rakudo\bin
+copy c:\strawberry\perl\bin\libgcc_s_seh-1.dll c:\rakudo\bin
+gmake msi
diff --git a/tools/star/Makefile b/tools/star/Makefile
index 9d74422..a1b879a 100644
--- a/tools/star/Makefile
+++ b/tools/star/Makefile
@@ -9,7 +9,9 @@ MOAR_VER = 2019.07.1
STAR_REL = rakudo-star-$(VERSION)
STAR_TGZ = $(STAR_REL).tar.gz
-SRC_DIR = src
+SRC_DIR = work/src
+WORKDIR ?= $(shell pwd)/work/rakudo-star-$(VERSION)
+RELEASE_DIR = $(shell pwd)/work/release
RAKUDO_TGZ = rakudo-$(RAKUDO_VER).tar.gz
RAKUDO_URL = https://rakudo.perl6.org/downloads/rakudo/$(RAKUDO_TGZ)
@@ -26,29 +28,27 @@ PREFIX = $(PERL) $(CURDIR)/tools/star/prefix.pl
WGET = wget
TAR = tar
-all: rakudo nqp moar manifest
-
-always:
+all: rakudo nqp moarvm manifest
rakudo: nqp $(RAKUDO_SRC)
- mkdir rakudo
- $(TAR) -C rakudo --strip-components 1 -xzf $(RAKUDO_SRC)
+ mkdir -p $(WORKDIR)/rakudo
+ $(TAR) -C $(WORKDIR)/rakudo --strip-components 1 -xzf $(RAKUDO_SRC)
$(RAKUDO_SRC):
mkdir -p $(SRC_DIR)
$(WGET) $(RAKUDO_URL) -O $(RAKUDO_SRC)
-nqp: moar $(NQP_SRC)
- mkdir nqp
- $(TAR) -C nqp --strip-components 1 -xzf $(NQP_SRC)
+nqp: moarvm $(NQP_SRC)
+ mkdir -p $(WORKDIR)/nqp
+ $(TAR) -C $(WORKDIR)/nqp --strip-components 1 -xzf $(NQP_SRC)
$(NQP_SRC):
mkdir -p $(SRC_DIR)
$(WGET) $(NQP_URL) -O $(NQP_SRC)
-moar: $(MOAR_SRC)
- mkdir MoarVM
- $(TAR) -C MoarVM --strip-components 1 -xzf $(MOAR_SRC)
+moarvm: $(MOAR_SRC)
+ mkdir -p $(WORKDIR)/MoarVM
+ $(TAR) -C $(WORKDIR)/MoarVM --strip-components 1 -xzf $(MOAR_SRC)
$(MOAR_SRC):
mkdir -p $(SRC_DIR)
@@ -59,37 +59,59 @@ modules/DBIish/lib:
git submodule init
git submodule update
-manifest: modules/DBIish/lib
- echo MANIFEST >MANIFEST
- git ls-files >>MANIFEST
- $(PREFIX) rakudo/ rakudo/MANIFEST >>MANIFEST
- $(PREFIX) nqp/ nqp/MANIFEST >>MANIFEST
- $(PREFIX) MoarVM/ MoarVM/MANIFEST >>MANIFEST
- git submodule foreach --quiet 'git ls-files | $(PREFIX) $$path/' >>MANIFEST
- grep -v -f tools/star/MANIFEST.exclude MANIFEST >MANIFEST.1
- $(PERL) -n -e 'chomp; print "$$_\n"' MANIFEST.1 >MANIFEST
- sort -o MANIFEST MANIFEST
- rm MANIFEST.1
+manifest:
+ printf "%s\n" MANIFEST >> "$(WORKDIR)/MANIFEST"
+
+ # Add an assortment of files from this repository
+ git ls-files | grep -E '^docs' >> "$(WORKDIR)/MANIFEST"
+ git ls-files | grep -E '^modules' >> "$(WORKDIR)/MANIFEST"
+ git ls-files | grep -E '^ports' >> "$(WORKDIR)/MANIFEST"
+ git ls-files | grep -E '^tools' >> "$(WORKDIR)/MANIFEST"
+
+ printf "%s\n" build_msi.bat >> "$(WORKDIR)/MANIFEST"
+ printf "%s\n" Configure.pl >> "$(WORKDIR)/MANIFEST"
+ printf "%s\n" LICENSE >> "$(WORKDIR)/MANIFEST"
+ printf "%s\n" README.md >> "$(WORKDIR)/MANIFEST"
+
+ # Add the 3 core parts for Raku
+ cd -- "$(WORKDIR)" && $(PREFIX) rakudo/ rakudo/MANIFEST >> "$(WORKDIR)/MANIFEST"
+ cd -- "$(WORKDIR)" && $(PREFIX) nqp/ nqp/MANIFEST >> "$(WORKDIR)/MANIFEST"
+ cd -- "$(WORKDIR)" && $(PREFIX) MoarVM/ MoarVM/MANIFEST >> "$(WORKDIR)/MANIFEST"
+
+ # Add ecosystem modules
+ git submodule foreach --quiet 'git ls-files | $(PREFIX) $$path/' >> $(WORKDIR)/MANIFEST
+
+ # Remove explicitly removed files
+ grep -v -f tools/star/MANIFEST.exclude $(WORKDIR)/MANIFEST > $(WORKDIR)/MANIFEST.1
+ mv -- "$(WORKDIR)/MANIFEST.1" "$(WORKDIR)/MANIFEST"
+
+ # Clean up whitespace
+ $(PERL) -n -e 'chomp; print "$$_\n"' $(WORKDIR)/MANIFEST > $(WORKDIR)/MANIFEST.1
+ mv -- "$(WORKDIR)/MANIFEST.1" "$(WORKDIR)/MANIFEST"
+
+ # Sort the MANIFEST
+ sort -o $(WORKDIR)/MANIFEST $(WORKDIR)/MANIFEST
patch:
patch -p1 < patches/star-ver.patch
tarball: manifest
[ -n "$(VERSION)" ] || ( echo "\nTry '$(MAKE) release VERSION=yyyy.mm'\n\n"; exit 1 )
- [ -d $(STAR_REL) ] || ln -s . $(STAR_REL)
-
- mkdir -p "release"
- $(PREFIX) $(STAR_REL)/ MANIFEST \
- | grep -Ev '^$(STAR_REL)/release/' \
- | $(TAR) -zc -T - -f "release/$(STAR_TGZ)"
+ mkdir -p "$(RELEASE_DIR)"
+ cp -r modules "$(WORKDIR)/."
+ cp -r docs "$(WORKDIR)/."
+ cp -r ports "$(WORKDIR)/."
+ cp -r tools "$(WORKDIR)/."
+ cp LICENSE "$(WORKDIR)/."
+ cp bundle/README.md "$(WORKDIR)/."
+ cp bundle/build_msi.bat "$(WORKDIR)/."
+ cp bundle/Configure.pl "$(WORKDIR)/."
- rm $(STAR_REL)
+ cd -- work && $(PREFIX) $(STAR_REL)/ "$(WORKDIR)/MANIFEST" \
+ | $(TAR) -zc -T - -f "$(RELEASE_DIR)/$(STAR_TGZ)"
release: tarball
clean:
- rm -fr rakudo
- rm -fr nqp
- rm -fr MoarVM
- rm -fr src
+ rm -fr work
--
cgit v1.1