/usr/local/CPAN/ALPM/Makefile.PL


use ExtUtils::MakeMaker;
use File::Spec::Functions qw(catfile);

# Avoid FAIL reports from CPAN Testers...
require DynaLoader;
unless ( DynaLoader::dl_findfile( '-lalpm' )) {
    print STDERR "ERROR: pacman/libalpm must be installed for this module\n";
    exit 0;
}

WriteMakefile
    ( NAME              => 'ALPM',
      VERSION_FROM      => 'lib/ALPM.pm', # finds $VERSION
      PREREQ_PM         => { map { ( $_ => 0 ) }
                             qw/ Scalar::Util English Carp /
                            },
      BUILD_REQUIRES    => { File::Path => '2.06_05',
                             map { ( $_ => 0 ) }
                             qw{ File::Spec::Functions
                                 File::Copy     File::Find
                                 File::Basename File::stat
                                 Net::Ping      Time::HiRes
                                 Cwd }
                            },
      LICENSE           => 'perl',
      ABSTRACT_FROM     => 'lib/ALPM.pod',
      AUTHOR            => 'Justin Davis <juster at cpan dot org>',
      LIBS              => [ '-lalpm' ],
      META_MERGE        =>
      { resources =>
        { repository => 'http://github.com/juster/perl-alpm' }},
      clean             => { FILES  => 't/root t/repos/share const-*.inc' },
	# Un-comment this if you add C files to link with later:
     # OBJECT            => '$(O_FILES)', # link all the C files too
      OBJECT            => 'ALPM.o convert.o callbacks.o',
      XS                => { 'ALPM.xs' => 'ALPM.c' },
);

