PERL=/usr/bin/perl
INSTDIR=/usr/local/dbishell
INSTLIBDIR=
DEPEND_MODULES=DBI Term::ReadKey Term::ReadLine Getopt::Long
BUNDLED_MODULES=DBIShell::Term_CTL  \
		DBIShell::UTIL      \
		DBIShell::Help      \
		DBIShell::Fixup     \
		DBIShell::Readline  \
		DBIShell            \
		Gtk::Icon           \
		Gtk::Symbols        \
		Gtk::Keybinding     \
		DBIShell::Gtk       \
		DBIShell::Gtk::main \
		DBIShell::Gtk::conn \

all: test

clean:
	rm -f ./.cf.cache

test: dependencies drivers helpers
	@echo
	@$(PERL) -Mlib=. -cw ./dbishell
	@$(PERL) -Mlib=. -cw ./dbigtk

dependencies: bundled-modules
	@echo
	@echo "Checking basic Perl module dependencies"
	@for M in $(DEPEND_MODULES); do $(PERL)                 \
		-e "use $$M;"                                   \
		-e "printf(STDOUT qq[%-20.20s\tOk\\n], '$$M')"; \
		done

bundled-modules: perl-readline
	@echo
	@echo "Checking bundled DBIShell modules"
	@for M in $(BUNDLED_MODULES); do $(PERL) -I.            \
		-e "(\$$m = $$M) =~ s(::)(/)g;"                 \
		-e '$$m = join(".",$$m,"pm");'                  \
		-e 'require $$m;'                               \
		-e "printf(STDOUT qq[%-20.20s\tOk\\n], '$$M')"; \
		 done

perl-readline:
	@echo
	@echo "Looking for supported readline implementation"
	@$(PERL) -MTerm::ReadLine \
                 -MFcntl          \
                 -e 'if ( !-t(STDOUT) && -c("/dev/ptmx") )'          \
                 -e '{'                                              \
                 -e '  require "sys/ioctl.ph";'                      \
                 -e '  my $$ptn = 0;'                                \
                 -e '  my $$unl = 0;'                                \
                 -e '  sysopen(PTMX, "/dev/ptmx", O_RDWR|O_NDELAY);' \
                 -e '  ioctl(PTMX, TIOCSPTLCK, $$unl);'              \
                 -e '  ioctl(PTMX, TIOCGPTN, $$ptn);'                \
                 -e '  sysopen(TTY, "/dev/pts/".$$ptn, O_RDWR)'      \
                 -e '    ||die("i", $$!, "\n");'                     \
                 -e '}'                                              \
                 -e 'else { *TTY = *STDIN }'                         \
                 -e '$$x = Term::ReadLine->new("X", *TTY, *TTY)->ReadLine();' \
                 -e 'print(STDOUT "readline == $$x\n");'             \
                 -e '$$x =~ /^Term::ReadLine::(?:Gnu|Perl)$$/'       \
                 -e '  || die("Must have Term::ReadLine::(Gnu|Perl)\n");'

drivers:
	@echo
	@echo "Checking included DB drivers"
	@for dr in DBIShell/dr/*.pm;                                  \
		do $(PERL) -I.                                        \
		-e '$$DR =  shift;'                                   \
		-e '$$DR =~ m</([^/]+).pm$$>;'                        \
		-e '$$MN = $$1;'                                      \
		-e 'require $$DR;'                                    \
		-e 'printf(STDOUT qq[DBIShell::dr::%-5s\tOk\n], $$MN)' \
		$$dr;                                                 \
		done

helpers:
	@echo
	@echo "Checking included help modules"
	@for help in DBIShell/help/*.pm;                                \
		do $(PERL) -I.                                          \
		-e '$$DR =  shift;'                                     \
		-e '$$DR =~ m</([^/]+).pm$$>;'                          \
		-e '$$MN = $$1;'                                        \
		-e 'require $$DR;'                                      \
		-e 'printf(STDOUT qq[DBIShell::help::%5s\tOk\n], $$MN)' \
		$$help;                                                 \
		done

install: test
	@$(PERL) ./installer.pl $(PERL) $(INSTDIR) $(INSTLIBDIR)
#	@echo "./installer.pl $(PERL) $(INSTDIR) $(INSTLIBDIR)"
