use strict ; use warnings ; use Module::Build; my %all_modules ; my @split_modules ; my @pm_files = qw( lib/App/Asciio.pm lib/App/Asciio/Actions.pm lib/App/Asciio/Ascii.pm lib/App/Asciio/Connections.pm lib/App/Asciio/Dialogs.pm lib/App/Asciio/Elements.pm lib/App/Asciio/Io.pm lib/App/Asciio/Menues.pm lib/App/Asciio/Setup.pm lib/App/Asciio/Undo.pm lib/App/Asciio/Options.pm lib/App/Asciio/stripes/editable_arrow2.pm lib/App/Asciio/stripes/editable_box2.pm lib/App/Asciio/stripes/if_box.pm lib/App/Asciio/stripes/process_box.pm lib/App/Asciio/stripes/section_wirl_arrow.pm lib/App/Asciio/stripes/single_stripe.pm lib/App/Asciio/stripes/stripes.pm lib/App/Asciio/stripes/wirl_arrow.pm ); for(@pm_files) { $all_modules{$_} = $_ ; push @split_modules, $_ ; } my @setup_lib= qw( setup/setup.ini setup/actions/align.pl setup/actions/clipboard.pl setup/actions/debug.pl setup/actions/elements_manipulation.pl setup/actions/file.pl setup/actions/mouse.pl setup/actions/new_elements.pl setup/actions/colors.pl setup/actions/unsorted.pl setup/actions/presentation.pl setup/actions/context_menu_multi_wirl.pl setup/actions/context_menu_box.pl setup/actions/context_menu_rulers.pl setup/asciio_object/basic.pl setup/hooks/canonize_connections.pl setup/import_export/ascii.pl setup/import_export/asciioe.pl setup/import_export/perl.pl setup/import_export/png.pl setup/stencils/asciio setup/stencils/computer setup/stencils/people setup/stencils/divers ) ; for(@setup_lib) { $all_modules{$_} = "lib/App/Asciio/$_" ; } sub GetVersionAndRevisionFrom { my ($file) = @_ ; my $version_from = File::Spec->catfile( split '/', $file ); my $version = Module::Build->version_from_file($version_from); if($ENV{'App_Asciio_USE_GIT_VERSION_FOR_DIST'}) { my $number_of_commits = `git log | grep -E 'commit [0-9a-f]{40}' | wc -l` ; chomp $number_of_commits ; if($number_of_commits) { #print "number of git revision: $number_of_commits.\n" ; return("${version}.${number_of_commits}") ; } else { print "Couldn't get git revision, using version from '$file'!\n" ; return($version) ; } } else { return($version) ; } } my $code = <<'EOC'; use strict ; use warnings ; sub GetVersionAndRevisionFrom { my ($file) = @_ ; my $version_from = File::Spec->catfile( split '/', $file ); my $version = Module::Build->version_from_file($version_from); if($ENV{'App_Asciio_USE_GIT_VERSION_FOR_DIST'}) { my $number_of_commits = `git log | grep -E 'commit [0-9a-f]{40}' | wc -l` ; chomp $number_of_commits ; if($number_of_commits) { #print "number of git revision: $number_of_commits.\n" ; return("${version}.${number_of_commits}") ; } else { print "Couldn't get git revision, using version from '$file'!\n" ; return($version) ; } } else { return($version) ; } } sub ACTION_author_test { my $self = shift; local $self->{properties}{test_files} = 'xt/author/*.t' ; $self->SUPER::ACTION_test(); } sub ACTION_build { my $self = shift; if($ENV{'App_Asciio_USE_GIT_VERSION_FOR_DIST'}) { my ($version) = GetVersionAndRevisionFrom('lib/App/Asciio.pm') ; #~ print "Generating version module ($version)\n" ; open VERSION, '>', 'Version.pm' or die "can't generate Version module: $!\n" ; print VERSION <SUPER::ACTION_build(@_); } sub ACTION_dist { my $self = shift; if($ENV{'App_Asciio_USE_GIT_VERSION_FOR_DIST'}) { my $have_git = $self->do_system('git --version'); if($have_git) { print `git status -a`; if($self->do_system('git log > git_Changes')) { use File::Copy; move('git_Changes', 'Changes') ; } else { print "Couldn't get git log, 'Changes' will not be generated from git log!\n" ; } } else { print "git not found, 'Changes' will not be generated from git log!\n" ; } } $self->SUPER::ACTION_test() ; #~ $self->ACTION_author_test() ; $self->SUPER::ACTION_dist(); }; EOC my $class = Module::Build->subclass(class => 'App::Asciio', code => $code) ; my $build = $class->new ( module_name => 'App::Asciio', dist_version => GetVersionAndRevisionFrom('lib/App/Asciio.pm'), license => 'perl', requires => { 'Readonly' => 0, 'Data::Compare' => 0, 'Sub::Exporter' => 0, 'Data::TreeDumper' => 0, 'version' => 0.50, 'Compress::Bzip2' => 0, 'Cwd' => 0, 'Data::TreeDumper::Renderer::GTK' => 0, 'Directory::Scratch' => 0, 'Directory::Scratch::Structured' => 0, 'Eval::Context' => 0, 'File::Basename' => 0, 'File::Spec' => 0, 'Glib' => 0, 'Gtk2' => 0, 'Gtk2::Gdk::Keysyms' => 0, 'List::MoreUtils' => 0, 'List::Util' => 0, 'MIME::Base64' => 0, 'File::Copy' => 0, 'File::Slurp' => 0, 'Algorithm::Diff' => 0, 'Clone' => 0, 'Module::Util' =>0, 'Test::Block' => 0, 'Test::Exception' => 0, 'Test::NoWarnings' => 0, 'Test::Warn' => 0, 'Test::Strict' => 0, }, pm_files => \%all_modules, #~ autosplit => \@split_modules, script_files => 'script/asciio', dist_author => 'Khemir Nadim ibn Hamouda. ', dist_abstract => 'App::Asciio - ASCII diagramming', ); $build->create_build_script;