summaryrefslogtreecommitdiff
path: root/make/common.pm
diff options
context:
space:
mode:
authorPeter Powell <petpow@saberuk.com>2014-10-01 19:52:29 +0100
committerPeter Powell <petpow@saberuk.com>2014-12-07 22:36:43 +0000
commit7404ba8b66083c2fbb19c638da85c252551792a2 (patch)
tree622b5f0fd7fdf60885fd2d82b99795b101f55750 /make/common.pm
parent541a66de7adbfe57dd4d3e998e8cc0db5585a266 (diff)
Move common code to make::common from make::utilities.
The other code in that file will be removed very soon so it has been left alone to avoid merge conflicts. This will help prevent insp20 merge conflicts in the future.
Diffstat (limited to 'make/common.pm')
-rw-r--r--make/common.pm91
1 files changed, 91 insertions, 0 deletions
diff --git a/make/common.pm b/make/common.pm
new file mode 100644
index 000000000..24ef599ce
--- /dev/null
+++ b/make/common.pm
@@ -0,0 +1,91 @@
+#
+# InspIRCd -- Internet Relay Chat Daemon
+#
+# Copyright (C) 2013-2014 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
+# License as published by the Free Software Foundation, version 2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+
+BEGIN {
+ require 5.8.0;
+}
+
+package make::common;
+
+use strict;
+use warnings FATAL => qw(all);
+
+use Exporter qw(import);
+use File::Spec::Functions qw(rel2abs);
+
+our @EXPORT = qw(get_cpu_count
+ get_version
+ module_installed);
+
+my %version;
+
+sub get_version {
+ return %version if %version;
+
+ # Attempt to retrieve version information from src/version.sh
+ chomp(my $vf = `sh src/version.sh 2>/dev/null`);
+ if ($vf =~ /^InspIRCd-([0-9]+)\.([0-9]+)\.([0-9]+)(?:\+(\w+))?$/) {
+ %version = ( MAJOR => $1, MINOR => $2, PATCH => $3, LABEL => $4 );
+ }
+
+ # 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+))?$/) {
+ $version{MAJOR} = $1 unless defined $version{MAJOR};
+ $version{MINOR} = $2 unless defined $version{MINOR};
+ $version{PATCH} = $3 unless defined $version{PATCH};
+ $version{LABEL} = $4 if defined $4;
+ }
+
+ # The user is using a stable release which does not have
+ # a label attached.
+ $version{LABEL} = 'release' unless defined $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.
+ $version{MAJOR} = '0' unless defined $version{MAJOR};
+ $version{MINOR} = '0' unless defined $version{MINOR};
+ $version{PATCH} = '0' unless defined $version{PATCH};
+
+ return %version;
+}
+
+sub module_installed($) {
+ my $module = shift;
+ eval("use $module;");
+ return !$@;
+}
+
+sub get_cpu_count {
+ my $count = 1;
+ if ($^O =~ /bsd/) {
+ $count = `sysctl -n hw.ncpu`;
+ } elsif ($^O eq 'darwin') {
+ $count = `sysctl -n hw.activecpu`;
+ } elsif ($^O eq 'linux') {
+ $count = `getconf _NPROCESSORS_ONLN`;
+ } elsif ($^O eq 'solaris') {
+ $count = `psrinfo -p`;
+ }
+ chomp($count);
+ return $count;
+}
+
+1;