aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaoum Hankache <naoum88@gmail.com>2020-02-26 20:14:39 +0300
committerGitHub <noreply@github.com>2020-02-26 20:14:39 +0300
commita6253c2b109538031b7c9b52cbd56adb266c4746 (patch)
tree1b349ba24e7732118d884b4122ef741f091e2704
parent139ba6333a8b7497b5349a6ed9fde963ea7a90e7 (diff)
parent34714c9ec604da31fc87a98f1f7f165ea50214d1 (diff)
Merge pull request #144 from Tyil/master
Get Rakudo Star working for 2019.07.1
-rw-r--r--.gitignore18
-rw-r--r--.gitlab-ci.yml85
-rw-r--r--.gitmodules308
-rw-r--r--Dockerfile22
-rw-r--r--README.md47
-rwxr-xr-xbin/build-release.sh73
-rwxr-xr-xbin/mkchecksum.sh48
-rwxr-xr-xbin/mkdocker.sh52
-rwxr-xr-xbin/mkrelease.sh54
-rw-r--r--bundle/Configure.pl (renamed from Configure.pl)51
-rw-r--r--bundle/README.md (renamed from README)0
-rw-r--r--bundle/build_msi.bat (renamed from build_msi.bat)0
-rw-r--r--dev-bin/ci-debug.sh21
-rw-r--r--docs/announce/2019.07.md4
-rw-r--r--docs/announce/2019.11.md35
-rw-r--r--docs/announce/2020.01.md25
-rw-r--r--docs/guides/adding-new-community-modules.md9
-rw-r--r--docs/guides/mac-dmg.pod (renamed from tools/star/mac-dmg.pod)0
-rw-r--r--docs/guides/release-guide.md273
-rw-r--r--docs/guides/windows-msi.pod (renamed from tools/star/windows-msi.pod)0
m---------modules/App::Prove60
m---------modules/DBIish0
m---------modules/DateTime::Format (renamed from modules/perl6-datetime-format)0
m---------modules/DateTime::Parse0
m---------modules/Debugger::UI::CommandLine0
m---------modules/Digest0
m---------modules/Digest::MD5 (renamed from modules/perl6-digest-md5)0
m---------modules/Encode0
m---------modules/File::Directory::Tree0
m---------modules/File::Find (renamed from modules/file-find)0
m---------modules/File::Temp (renamed from modules/p6-File-Temp)0
m---------modules/File::Which (renamed from modules/perl6-file-which)0
m---------modules/Getopt::Long0
m---------modules/Grammar::Debugger (renamed from modules/grammar-debugger)0
m---------modules/Grammar::Profiler::Simple (renamed from modules/Grammar-Profiler-Simple)0
m---------modules/HTTP::Easy (renamed from modules/perl6-http-easy)0
m---------modules/HTTP::Status (renamed from modules/perl6-http-status)0
m---------modules/HTTP::UserAgent0
m---------modules/IO::Capture::Simple (renamed from modules/io-capture-simple)0
m---------modules/IO::Socket::SSL (renamed from modules/io-socket-ssl)0
m---------modules/IO::String (renamed from modules/p6-io-string)0
m---------modules/JSON-Class0
m---------modules/JSON-Marshal0
m---------modules/JSON::Class0
m---------modules/JSON::Fast0
m---------modules/JSON::Marshal0
m---------modules/JSON::Name (renamed from modules/JSON-Name)0
m---------modules/JSON::RPC (renamed from modules/jsonrpc)0
m---------modules/JSON::Tiny (renamed from modules/json)0
m---------modules/JSON::Unmarshal (renamed from modules/JSON-Unmarshal)0
m---------modules/LWP::Simple0
m---------modules/LibraryCheck0
m---------modules/LibraryMake (renamed from modules/library-make)0
m---------modules/License-SPDX0
m---------modules/License::SPDX0
m---------modules/Linenoise0
m---------modules/META60
m---------modules/MIME::Base64 (renamed from modules/Perl6-MIME-Base64)0
-rw-r--r--modules/MODULES.txt114
m---------modules/NativeHelpers::Blob (renamed from modules/NativeHelpers-Blob)0
m---------modules/OO::Monitors0
m---------modules/OpenSSL (renamed from modules/openssl)0
m---------modules/Pod-To-HTML0
m---------modules/Pod::Load0
m---------modules/Pod::To::BigPage (renamed from modules/perl6-pod-to-bigpage)0
m---------modules/Pod::To::HTML0
m---------modules/Readline0
m---------modules/SVG (renamed from modules/svg)0
m---------modules/SVG::Plot (renamed from modules/svg-plot)0
m---------modules/Shell::Command (renamed from modules/shell-command)0
m---------modules/TAP0
m---------modules/Temp::Path (renamed from modules/perl6-Temp-Path)0
m---------modules/Template::Mojo (renamed from modules/Template-Mojo)0
m---------modules/Template::Mustache (renamed from modules/p6-Template-Mustache)0
m---------modules/Terminal::ANSIColor (renamed from modules/Terminal-ANSIColor)0
m---------modules/Test::META (renamed from modules/Test-META)0
m---------modules/Test::Mock0
m---------modules/Test::Output0
m---------modules/Test::Util::ServerPort (renamed from modules/test-util-serverport)0
m---------modules/Test::When (renamed from modules/perl6-Test-When)0
m---------modules/Testo (renamed from modules/perl6-Testo)0
m---------modules/URI0
m---------modules/XML::Writer (renamed from modules/xml-writer)0
m---------modules/app-prove60
m---------modules/datetime-parse0
m---------modules/debugger-ui-commandline0
m---------modules/doc0
m---------modules/getopt-long60
m---------modules/http-useragent0
m---------modules/json_fast0
m---------modules/libdigest-perl60
m---------modules/oo-monitors0
m---------modules/p6-file-directory-tree0
m---------modules/p6-pod-load0
m---------modules/p6doc0
m---------modules/perl6-Test-Output0
m---------modules/perl6-encode0
m---------modules/perl6-lwp-simple0
m---------modules/tap-harness60
m---------modules/test-mock0
m---------modules/uri0
m---------modules/zef0
-rw-r--r--tools/build/Makefile.in6
-rw-r--r--tools/build/module-install.pl36
-rw-r--r--tools/build/modules-test.pl60
-rw-r--r--tools/lib/NQP/Configure.pm3
-rw-r--r--tools/star/Makefile98
-rw-r--r--tools/star/release-guide.pod350
108 files changed, 1128 insertions, 664 deletions
diff --git a/.gitignore b/.gitignore
index a80f75d..435fc1e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,12 @@
-MANIFEST
-rakudo
-nqp
-MoarVM
-src
-config.status
-Makefile
-install
-perl6
+# Editor specific files
*.swp
*~
\#*#
+
+# Temporary files used to build a new Rakudo Star release
+MANIFEST
+Makefile
+config.status
+perl6
+release
+work
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..22bdad8
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,85 @@
+stages:
+ - Package
+ - Build
+ - Test
+ - Release
+
+Tarball:
+ stage: Package
+ image: alpine:latest
+ before_script:
+ - apk add --no-cache coreutils git make perl
+ script:
+ - git submodule sync
+ - git submodule update --init --recursive
+ - bin/mkrelease.sh "$CI_COMMIT_REF_NAME"
+ - bin/mkchecksum.sh "work/release/rakudo-star-$CI_COMMIT_REF_NAME.tar.gz"
+ artifacts:
+ paths:
+ - work/release
+
+Rakudo Star:
+ stage: Build
+ image: alpine:latest
+ before_script:
+ - apk add --no-cache coreutils bash build-base git openssl-dev perl readline-dev
+ - bin/mkchecksum.sh "work/release/rakudo-star-$CI_COMMIT_REF_NAME.tar.gz"
+ - mkdir -p "$CI_PROJECT_DIR/work/build"
+ - cd -- "$CI_PROJECT_DIR/work/build"
+ - 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="$CI_PROJECT_DIR/work/install" --backend=moar --gen-moar --make-install
+ artifacts:
+ paths:
+ - work/build
+ - work/install
+
+Rakudo Test:
+ stage: Test
+ image: alpine:latest
+ before_script:
+ - apk add --no-cache build-base perl
+ - cd -- "work/build/rakudo-star-$CI_COMMIT_REF_NAME"
+ script:
+ - make rakudo-test
+
+Rakudo Spectest:
+ stage: Test
+ image: alpine:latest
+ allow_failure: true
+ before_script:
+ - apk add --no-cache build-base git perl
+ - cd -- "work/build/rakudo-star-$CI_COMMIT_REF_NAME"
+ script:
+ - make rakudo-spectest
+
+Debug Test:
+ stage: Test
+ image: alpine:latest
+ before_script:
+ - export PATH="$CI_PROJECT_DIR/work/install/bin:$CI_PROJECT_DIR/work/install/share/perl6/site/bin:$PATH"
+ - apk add --no-cache build-base git perl
+ script:
+ - sh "$CI_PROJECT_DIR/dev-bin/ci-debug.sh"
+
+Community Modules:
+ stage: Test
+ image: alpine:latest
+ before_script:
+ - export PATH="$CI_PROJECT_DIR/work/install/bin:$CI_PROJECT_DIR/work/install/share/perl6/site/bin:$PATH"
+ - apk add --no-cache build-base openssl-dev perl perl-test-harness-utils readline-dev
+ - cd -- "work/build/rakudo-star-$CI_COMMIT_REF_NAME"
+ script:
+ - make verbose-modules-test
+
+Docker:
+ stage: Release
+ image: docker:stable
+ services:
+ - docker:dind
+ before_script:
+ - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+ script:
+ - docker build --build-arg "VERSION=$CI_COMMIT_REF_NAME" -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME" .
+ - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
diff --git a/.gitmodules b/.gitmodules
index 5d1be8c..46597d9 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,177 +1,183 @@
-[submodule "modules/debugger-ui-commandline"]
- path = modules/debugger-ui-commandline
- url = git://github.com/jnthn/rakudo-debugger
-[submodule "modules/xml-writer"]
- path = modules/xml-writer
- url = git://github.com/masak/xml-writer
-[submodule "modules/svg"]
- path = modules/svg
- url = git://github.com/moritz/svg
-[submodule "modules/svg-plot"]
- path = modules/svg-plot
- url = git://github.com/moritz/svg-plot
-[submodule "modules/test-mock"]
- path = modules/test-mock
- url = git://github.com/jnthn/test-mock
-[submodule "modules/Grammar-Profiler-Simple"]
- path = modules/Grammar-Profiler-Simple
- url = git://github.com/perlpilot/Grammar-Profiler-Simple
-[submodule "modules/grammar-debugger"]
- path = modules/grammar-debugger
- url = git://github.com/jnthn/grammar-debugger
-[submodule "modules/json"]
- path = modules/json
- url = git://github.com/moritz/json
-[submodule "modules/perl6-digest-md5"]
- path = modules/perl6-digest-md5
- url = git://github.com/cosimo/perl6-digest-md5
-[submodule "modules/perl6-http-status"]
- path = modules/perl6-http-status
- url = git://github.com/supernovus/perl6-http-status
-[submodule "modules/perl6-http-easy"]
- path = modules/perl6-http-easy
- url = git://github.com/supernovus/perl6-http-easy
-[submodule "modules/Template-Mojo"]
- path = modules/Template-Mojo
- url = git://github.com/tadzik/Template-Mojo
+[submodule "modules/Debugger::UI::CommandLine"]
+ path = modules/Debugger::UI::CommandLine
+ url = git://github.com/jnthn/rakudo-debugger.git
+[submodule "modules/XML::Writer"]
+ path = modules/XML::Writer
+ url = git://github.com/masak/xml-writer.git
+[submodule "modules/SVG"]
+ path = modules/SVG
+ url = git://github.com/moritz/svg.git
+[submodule "modules/SVG::Plot"]
+ path = modules/SVG::Plot
+ url = git://github.com/moritz/svg-plot.git
+[submodule "modules/Test::Mock"]
+ path = modules/Test::Mock
+ url = git://github.com/jnthn/test-mock.git
+[submodule "modules/Grammar::Profiler::Simple"]
+ path = modules/Grammar::Profiler::Simple
+ url = git://github.com/perlpilot/Grammar-Profiler-Simple.git
+[submodule "modules/Grammar::Debugger"]
+ path = modules/Grammar::Debugger
+ url = git://github.com/jnthn/grammar-debugger.git
+[submodule "modules/JSON::Tiny"]
+ path = modules/JSON::Tiny
+ url = git://github.com/moritz/json.git
+[submodule "modules/Digest::MD5"]
+ path = modules/Digest::MD5
+ url = git://github.com/cosimo/perl6-digest-md5.git
+[submodule "modules/HTTP::Status"]
+ path = modules/HTTP::Status
+ url = git://github.com/supernovus/perl6-http-status.git
+[submodule "modules/HTTP::Easy"]
+ path = modules/HTTP::Easy
+ url = git://github.com/supernovus/perl6-http-easy.git
+[submodule "modules/Template::Mojo"]
+ path = modules/Template::Mojo
+ url = git://github.com/tadzik/Template-Mojo.git
[submodule "modules/DBIish"]
path = modules/DBIish
- url = git://github.com/perl6/DBIish
-[submodule "modules/uri"]
- path = modules/uri
- url = git://github.com/perl6-community-modules/uri
-[submodule "modules/perl6-lwp-simple"]
- path = modules/perl6-lwp-simple
- url = git://github.com/perl6/perl6-lwp-simple
-[submodule "modules/jsonrpc"]
- path = modules/jsonrpc
- url = git://github.com/bbkr/jsonrpc
-[submodule "modules/Pod-To-HTML"]
- path = modules/Pod-To-HTML
- url = git://github.com/perl6/Pod-To-HTML
-[submodule "modules/doc"]
- path = modules/doc
- url = git://github.com/perl6/doc
-[submodule "modules/Perl6-MIME-Base64"]
- path = modules/Perl6-MIME-Base64
- url = git://github.com/perl6/Perl6-MIME-Base64
+ url = git://github.com/perl6/DBIish.git
+[submodule "modules/URI"]
+ path = modules/URI
+ url = git://github.com/perl6-community-modules/uri.git
+[submodule "modules/LWP::Simple"]
+ path = modules/LWP::Simple
+ url = git://github.com/perl6/perl6-lwp-simple.git
+[submodule "modules/JSON::RPC"]
+ path = modules/JSON::RPC
+ url = git://github.com/bbkr/jsonrpc.git
+[submodule "modules/Pod::To::HTML"]
+ path = modules/Pod::To::HTML
+ url = git://github.com/perl6/Pod-To-HTML.git
+[submodule "modules/p6doc"]
+ path = modules/p6doc
+ url = git://github.com/perl6/doc.git
+[submodule "modules/MIME::Base64"]
+ path = modules/MIME::Base64
+ url = git://github.com/perl6/Perl6-MIME-Base64.git
[submodule "modules/PSGI"]
path = modules/PSGI
- url = git://github.com/supernovus/perl6-psgi
-[submodule "modules/shell-command"]
- path = modules/shell-command
- url = git://github.com/tadzik/Shell-Command
-[submodule "modules/file-find"]
- path = modules/file-find
- url = git://github.com/tadzik/File-Find
-[submodule "modules/p6-Template-Mustache"]
- path = modules/p6-Template-Mustache
- url = git://github.com/softmoth/p6-Template-Mustache
-[submodule "modules/p6-File-Temp"]
- path = modules/p6-File-Temp
- url = git://github.com/perlpilot/p6-File-Temp
-[submodule "modules/p6-file-directory-tree"]
- path = modules/p6-file-directory-tree
- url = git://github.com/labster/p6-file-directory-tree
-[submodule "modules/Terminal-ANSIColor"]
- path = modules/Terminal-ANSIColor
- url = git://github.com/tadzik/Terminal-ANSIColor
-[submodule "modules/json_fast"]
- path = modules/json_fast
- url = git://github.com/timo/json_fast
-[submodule "modules/library-make"]
- path = modules/library-make
- url = https://github.com/retupmoca/P6-LibraryMake/
+ url = git://github.com/supernovus/perl6-psgi.git
+[submodule "modules/Shell::Command"]
+ path = modules/Shell::Command
+ url = git://github.com/tadzik/Shell-Command.git
+[submodule "modules/File::Find"]
+ path = modules/File::Find
+ url = git://github.com/tadzik/File-Find.git
+[submodule "modules/Template::Mustache"]
+ path = modules/Template::Mustache
+ url = git://github.com/softmoth/p6-Template-Mustache.git
+[submodule "modules/File::Temp"]
+ path = modules/File::Temp
+ url = git://github.com/perlpilot/p6-File-Temp.git
+[submodule "modules/File::Directory::Tree"]
+ path = modules/File::Directory::Tree
+ url = git://github.com/labster/p6-file-directory-tree.git
+[submodule "modules/Terminal::ANSIColor"]
+ path = modules/Terminal::ANSIColor
+ url = git://github.com/tadzik/Terminal-ANSIColor.git
+[submodule "modules/JSON::Fast"]
+ path = modules/JSON::Fast
+ url = git://github.com/timo/json_fast.git
+[submodule "modules/LibraryMake"]
+ path = modules/LibraryMake
+ url = git://github.com/retupmoca/P6-LibraryMake.git
[submodule "modules/Linenoise"]
path = modules/Linenoise
- url = https://github.com/hoelzro/p6-linenoise/
-[submodule "modules/perl6-file-which"]
- path = modules/perl6-file-which
- url = git://github.com/azawawi/perl6-file-which
-[submodule "modules/NativeHelpers-Blob"]
- path = modules/NativeHelpers-Blob
- url = git://github.com/salortiz/NativeHelpers-Blob
-[submodule "modules/perl6-pod-to-bigpage"]
- path = modules/perl6-pod-to-bigpage
+ url = git://github.com/hoelzro/p6-linenoise.git
+[submodule "modules/File::Which"]
+ path = modules/File::Which
+ url = git://github.com/azawawi/perl6-file-which.git
+[submodule "modules/NativeHelpers::Blob"]
+ path = modules/NativeHelpers::Blob
+ url = git://github.com/salortiz/NativeHelpers-Blob.git
+[submodule "modules/Pod::To::BigPage"]
+ path = modules/Pod::To::BigPage
url = git://github.com/gfldex/perl6-pod-to-bigpage.git
[submodule "modules/zef"]
path = modules/zef
url = git://github.com/ugexe/zef.git
-[submodule "modules/oo-monitors"]
- path = modules/oo-monitors
- url = git://github.com/jnthn/oo-monitors
-[submodule "modules/tap-harness6"]
- path = modules/tap-harness6
+[submodule "modules/OO::Monitors"]
+ path = modules/OO::Monitors
+ url = git://github.com/jnthn/oo-monitors.git
+[submodule "modules/TAP"]
+ path = modules/TAP
url = git://github.com/perl6/tap-harness6.git
-[submodule "modules/p6-io-string"]
- path = modules/p6-io-string
+[submodule "modules/IO::String"]
+ path = modules/IO::String
url = git://github.com/hoelzro/p6-io-string.git
-[submodule "modules/perl6-Test-When"]
- path = modules/perl6-Test-When
+[submodule "modules/Test::When"]
+ path = modules/Test::When
url = git://github.com/zoffixznet/perl6-Test-When.git
-[submodule "modules/perl6-encode"]
- path = modules/perl6-encode
- url = git://github.com/sergot/perl6-encode.git
-[submodule "modules/Test-META"]
- path = modules/Test-META
+[submodule "modules/Test::META"]
+ path = modules/Test::META
url = git://github.com/jonathanstowe/Test-META.git
-[submodule "modules/perl6-datetime-format"]
- path = modules/perl6-datetime-format
+[submodule "modules/DateTime::Format"]
+ path = modules/DateTime::Format
url = git://github.com/supernovus/perl6-datetime-format.git
[submodule "modules/META6"]
path = modules/META6
url = git://github.com/jonathanstowe/META6.git
-[submodule "modules/JSON-Class"]
- path = modules/JSON-Class
+[submodule "modules/JSON::Class"]
+ path = modules/JSON::Class
url = git://github.com/jonathanstowe/JSON-Class.git
-[submodule "modules/JSON-Marshal"]
- path = modules/JSON-Marshal
+[submodule "modules/JSON::Marshal"]
+ path = modules/JSON::Marshal
url = git://github.com/jonathanstowe/JSON-Marshal.git
-[submodule "modules/JSON-Name"]
- path = modules/JSON-Name
+[submodule "modules/JSON::Name"]
+ path = modules/JSON::Name
url = git://github.com/jonathanstowe/JSON-Name
-[submodule "modules/JSON-Unmarshal"]
- path = modules/JSON-Unmarshal
+[submodule "modules/JSON::Unmarshal"]
+ path = modules/JSON::Unmarshal
url = git://github.com/tadzik/JSON-Unmarshal.git
-[submodule "modules/http-useragent"]
- path = modules/http-useragent
+[submodule "modules/HTTP::UserAgent"]
+ path = modules/HTTP::UserAgent
url = git://github.com/sergot/http-useragent.git
-[submodule "modules/datetime-parse"]
- path = modules/datetime-parse
+[submodule "modules/DateTime::Parse"]
+ path = modules/DateTime::Parse
url = git://github.com/sergot/datetime-parse.git
-[submodule "modules/io-capture-simple"]
- path = modules/io-capture-simple
+[submodule "modules/IO::Capture::Simple"]
+ path = modules/IO::Capture::Simple
url = git://github.com/sergot/IO-Capture-Simple.git
-[submodule "modules/test-util-serverport"]
- path = modules/test-util-serverport
+[submodule "modules/Test::Util::ServerPort"]
+ path = modules/Test::Util::ServerPort
url = git://github.com/jonathanstowe/Test-Util-ServerPort.git
-[submodule "modules/openssl"]
- path = modules/openssl
- url = git://github.com/sergot/openssl
-[submodule "modules/io-socket-ssl"]
- path = modules/io-socket-ssl
- url = git://github.com/sergot/io-socket-ssl
-[submodule "modules/app-prove6"]
- path = modules/app-prove6
- url = git://github.com/Leont/app-prove6
-[submodule "modules/getopt-long6"]
- path = modules/getopt-long6
- url = git://github.com/Leont/getopt-long6
-[submodule "modules/p6-pod-load"]
- path = modules/p6-pod-load
- url = git@github.com:JJ/p6-pod-load
-[submodule "modules/perl6-Temp-Path"]
- path = modules/perl6-Temp-Path
- url = git@github.com:ufobat/perl6-Temp-Path
-[submodule "modules/libdigest-perl6"]
- path = modules/libdigest-perl6
- url = git@github.com:grondilu/libdigest-perl6
-[submodule "modules/perl6-Testo"]
- path = modules/perl6-Testo
- url = git@github.com:perl6-community-modules/perl6-Testo
-[submodule "modules/License-SPDX"]
- path = modules/License-SPDX
- url = git@github.com:jonathanstowe/License-SPDX
-[submodule "modules/perl6-Test-Output"]
- path = modules/perl6-Test-Output
- url = git@github.com:perl6-community-modules/perl6-Test-Output
+[submodule "modules/OpenSSL"]
+ path = modules/OpenSSL
+ url = git://github.com/sergot/openssl.git
+[submodule "modules/IO::Socket::SSL"]
+ path = modules/IO::Socket::SSL
+ url = git://github.com/sergot/io-socket-ssl.git
+[submodule "modules/App::Prove6"]
+ path = modules/App::Prove6
+ url = git://github.com/Leont/app-prove6.git
+[submodule "modules/Getopt::Long"]
+ path = modules/Getopt::Long
+ url = git://github.com/Leont/getopt-long6.git
+[submodule "modules/Pod::Load"]
+ path = modules/Pod::Load
+ url = git://github.com/JJ/p6-pod-load.git
+[submodule "modules/Temp::Path"]
+ path = modules/Temp::Path
+ url = git://github.com/ufobat/perl6-Temp-Path.git
+[submodule "modules/Digest"]
+ path = modules/Digest
+ url = git://github.com/grondilu/libdigest-perl6.git
+[submodule "modules/Testo"]
+ path = modules/Testo
+ url = git://github.com/perl6-community-modules/perl6-Testo.git
+[submodule "modules/License::SPDX"]
+ path = modules/License::SPDX
+ url = git://github.com/jonathanstowe/License-SPDX.git
+[submodule "modules/Test::Output"]
+ path = modules/Test::Output
+ url = git://github.com/perl6-community-modules/perl6-Test-Output.git
+[submodule "modules/LibraryCheck"]
+ path = modules/LibraryCheck
+ url = git://github.com/jonathanstowe/LibraryCheck.git
+[submodule "modules/Readline"]
+ path = modules/Readline
+ url = git://github.com/drforr/perl6-readline.git
+[submodule "modules/Encode"]
+ path = modules/Encode
+ url = git://github.com/sergot/perl6-encode.git
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..3117420
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,22 @@
+FROM alpine:latest AS build
+
+ARG VERSION
+
+COPY work /tmp/work
+
+WORKDIR /tmp/rakudo-star
+
+RUN apk add --no-cache build-base git perl perl-utils openssl-dev readline-dev
+RUN tar xzf "/tmp/work/release/rakudo-star-$VERSION.tar.gz"
+RUN cd -- "rakudo-star-$VERSION" \
+ && perl Configure.pl --prefix=/usr/local --backend=moar --gen-moar --make-install
+
+FROM alpine:latest
+
+WORKDIR /root
+
+RUN apk add --no-cache libressl
+
+COPY --from=build /usr/local /usr/local
+
+CMD [ "perl6" ]
diff --git a/README.md b/README.md
index 5b10faa..36a0ac9 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,44 @@
# Rakudo Star
-This git repository contains _only_ the tools needed to create a Rakudo Star distribution.
+Rakudo Star is a user-oriented distribution of the Raku programming language,
+and a number of common community modules.
-The `tar` files available from `github.com`
-are NOT suitable for building Rakudo Star; do not use them.
+This git repository contains _only_ the tools needed to create a Rakudo Star
+distribution, not the sources of individual components of the distribution.
+These are fetched when you build the distribution tarball.
+
+The `tar` files available from `github.com` for MoarVM, NQP and Rakudo are NOT
+suitable for building Rakudo Star; do not use them. Instead, use the tarballs
+found on the individual projects' sites, which correctly contain all the
+utilities and dependencies used by them.
## Get Rakudo Star
-To get the latest release of Rakudo Star, please download the corresponding file depending on your platform.
-* [Linux](https://rakudo.org/latest/star/source)
-* [Windows](https://rakudo.org/latest/star/win64)
-* [macOS](https://rakudo.org/latest/star/macos)
+To get the latest release of Rakudo Star, please download the corresponding
+file depending on your platform.
+
+- [Linux](https://rakudo.org/latest/star/source)
+- [Windows](https://rakudo.org/latest/star/win64)
+- [macOS](https://rakudo.org/latest/star/macos)
## Build Rakudo Star
-If you're a Rakudo Star release manager, or someone who wants to create a new Perl 6
-distribution based on the tools here, then run `make -f tools/star/Makefile` to
-populate a distribution image.
-## Guides
-* [Release guide](tools/star/release-guide.pod)
+If you're a Rakudo Star release manager, or someone who wants to create a
+user-friendly Raku distribution based on the tools here, check the `guides`
+directory. This contains documentation on how to make a Rakudo Star tarball, as
+well as information on how to create Windows `.msi` and MacOS `.dmg` packages.
+
+### Quickstart
+
+ export VERSION=quickstart # Update to whatever version number you want to use
+ ./bin/mkrelease.sh "$VERSION"
+ mkdir -p work/build
+ tar xzf "work/release/rakudo-star-$VERSION.tar.gz" -C work/build
+ cd "work/build/rakudo-star-$VERSION"
+ perl Configure.pl --prefix="../../install" --backend=moar --gen-moar --make-install
-* [Guide to build MSI packages](tools/star/windows-msi.pod)
+If you're satisfied, you probably want to generate checksums and a detached PGP
+signature for the release.
-* [Guide to build DMG packages](tools/star/mac-dmg.pod)
+ ./bin/mkchecksum "work/release/rakudo-star-$VERSION.tar.gz"
+ gpg --armor --detach-sign "work/release/rakudo-star-$VERSION.tar.gz"
diff --git a/bin/build-release.sh b/bin/build-release.sh
new file mode 100755
index 0000000..fc8319e
--- /dev/null
+++ b/bin/build-release.sh
@@ -0,0 +1,73 @@
+#! /usr/bin/env sh
+
+readonly BASEDIR=$(CDPATH="" cd -- "$(dirname -- "$0")/.." && pwd -P)
+
+main()
+{
+ # Handle opts
+ opts "$@"
+ shift "$OPTS"
+ unset OPTS
+
+ # Show help
+ [ "$OPT_HELP_ONLY" ] && usage && exit 0
+ [ -z "$1" ] && usage && exit 1
+
+ prefix="${OPT_PREFIX:-$BASEDIR/work/install}"
+
+ # Exit after every failure from here on out
+ set -e
+
+ # Build Rakudo Star from the release tarball
+ mkdir -p -- "$BASEDIR/work/build"
+ cd -- "$BASEDIR/work/build"
+ tar xzf "$BASEDIR/work/release/rakudo-star-$1.tar.gz"
+ cd "rakudo-star-$1"
+ perl Configure.pl --prefix="$prefix" --backend=moar --gen-moar
+
+ if [ "$OPT_INSTALL" ]
+ then
+ make install
+ fi
+}
+
+opts()
+{
+ OPTS=0
+
+ while getopts ":hip:" opt
+ do
+ case "$opt" in
+ h) OPT_HELP_ONLY=1 ;;
+ i) OPT_INSTALL=1 ; OPTS=$(( OPTS + 1 )) ;;
+ p) OPT_PREFIX=$OPTARG ; OPTS=$(( OPTS + 2 )) ;;
+ *)
+ printf "Invalid option passed: %s\n" "$OPTARG" >&2
+ ;;
+ esac
+ done
+
+ unset opt
+}
+
+usage()
+{
+ cat <<EOF
+Usage:
+ $(basename "$0") -h
+ $(basename "$0") [-i [-p <path>]] <version>
+
+Build Rakudo Star from a release tarball in $BASEDIR/work/release. This tarball
+can be easily made using mkrelease.sh in this repository. If you don't specify
+-i, this will not install Raku in $BASEDIR/work/install. This can be convenient
+if you just want to run some simple tests.
+
+Options:
+ -h Show this help text and exit.
+ -i Also install the freshly built Rakudo Star.
+ -p Set a prefix to install Rakudo Star into. Defaults to ./work/install,
+ relative to the repository root.
+EOF
+}
+
+main "$@"
diff --git a/bin/mkchecksum.sh b/bin/mkchecksum.sh
new file mode 100755
index 0000000..5a7ac1f
--- /dev/null
+++ b/bin/mkchecksum.sh
@@ -0,0 +1,48 @@
+#! /usr/bin/env sh
+
+main()
+{
+ # Handle opts
+ opts "$@"
+ shift "$OPTS"
+ unset OPTS
+
+ # Show help
+ [ "$OPT_HELP_ONLY" ] && usage && exit 0
+ [ -z "$1" ] && usage && exit 1
+
+ printf "md5 %s\n" "$(md5sum "$1" | cut -f1 -d" ")"
+ printf "sha1 %s\n" "$(sha1sum "$1" | cut -f1 -d" ")"
+ printf "sha224 %s\n" "$(sha224sum "$1" | cut -f1 -d" ")"
+ printf "sha256 %s\n" "$(sha256sum "$1" | cut -f1 -d" ")"
+ printf "sha384 %s\n" "$(sha384sum "$1" | cut -f1 -d" ")"
+ printf "sha512 %s\n" "$(sha512sum "$1" | cut -f1 -d" ")"
+}
+
+opts()
+{
+ OPTS=0
+
+ while getopts ":h" opt
+ do
+ case "$opt" in
+ h) OPT_HELP_ONLY=1 ;;
+ *)
+ printf "Invalid option passed: %s\n" "$OPTARG" >&2
+ ;;
+ esac
+ done
+}
+
+usage()
+{
+ cat <<EOF
+Usage:
+ $(basename "$0") -h
+ $(basename "$0") <file>
+
+Make a number of checksums of a given file.
+EOF
+}
+
+main "$@"
diff --git a/bin/mkdocker.sh b/bin/mkdocker.sh
new file mode 100755
index 0000000..8c6e1b8
--- /dev/null
+++ b/bin/mkdocker.sh
@@ -0,0 +1,52 @@
+#! /usr/bin/env sh
+
+readonly BASEDIR=$(CDPATH="" cd -- "$(dirname -- "$0")/.." && pwd -P)
+
+main()
+{
+ # Handle opts
+ opts "$@"
+ shift "$OPTS"
+ unset OPTS
+
+ # Show help
+ [ "$OPT_HELP_ONLY" ] && usage && exit 0
+ [ -z "$1" ] && usage && exit 1
+
+ # Make the Docker image
+ cd -- "$BASEDIR"
+ docker build --build-arg "VERSION=$1" -t "rakudo-star:$1" .
+ docker tag "rakudo-star:$1" rakudo-star:latest
+}
+
+opts()
+{
+ OPTS=0
+
+ while getopts ":h" opt
+ do
+ case "$opt" in
+ h) OPT_HELP_ONLY=1 ;;
+ *)
+ printf "Invalid option passed: %s\n" "$OPTARG" >&2
+ ;;
+ esac
+ done
+}
+
+usage()
+{
+ cat <<EOF
+Usage:
+ $(basename "$0") -h
+ $(basename "$0") <version>
+
+Make a Docker image for Rakudo Star. This requires a release tarball to exist.
+You must specify the same version argument as you supplied to mkrelease.sh.
+
+Options:
+ -h Show this help text and exit.
+EOF
+}
+
+main "$@"
diff --git a/bin/mkrelease.sh b/bin/mkrelease.sh
new file mode 100755
index 0000000..5dc036d
--- /dev/null
+++ b/bin/mkrelease.sh
@@ -0,0 +1,54 @@
+#! /usr/bin/env sh
+
+readonly BASEDIR=$(CDPATH="" cd -- "$(dirname -- "$0")/.." && pwd -P)
+
+main()
+{
+ # Handle opts
+ opts "$@"
+ shift "$OPTS"
+ unset OPTS
+
+ # Show help
+ [ "$OPT_HELP_ONLY" ] && usage && exit 0
+ [ -z "$1" ] && usage && exit 1
+
+ # Make the release
+ cd -- "$BASEDIR"
+ make -f tools/star/Makefile all VERSION="$1" \
+ && make -f tools/star/Makefile release VERSION="$1"
+}
+
+opts()
+{
+ OPTS=0
+
+ while getopts ":h" opt
+ do
+ case "$opt" in
+ h) OPT_HELP_ONLY=1 ;;
+ *)
+ printf "Invalid option passed: %s\n" "$OPTARG" >&2
+ ;;
+ esac
+ done
+}
+
+usage()
+{
+ cat <<EOF
+Usage:
+ $(basename "$0") -h
+ $(basename "$0") <version>
+
+Make a releasable tarball of Rakudo Star. You must specify a version number,
+which will be used to name the tarball. The tarball will be put in
+$BASEDIR/work/release. You will still have to manually create checksums and a
+PGP signature.
+
+Options:
+ -h Show this help text and exit.
+EOF
+}
+
+main "$@"
diff --git a/Configure.pl b/bundle/Configure.pl
index 0627b2f..4a1984e 100644
--- a/Configure.pl
+++ b/bundle/Configure.pl
@@ -49,53 +49,56 @@ MAIN: {
}
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()
+ 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');
+
+ 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';
+ $options{backends} = 'moar,jvm' if lc($options{backends}) eq 'all';
+
for my $b (split /,\s*/, $options{backends}) {
$b = lc $b;
- if ($b eq 'parrot') {
- die "Parrot support has been suspended from Rakudo Star. Please use version 2015.02 if you need Parrot support, or otherwise the MoarVM backend.\n";
- }
- unless ($known_backends{$b}) {
- die "Unknown backend '$b'; Supported backends are: " .
- join(", ", sort keys %known_backends) .
- "\n";
+
+ if (!$known_backends{$b}) {
+ die "Unknown backend '$b'; Supported backends are: " . join(", ", sort keys %known_backends) . "\n";
}
+
$backends{$b} = 1;
$default_backend ||= $b;
}
- unless (%backends) {
+
+ if (!%backends) {
die "--prefix given, but no valid backend?!\n";
}
}
@@ -171,7 +174,7 @@ MAIN: {
my @prefixes = sort map substr($_, 0, 1), keys %backends;
# determine the version of NQP we want
- my ($nqp_want) = split(' ', slurp('rakudo/tools/build/NQP_REVISION'));
+ 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);
diff --git a/README b/bundle/README.md
index 857b3a6..857b3a6 100644
--- a/README
+++ b/bundle/README.md
diff --git a/build_msi.bat b/bundle/build_msi.bat
index 270c5f9..270c5f9 100644
--- a/build_msi.bat
+++ b/bundle/build_msi.bat
diff --git a/dev-bin/ci-debug.sh b/dev-bin/ci-debug.sh
new file mode 100644
index 0000000..f7a460a
--- /dev/null
+++ b/dev-bin/ci-debug.sh
@@ -0,0 +1,21 @@
+#! /usr/bin/env sh
+
+#
+# This is an additional script, ran during CI testing. This is intended to
+# debug issues that show up only during CI testing.
+#
+
+main()
+{
+ perl6 -v
+ perl6 -e 'dd $*KERNEL.signal("SIGHUP"), $*KERNEL.signal("HUP")'
+ perl6 -e 'dd $*KERNEL.signal(SIGHUP)'
+ perl6 -e 'dd $*KERNEL.signal("SIGHUP")'
+ perl6 -e 'dd $*KERNEL.signal(HUP)'
+ perl6 -e 'dd $*KERNEL.signal("HUP")'
+ perl6 -e 'dd Signal.enums'
+ perl6 -e 'dd $*KERNEL.signals'
+ uname -a
+}
+
+main "$@"
diff --git a/docs/announce/2019.07.md b/docs/announce/2019.07.md
new file mode 100644
index 0000000..dfe2a37
--- /dev/null
+++ b/docs/announce/2019.07.md
@@ -0,0 +1,4 @@
+# Rakudo Star (2019.07)
+
+This is a test release.
+
diff --git a/docs/announce/2019.11.md b/docs/announce/2019.11.md
new file mode 100644
index 0000000..8af3599
--- /dev/null
+++ b/docs/announce/2019.11.md
@@ -0,0 +1,35 @@
+# Announce: Rakudo Star Release 2019.11
+
+Just in time for the end of the year, Rakudo Star 2019.11. Only the second
+release this year, compared to the usual four releases per year, but it beats
+having only a single one.
+
+Many systems received a couple slight tweaks in order to keep them working for
+newer releases. Some of these received them only to make them easier to
+understand for me. After a lot of hard work, and with help from people all
+around the community, this release was made possible.
+
+A big thanks to everyone involved!
+
+## Changes
+
+- The build system itself received some rigorous changes. All work is now done
+ in the `work` subdirectory, instead of in the root directory. A number of
+ scripts were altered to output some more information as well, which is mostly
+ intended to help Rakudo Star maintainers figure out issues.
+
+- Perl 6 is being renamed to Raku, and this is the first Rakudo Star release
+ containing `raku` as executable. It's just a symbolic link to `rakudo` right
+ now, but it allows you to run programs usin `raku`.
+
+### Ecosystem Modules
+
+- `Linenoise` has been dropped in favour of `Readline`. This also got
+ `LibraryCheck` included, as this is a dependency for `Readline`.
+
+## Downloads
+
+- [Rakudo Star 2019.11](https://dist.tyil.nl/raku/rakudo-star/rakudo-star-2019.11.tar.gz)
+- [Rakudo Star 2019.11 checksums](https://dist.tyil.nl/raku/rakudo-star/rakudo-star-2019.11.tar.gz.checksums.txt)
+- [Rakudo Star 2019.11 PGP signature](https://dist.tyil.nl/raku/rakudo-star/rakudo-star-2019.11.tar.gz.asc)
+- [PGP key (0x7A6AC285E2D98827)](https://www.tyil.nl/pubkey.txt)
diff --git a/docs/announce/2020.01.md b/docs/announce/2020.01.md
new file mode 100644
index 0000000..e4e3fc2
--- /dev/null
+++ b/docs/announce/2020.01.md
@@ -0,0 +1,25 @@
+# Announce: Rakudo Star Release 2020.01
+
+This is the first release of Rakudo Star for the year of the lord, 2020.
+
+The systems that were tweaked in the last version seem to work quite well, and
+none were updated. A number of modules did receive updates, and these have been
+bundles with this release.
+
+## Changes
+
+- Rakudo has been bumped to tag `2020.01`.
+- MoarVM has been bumped to tag `2020.01.1`.
+- NQP has been bumped to tag `2020.01`.
+
+### Ecosystem Modules
+
+No modules were added or removed in this release, compared to the previous
+release.
+
+## Downloads
+
+- [Rakudo Star 2020.01](https://dist.tyil.nl/raku/rakudo-star/rakudo-star-2020.01.tar.gz)
+- [Rakudo Star 2020.01 checksums](https://dist.tyil.nl/raku/rakudo-star/rakudo-star-2020.01.tar.gz.checksums.txt)
+- [Rakudo Star 2020.01 PGP signature](https://dist.tyil.nl/raku/rakudo-star/rakudo-star-2020.01.tar.gz.asc)
+- [PGP key (0x7A6AC285E2D98827)](https://www.tyil.nl/pubkey.txt)
diff --git a/docs/guides/adding-new-community-modules.md b/docs/guides/adding-new-community-modules.md
new file mode 100644
index 0000000..42c429f
--- /dev/null
+++ b/docs/guides/adding-new-community-modules.md
@@ -0,0 +1,9 @@
+
+
+If there are any new modules to be added, use C<git submodule> to add
+its repo to the modules/ directory. Also add the module directory
+name to the C<modules/MODULES.txt> file.
+
+ $ git submodule add git@github.com:user/acme-example modules/acme-example
+ $ echo acme-example >>modules/MODULES.txt
+ $ git commit . -m "Added acme-example to installed modules."
diff --git a/tools/star/mac-dmg.pod b/docs/guides/mac-dmg.pod
index 7ebc64a..7ebc64a 100644
--- a/tools/star/mac-dmg.pod
+++ b/docs/guides/mac-dmg.pod
diff --git a/docs/guides/release-guide.md b/docs/guides/release-guide.md
new file mode 100644
index 0000000..5bd8ce2
--- /dev/null
+++ b/docs/guides/release-guide.md
@@ -0,0 +1,273 @@
+# Rakudo Star release guide
+
+Rakudo Star releases are based on Rakudo compiler releases. Since some time is
+often needed for module updates and testing after each Rakudo compiler release,
+the timing of Star releases varies from one release to the next.
+
+Also, while the Rakudo compiler issues monthly releases, Star releases are free
+to choose a longer release cycle. Star releases are also free to choose older
+releases of the compiler, NQP, or MoarVM. The goal is to balance end-user
+stability needs with progress being made on the compiler, modules, and other
+runtime components. Currently, Star is on a quarterly release cycle.
+
+## Creating a release distribution
+
+If this is your first time releasing, **read the whole guide before starting**.
+That way you can ask questions and clear up and confusions before you're in the
+thick of it.
+
+If you have done this before, you might want to check for and read any changes
+to this release guide since your last run.
+
+### Clone this repository
+
+ git clone git://gitlab.com/tyil/rakudo-star.git
+
+If this is not your first time, you probably already have a copy of this
+repository, in which case you should pull the latest changes.
+
+ git pull origin master
+
+### Branch out
+
+Since all the information is stored in git, this is a great moment to create a
+new branch. This will make it easier to roll back if things go horribly wrong,
+and to create a merge request later on to get other people to review the
+changes.
+
+ git switch -c $VERSION-rc1
+
+### Update all community modules
+
+All community modules that are going to be bundled with this release need to be
+made up-to-date. These are managed as submodules, so `git submodule` comes in
+handy here.
+
+ git submodule sync
+ git submodule update --init --recursive
+ git submodule foreach git pull origin master
+ git commit -m "Update submodules"
+
+At this point `git status` should report a clean repository.
+
+### Set component versions
+
+Inside the repository is a Makefile which indicates which versions of upstream
+components should be used. This file can be found at `tools/star/Makefile`.
+These version numbers are *usually* similar, but not necesarily. Specifically,
+it is about the values for `RAKUDO_VER`, `NQP_VER`, `MOAR_VER`.
+
+If unsure, ask for the specific value for `RAKUDO_VER` in `#raku-dev` on
+`irc.freenode.net`. The `NQP_VER` can be found inside the Rakudo repository, in
+`tools/build/NQP_REVISION`, and the `MOAR_VER` can be found in the NQP
+repository in the `tools/build/MOAR_REVISION` file.
+
+ $EDITOR tools/star/Makefile
+ git commit -m "Bump component versions"
+
+### Create a release announcement
+
+For every release, an announcement should be made. These can be found in
+`docs/announce`. They follow the same versioning scheme as Rakudo Star itself,
+and as such, the name for the new one should have the current version number,
+followed by `.md` since the announcements are in Markdown.
+
+You should include the latest version number changes, community module changes
+(updated ones, deleted ones, new ones), and any other information which might
+be relevant to end-users or package maintainers.
+
+ $EDITOR docs/announce/$VERSION.md
+ git add !$
+ git commit -m "Add release announcement for $VERSION"
+
+### Bump Rakudo Star version number
+
+The version number for Rakudo Star itself is referred to in another file,
+`Makefile.in`, which needs updating.
+
+ $EDITOR tools/build/Makefile.in.
+ git commit -m "Bump Rakudo Star version"
+
+### Publish changes
+
+With all the prep-work done, it is time to build an actual release
+distribution. This is done using GitLab CI, so all you need to do now is push
+the changes back to the repository. Generally, this would be done through a
+merge request, so the changes can be reviewed and approved. Luckily, you're
+already using a seperate branch, so this is pretty straightforward as well.
+
+ git push origin $VERSION-rc1
+
+This should give you an URL to create a merge request directly, however, if it
+does not, you'll have to use your `$BROWSER` to go to the repository web page,
+and make one manually.
+
+### Creating the release candidate
+
+GitLab CI has been set up to create a new release on every branch or tag. As
+such, the previous `git push` should have started a CI job to build a
+distribution tarball. If it did not, please consult `#raku-dev` on
+`irc.freenode.net`.
+
+The CI setup also contains a testing phase, where the resulting tarball is
+compiled and tested. If any of these steps fail, a solution must be found. The
+best place to discuss options would be, again, the `#raku-dev` channel.
+
+### Creating the official release
+
+Once the release candidate has been approved to become an official release, the
+branch can be merged into `master`. Afterwards, create a new tag for the new
+release, and push it to the remote repository. GitLab CI will make a tarball
+for you.
+
+ git switch master
+ git pull origin master
+ git tag -s $VERSION
+ git push origin $VERSION
+
+The `-s` option for `git tag` makes you sign this particular tag with your PGP
+key. All tags must be signed, so if you lack a PGP key, you should [strongly
+consider to get yourself one](https://fedoraproject.org/wiki/Creating_GPG_Keys).
+
+### Publishing the official release
+
+Once GitLab CI has built and tested the final image, you can download it as an
+artifact from the job. The job is of stage "Package, and name "Tarball".
+Downloading the artifacts will get you a zip file with the tarball inside of
+it. Extract the zipfile to some temporary location. Next, create a PGP
+signature and checksums for it, to allow other people to verify they got the
+right thing.
+
+For checksumming, a small utility can be found in the `bin` directory,
+`mkchecksum`, which will generate a number or checksum formats for a given
+file.
+
+ cd -- "$(mktemp -d)"
+ wget "$ARTIFACTS_URL"
+ unzip download
+ cd work/release
+ gpg --armor --detach-sig *.tar.gz
+ mkchecksum *.tar.gz > rakudo-star-$VERSION.tar.gz.checksum.txt
+
+Lastly, the three files you have right now should be uploaded to the remote
+server hosting official releases.
+
+TODO: I currently don't have any information on this step yet!
+
+ If you don't have permission to do this step, please ask one of the core
+ devs (pmichaud, jnthn, masak, PerlJam/perlpilot, tadzik, or moritz) on
+ C<#perl6> to do it for you.
+
+### Announce the new release
+
+Now that a new release has been made, you're *technically* done. However, it
+would be much appreciated if you also announce to the rest of the world that a
+new release has been published. The most important place would be `rakudo.org`.
+
+#### rakudo.org
+The sources of this site can be found in the
+[`perl6/rakudo.org`](https://github.com/perl6/rakudo.org repository on GitHub).
+It contains a small script to make this easier, called
+`push-latest-rakudo-star-announcement.p6`. You will need to have a working
+`perl6` in your `$PATH`, and have the `WWW` module installed.
+
+ cd -- "$(mktemp -d)"
+ git clone git@github.com:perl6/rakudo.org .
+ ./push-latest-rakudo-star-announcement.p6 $VERSION
+
+You will also have to bump versions manually in C<templates/files.html.ep> in
+the rakudo.org repo.
+
+#### Other places of importance
+
+There are more places around the 'net that should be informed of the new
+release. These are not all documented, so you may have to ask around to get
+access.
+
+- http://perl6.org/
+- perl6-users@perl.org
+- perl6-language@perl.org
+- perl6-compiler@perl.org
+- http://en.wikipedia.org/wiki/Rakudo_Perl_6 (latest release date is mentioned in the main text)
+- http://en.wikipedia.org/wiki/Perl_6
+
+You should actively ask others to advertise the release as well. This includes
+their social media accounts and blogs. Notable places include:
+
+- http://blogs.perl.org/
+- [Perl 6 Facebook Page](https://www.facebook.com/groups/1595443877388632/)
+- Reddit: [r/perl](https://www.reddit.com/r/perl/),
+ [r/rakulang](https://www.reddit.com/r/rakulang/),
+ [r/programming](https://www.reddit.com/r/programming/)
+- [Hacker News](https://news.ycombinator.com/news)
+- Twitter: [@rakudoperl](https://twitter.com/rakudoperl)
+
+### Give yourself some credit
+
+Add this release and your name to the list of releases at the end of this
+document, to eternalize your fame. This may also help other people interested
+in making releases to find people to help them when any issues arrive.
+
+ $EDITOR docs/guides/release-guide.md
+
+You may want to commit and push this file as well, of course.
+
+**You're done!** Celebrate with the appropriate amount of fun.
+
+## Rakudo Star release list
+
+- `2019.03`: hankache, clarkema
+- `2018.10`: stmuk
+- `2018.06`: stmuk
+- `2018.04`: stmuk
+- `2018.01`: stmuk
+- `2017.10`: stmuk
+- `2017.07`: stmuk
+- `2017.04`: stmuk
+- `2017.01`: stmuk
+- `2016.11`: stmuk
+- `2016.10`: stmuk
+- `2016.07`: stmuk
+- `2016.04`: stmuk
+- `2016.01`: FROGGS
+- `2015.11`: moritz
+- `2015.09`: moritz
+- `2015.07`: moritz
+- `2015.06`: FROGGS
+- `2015.03`: moritz
+- `2015.02`: moritz
+- `2015.01`: moritz
+- `2014.12`: moritz
+- `2014.09`: FROGGS
+- `2014.08`: FROGGS
+- `2014.04`: jnthn
+- `2014.03`: FROGGS
+- `2014.01`: tadzik
+- `2013.12`: lue
+- `2013.11`: moritz
+- `2013.10`: lue
+- `2013.09`: moritz
+- `2013.08`: moritz
+- `2013.05`: pmichaud
+- `2013.02`: moritz
+- `2013.01`: moritz
+- `2012.12`: moritz
+- `2012.11`: moritz
+- `2012.10`: jnthn
+- `2012.09`: pmichaud
+- `2012.08`: pmichaud
+- `2012.07`: pmichaud
+- `2012.06`: moritz
+- `2012.05`: moritz
+- `2012.04`: moritz
+- `2012.02`: jnthn
+- `2012.01`: jnthn
+- `2011.07`: pmichaud
+- `2011.04`: pmichaud
+- `2011.01`: pmichaud
+- `2010.12`: pmichaud
+- `2010.11`: pmichaud
+- `2010.10`: pmichaud
+- `2010.09`: pmichaud
+- `2010.08`: pmichaud
+- `2010.07`: pmichaud
diff --git a/tools/star/windows-msi.pod b/docs/guides/windows-msi.pod
index 8674c22..8674c22 100644
--- a/tools/star/windows-msi.pod
+++ b/docs/guides/windows-msi.pod
diff --git a/modules/App::Prove6 b/modules/App::Prove6
new file mode 160000
+Subproject c3e62325e3400fc6147b27682a967568e1027a7
diff --git a/modules/DBIish b/modules/DBIish
-Subproject 606089631fdbfc526dd86eac7070d736951c786
+Subproject 0c50fd9a6aa3fa3bc4365e0b81f1c07cae1e944
diff --git a/modules/perl6-datetime-format b/modules/DateTime::Format
-Subproject 3f3c99314e36029e36738097685a51dd94a188c
+Subproject 3f3c99314e36029e36738097685a51dd94a188c
diff --git a/modules/DateTime::Parse b/modules/DateTime::Parse
new file mode 160000
+Subproject acf2f4f493891d3accdc25e8209ce275899d5dd
diff --git a/modules/Debugger::UI::CommandLine b/modules/Debugger::UI::CommandLine
new file mode 160000
+Subproject 45817dc77f4e1d0f50d3bd9b64e76f1033cc197
diff --git a/modules/Digest b/modules/Digest
new file mode 160000
+Subproject 42ba6bef6ca5a9e532ad1436465df7af0cd5f70
diff --git a/modules/perl6-digest-md5 b/modules/Digest::MD5
-Subproject 2194250ff2d50a37f92d4f82fac216729f4eba8
+Subproject 2194250ff2d50a37f92d4f82fac216729f4eba8
diff --git a/modules/Encode b/modules/Encode
new file mode 160000
+Subproject 7561b5f48cd666f5f767d400c5fa7444f546e3a
diff --git a/modules/File::Directory::Tree b/modules/File::Directory::Tree
new file mode 160000
+Subproject 12f1ab52191efa38787de26e5a8d4c01a94d03a
diff --git a/modules/file-find b/modules/File::Find
-Subproject 41421e8f1aec7207a1633de17f7630b7ceba1ff
+Subproject 41421e8f1aec7207a1633de17f7630b7ceba1ff
diff --git a/modules/p6-File-Temp b/modules/File::Temp
-Subproject 7f128adc5bbad8d172f87e868c52eb85339fc90
+Subproject 7f128adc5bbad8d172f87e868c52eb85339fc90
diff --git a/modules/perl6-file-which b/modules/File::Which
-Subproject 1dfbeba2f92f8b2b04e8b26619eb20d599198d2
+Subproject 1dfbeba2f92f8b2b04e8b26619eb20d599198d2
diff --git a/modules/Getopt::Long b/modules/Getopt::Long
new file mode 160000
+Subproject 2f83c23fac987fbabcb4bbcc0ee386edff7a27a
diff --git a/modules/grammar-debugger b/modules/Grammar::Debugger
-Subproject 0375008027c8caa216bd869476ce59ae09b2a70
+Subproject 0375008027c8caa216bd869476ce59ae09b2a70
diff --git a/modules/Grammar-Profiler-Simple b/modules/Grammar::Profiler::Simple
-Subproject c0aca5fab323b2974821dabd6b89330c609e0b7
+Subproject c0aca5fab323b2974821dabd6b89330c609e0b7
diff --git a/modules/perl6-http-easy b/modules/HTTP::Easy
-Subproject 8742272c4913e6e05895f90c96262cd0c37772d
+Subproject 8742272c4913e6e05895f90c96262cd0c37772d
diff --git a/modules/perl6-http-status b/modules/HTTP::Status
-Subproject c8226cfcfe5ee65536880287fcd0c332f7f409f
+Subproject c8226cfcfe5ee65536880287fcd0c332f7f409f
diff --git a/modules/HTTP::UserAgent b/modules/HTTP::UserAgent
new file mode 160000
+Subproject 590680d9679a6a1184ef224ec03b86bd0df2603
diff --git a/modules/io-capture-simple b/modules/IO::Capture::Simple
-Subproject 360a6bed347723940b9f0fb12be04cb5ec84f35
+Subproject 360a6bed347723940b9f0fb12be04cb5ec84f35
diff --git a/modules/io-socket-ssl b/modules/IO::Socket::SSL
-Subproject f07010c8965855ff734de297466c883afffbb56
+Subproject f07010c8965855ff734de297466c883afffbb56
diff --git a/modules/p6-io-string b/modules/IO::String
-Subproject 364df2753eef8976d902ed51b4085e77f1dda23
+Subproject 364df2753eef8976d902ed51b4085e77f1dda23
diff --git a/modules/JSON-Class b/modules/JSON-Class
deleted file mode 160000
-Subproject 691e59138925d9bfd9130abcabbe5b2d2913f5a
diff --git a/modules/JSON-Marshal b/modules/JSON-Marshal
deleted file mode 160000
-Subproject c40bec636cc5948932fa467841725c93e30db32
diff --git a/modules/JSON::Class b/modules/JSON::Class
new file mode 160000
+Subproject 6037517c6843a6a58d55c778dbe0e2575e04d83
diff --git a/modules/JSON::Fast b/modules/JSON::Fast
new file mode 160000
+Subproject eb6ae0d339ed2441eb9df7758e3e1b6609eb514
diff --git a/modules/JSON::Marshal b/modules/JSON::Marshal
new file mode 160000
+Subproject 492264295dd88aa7753048c46edce3f546ad399
diff --git a/modules/JSON-Name b/modules/JSON::Name
-Subproject f9d52e032da0f9621a3f38cd03a825b93ab6567
+Subproject f9d52e032da0f9621a3f38cd03a825b93ab6567
diff --git a/modules/jsonrpc b/modules/JSON::RPC
-Subproject ebccb25d505ef544e016038f39e21ad9c59c3bd
+Subproject ebccb25d505ef544e016038f39e21ad9c59c3bd
diff --git a/modules/json b/modules/JSON::Tiny
-Subproject a5ef8c179350dae44ce7fb1abb684fc62c1c2b9
+Subproject a5ef8c179350dae44ce7fb1abb684fc62c1c2b9
diff --git a/modules/JSON-Unmarshal b/modules/JSON::Unmarshal
-Subproject e1b6288c5f3165058f36c0f4e171cdf2dfd640d
+Subproject e1b6288c5f3165058f36c0f4e171cdf2dfd640d
diff --git a/modules/LWP::Simple b/modules/LWP::Simple
new file mode 160000
+Subproject eb48ab98b3422b40cd0def8faa882abb9184c26
diff --git a/modules/LibraryCheck b/modules/LibraryCheck
new file mode 160000
+Subproject e713a7f773f3352801bd43d399e3bdcb3baae5f
diff --git a/modules/library-make b/modules/LibraryMake
-Subproject 7aae514f09c18b54e2a5d584df340b70d9776a6
+Subproject 7aae514f09c18b54e2a5d584df340b70d9776a6
diff --git a/modules/License-SPDX b/modules/License-SPDX
deleted file mode 160000
-Subproject 4f435605326fe8530917d0fdc0e64c5d22b3066
diff --git a/modules/License::SPDX b/modules/License::SPDX
new file mode 160000
+Subproject 2165ab27ed6e58d3e68eea21bb21d9908d473f4
diff --git a/modules/Linenoise b/modules/Linenoise
deleted file mode 160000
-Subproject 480fd919b2c082e691c518fd50c19ad8719532b
diff --git a/modules/META6 b/modules/META6
-Subproject 04fc2e8ea2c428cb30fdcbad9f4455af235896b
+Subproject 335492ad357a76e5d31166d4f700b66562054d5
diff --git a/modules/Perl6-MIME-Base64 b/modules/MIME::Base64
-Subproject 71f046ab176a6dd77a5a4103a44778ed5cf1b17
+Subproject 71f046ab176a6dd77a5a4103a44778ed5cf1b17
diff --git a/modules/MODULES.txt b/modules/MODULES.txt
index 81a3f2f..3a489b7 100644
--- a/modules/MODULES.txt
+++ b/modules/MODULES.txt
@@ -1,61 +1,61 @@
# The order of modules here is significant; a module must be listed after
# all of its dependencies.
-uri
-json_fast
-JSON-Name
-JSON-Unmarshal
-JSON-Marshal
-JSON-Class
+URI
+JSON::Fast
+JSON::Name
+JSON::Unmarshal
+JSON::Marshal
+JSON::Class
META6
-License-SPDX
-Test-META
-xml-writer
-svg # uses XML::Writer
-svg-plot # uses SVG
-Terminal-ANSIColor
-oo-monitors
-test-mock
-Grammar-Profiler-Simple
-grammar-debugger # uses Terminal::ANSIColor
-Perl6-MIME-Base64
-uri
-json
-perl6-encode
-openssl
-io-socket-ssl
-perl6-lwp-simple # uses MIME::Base64, URI, JSON::Tiny
-perl6-digest-md5
-perl6-http-status
-p6-Template-Mustache
+License::SPDX
+Test::META
+XML::Writer
+SVG # XML::Writer
+SVG::Plot # SVG
+Terminal::ANSIColor
+OO::Monitors
+Test::Mock
+Grammar::Profiler::Simple
+Grammar::Debugger # Terminal::ANSIColor
+MIME::Base64
+JSON::Tiny
+OpenSSL
+IO::Socket::SSL
+LWP::Simple # MIME::Base64, URI, JSON::Tiny
+Digest::MD5
+HTTP::Status
+Template::Mustache
PSGI
-perl6-http-easy # uses PSGI
-Template-Mojo
-NativeHelpers-Blob
-DBIish # uses NativeHelpers::Blob
-perl6-Test-When
-p6-file-directory-tree
-libdigest-perl6
-perl6-Testo
-perl6-Temp-Path # uses Digest::SHA, File::Directory::Tree
-p6-pod-load # uses Temp::Path
-perl6-Test-Output
-Pod-To-HTML # uses Pod::Load
-perl6-pod-to-bigpage
-p6-File-Temp # uses File::Directory::Tree
-file-find
-doc # uses File::Temp
-debugger-ui-commandline
-shell-command
-library-make # check needed?
-Linenoise
-perl6-file-which
-p6-io-string
-perl6-datetime-format
-datetime-parse # dependency for http-useragent
-io-capture-simple
-test-util-serverport
-http-useragent
-jsonrpc # uses PSGI & http-useragent
-getopt-long6
-tap-harness6 # have last so faster perl5 prove used
-app-prove6
+HTTP::Easy # PSGI
+Template::Mojo
+NativeHelpers::Blob
+DBIish # NativeHelpers::Blob
+Test::When
+File::Directory::Tree
+Digest
+Testo
+Temp::Path # Digest::SHA, File::Directory::Tree
+Pod::Load
+Test::Output
+Pod::To::HTML # Pod::Load
+Pod::To::BigPage
+File::Temp # File::Directory::Tree
+File::Find
+p6doc # File::Temp
+Debugger::UI::CommandLine
+File::Which
+Shell::Command # File::Which, File::Temp
+LibraryMake # Shell::Command
+IO::String
+DateTime::Format
+DateTime::Parse # HTTP::UserAgent
+IO::Capture::Simple
+Test::Util::ServerPort
+Encode
+HTTP::UserAgent # Encode
+JSON::RPC # PSGI, HTTP::UserAgent
+Getopt::Long
+TAP
+App::Prove6
+LibraryCheck
+Readline # LibraryCheck
diff --git a/modules/NativeHelpers-Blob b/modules/NativeHelpers::Blob
-Subproject b00a4899ce219dae5fe97e9e414d01dd92874f5
+Subproject b00a4899ce219dae5fe97e9e414d01dd92874f5
diff --git a/modules/OO::Monitors b/modules/OO::Monitors
new file mode 160000
+Subproject b59fb975fe0340cf16c075bc2bc9994a8d9eca6
diff --git a/modules/openssl b/modules/OpenSSL
-Subproject 597e836c73684bb53ac5cb4511edca9b4f10ea8
+Subproject 597e836c73684bb53ac5cb4511edca9b4f10ea8
diff --git a/modules/Pod-To-HTML b/modules/Pod-To-HTML
deleted file mode 160000
-Subproject 98d16f6aac7ec45e0902e23db347c1f153f0e5f
diff --git a/modules/Pod::Load b/modules/Pod::Load
new file mode 160000
+Subproject 53df2215d8e9980fde1308b4f8e0e5a28edef21
diff --git a/modules/perl6-pod-to-bigpage b/modules/Pod::To::BigPage
-Subproject 92f2e4ef9f20a5031a5f033dc876e72f9d54455
+Subproject 92f2e4ef9f20a5031a5f033dc876e72f9d54455
diff --git a/modules/Pod::To::HTML b/modules/Pod::To::HTML
new file mode 160000
+Subproject 8ddda65e0504ef2ca3f21c17f611aca00011dcc
diff --git a/modules/Readline b/modules/Readline
new file mode 160000
+Subproject 0d380bc191698d09ec0557e773e16ba773088d3
diff --git a/modules/svg b/modules/SVG
-Subproject 07190c0602aa276e5319f06aa0012452dbff358
+Subproject 07190c0602aa276e5319f06aa0012452dbff358
diff --git a/modules/svg-plot b/modules/SVG::Plot
-Subproject 062570a78fd38c3c6baba29dfe2fbb8ca014f4d
+Subproject 062570a78fd38c3c6baba29dfe2fbb8ca014f4d
diff --git a/modules/shell-command b/modules/Shell::Command
-Subproject 1145ea0ff71507b2fe932fca6d2a68d4004c7d1
+Subproject 1145ea0ff71507b2fe932fca6d2a68d4004c7d1
diff --git a/modules/TAP b/modules/TAP
new file mode 160000
+Subproject f0143104bfe37a34ce0c1b0daea08365302dfbf
diff --git a/modules/perl6-Temp-Path b/modules/Temp::Path
-Subproject 5a6acee907d65fc5b681a6ea022aa18217f6e99
+Subproject 5a6acee907d65fc5b681a6ea022aa18217f6e99
diff --git a/modules/Template-Mojo b/modules/Template::Mojo
-Subproject 3d38f92636a0c44dfd4cec2e7b8b67f12e43c02
+Subproject 3d38f92636a0c44dfd4cec2e7b8b67f12e43c02
diff --git a/modules/p6-Template-Mustache b/modules/Template::Mustache
-Subproject 4f09e0a97f38fe5d8c75514ca0c858cdfb26d09
+Subproject 4f09e0a97f38fe5d8c75514ca0c858cdfb26d09
diff --git a/modules/Terminal-ANSIColor b/modules/Terminal::ANSIColor
-Subproject eeb2dadd2cc2b7df34588be7869768213fd9fff
+Subproject eeb2dadd2cc2b7df34588be7869768213fd9fff
diff --git a/modules/Test-META b/modules/Test::META
-Subproject 498d80bf64af6fbecd6dde40406fbaf8c3e2672
+Subproject 498d80bf64af6fbecd6dde40406fbaf8c3e2672
diff --git a/modules/Test::Mock b/modules/Test::Mock
new file mode 160000
+Subproject 1130427f4d9f3866fa39e113251bb142d7fa5cc
diff --git a/modules/Test::Output b/modules/Test::Output
new file mode 160000
+Subproject 16bafe1f6d0e5a83b73563d4afd8ced097f559e
diff --git a/modules/test-util-serverport b/modules/Test::Util::ServerPort
-Subproject 184ed7e575b48c4a1db50dae9bfb606a7de59ad
+Subproject 184ed7e575b48c4a1db50dae9bfb606a7de59ad
diff --git a/modules/perl6-Test-When b/modules/Test::When
-Subproject a1a0040520911ed8d56e839e2e00d8ab9a0a24e
+Subproject a1a0040520911ed8d56e839e2e00d8ab9a0a24e
diff --git a/modules/perl6-Testo b/modules/Testo
-Subproject d1134ec7c3b40baf766384d004fd9b379eac27c
+Subproject d1134ec7c3b40baf766384d004fd9b379eac27c
diff --git a/modules/URI b/modules/URI
new file mode 160000
+Subproject abe8c9bb65947760cb656c6c154f466cd87f6e5
diff --git a/modules/xml-writer b/modules/XML::Writer
-Subproject 4d30a9d8e06033ca97387971b653817becd5a75
+Subproject 4d30a9d8e06033ca97387971b653817becd5a75
diff --git a/modules/app-prove6 b/modules/app-prove6
deleted file mode 160000
-Subproject ace4c7c758084d5ae62519cc072f3b6937721d6
diff --git a/modules/datetime-parse b/modules/datetime-parse
deleted file mode 160000
-Subproject ab2401b046dc9ea893f8e3282e497136c9399f0
diff --git a/modules/debugger-ui-commandline b/modules/debugger-ui-commandline
deleted file mode 160000
-Subproject f81ab6323f1fb1051aa750e414c75797e6b1bb0
diff --git a/modules/doc b/modules/doc
deleted file mode 160000
-Subproject 99c20ef5b400cdb1073fdcab2133f9cffcd8d2b
diff --git a/modules/getopt-long6 b/modules/getopt-long6
deleted file mode 160000
-Subproject 6f6fb5e83916038ba36483c69fa0fc23bf6c43f
diff --git a/modules/http-useragent b/modules/http-useragent
deleted file mode 160000
-Subproject cfdfc48c55d312049f90f1db61042718c1de990
diff --git a/modules/json_fast b/modules/json_fast
deleted file mode 160000
-Subproject 5ce76c039dc143fa9a068f1dfa47b42e5804682
diff --git a/modules/libdigest-perl6 b/modules/libdigest-perl6
deleted file mode 160000
-Subproject 39bb469a81485ede064de7c7aa9284d1c4b327c
diff --git a/modules/oo-monitors b/modules/oo-monitors
deleted file mode 160000
-Subproject 6dc1a363c7859b760bf973d0ada0773cfdb1435
diff --git a/modules/p6-file-directory-tree b/modules/p6-file-directory-tree
deleted file mode 160000
-Subproject 25faef927c83eea1b688b5a324d5e11011f7305
diff --git a/modules/p6-pod-load b/modules/p6-pod-load
deleted file mode 160000
-Subproject 5a1a2ffdf881bdb9c21ea8e42bb1ee2e211ac5c
diff --git a/modules/p6doc b/modules/p6doc
new file mode 160000
+Subproject ac9517314fb567898beaae24a88c831d7154dfb
diff --git a/modules/perl6-Test-Output b/modules/perl6-Test-Output
deleted file mode 160000
-Subproject 32f2a33cc94b1aa137fe30a1d881ad573652642
diff --git a/modules/perl6-encode b/modules/perl6-encode
deleted file mode 160000
-Subproject 702214dcedd05ea62d815ffb4c287e1596cee4c
diff --git a/modules/perl6-lwp-simple b/modules/perl6-lwp-simple
deleted file mode 160000
-Subproject 46d3fdb698b5ec0cd819e533abf2e8d235f1876
diff --git a/modules/tap-harness6 b/modules/tap-harness6
deleted file mode 160000
-Subproject e1e1d221ed7e3d15d096ced64d1976f489a9369
diff --git a/modules/test-mock b/modules/test-mock
deleted file mode 160000
-Subproject bfa37f639d42796fcd21ab477d294a054bf22a1
diff --git a/modules/uri b/modules/uri
deleted file mode 160000
-Subproject c5f7d74feacb752e2dcfb07b17006e24fb47306
diff --git a/modules/zef b/modules/zef
-Subproject a56b65a120d27e2dfb6c470e5f179993ef5c8c9
+Subproject 7bbc6638aa62fa5535aad77252f9a3bc61e87ce
diff --git a/tools/build/Makefile.in b/tools/build/Makefile.in
index 7152691..29d5071 100644
--- a/tools/build/Makefile.in
+++ b/tools/build/Makefile.in
@@ -3,7 +3,7 @@
MOAR_DIR = moarvm
NQP_DIR = nqp
RAKUDO_DIR = rakudo
-STAR_VERSION = 2019.03
+STAR_VERSION = 2020.01
# install location
PREFIX_DIR = @prefix@
@@ -67,12 +67,12 @@ modules-install-m: rakudo-install
modules-test: @backend_modules_test@
verbose-modules-test: @backend_modules_test@
-modules-test-j: modules-install-j
+modules-test-j:
$(PERL) tools/build/modules-test.pl $(CURDIR) $(DESTDIR)$(PERL6_J_INSTALL) $(MODULES)
verbose-modules-test-j: modules-install-j
$(PERL) tools/build/modules-test.pl --verbose $(CURDIR) $(DESTDIR)$(PERL6_J_INSTALL) $(MODULES)
-modules-test-m: modules-install-m
+modules-test-m:
$(PERL) tools/build/modules-test.pl $(CURDIR) $(DESTDIR)$(PERL6_M_INSTALL) $(MODULES)
verbose-modules-test-m: modules-install-m
$(PERL) tools/build/modules-test.pl --verbose $(CURDIR) $(DESTDIR)$(PERL6_M_INSTALL) $(MODULES)
diff --git a/tools/build/module-install.pl b/tools/build/module-install.pl
index 9f7e038..eadb99e 100644
--- a/tools/build/module-install.pl
+++ b/tools/build/module-install.pl
@@ -2,21 +2,37 @@
use warnings;
use strict;
+
my $perl6bin = shift @ARGV;
my $zefbin = shift @ARGV;
+my $exit = 0;
+my $path_sep = $^O eq 'MSWin32' ? '\\' : '/';
-my $exit = 0;
+while (<>) {
+ # Skip comments
+ next if /^\s*(#|$)/;
-my $path_sep = "/";
-$path_sep = "\\" if ( $^O eq 'MSWin32' );
+ # Extract only the module name from the current line
+ my ($module) = /(\S+)/;
-while (<>) {
- next if /^\s*(#|$)/;
- my ($module) = /(\S+)/;
- $exit ||= system $perl6bin, $zefbin,
- '--/build-depends', '--/test-depends', '--/depends',
- '--/p6c', '--/metacpan', '--/cpan',
- '--force', 'install', "./modules$path_sep$module";
+ # Create the command list
+ my @cmd = (
+ $perl6bin,
+ $zefbin,
+ '--/build-depends',
+ '--/depends',
+ '--/test',
+ '--/test-depends',
+ '--force',
+ 'install',
+ "./modules$path_sep$module"
+ );
+
+ # Show the command that's going to be ran, for debugging purposes
+ printf "@cmd\n";
+
+ # Actually run the command
+ $exit ||= system "@cmd";
}
exit $exit;
diff --git a/tools/build/modules-test.pl b/tools/build/modules-test.pl
index 396f066..c4b9d00 100644
--- a/tools/build/modules-test.pl
+++ b/tools/build/modules-test.pl
@@ -1,5 +1,8 @@
#! perl
+use warnings;
+use strict;
+
use Cwd;
use Getopt::Long;
@@ -7,19 +10,52 @@ GetOptions('verbose' => \my $verbose);
my $base = shift @ARGV;
my $perl6 = shift @ARGV;
+my @failures;
while (<>) {
- next if /^\s*(#|$)/;
- my ($moduledir) = /(\S+)/;
- print "Testing modules/$moduledir with $perl6...\n";
- if (-d "$base/modules/$moduledir/t") {
- chdir("$base/modules/$moduledir");
- system('prove', $verbose ? '-v' : (), '-e', $perl6, '-r', 't');
- }
- else {
- print "...no t/ directory found.\n";
- }
- print "\n";
+ # Skip comments
+ next if /^\s*(#|$)/;
+
+ # Extract only the module name from the current line
+ my ($moduledir) = /(\S+)/;
+
+ if (! -d "$base/modules/$moduledir/t") {
+ print "[" . getcwd . "] ...no t/ directory found.\n";
+ next;
+ }
+
+ # Run the tests through prove
+ chdir("$base/modules/$moduledir");
+
+ my @cmd = (
+ 'prove',
+ $verbose ? '-v' : (),
+ '-e', $perl6,
+ '-r',
+ 't',
+ );
+
+ # Show the command that's going to be ran, for debugging purposes
+ print "[" . getcwd . "] @cmd\n";
+
+ # Actually run the command
+ my $exit = system "@cmd";
+
+ # Exit early if any errors occurred
+ if ($exit) {
+ push @failures, $_;
+ }
+
+ print "\n";
}
-0;
+# If we reach this, no errors have been found
+if (@failures) {
+ print "The following modules failed their tests:\n";
+
+ foreach (@failures) {
+ print "- $_\n";
+ }
+
+ exit 1;
+}
diff --git a/tools/lib/NQP/Configure.pm b/tools/lib/NQP/Configure.pm
index 2f67bf1..b63fffb 100644
--- a/tools/lib/NQP/Configure.pm
+++ b/tools/lib/NQP/Configure.pm
@@ -221,8 +221,7 @@ sub gen_nqp {
my $sdkroot = $options{'sdkroot'} || '';
my $startdir = cwd();
- my $PARROT_REVISION = 'nqp/tools/build/PARROT_REVISION';
- my $MOAR_REVISION = 'nqp/tools/build/MOAR_REVISION';
+ my $MOAR_REVISION = 'nqp/tools/templates/MOAR_REVISION';
my (%impls, %need);
diff --git a/tools/star/Makefile b/tools/star/Makefile
index 661b299..b2d4673 100644
--- a/tools/star/Makefile
+++ b/tools/star/Makefile
@@ -2,20 +2,23 @@
# eg. 2017.07 etc.
# Occasionally (mis-)used to pull in fixes (see 'lastmin-fixes.txt')
# eg. 2017.07-9-gc0abee7 etc.
-RAKUDO_VER = 2019.03.1
-NQP_VER = 2019.03
-MOAR_VER = 2019.03
+RAKUDO_VER = 2020.01
+NQP_VER = 2020.01
+MOAR_VER = 2020.01.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)
+RAKUDO_URL = https://github.com/rakudo/rakudo/releases/download/$(RAKUDO_VER)/$(RAKUDO_TGZ)
RAKUDO_SRC = $(SRC_DIR)/$(RAKUDO_TGZ)
NQP_TGZ = nqp-$(NQP_VER).tar.gz
-NQP_URL = https://rakudo.perl6.org/downloads/nqp/$(NQP_TGZ)
+NQP_URL = https://github.com/perl6/nqp/releases/download/$(NQP_VER)/$(NQP_TGZ)
NQP_SRC = $(SRC_DIR)/$(NQP_TGZ)
MOAR_TGZ = MoarVM-$(MOAR_VER).tar.gz
MOAR_URL = https://www.moarvm.org/releases/$(MOAR_TGZ)
@@ -26,29 +29,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 -xvzf $(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 -xvzf $(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 -xvzf $(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,26 +60,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; -f && 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 patch
+tarball: manifest
[ -n "$(VERSION)" ] || ( echo "\nTry '$(MAKE) release VERSION=yyyy.mm'\n\n"; exit 1 )
- [ -d $(STAR_REL) ] || ln -s . $(STAR_REL)
- $(PREFIX) $(STAR_REL)/ MANIFEST | \
- $(TAR) -zcv -T - -f $(STAR_TGZ)
- rm $(STAR_REL)
+
+ 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)/."
+
+ cd -- work && $(PREFIX) $(STAR_REL)/ "$(WORKDIR)/MANIFEST" \
+ | $(TAR) -zc -T - -f "$(RELEASE_DIR)/$(STAR_TGZ)"
release: tarball
+
+clean:
+ rm -fr work
diff --git a/tools/star/release-guide.pod b/tools/star/release-guide.pod
deleted file mode 100644
index 584ee17..0000000
--- a/tools/star/release-guide.pod
+++ /dev/null
@@ -1,350 +0,0 @@
-=head1 Guide to Rakudo Star releases
-
-Rakudo Star releases are based on Rakudo compiler releases.
-Since some time is often needed for module updates and testing
-after each Rakudo compiler release, the timing of Star releases
-varies from one release to the next.
-
-Also, while the Rakudo compiler issues monthly releases, Star
-releases are free to choose a longer release cycle. Star releases
-are also free to choose older releases of the compiler, NQP, or
-MoarVM. The goal is to balance end-user stability needs with
-progress being made on the compiler, modules, and other runtime
-components. Currently, Star is on a quarterly release cycle.
-
-=head2 Steps to create a release
-
-If this is your first time releasing, B<read the whole guide before
-starting>. That way you can ask questions and clear up and confusions before
-you're in the thick of it.
-
-If you have done this before, you might want to check for and read any changes
-to this release guide since your last run.
-
-Any time this guide tells you to commit changes, you may also push them if you
-wish to do so. Step 8 will make sure you do this regardless.
-
-=over 4
-
-=item Step 0
-
-Make sure you have a working C<perl6> binary in your C<$PATH>. Refer to
-L<http://rakudo.org/how-to-get-rakudo/> for how to do that. The exact version
-isn't very important at the moment, it just shouldn't be a year out of date.
-
-=item Step 1
-
-Clone the git@github.com:rakudo/star repository.
-
- $ git clone git@github.com:rakudo/star
-
-If you already have a clone of rakudo/star, make sure it is in sync
-with github:
-
- $ git checkout master
- $ git pull origin master
- $ git submodule sync
- $ git submodule update --init --recursive
-
-Verify that
-
- $ git status
-
-reports a clean repository.
-
-=item Step 2
-
-Change to the star repository directory and edit the first three
-lines of F<tools/star/Makefile> to indicate the desired releases of
-Rakudo, NQP, and MoarVM to use.
-
-Usually that means the last Rakudo release, the NQP version that is in the
-released Rakudo's F<tools/build/NQP_REVISION> file, and the MoarVM version that
-is in the F<tools/build/MOAR_REVISION> file that is included in the NQP
-release.
-
- $ cd star
- $ vi tools/star/Makefile
-
-=item Step 3
-
-Run C<make -f tools/star/Makefile> to populate the star directory
-with the needed tarballs and module repositories for building Rakudo Star:
-
- $ make -f tools/star/Makefile
-
-You may at times be prompted for your SSH key/pass combo.
-
-Assuming the Makefile ran successfully, you should now commit your changes.
-
- $ git commit tools
-
-=item Step 4
-
-If there are any new modules to be added, use C<git submodule> to add
-its repo to the modules/ directory. Also add the module directory
-name to the C<modules/MODULES.txt> file.
-
- $ git submodule add git@github.com:user/acme-example modules/acme-example
- $ echo acme-example >>modules/MODULES.txt
- $ git commit . -m "Added acme-example to installed modules."
-
-=item Step 5
-
-Verify that all of the git submodules are at the desired commit
-for the Star release. To bring all modules up to the current
-C<master> branch, one can do:
-
- # pull master in each submodule dir
- $ git submodule foreach git pull origin master
-
-Create a temporary file as a basis for the module changelog to be
-included in release announcement below:
-
- $ git diff --submodule=log > /tmp/mod.txt
-
-Then you may commit your update of the submodules:
-
- # commit submodules state to star repo
- $ git commit modules
-
-=item Step 6
-
-If one doesn't already exist, create a release announcement in
-C<docs/announce/YYYY.MM.md>. You can often use the previous release's
-file as a starting point, updating the release number, version
-information, name, etc., as appropriate. Be sure to pay attention
-to any changes listed in Rakudo's ChangeLog.
-
- $ vi docs/announce/YYYY.MM.md
- $ git add docs/announce/YYYY.MM.md
- $ git commit docs
-
-The module changelog temporary file above can be used to help with
-the corresponding section in the announcement.
-
-At this point it is strongly advised that you push your changes so far, to get
-feedback on your announcement while you do other steps.
-
- $ git push
-
-=item Step 7
-
-Update the release number in the C<README> and C<Makefile.in> files.
-
- $ vi README tools/build/Makefile.in
- $ git commit README tools/build/Makefile.in
-
-=item Step 8
-
-Make sure any locally modified files have been pushed
-back to github.
-
- $ git status
- $ git push
-
-=item Step 9
-
-Create a candidate release tarball:
-
- $ make -f tools/star/Makefile release VERSION=2012.08
-
-This will create a tarball C<rakudo-star-2012.08.tar.gz> in the
-current directory.
-
-=item Step 10
-
-Unpack the tarball somewhere else, and do a test build/install:
-
- $ mkdir work
- $ cd work
- $ tar xvfz ../rakudo-star-2012.08.tar.gz
- $ cd rakudo-star-2012.08
- $ perl Configure.pl --gen-moar
- $ make install
- $ make rakudo-test
- $ make rakudo-spectest
- $ make modules-test
-
-If there are failures in any of C<rakudo-test>, C<rakudo-spectest>, or
-C<modules-test>, then do your best to fix them and return to step 8.
-
-STOP THE RELEASE PROCESS (i.e., do not issue a release) if there
-are any errors that you're unable to fix. File issue tickets
-(https://github.com/rakudo/star/issues) for failing tests
-and report them to C<#perl6>.
-
-=item Step 11
-
-Tag the release by its release month ("YYYY.MM").
-
- $ git tag -s -a -m"tag release YYYY.MM" YYYY.MM # e.g. 2012.08
- $ git push --tags
-
-The C<-s> tells git to sign the release with your PGP/GPG key, so it will
-likely ask you for the passphrase of your secret key. Note some versions of
-git/gpg don't correctly prompt for passphrase or display a meaningful error
-when it's absent.
-
-If you have no PGP key, you might need to
-L<create one first|https://fedoraproject.org/wiki/Creating_GPG_Keys>. Should
-that prove impossible, you can omit the C<-s> from the command line.
-
-Also sign the release tarball with GPG and a suitable key
-eg. C<gpg --armor --detach-sig rakudo-star-2018.01.tar.gz>
-
-Generate a SHA256 sum eg.
-
- $ sha256sum rakudo-star-2018.01.tar.gz | cut -f1 -d" " > rakudo-star-2018.01.tar.gz.sha256.txt
-
-=item Step 12
-
-Upload the release tarball to L<http://rakudo.org/downloads/star> and L<https://rakudo.perl6.org/downloads/star/>:
-
- $ scp rakudo-star-2012.08.tar.gz rakudo@rakudo.org:public_html/downloads/star
-
-Also upload the detached signature eg. C<rakudo-star-2018.01.tar.gz.asc>
-and sha256 sum eg. C<rakudo-star-2018.01.tar.gz.sha256.txt>
-
-If you don't have permission to do this step, please ask one of the core devs
-(pmichaud, jnthn, masak, PerlJam/perlpilot, tadzik, or moritz) on C<#perl6> to do
-it for you.
-
-=item Step 13
-
-Commit announcement to the rakudo.org repo automatically by running the following
-command. You will need C<perl6> in the C<PATH> and to C<zef install WWW> if you don't
-have it.
-
-You can also make and commit the post manually, but if you do, be sure
-to add C<%% title:> and C<%% date:> metadate to the top of the file:
-
- cd $(mktemp -d) &&
- git clone git@github.com:perl6/rakudo.org/. &&
- ./push-latest-rakudo-star-announcement.p6 2018.01
-
-You will also have to bump versions manually in C<templates/files.html.ep> in
-the rakudo.org repo.
-
-Publicize the release in the appropriate places. These include:
-
-=over 4
-
-=item * http://perl6.org/
-
-=item * perl6-users@perl.org
-
-=item * perl6-language@perl.org
-
-=item * perl6-compiler@perl.org
-
-=item * http://en.wikipedia.org/wiki/Rakudo_Perl_6 (latest release date is mentioned in the main text)
-
-=item * http://en.wikipedia.org/wiki/Perl_6
-
-=back
-
-Actively ask others to advertise the release as well. This includes their social
-media accounts and blogs. Notable places include:
-
-=over 4
-
-=item * L<http://blogs.perl.org/>
-
-=item * L<Perl 6 Facebook Page|https://www.facebook.com/groups/1595443877388632/>
-
-=item * Reddit: L<r/perl|https://www.reddit.com/r/perl/>, L<r/perl6|https://www.reddit.com/r/perl6/>,
-and L<r/programming|https://www.reddit.com/r/programming/>
-
-=item * L<Hacker News|https://news.ycombinator.com/news>
-
-=item * L<Rakudo's Twitter account|https://twitter.com/rakudoperl>
-
-=back
-
-=item Step 14
-
-Add this release and your name to the list of releases at the end of this
-document (F<tools/star/release-guide.pod>).
-
- $ vim tools/star/release-guide.pod
- $ git add tools/star/release-guide.pod
- $ git commit -m 'note YYYY.MM release in release-guide.pod
-
-=item Step 15
-
-You're done! Celebrate with the appropriate amount of fun.
-
-=back
-
-=head2 Star Releases
-
- Release Release Manager
- ======= ===============
-
- 2010.07 pmichaud
- 2010.08 pmichaud
- 2010.09 pmichaud
- 2010.10 pmichaud
- 2010.11 pmichaud
- 2010.12 pmichaud
-
- 2011.01 pmichaud
- 2011.04 pmichaud
- 2011.07 pmichaud
-
- 2012.01 jnthn
- 2012.02 jnthn
- 2012.04 moritz
- 2012.05 moritz
- 2012.06 moritz
- 2012.07 pmichaud
- 2012.08 pmichaud
- 2012.09 pmichaud
- 2012.10 jnthn
- 2012.11 moritz
- 2012.12 moritz
-
- 2013.01 moritz
- 2013.02 moritz
- 2013.05 pmichaud
- 2013.08 moritz
- 2013.09 moritz
- 2013.10 lue
- 2013.11 moritz
- 2013.12 lue
-
- 2014.01 tadzik
- 2014.03 FROGGS
- 2014.04 jnthn
- 2014.08 FROGGS
- 2014.09 FROGGS
- 2014.12 moritz
-
- 2015.01 moritz
- 2015.02 moritz
- 2015.03 moritz
- 2015.06 FROGGS
- 2015.07 moritz
- 2015.09 moritz
- 2015.11 moritz
-
- 2016.01 FROGGS
- 2016.04 stmuk
- 2016.07 stmuk
- 2016.10 stmuk
- 2016.11 stmuk
-
- 2017.01 stmuk
- 2017.04 stmuk
- 2017.07 stmuk
- 2017.10 stmuk
-
- 2018.01 stmuk
- 2018.04 stmuk
- 2018.06 stmuk
- 2018.10 stmuk
-
- 2019.03 hankache, clarkema
-
-=cut