Version 9 (modified by barney, 13 years ago)

new target in languages/Makefile

Many languages are in the parrot repository, to show, as we add more and more features, how to implement languages. As parrot nears 1.0, these languages are encouraged to leave the nest and find their own repositories. We may keep some educational "how to" languages in the repository as guides for new language developers.

Here are some tips for finding your own place (basically, "this is what  partcl did.")

What do you rely on parrot's infrastructure for?

Ticketing? Mailing lists? Version control?

If you're not sure where to go for these things, I recommend setting up a new project using googlecode. The project will give you a ticketing system, a wiki, a subversion repository; you can easily setup mailing lists via google groups.

You don't even need to setup your own repository. If you have a small language and don't need much in the way of infrastructure, you can join  squawk and share that repository. This option probably makes sense for the smaller languages.

When partcl left, we abandoned our svn history.


We kept the same licensing and copyright as parrot to keep things simple.

Working with parrot once you're out of the repository

See - We have two versions of the project, one to work against a specific release version of parrot (hopefully the latest), and another to work against trunk. This insulates your users from changes in your code or parrot's code, and lets you work against a stable version without having things change out from under you. We

Don't rely on top level Configure

Grab a copy of another language's, copy into your directory and update it for your language. This allows you to regenerate your makefile without relying on a top level run.

As you leave

Once you're in your repository, you should remove your language from the parrot repository. Don't forget to remove your language from the languages makefile and initial configuration.

Moving to How Parrot m4 did it is another option for where to fly to after leaving the nest. That's what I, barney, did for Parrot m4.

Create your local git repository

Mark Glines is maintaining a readonly mirror of the trunk of Parrot's svn repository. This means that the commit history of trunk, but not the branches, is available. So you can relax, the bulk of the work is already done.

cd ~
mkdir git
cd git
git clone git://
cd parrot-trunk
git filter-branch --subdirectory-filter languages/m4/

This leaves you with a git repository containing the content and history of 'languages/m4'.

Create an account on, if you don't have one yet offers a public plan with 100 MB diskspace. For creating an account you need to supply an username, your Email-adress and a public SSH-key.

Create an empty repository

In your github startpage there is a link labelled 'Create a Repository'. Click that and follow the instructions for creating an empty repository called 'm4'. Don't worry too much about the name, you can always change it later.

Push your local repository onto github

github offers instruction for starting am empty initial repository. We already have code and history, so we need to do things a little bit differently.

Pushing the project onto github can then be done with:

cd ~/git/parrot-trunk
git remote rm origin
git remote add origin
git remote show origin
git status
git push origin master

See the result on


Usually one would want to stick with Artistic License 2.0. Parrot m4 is different. It uses the GPL, as it is based on GPLed code.

Nor sure, whether copyright messages should be added.

Removal from the SVN repository

For removing the language from SVN, I recommend to work on a svn-checkout of the repository. Remove the language from svn by doing 'ack-grep -ial m4' and remove the references to the language. Having an unique language name helps here. The language directory can be deleted with 'svn del languages/m4'. I left the occurences of 'eclectus' in 'ports/cygwin' intact, as I didn't want to break patch files. Also I edited the svn:ignore list: 'svn pe svn:ignore languages', as m4 will be checked out into 'languages'. Make sure that you have run 'perl tools/dev/' before submitting the changes.

Make it easy for others to checkout the new repository

Added the target 'co-m4' and ammeded the target 'co-all' in 'config/gen/makefiles/'.

Tell the world about it

Edit and write about it in your blog.