if  (eval {require ExtUtils::Constant; 1}) {
  # If you edit these definitions to change the constants used by this module,
  # you will need to use the generated const-c.inc and const-xs.inc
  # files to replace their "fallback" counterparts before distributing your
  # changes.
  my @names = map { +{ name => $_, macro => 1 } }
      (qw(PM_PKG_REASON_EXPLICIT
          PM_PKG_REASON_DEPEND

          PM_TRANS_FLAG_NODEPS
          PM_TRANS_FLAG_FORCE
          PM_TRANS_FLAG_NOSAVE
          PM_TRANS_FLAG_NODEPVERSION
          PM_TRANS_FLAG_CASCADE
          PM_TRANS_FLAG_RECURSE
          PM_TRANS_FLAG_DBONLY
          PM_TRANS_FLAG_ALLDEPS
          PM_TRANS_FLAG_DOWNLOADONLY
          PM_TRANS_FLAG_NOSCRIPTLET
          PM_TRANS_FLAG_NOCONFLICTS
          PM_TRANS_FLAG_NEEDED
          PM_TRANS_FLAG_ALLEXPLICIT
          PM_TRANS_FLAG_UNNEEDED
          PM_TRANS_FLAG_RECURSEALL
          PM_TRANS_FLAG_NOLOCK

          PM_TRANS_EVT_CHECKDEPS_START
          PM_TRANS_EVT_CHECKDEPS_DONE
          PM_TRANS_EVT_FILECONFLICTS_START
          PM_TRANS_EVT_FILECONFLICTS_DONE
          PM_TRANS_EVT_RESOLVEDEPS_START
          PM_TRANS_EVT_RESOLVEDEPS_DONE
          PM_TRANS_EVT_INTERCONFLICTS_START
          PM_TRANS_EVT_INTERCONFLICTS_DONE
          PM_TRANS_EVT_ADD_START
          PM_TRANS_EVT_ADD_DONE
          PM_TRANS_EVT_REMOVE_START
          PM_TRANS_EVT_REMOVE_DONE
          PM_TRANS_EVT_UPGRADE_START
          PM_TRANS_EVT_UPGRADE_DONE
          PM_TRANS_EVT_INTEGRITY_START
          PM_TRANS_EVT_INTEGRITY_DONE
          PM_TRANS_EVT_DELTA_INTEGRITY_START
          PM_TRANS_EVT_DELTA_INTEGRITY_DONE
          PM_TRANS_EVT_DELTA_PATCHES_START
          PM_TRANS_EVT_DELTA_PATCHES_DONE
          PM_TRANS_EVT_DELTA_PATCH_START
          PM_TRANS_EVT_DELTA_PATCH_DONE
          PM_TRANS_EVT_DELTA_PATCH_FAILED
          PM_TRANS_EVT_SCRIPTLET_INFO
          PM_TRANS_EVT_RETRIEVE_START
          PM_TRANS_EVT_DISKSPACE_START
          PM_TRANS_EVT_DISKSPACE_DONE

          PM_TRANS_CONV_INSTALL_IGNOREPKG
          PM_TRANS_CONV_REPLACE_PKG
          PM_TRANS_CONV_CONFLICT_PKG
          PM_TRANS_CONV_CORRUPTED_PKG
          PM_TRANS_CONV_LOCAL_NEWER
          PM_TRANS_CONV_REMOVE_PKGS
          PM_TRANS_CONV_SELECT_PROVIDER

          PM_TRANS_PROGRESS_ADD_START
          PM_TRANS_PROGRESS_UPGRADE_START
          PM_TRANS_PROGRESS_REMOVE_START
          PM_TRANS_PROGRESS_CONFLICTS_START
          PM_TRANS_PROGRESS_DISKSPACE_START
          PM_TRANS_PROGRESS_INTEGRITY_START

          PM_DEP_MOD_ANY
          PM_DEP_MOD_EQ
          PM_DEP_MOD_GE
          PM_DEP_MOD_LE
          PM_DEP_MOD_GT
          PM_DEP_MOD_LT

          PM_FILECONFLICT_TARGET
          PM_FILECONFLICT_FILESYSTEM

          PM_ERR_MEMORY
          PM_ERR_SYSTEM
          PM_ERR_BADPERMS
          PM_ERR_NOT_A_FILE
          PM_ERR_NOT_A_DIR
          PM_ERR_WRONG_ARGS
          PM_ERR_DISK_SPACE

          PM_ERR_HANDLE_NULL
          PM_ERR_HANDLE_NOT_NULL
          PM_ERR_HANDLE_LOCK

          PM_ERR_DB_OPEN
          PM_ERR_DB_CREATE
          PM_ERR_DB_NULL
          PM_ERR_DB_NOT_NULL
          PM_ERR_DB_NOT_FOUND
          PM_ERR_DB_VERSION
          PM_ERR_DB_WRITE
          PM_ERR_DB_REMOVE

          PM_ERR_SERVER_BAD_URL
          PM_ERR_SERVER_NONE

          PM_ERR_TRANS_NOT_NULL
          PM_ERR_TRANS_NULL
          PM_ERR_TRANS_DUP_TARGET
          PM_ERR_TRANS_NOT_INITIALIZED
          PM_ERR_TRANS_NOT_PREPARED
          PM_ERR_TRANS_ABORT
          PM_ERR_TRANS_TYPE
          PM_ERR_TRANS_NOT_LOCKED

          PM_ERR_PKG_NOT_FOUND
          PM_ERR_PKG_IGNORED
          PM_ERR_PKG_INVALID
          PM_ERR_PKG_OPEN
          PM_ERR_PKG_CANT_REMOVE
          PM_ERR_PKG_INVALID_NAME
          PM_ERR_PKG_INVALID_ARCH
          PM_ERR_PKG_REPO_NOT_FOUND

          PM_ERR_DLT_INVALID
          PM_ERR_DLT_PATCHFAILED

          PM_ERR_UNSATISFIED_DEPS
          PM_ERR_CONFLICTING_DEPS
          PM_ERR_FILE_CONFLICTS
          PM_ERR_RETRIEVE
          PM_ERR_WRITE
          PM_ERR_INVALID_REGEX
          PM_ERR_LIBARCHIVE
          PM_ERR_LIBFETCH
          PM_ERR_EXTERNAL_DOWNLOAD));

  my $cpath  = catfile( qw/ xs const-c.inc  / );
  my $xspath = catfile( qw/ xs const-xs.inc / );
  ExtUtils::Constant::WriteConstants( NAME         => 'ALPM',
                                      NAMES        => \@names,
                                      DEFAULT_TYPE => 'IV',
                                      C_FILE       => $cpath,
                                      XS_FILE      => $xspath,
                                  );

}
else {
  use File::Copy;
  use File::Spec;
  for my $file ( map { catfile( 'xs', $_ ) }
                 qw/ const-c.inc const-xs.inc /
                ) {
    my $fallback = catfile( qw/ xs fallback /, $file);
    copy ($fallback, $file) or die "Can't copy $fallback to $file: $!";
  }
}