The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# Copyright 2007, 2008, 2009 Kevin Ryde

# This file is part of Chart.
#
# Chart is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 3, or (at your option) any later version.
#
# Chart is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with Chart.  If not, see <http://www.gnu.org/licenses/>.

use strict;
use warnings;
use Module::Build;

my $build = Module::Build->new
  (dist_name         => 'Chart',
   dist_abstract     => 'Stock and commodity charting program.',
   dist_author       => 'Kevin Ryde <user42@zip.com.au>',
   dist_version_from => 'lib/App/Chart.pm',
   license           => 'gpl',
   script_files      => [ 'chart' ],

   build_requires => { 'Test::MockTime' => 0,
                     },

   requires => { 'perl' => '5.10.0',

                 'Archive::Zip' => 0,   # for float.com.au

                 'Class::Singleton' => 0,
                 'Date::Calc' => 0,
                 'Date::Parse' => 0,
                 'DBI' => 0,
                 'DBD::SQLite' => 0,

                 # builtin in perl 5.8, but also separately on CPAN, maybe
                 'File::Spec' => 0,

                 # this is builtin in perl 5.8 which is what Gtk2 needs
                 # anyway, but it's also published separately (and newer) on
                 # CPAN; probably any version ok
                 'File::Temp' => 0,

                 # need 1.190 for Glib::strerror
                 'Glib' => '1.190',

                 # 1.181 for misc bug fixes, and TickerView needs that
                 # version anyway
                 'Gtk2' => '1.181',

                 # whatever version Gtk2 demands
                 'Glib' => 0,

                 'Glib::Ex::ConnectProperties' => 0,
                 'Glib::Ex::SignalIds' => 0, # my Glib-Ex-ObjectBits

                 # Gtk2::Ex::GtkGCobj => 0,
                 'Gtk2::Ex::CrossHair' => 0,
                 'Gtk2::Ex::Dragger' => 0,
                 'Gtk2::Ex::Lasso' => 0,
                 'Gtk2::Ex::NoShrink' => 0,
                 'Gtk2::Ex::TickerView' => 0,

                 # version 2 for busy() working on newly opened dialogs
                 'Gtk2::Ex::WidgetCursor' => 2,

                 'HTML::TableExtract' => 0,

                 # only needed for an LME plastics hack actually
                 'HTML::TreeBuilder' => 0,

                 'IO::String' => 0,
                 'List::MoreUtils' => 0,

                 # need 1.16 for bind_textdomain_filter() to mung gettext
                 # strings
                 'Locale::TextDomain' => '1.16',

                 # dunno what version actually needed, at least 5.803 for a
                 # working "decoded_content".
                 LWP => '5.803',

                 'Math::Round' => 0,
                 'Module::Load' => 0,

                 # need 1.60 for fixups to initializing in locales like
                 # de_DE with "."  as the monetary thousands sep
                 'Number::Format' => '1.60',

                 'Perl6::Slurp' => 0,
                 'Proc::SyncExec' => 0,
                 'Regexp::Common' => 0,
                 'Scope::Guard' => 0,

                 # 1.10 for contains_all_range()
                 'Set::IntSpan::Fast' => '1.10',

                 # 'Set::Object' => 0,
                 'Storable' => 0, # builtin actually
                 'Tie::Cache' => 0,
                 'Time::Piece' => 0,
                 'Term::Size' => 0,
                 'Text::CSV_XS' => 0,
                 'Text::Glob' => 0,
                 'URI::Escape' => 0,

                 # and if available:
                 #   Test::Pod
                 #   Test::UseAllModules

                 # Stuff used variously for development:
                 #   Module::ScanDeps
                 #   Lisp::Reader  -- conversion of past data
                 #   Parse::DebControl

               },
   recommends => {
                  # Stuff used if available:
                  'BSD::Resource' => 0,
                  'Devel::Arena' => 0,
                  'Devel::Mallinfo' => 0,
                  'Devel::Peek' => 0,
                  'Devel::StackTrace' => 0,
                 },

   # sign => 1,
   meta_merge =>
   { resources =>
     { homepage=>'http://user42.tuxfamily.org/chart/index.html',
       license =>'http://www.gnu.org/licenses/gpl.html',
     },
     no_index => { directory => 'devel' },
   }
  );
$build->create_build_script;


# sub MY::special_targets {
#   my $self = shift;
#   my $inherited = $self->SUPER::special_targets(@_);
#   $inherited =~ s/^\.SUFFIXES *:/$& .mo .po/
#     or die "Oops, couldn't add to .SUFFIXES";
# #   $inherited =~ s/^\.PHONY *:/$& mo pot/
# #     or die "Oops, couldn't add to .PHONY";
#   return $inherited;
# }

