The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use 5.006;
use ExtUtils::MakeMaker;

if ($^O =~ /linux/) {
  # get KDE include dir
  my $kde_dir = `kde-config --prefix`;
  chomp $kde_dir;
  die "Could not get KDE headers folder" unless ($kde_dir);
  print "KDE componenets direcotry: $kde_dir\n";
  my $kde_include = "$kde_dir/include/kde";
  
  my $qt_dir = $ENV{'QTDIR'};
  die "Could not get QT componenets direcotry" unless ($qt_dir);
  print "QT componenets direcotry: $qt_dir\n";
  my $qt_include = "$qt_dir/include";

  `$qt_dir/bin/moc src/linux/tray.h -o src/linux/tray.moc.cpp`;
  `$qt_dir/bin/moc src/linux/mainwnd.h -o src/linux/mainwnd.moc.cpp`;

  # See lib/ExtUtils/MakeMaker.pm for details of how to influence
  # the contents of the Makefile that is written.
  WriteMakefile(
      NAME              => 'SysTray',
      VERSION_FROM      => 'lib/SysTray.pm', # finds $VERSION
      PREREQ_PM         => {}, # e.g., Module::Name => 1.1
      ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
        (ABSTRACT_FROM  => 'lib/SysTray.pm', # retrieve abstract from module
         AUTHOR         => '') : ()),
      LIBS              => ["-L/usr/X11R6/lib -L$qt_dir/lib -L$kde_dir/lib -lkdecore -lkdeui -lkhtml -ldl -lz -lm -lresolv -lpthread"], # e.g., '-lm'
      DEFINE            => '-DHAVE_CONFIG_H -DQT_THREAD_SUPPORT -D_REENTRANT -DPIC', # e.g., '-DHAVE_SOMETHING'
      INC               => "-I. -Isrc/linux -I$kde_include -I$qt_include -I/usr/X11R6/include", # e.g., '-I. -I/usr/include/other'
      OPTIMIZE          => '-O2 -fno-exceptions -fno-check-new -fPIC',
  	# Un-comment this if you add C files to link with later:
      OBJECT            => 'src/linux/tray.o src/linux/tray.moc.o src/linux/mainwnd.o src/linux/mainwnd.moc.o src/linux/kde_wrap.o SysTray.o', # link all the C files too
      CC                => 'g++',
      LD                => 'g++',
  );
} elsif ($^O =~ /Win32/) {
  WriteMakefile(
      NAME              => 'SysTray',
      VERSION_FROM      => 'lib/SysTray.pm', # finds $VERSION
      PREREQ_PM         => {}, # e.g., Module::Name => 1.1
      ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
        (ABSTRACT_FROM  => 'lib/SysTray.pm', # retrieve abstract from module
         AUTHOR         => '') : ()),
      LIBS              => [':nosearch -lshell32 -lgdi32 -luser32'],
      INC               => "-I. -Isrc/win", # e.g., '-I. -I/usr/include/other'
      #LIBS              => [':nosearch -lcomctl32 -lcomdlg32 -lshell32 -lgdi32 -luser32 -lversion '],
      #C                 => [ "win_wrap.cpp" ], 
      OBJECT            => 'src/win/win_wrap.obj SysTray.obj', # link all the C files too
  );
} elsif ($^O =~ /darwin/) {
  WriteMakefile(
      NAME              => 'SysTray',
      VERSION_FROM      => 'lib/SysTray.pm', # finds $VERSION
      PREREQ_PM         => {}, # e.g., Module::Name => 1.1
      ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
        (ABSTRACT_FROM  => 'lib/SysTray.pm', # retrieve abstract from module
         AUTHOR         => '') : ()),
      DEFINE            => '', # e.g., '-DHAVE_SOMETHING'
      LIBS              => [ '-lobjc' ],
      INC               => "-I. -Isrc/osx -ObjC -arch i386 -arch ppc",
      dynamic_lib       => {
                          'OTHERLDFLAGS' =>
                          " -framework Foundation -framework AppKit -lobjc -arch i386 -arch ppc"
                        },
      OBJECT            => 'src/osx/TrayMenu.o src/osx/osx_wrap.o SysTray.o', # link all the C files too
  );
} else {
  die "Don't know how to write Makefile for $^O";
}

package MY;

sub c_o {
  # Tell the Makefile to put the .o files with the .c ones
  my $inherited = shift->SUPER::c_o(@_);
  if($^O =~ /darwin/) { # Mac
    $inherited =~ s{\$\*.c\n}{\$\*.c -o \$\*.o\n}mg;
  } elsif($^O =~ /Win32/) {     # Microsoft
    $inherited =~ s{\$\*.c\n}{\$\*.c -Fo\$\*.obj\n}mg;
  } else {                      # Linux/Other
    $inherited =~ s{\$\*.cpp\n}{\$\*.cpp -o \$\*.o\n}mg;
  }
  return $inherited;
}