Browse files

Removed tmplib, bootstrap.sh fetches it from git now

  • Loading branch information...
1 parent cfdeb2c commit ff7922a0d4523497483a4e72350ab2812c403d41 @tadzik committed Jan 7, 2011
Showing with 5 additions and 372 deletions.
  1. +5 −0 bootstrap.sh
  2. +0 −34 tmplib/File/Copy.pm
  3. +0 −125 tmplib/File/Find.pm
  4. +0 −37 tmplib/File/Mkdir.pm
  5. +0 −15 tmplib/File/Tools.pm
  6. +0 −95 tmplib/Module/Build.pm
  7. +0 −45 tmplib/Module/Install.pm
  8. +0 −21 tmplib/Module/Test.pm
View
5 bootstrap.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+git clone --depth 1 git://github.com/tadzik/perl6-Module-Tools.git mt
+git clone --depth 1 git://github.com/tadzik/perl6-File-Tools.git ft
+
+PERL6LIB=mt/lib:ft/lib bin/neutro .
View
34 tmplib/File/Copy.pm
@@ -1,34 +0,0 @@
-use v6;
-
-module File::Copy;
-
-sub cp(Str $from, Str $to) is export {
- my $f1 = open $from, :r, :bin;
- my $f2 = open $to, :w, :bin;
- $f2.write($f1.read(4096)) until $f1.eof;
- $f1.close;
- $f2.close;
-}
-
-=begin pod
-
-=head1 NAME
-
-File::Copy -- copy files
-
-=head1 SYNOPSIS
-
- use File::Copy;
-
- cp 'source', 'destination';
-
-=head1 DESCRIPTION
-
-C<File::Copy> exports just one subroutine, cp taking two string
-parameters: source and destination. If something comes wrong, the
-internal open() or write() calls will die, C<copy()> has no special
-error reporting.
-
-=end pod
-
-# vim: ft=perl6
View
125 tmplib/File/Find.pm
@@ -1,125 +0,0 @@
-use v6;
-
-module File::Find;
-
-class File::Find::Result is Cool {
- has $.dir;
- has $.name;
-
- method Str {
- $.dir ~ '/' ~ $.name
- }
-}
-
-sub checkrules ($elem, %opts) {
- if %opts<name>.defined {
- given %opts<name> {
- when Regex {
- return False unless $elem ~~ %opts<name>
- }
- when Str {
- return False unless $elem.name ~~ %opts<name>
- }
- default {
- die "name attribute has to be either Regex or Str"
- }
- }
- }
- if %opts<type>.defined {
- given %opts<type> {
- when 'dir' {
- return False unless $elem.IO ~~ :d
- }
- when 'file' {
- return False unless $elem.IO ~~ :f
- }
- when 'symlink' {
- return False unless $elem.IO ~~ :l
- }
- default {
- die "type attribute has to be dir, file or symlink";
- }
- }
- }
- return True
-}
-
-sub find (:$dir!, :$name, :$type) is export {
- my @targets = dir($dir).map: {
- File::Find::Result.new(dir => $dir, name => $_);
- };
- my $list = gather while @targets {
- my $elem = @targets.shift;
- take $elem if checkrules($elem, { :$name, :$type });
- if $elem.IO ~~ :d {
- for dir($elem) -> $file {
- @targets.push(
- File::Find::Result.new(dir => $elem, name => $file)
- );
- }
- }
- }
- return $list;
-}
-
-=begin pod
-
-=head1 NAME
-
-File::Find - Get a lazy list of a directory tree
-
-=head1 SYNOPSIS
-
- use File::Find;
-
- my @list := find(dir => 'foo');
- say @list[0..3];
-
- my $list = find(dir => 'foo');
- say $list[0..3];
-
-=head1 DESCRIPTION
-
-C<File::Find> allows you to get the contents of the given directory,
-recursively. The only exported function, C<find()>, generates a lazy
-list of files in given directory. Every element of the list is a
-C<File::Find::Result> object, described below.
-C<find()> takes one (or more) named arguments. The C<dir> argument
-is mandatory, and sets the directory C<find()> will traverse.
-There are also few optional arguments. If more than one is passed,
-all of them must match for a file to be returned.
-
-=head2 name
-
-Specify a name of the file C<File::Find> is ought to look for. If you
-pass a string here, C<find()> will return only the files with the given
-name. When passing a regex, only the files with path matching the
-pattern will be returned.
-
-=head2 type
-
-Given a type, C<find()> will only return files being the given type.
-The available types are C<file>, C<dir> or C<symlink>.
-
-=head1 File::Find::Result
-
-C<File::Find::Result> object acts like a normal string, having two
-additional accessors, C<dir> and C<name>, holding the directory
-the file is in and the filename respectively.
-
-=head1 Perl 5's File::Find
-
-Please note, that this module is not trying to be the verbatim port of
-Perl 5's File::Find module. Its interface is closer to Perl 5's
-File::Find::Rule, and its features are planned to be similar one day.
-
-=head1 CAVEATS
-
-List assignment is eager in Perl 6, so if You assign C<find()> result
-to an array, the elements will be copied and the laziness will be
-spoiled. For a proper lazy list, use either binding (C<:=>) or assign
-a result to a scalar value (see SYNOPSIS).
-
-=end pod
-
-# vim: ft=perl6
View
37 tmplib/File/Mkdir.pm
@@ -1,37 +0,0 @@
-use v6;
-
-module File::Mkdir;
-
-multi sub mkdir(Str $name, $mode = 0o777, :$p!) is export {
- for [\~] $name.split('/').map({"$_/"}) {
- mkdir($_) unless .IO.d
- }
-}
-
-=begin pod
-
-=head1 NAME
-
-File::Mkdir -- provides recursive mkdir
-
-=head1 SYNOPSIS
-
- use File::Mkdir;
-
- # special mkdir exported in File::Mkdir
- mkdir '/some/directory/tree', :p;
- # just a casual, built-in mkdir
- mkdir 'directory';
-
-=head1 DESCRIPTION
-
-C<File::Mkdir> provides an mkdir variant, which, when provided the :p
-parameter, will create the directory tree recursively. For example,
-calling C<mkdir 'foo/bar', :p> will create the foo directory (unless
-it alredy exists), then the foo/bar directory (unless it exists).
-The standard Perl 6 C<mkdir> is still available, and will be called
-when the :p parameter is not passed.
-
-=end pod
-
-# vim: ft=perl6
View
15 tmplib/File/Tools.pm
@@ -1,15 +0,0 @@
-module File::Tools:<github:tadzik>;
-
-=begin pod
-
-This is a distribution for file-related utilities, including:
-
-=item File::Copy
-=item File::Find
-=item File::Mkdir
-
-Please refer to their documentation for more information.
-
-=end pod
-
-# vim: ft=perl6
View
95 tmplib/Module/Build.pm
@@ -1,95 +0,0 @@
-use File::Find;
-
-module Module::Build;
-
-sub path-to-module-name($path) {
- $path.subst(/^.*'lib/'/, '').subst(/\.pm6?$/, '').subst('/', '::', :g)
-}
-
-sub module_name_to_path($base, $module-name) {
- my $pm = "$base/lib/" ~ $module-name.subst('::', '/', :g) ~ '.pm';
- $pm.IO ~~ :e ?? $pm !! $pm ~ '6';
-}
-
-our sub build(Str :$dir = '.', Str :$binary = 'perl6', Bool :$v) {
- if "$dir/Configure.pl".IO ~~ :f {
- my $cwd = cwd;
- chdir $dir;
- run 'perl6 Configure.pl' and die "Configure.pl failed";
- chdir $cwd;
- }
- if $*VM<config><osname> ne 'MSWin32'
- && "$dir/Makefile".IO ~~ :f {
- my $cwd = cwd;
- chdir $dir;
- run 'make' and die "'make' failed";
- chdir $cwd;
- return;
- }
- if "$dir/lib".IO !~~ :d {
- # nothing to build
- return;
- }
-
- my @module-files = find(dir => "$dir/lib", name => /\.pm6?$/).list;
-
- # To know the best order of compilation, we build a dependency
- # graph of all the modules in lib/. %usages_of ends up containing
- # a graph, with the keys (containing names modules) being nodes,
- # and the values (containing arrays of names) denoting directed
- # edges.
-
- my @modules = map {
- path-to-module-name($_.Str.subst(/\.\/lib\//, ''))
- }, @module-files;
- my %usages_of;
- for @module-files -> $module-file {
- my $fh = open($module-file, :r);
- my $module = $module-file.name;
- %usages_of{$module} = [];
- for $fh.lines() {
- if /^\s* 'use' \s+ (\w+ ['::' \w+]*)/ && $0 -> $used {
- next if $used eq 'v6';
- next if $used eq 'MONKEY_TYPING';
-
- %usages_of{$module}.push(~$used);
- }
- }
- }
-
- my @order;
-
- # According to "Introduction to Algorithms" by Cormen et al.,
- # topological sort is just a depth-first search of a graph where
- # you pay attention to the order in which you get done with the
- # dfs-visit() for each node.
-
- my %color_of = @modules X=> 'not yet visited';
- for @modules -> $module {
- if %color_of{$module} eq 'not yet visited' {
- dfs-visit($module);
- }
- }
-
- sub dfs-visit($module) {
- %color_of{$module} = 'visited';
- for %usages_of{$module}.list -> $used {
- if %color_of{$used} eq 'not yet visited' {
- dfs-visit($used);
- }
- }
- push @order, $module;
- }
-
- my @opath = @order.map: { module_name_to_path($dir, $_) };
- for @opath -> $module {
- my $pir = $module.subst(/\.pm6?/, ".pir");
- next if ($pir.IO ~~ :f &&
- $pir.IO.stat.modifytime > $module.IO.stat.modifytime);
- my $command = "PERL6LIB=$dir/lib $binary --target=PIR --output=$pir $module";
- say $command if $v;
- run $command and die "Failed building $module"
- }
-}
-
-# vim: ft=perl6
View
45 tmplib/Module/Install.pm
@@ -1,45 +0,0 @@
-module Module::Install;
-
-#use File::Copy;
-use File::Find;
-#use File::Mkdir; TODO: For some reason this does not work.
-sub mkdirp($name as Str) {
- for [\~] $name.split('/').map({"$_/"}) {
- mkdir($_) unless .IO.d
- }
-}
-
-our sub install(Str :$dir = '.', Str :$dest = "%*ENV<HOME>/.perl6", :$v) {
- if $*VM<config><osname> ne 'MSWin32'
- && "$dir/Makefile".IO ~~ :f {
- my $cwd = cwd;
- chdir $dir;
- run 'make install' and die "'make install' failed";
- chdir $cwd;
- } else {
- my @files;
- if "$dir/lib".IO ~~ :d {
- for find(dir => "$dir/lib",
- name => /[\.pm6?$] | [\.pir$]/).list {
- @files.push: $_
- }
- }
- if "$dir/bin".IO ~~ :d {
- for find(dir => "$dir/bin").list {
- @files.push: $_
- }
- }
- for @files -> $file {
- my $target-dir = $file.dir.subst(/^$dir\//, "$dest/");
- mkdirp $target-dir;
- say "Installing $file" if $v;
- if $*VM<config><osname> eq 'MSWin32' {
- run "copy $file $target-dir/{$file.name}";
- } else {
- run "cp $file $target-dir/{$file.name}";
- }
- }
- }
-}
-
-# vim: ft=perl6
View
21 tmplib/Module/Test.pm
@@ -1,21 +0,0 @@
-module Module::Test;
-
-our sub test(Str :$dir = '.', Str :$binary = 'perl6', :$v) {
- if $*VM<config><osname> ne 'MSWin32'
- && "$dir/Makefile".IO ~~ :f {
- my $cwd = cwd;
- chdir $dir;
- run 'make test' and die "'make test' failed";
- chdir $cwd;
- }
- if "$dir/t".IO ~~ :d {
- my $x = $v ?? '-v' !! '-Q';
- my $cwd = cwd;
- chdir $dir;
- my $command = "PERL6LIB=lib prove $x -e $binary -r t/";
- run $command and die 'Testing failed';
- chdir $cwd;
- }
-}
-
-# vim: ft=perl6

0 comments on commit ff7922a

Please sign in to comment.