cosmetics
[fusioninventory:agent-task-esx.git] / Makefile.PL
1 use inc::Module::Install;
2 use English qw(-no_match_vars);
3 use File::Which;
4
5 name 'FusionInventory-Agent-Task-ESX';
6 include 'Module::AutoInstall';
7 abstract 'ESX and ESXi inventory';
8 version_from 'lib/FusionInventory/Agent/Task/ESX.pm';
9 license 'gpl';
10 perl_version '5.008';
11
12 eval {
13     # check for fusioninventory-agent setup
14     require File::Which;
15     my $agent = File::Which::which('fusioninventory-agent');
16     die "fusioninventory-agent not found in PATH\n" unless $agent;
17
18     my $command = 'fusioninventory-agent --setup 2>/dev/null';
19     open (my $handle, '-|', $command) or die "can't run $command: $ERRNO";
20     while (my $line = <$handle>) {
21         chomp $line;
22         next unless $line =~ /(\S+): (\S+)/;
23         $MY::setup{uc($1)} = $2;
24     }
25     close $handle;
26
27     die "agent too old (minimal version 2.2.0 required)\n" if $CHILD_ERROR;
28 };
29 warn "unable to check fusioninventory-agent setup: $EVAL_ERROR" if $EVAL_ERROR;
30
31 # mandatory dependencies
32 requires 'JSON'                   => undef;
33 requires 'Pod::Usage'             => undef;
34 requires 'Getopt::Long'            => undef;
35
36 test_requires 'Test::Exception'  => undef;
37 test_requires 'Test::MockObject' => undef;
38 test_requires 'Test::MockModule' => undef;
39
40 install_script  'fusioninventory-esx';
41
42 WriteAll;
43
44 # substitute prefix everywhere
45 $MY::variables{DATADIR} =~ s/\$\(PREFIX\)/$MY::variables{PREFIX}/;
46
47 print <<EOF;
48
49 Installation summary
50 --------------------
51 prefix: $MY::variables{PREFIX}
52 constant data installation directory: $MY::variables{DATADIR}
53
54 EOF
55
56 package MY;
57
58 use English qw(-no_match_vars);
59
60 our %setup;
61 our %variables;
62
63 # force a perl-independant prefix for everything but perl modules
64 sub constants {
65     my ($self) = @_;
66
67     # for some reason, initialising variables from the global scope doesn't work
68     %variables = (
69         PREFIX               => '/usr/local',
70         INSTALLSCRIPT        => '$(PREFIX)/bin',
71         INSTALLSITESCRIPT    => '$(PREFIX)/bin',
72         INSTALLVENDORSCRIPT  => '$(PREFIX)/bin',
73         INSTALLLIB           => '$(DATADIR)/lib',
74         INSTALLSITELIB       => '$(DATADIR)/lib',
75         INSTALLVENDORLIB     => '$(DATADIR)/lib',
76         INSTALLMAN1DIR       => '$(PREFIX)/share/man/man1',
77         INSTALLSITEMAN1DIR   => '$(PREFIX)/share/man/man1',
78         INSTALLVENDORMAN1DIR => '$(PREFIX)/share/man/man1',
79         INSTALLMAN3DIR       => '$(PREFIX)/share/man/man3',
80         INSTALLSITEMAN3DIR   => '$(PREFIX)/share/man/man3',
81         INSTALLVENDORMAN3DIR => '$(PREFIX)/share/man/man3',
82         DATADIR              => '$(PREFIX)/share/fusioninventory',
83         FULLPERLRUN          => '$(FULLPERL) -I$(DATADIR)/lib'
84     );
85
86     # allow variables detected from agent setup to override defaults
87     foreach my $name (keys %variables) {
88         $variables{$name} = $setup{$name} if $setup{$name};
89     }
90
91     # allow variables defined on command line to override defaults
92     foreach my $name (keys %variables) {
93         $variables{$name} = $self->{ARGS}->{$name} if $self->{ARGS}->{$name};
94     }
95
96     # get all standard MM variables definitions, and override them if needed
97     my @code = split(/\n/, $self->SUPER::constants(@_));
98     foreach my $line (@code) {
99         # Skip comments
100         next if $line =~ /^\s*#/;
101         # Skip everything which isn't a var assignment.
102         next unless $line =~ /^([A-Z0-9_]+) =/;
103         my $name = $1;
104         # skip variables we're not interested
105         next unless $variables{$name};
106
107         $line = "$name = $variables{$name}";
108     }
109
110     # add out own variables
111     foreach my $name (qw/DATADIR/) {
112         push @code, "$name = $variables{$name}";
113     }
114
115     return join("\n", @code);
116 }
117
118 # suppress all lines related to packlist file installation
119 sub install {
120     my ($self) = @_;
121     my $install = $self->SUPER::install(@_);
122
123     $install =~ s/.*\.packlist \\\n//g;
124
125     return $install;
126 }
127
128 # ensure binaries get modified to use configured directories (on Unix only)
129 sub installbin {
130     my ($self) = @_;
131     my $installbin = $self->SUPER::installbin(@_);
132
133     return $installbin if $OSNAME eq 'MSWin32';
134
135     $installbin =~ s|\t\$\(FIXIN\) (.*)\n|\t\$(FIXIN) $1\n\t\$(FINALIZE) $1\n|g;
136
137     $installbin .= <<'EOF';
138 FINALIZE = $(ABSPERLRUN) -pi \
139     -e 's|use lib .*|use lib "$(DATADIR)/lib";|;' \
140     --
141 EOF
142     return $installbin;
143 }