]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - make/common.pm
Merge branch 'insp20' into master.
[user/henk/code/inspircd.git] / make / common.pm
index 53ee3f7782b8646bce71c441adb71ad41b0555cb..ba6b03f87d4472d19640e98021c0f3114578cd38 100644 (file)
@@ -1,7 +1,7 @@
 #
 # InspIRCd -- Internet Relay Chat Daemon
 #
-#   Copyright (C) 2013-2014 Peter Powell <petpow@saberuk.com>
+#   Copyright (C) 2013-2017 Peter Powell <petpow@saberuk.com>
 #
 # This file is part of InspIRCd.  InspIRCd is free software: you can
 # redistribute it and/or modify it under the terms of the GNU General Public
@@ -31,10 +31,13 @@ use Exporter              qw(import);
 use File::Path            qw(mkpath);
 use File::Spec::Functions qw(rel2abs);
 
+use make::console;
+
 our @EXPORT = qw(create_directory
                  get_cpu_count
                  get_version
-                 module_installed);
+                 read_config_file
+                 write_config_file);
 
 sub create_directory($$) {
        my ($location, $permissions) = @_;
@@ -56,13 +59,17 @@ sub get_version {
 
        # Attempt to retrieve missing version information from Git
        chomp(my $gr = `git describe --tags 2>/dev/null`);
-       if ($gr =~ /^v([0-9]+)\.([0-9]+)\.([0-9]+)(?:-\d+-g(\w+))?$/) {
+       if ($gr =~ /^v([0-9]+)\.([0-9]+)\.([0-9]+)(?:[a-z]+\d+)?(?:-\d+-g(\w+))?$/) {
                $version{MAJOR} //= $1;
                $version{MINOR} //= $2;
                $version{PATCH} //= $3;
                $version{LABEL} = $4 if defined $4;
        }
 
+       # If the user has specified a distribution label then we use it in
+       # place of the label from src/version.sh or Git.
+       $version{LABEL} = shift // $version{LABEL};
+
        # If any of these fields are missing then the user has deleted the
        # version file and is not running from Git. Fill in the fields with
        # dummy data so we don't get into trouble with undef values later.
@@ -82,12 +89,6 @@ sub get_version {
        return %version;
 }
 
-sub module_installed($) {
-       my $module = shift;
-       eval("use $module;");
-       return !$@;
-}
-
 sub get_cpu_count {
        my $count = 1;
        if ($^O =~ /bsd/) {
@@ -103,4 +104,28 @@ sub get_cpu_count {
        return $count;
 }
 
+sub read_config_file($) {
+       my $path = shift;
+       my %config;
+       open(my $fh, $path) or return %config;
+       while (my $line = <$fh>) {
+               next if $line =~ /^\s*($|\#)/;
+               my ($key, $value) = ($line =~ /^(\S+)(?:\s(.*))?$/);
+               $config{$key} = $value;
+       }
+       close $fh;
+       return %config;
+}
+
+sub write_config_file($%) {
+       my $path = shift;
+       my %config = @_;
+       open(my $fh, '>', $path) or print_error "unable to write to $path: $!";
+       while (my ($key, $value) = each %config) {
+               $value //= '';
+               say $fh "$key $value";
+       }
+       close $fh;
+}
+
 1;