our
@ISA
=
qw(Exporter)
;
our
@EXPORT
=
qw(%args %Conf)
;
our
@EXPORT_OK
=
qw(pre push_libs build_clean help $DEVNULL)
;
our
%EXPORT_TAGS
;
$EXPORT_TAGS
{
'default'
} = \
@EXPORT
;
our
%Conf
;
our
%args
;
sub
init_config {
my
%overrides
=
@_
;
%Conf
=
%overrides
;
$Conf
{
'homedir'
} ||=
$ENV
{HOME};
$Conf
{
'rootdir'
} ||= catdir(
$Conf
{
'homedir'
},
'.megadistro'
);
$Conf
{
'fetchdir'
} ||= catdir(
$Conf
{
'rootdir'
},
'Fetch'
);
$Conf
{
'extractdir'
} ||= catdir(
$Conf
{
'rootdir'
},
'Extract'
);
$Conf
{
'builddir'
} ||= catdir(
$Conf
{
'rootdir'
},
'Build'
);
$Conf
{
'prefixdir'
} ||= catdir(
$Conf
{
'builddir'
},
'usr'
);
$Conf
{
'modlist'
} ||= catfile(
$Conf
{
'rootdir'
},
"modules.list"
);
for
my
$key
(
grep
!/^disttype$/,
keys
%Conf
) {
$Conf
{
$key
} = rel2abs(
$Conf
{
$key
});
}
if
(
$Conf
{disttype} &&
$Conf
{disttype} !~ /^(rpm|deb)/i ) {
die
"Invalid package type! - Valid types are: rpm , deb"
.
"\n"
;
}
MegaDistro::RpmMaker::Config::_init_globals();
MegaDistro::DebMaker::Config::_init_globals();
for
my
$key
(
keys
%Conf
) {
print
"$key: $Conf{$key}\n"
if
$args
{debug};
}
}
init_config();
our
$DEVNULL
=
'/dev/null 2>&1'
;
sub
pre {
if
(
$args
{
'trace'
} ) {
print
'MegaDistro::Config : Executing sub-routine: pre'
.
"\n"
;
}
if
( ! -d
"$Conf{'fetchdir'}"
) {
if
(
$args
{
'debug'
} ) {
print
"\t"
.
'Fetch directory: '
.
$Conf
{
'fetchdir'
} .
' does not exist, creating it'
.
"\n"
;
}
mkpath
$Conf
{
'fetchdir'
};
}
if
( ! -d
"$Conf{'extractdir'}"
) {
if
(
$args
{
'debug'
} ) {
print
"\t"
.
'Extract directory: '
.
$Conf
{
'extractdir'
} .
' does not exist, creating it'
.
"\n"
;
}
mkpath
$Conf
{
'extractdir'
};
}
if
( ! -d
"$Conf{'builddir'}"
) {
if
(
$args
{
'debug'
} ) {
print
"\t"
.
'Build directory: '
.
$Conf
{
'builddir'
} .
' does not exist, creating it'
.
"\n"
;
}
mkpath
$Conf
{
'builddir'
};
}
&build_tree
;
}
sub
prop_libs {
my
@add_libs
;
push
@add_libs
, catdir(
$Conf
{
'builddir'
},
$Config
{
'installarchlib'
});
push
@add_libs
, catdir(
$Conf
{
'builddir'
},
$Config
{
'installvendorarch'
});
push
@add_libs
, catdir(
$Conf
{
'builddir'
},
$Config
{
'installvendorlib'
});
return
@add_libs
;
}
sub
push_libs {
my
@add_libs
=
&prop_libs
;
for
(
@add_libs
) {
unshift
@INC
,
$_
;
}
}
sub
build_tree {
my
@build_libs
=
&prop_libs
;
for
(
@build_libs
) {
mkpath
$_
if
! -d
"$_"
;
}
}
sub
build_clean {
rmtree
"$Conf{'builddir'}/*"
;
}
sub
help {
print
"\n"
;
print
"Usage: Configure [OPTION]... [--disttype=TYPE]"
.
"\n"
;
print
" or: Configure [-q] [-dxv] [-t TYPE]"
.
"\n"
;
print
" or: Configure [-h]"
.
"\n"
;
print
"Run the Configure system, and specify package type."
.
"\n"
;
print
"\n"
;
print
"The following arguements are all optional,"
.
"\n"
;
print
" however you should always specify the package type."
.
"\n"
;
print
"\n"
;
print
" -h, --help displays this help information"
.
"\n"
;
print
" -t TYPE, --disttype=TYPE package type to build - "
.
"\n"
;
print
" valid types are 'deb' and 'rpm'"
.
"\n"
;
print
" -v, --verbose verbose output"
.
"\n"
;
print
" (not recommended)"
.
"\n"
;
print
" -d, --debug debbuging output"
.
"\n"
;
print
" (for development only)"
.
"\n"
;
print
" -q, --quiet only display status information"
.
"\n"
;
print
" (obsolete)"
.
"\n"
;
print
" -x, --trace trace the program execution"
.
"\n"
;
print
" (for development only)"
.
"\n"
;
print
" --clean completely removes everything"
.
"\n"
;
print
" from BUILDDIR"
.
"\n"
;
print
" --force forces the install of all modules"
.
"\n"
;
print
" (use carefully!)"
.
"\n"
;
print
" --build-only skips the packaging phase,"
.
"\n"
;
print
" builds snapshot of build-tree"
.
"\n"
;
print
" --modlist=FILE set the module list to use"
.
"\n"
;
print
" --fetchdir=DIR set directory to download modules"
.
"\n"
;
print
" --extractdir=DIR set directory to extract modules"
.
"\n"
;
print
" --builddir=DIR set directory for built modules"
.
"\n"
;
print
"\n"
;
}
1;