use strict;
use warnings FATAL => qw(all);
-use Cwd 'getcwd';
-use Exporter 'import';
-use File::Basename 'basename';
+use Cwd qw(getcwd);
+use Exporter qw(import);
+use File::Basename qw(basename);
use make::console;
use make::utilities;
-our @EXPORT = qw(cmd_clean cmd_help cmd_update
- read_configure_cache write_configure_cache
- get_compiler_info find_compiler
- run_test test_file test_header
- dump_hash get_property parse_templates);
-
-sub __get_socketengines() {
+use constant CONFIGURE_CACHE_FILE => '.configure.cache';
+use constant CONFIGURE_CACHE_VERSION => '1';
+
+our @EXPORT = qw(CONFIGURE_CACHE_FILE
+ CONFIGURE_CACHE_VERSION
+ cmd_clean
+ cmd_help
+ cmd_update
+ read_configure_cache
+ write_configure_cache
+ get_compiler_info
+ find_compiler
+ run_test
+ test_file
+ test_header
+ get_property
+ parse_templates);
+
+sub __get_socketengines {
my @socketengines;
foreach (<src/socketengines/socketengine_*.cpp>) {
s/src\/socketengines\/socketengine_(\w+)\.cpp/$1/;
# These are actually hash references
my ($config, $compiler) = @_;
- # Start off by populating with the config
+ # Start off by populating with the config
my %settings = %$config;
# Compiler information
}
# Miscellaneous information
+ $settings{CONFIGURE_CACHE_FILE} = CONFIGURE_CACHE_FILE;
$settings{SYSTEM_NAME} = lc $^O;
chomp($settings{SYSTEM_NAME_VERSION} = `uname -sr 2>/dev/null`);
}
sub cmd_clean {
- unlink '.config.cache';
+ unlink CONFIGURE_CACHE_FILE;
}
sub cmd_help {
[$PWD/run/data]
--log-dir=[dir] The location where the log files are stored.
[$PWD/run/logs]
+ --manual-dir=[dir] The location where the manual files are stored.
+ [$PWD/run/manuals]
--module-dir=[dir] The location where the loadable modules are
stored.
[$PWD/run/modules]
- --build-dir=[dir] The location to store files in while building.
-
EXTRA MODULE OPTIONS
--clean Remove the configuration cache file and start
the interactive configuration wizard.
--disable-interactive Disables the interactive configuration wizard.
+ --gid=[id|name] Sets the group to run InspIRCd as.
--help Show this message and exit.
- --uid=[name] Sets the user to run InspIRCd as.
--socketengine=[name] Sets the socket engine to be used. Possible
values are $SELIST.
+ --uid=[id|name] Sets the user to run InspIRCd as.
--update Updates the build environment.
}
sub cmd_update {
- print_error "You have not run $0 before. Please do this before trying to update the generated files." unless -f '.config.cache';
+ print_error "You have not run $0 before. Please do this before trying to update the generated files." unless -f CONFIGURE_CACHE_FILE;
print "Updating...\n";
my %config = read_configure_cache();
my %compiler = get_compiler_info($config{CXX});
}
sub read_configure_cache {
- my %cfg = ();
- open(CACHE, '.config.cache') or return %cfg;
+ my %config;
+ open(CACHE, CONFIGURE_CACHE_FILE) or return %config;
while (my $line = <CACHE>) {
next if $line =~ /^\s*($|\#)/;
my ($key, $value) = ($line =~ /^(\S+)="(.*)"$/);
- $cfg{$key} = $value;
+ $config{$key} = $value;
}
close(CACHE);
- return %cfg;
+ return %config;
}
sub write_configure_cache(%) {
- my %cfg = @_;
- open(CACHE, ">.config.cache") or return 0;
- while (my ($key, $value) = each %cfg) {
- $value = "" unless defined $value;
+ print_format "Writing <|GREEN ${\CONFIGURE_CACHE_FILE}|> ...\n";
+ my %config = @_;
+ open(CACHE, '>', CONFIGURE_CACHE_FILE) or print_error "unable to write ${\CONFIGURE_CACHE_FILE}: $!";
+ while (my ($key, $value) = each %config) {
+ $value = '' unless defined $value;
print CACHE "$key=\"$value\"\n";
}
close(CACHE);
- return 1;
}
sub get_compiler_info($) {
sub run_test($$) {
my ($what, $result) = @_;
- print "Checking whether $what is available... ";
- print $result ? "yes\n" : "no\n";
+ print_format "Checking whether <|GREEN $what|> is available ... ";
+ print_format $result ? "<|GREEN yes|>\n" : "<|RED no|>\n";
return $result;
}
return defined $default ? $default : '';
}
-sub dump_hash() {
- print "\n\e[1;32mPre-build configuration is complete!\e[0m\n\n";
- print "\e[0mBase install path:\e[1;32m\t\t$main::config{BASE_DIR}\e[0m\n";
- print "\e[0mConfig path:\e[1;32m\t\t\t$main::config{CONFIG_DIR}\e[0m\n";
- print "\e[0mData path:\e[1;32m\t\t\t$main::config{DATA_DIR}\e[0m\n";
- print "\e[0mLog path:\e[1;32m\t\t\t$main::config{LOG_DIR}\e[0m\n";
- print "\e[0mModule path:\e[1;32m\t\t\t$main::config{MODULE_DIR}\e[0m\n";
- print "\e[0mCompiler:\e[1;32m\t\t\t$main::cxx{NAME} $main::cxx{VERSION}\e[0m\n";
- print "\e[0mSocket engine:\e[1;32m\t\t\t$main::config{SOCKETENGINE}\e[0m\n";
- print "\e[0mGnuTLS support:\e[1;32m\t\t\t$main::config{USE_GNUTLS}\e[0m\n";
- print "\e[0mOpenSSL support:\e[1;32m\t\t$main::config{USE_OPENSSL}\e[0m\n";
-}
-
sub parse_templates($$) {
# These are actually hash references
while ($line =~ /(@(\w+?)@)/) {
my ($variable, $name) = ($1, $2);
if (defined $settings{$name}) {
- $line =~ s/$variable/$settings{$name}/;
+ $line =~ s/\Q$variable\E/$settings{$name}/;
} else {
print_warning "unknown template variable '$name' in $_!";
last;