]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - make/utilities.pm
Replace the configure templating system with something better.
[user/henk/code/inspircd.git] / make / utilities.pm
index 9d791870a9b27c796963aa9f06409d367f837fa7..4042439661da40df767b42339b388b83eb8ab7a7 100644 (file)
@@ -36,19 +36,44 @@ use File::Spec::Functions qw(rel2abs);
 use Getopt::Long;
 use POSIX;
 
-our @EXPORT = qw(module_installed prompt_bool prompt_dir prompt_string get_cpu_count make_rpath pkgconfig_get_include_dirs pkgconfig_get_lib_dirs pkgconfig_check_version translate_functions promptstring);
+our @EXPORT = qw(get_version module_installed prompt_bool prompt_dir prompt_string get_cpu_count make_rpath pkgconfig_get_include_dirs pkgconfig_get_lib_dirs pkgconfig_check_version translate_functions promptstring);
 
-# Parse the output of a *_config program,
-# such as pcre_config, take out the -L
-# directive and return an rpath for it.
+my %already_added = ();
+my %version = ();
 
-# \e[1;32msrc/Makefile\e[0m
+sub get_version {
+       return %version if %version;
 
-my %already_added = ();
-my $if_skip_lines = 0;
+       # 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 );
+       }
 
-sub module_installed($)
-{
+       # 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+-(\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 !$@;