# # $self is a MakeMaker object, return a string of rules for the po/mo files
# sub generate_po_rules {
#   my ($self) = @_;
#   #   use Data::Dumper;
#   #   print Dumper($self);
#   my $ret = '';
# 
#   my @pmfiles = grep {/\.pm$/} keys %{$self->{'PM'}};
#   my $pmfiles_list = $self->wraplist (@pmfiles);
#   $ret .= "\
# # basically all the .pm's from \$(TO_INST_PM)
# PO_FILES = chart $pmfiles_list
# ";
# 
#   my @mofiles;
#   my @pofiles;
#   foreach my $pofile (glob('po/*.po')) {
#     my $lang = File::Basename::basename ($pofile, '.po');
#     my $mofile = "lib/LocaleData/$lang/LC_MESSAGES/AppChart.mo";
#     push @pofiles, $pofile;
#     push @mofiles, $mofile;
# 
#     $ret .= "\
# $pofile: po/AppChart.pot
# 	msgmerge --verbose --update \$@ \$<
# 	touch \$@
# $mofile: $pofile
# 	msgfmt --check --statistics --verbose -o \$@ \$<
# ";
#   }
#   $ret = "mo: " . join(' ',@mofiles) . "\n" . $ret;
#   $ret = "po: " . join(' ',@pofiles) . "\n" . $ret;
# 
#   return $ret;
# }
# 
# sub MY::postamble {
#   my ($self) = @_;
#   my $ret = <<'MAKE_FRAG';
# 
# #------------------------------------------------------------------------------
# # message translation stuff
# 
# pot: po/AppChart.pot
# 
# po/AppChart.pot: po/header.pot $(PO_FILES)
# 	xgettext \
# 	  --omit-header \
# 	  --language=Perl \
# 	  --keyword=__ \
# 	  --add-comments=TRANSLATORS: \
# 	  --width=78 \
# 	  --msgid-bugs-address='Kevin Ryde <user42@zip.com.au>' \
# 	  --copyright-holder="Kevin Ryde" \
# 	  --default-domain=AppChart \
# 	  --package-name=Chart \
# 	  --package-version='$(VERSION)' \
# 	  --output=AppChart.tmp \
# 	  --from-code=utf-8 \
# 	  --keyword=__ \
# 	  --keyword=__x \
# 	  $(PO_FILES)
# 	cat po/header.pot AppChart.tmp >$@
# 	rm AppChart.tmp
# 
# MAKE_FRAG
#   $ret .= generate_po_rules($self);
#   $ret .= <<'MAKE_FRAG';
# 
# 
# #------------------------------------------------------------------------------
# # doc stuff
# 
# doc/chart.info: doc/chart.texi doc/version.texi
# 	cd doc; makeinfo chart.texi
# 
# doc/version.texi: Makefile
# 	echo '@c  Generated by top-level Makefile, DO NOT EDIT' >doc/version.texi
# 	echo '@set VERSION $(VERSION)' >>doc/version.texi
# 
# lib/App/Chart/chart.html: doc/chart.texi doc/version.texi
# 	cd doc; makeinfo --html --no-split --output=../$@ chart.texi
# 
# doc: doc/chart.info lib/App/Chart/chart.html
# 
# 
# #------------------------------------------------------------------------------
# # development stuff
# 
# # filter-out is a GNU-ism
# LINT_FILES = $(filter-out %/COPYING %.desktop %.html %.mo, $(TO_INST_PM))\
#              t/*.t devel/*.pl examples/*.pl
# lint:
# 	for i in $(LINT_FILES); do \
# 	  perl -I lib -MO=Lint,no-context,no-regexp-variables $$i; \
# 	done
# 	podchecker $(LINT_FILES)
# pc:
# 	perlcritic $(LINT_FILES)
# 
# myman:
# 	mv MANIFEST MANIFEST.old
# 	touch SIGNATURE
# 	(make manifest 2>&1; diff -u MANIFEST.old MANIFEST) |less
# 
# # find files in the dist with mod times this year, but without this year in
# # the copyright line
# copyright-years-check: chart-$(VERSION).tar.gz
# 	year=`date +%Y`; \
# 	tar tvfz chart-$(VERSION).tar.gz \
# 	| grep $$year- \
# 	| sed 's:^.*chart-$(VERSION)/::' \
# 	| (result=0; \
# 	  while read i; do \
# 	    case $$i in \
# 	      '' | */ | *.gmo \
# 	      | debian/changelog | debian/compat | debian/control \
# 	      | debian/doc-base \
# 	      | misc/* | doc/*.txt | doc/*.eps \
# 	      | SIGNATURE | META.yml) \
# 	      continue ;; \
# 	    esac; \
# 	    if test -e "$(srcdir)/$$i"; then f="$(srcdir)/$$i"; \
# 	    else f="$$i"; fi; \
# 	    if ! grep -q "Copyright.*$$year" $$f; then \
# 	      echo "$$i:1: this file"; \
# 	      grep Copyright $$f; \
# 	      result=1; \
# 	    fi; \
# 	  done; \
# 	  exit $$result)
# 
# debug-constants-check:
# 	if egrep -n 'DEBUG => [1-9]' $(TO_INST_PM); then exit 1; else exit 0; fi
# 
# TAGS: $(TO_INST_PM)
# 	etags $(TO_INST_PM)
# 
# MAKE_FRAG
#   return $ret;
# }