Allow make-version.pl to use git when missing from path
authorChristian Tellefsen <chris-git@tellefsen.net>
Wed, 6 Jan 2016 21:20:10 +0000 (22:20 +0100)
committerAlexis La Goutte <alexis.lagoutte@gmail.com>
Wed, 27 Jan 2016 09:28:13 +0000 (09:28 +0000)
This change allows make-version.pl to run correctly on Windows
without having the git binary dir in PATH. This prevents problems when
installing "Git for Windows" with default settings (git only available
via the bundled shell (bash).

Details:
* Add Git to the list of packages to be looked up by CMake.
* If Git is found by CMake, pass the full path to make-version.pl
* make-version.pl: Test whether git is available, and display a warning if git is missing.

On Unix-type systems this should have no impact.

Tested on Windows Server 2012 R2 and Ubuntu 15.04.

Change-Id: I7f7be2035c262658801586cb24c82b912848e31d
Reviewed-on: https://code.wireshark.org/review/13111
Reviewed-by: Graham Bloice <graham.bloice@trihedral.com>
Petri-Dish: Graham Bloice <graham.bloice@trihedral.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
CMakeLists.txt
make-version.pl

index c9a6400a4212e96bab126bb340d60706cf96ccd4..50d645d18358aac38fe1d749d1e7ad23d780c0ba 100644 (file)
@@ -642,7 +642,7 @@ endif()
 # - set HAVE_XXX
 
 #The minimum package list
-set(PACKAGELIST Gettext M GLIB2 GMODULE2 GTHREAD2 LEX YACC Perl SED SH PythonInterp)
+set(PACKAGELIST Gettext M Git GLIB2 GMODULE2 GTHREAD2 LEX YACC Perl SED SH PythonInterp)
 set(LEX_REQUIRED TRUE)
 set(GLIB2_REQUIRED TRUE)
 set(GLIB2_FIND_REQUIRED TRUE)
@@ -1142,11 +1142,14 @@ else()
        set(WS_MSVC_NORETURN " ")
 endif()
 
+if (${GIT_EXECUTABLE})
+       set(GIT_BIN_PARAM "--git-bin ${GIT_EXECUTABLE}")
+endif()
 set( VERSION ${PROJECT_VERSION} )
 execute_process(
        COMMAND ${PERL_EXECUTABLE}
                ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
-               --print-vcs
+               --print-vcs ${GIT_BIN_PARAM}
                ${CMAKE_CURRENT_SOURCE_DIR}
        OUTPUT_VARIABLE VERSION_H_CONTENT
 )
index 62312e6c78ecbc16d58a729e17457f770503d824..a3643ddef8e6f6d377e8a6f1a803b3fdf87431af 100755 (executable)
@@ -74,6 +74,7 @@ my $last_change = 0;
 my $num_commits = 0;
 my $commit_id = '';
 my $repo_branch = "unknown";
+my $git_executable = "git";
 my $git_description = undef;
 my $get_vcs = 0;
 my $set_vcs = 0;
@@ -119,6 +120,12 @@ sub read_repo_info {
        my $do_hack = 1;
        my $info_source = "Unknown";
 
+       # Make sure git is available.
+       if (!`$git_executable --version`) {
+               print STDERR "Git unavailable. Git revision will be missing from version string.\n";
+               return;
+       }
+
        if ($version_pref{"pkg_enable"} > 0) {
                $package_format = $version_pref{"pkg_format"};
        }
@@ -132,7 +139,7 @@ sub read_repo_info {
                $version_pref{"svn_client"} = 1;
        } elsif (-d "$srcdir/.git/svn") {
                $info_source = "Command line (git-svn)";
-               $info_cmd = "(cd $srcdir; git svn info)";
+               $info_cmd = "(cd $srcdir; $git_executable svn info)";
        }
 
        #Git can give us:
@@ -163,13 +170,13 @@ sub read_repo_info {
                        use warnings "all";
                        no warnings "all";
 
-                       chomp($line = qx{git --git-dir="$srcdir"/.git log -1 --pretty=format:%at});
+                       chomp($line = qx{$git_executable --git-dir="$srcdir"/.git log -1 --pretty=format:%at});
                        if ($? == 0 && length($line) > 1) {
                                $last_change = $line;
                        }
 
                        # Commits since last annotated tag.
-                       chomp($line = qx{git --git-dir="$srcdir"/.git describe --long --always --match "v*"});
+                       chomp($line = qx{$git_executable --git-dir="$srcdir"/.git describe --long --always --match "v*"});
                        if ($? == 0 && length($line) > 1) {
                                my @parts = split(/-/, $line);
                                $git_description = $line;
@@ -179,7 +186,7 @@ sub read_repo_info {
 
                        # This will break in some cases. Hopefully not during
                        # official package builds.
-                       chomp($line = qx{git --git-dir="$srcdir"/.git rev-parse --abbrev-ref --symbolic-full-name \@\{upstream\}});
+                       chomp($line = qx{$git_executable --git-dir="$srcdir"/.git rev-parse --abbrev-ref --symbolic-full-name \@\{upstream\}});
                        if ($? == 0 && length($line) > 1) {
                                $repo_branch = basename($line);
                        }
@@ -264,21 +271,21 @@ sub read_repo_info {
                        # If someone had properly tagged 1.9.0 we could also use
                        # "git describe --abbrev=1 --tags HEAD"
 
-                       $info_cmd = "(cd $srcdir; git log --format='%b' -n 1)";
+                       $info_cmd = "(cd $srcdir; $git_executable log --format='%b' -n 1)";
                        $line = qx{$info_cmd};
                        if (defined($line)) {
                                if ($line =~ /svn path=.*; revision=(\d+)/) {
                                        $num_commits = $1;
                                }
                        }
-                       $info_cmd = "(cd $srcdir; git log --format='%ad' -n 1 --date=iso)";
+                       $info_cmd = "(cd $srcdir; $git_executable log --format='%ad' -n 1 --date=iso)";
                        $line = qx{$info_cmd};
                        if (defined($line)) {
                                if ($line =~ /(\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/) {
                                        $last_change = timegm($6, $5, $4, $3, $2 - 1, $1);
                                }
                        }
-                       $info_cmd = "(cd $srcdir; git branch)";
+                       $info_cmd = "(cd $srcdir; $git_executable branch)";
                        $line = qx{$info_cmd};
                        if (defined($line)) {
                                if ($line =~ /\* (\S+)/) {
@@ -684,6 +691,7 @@ sub get_config {
                   "help|h", \$show_help,
                   "get-vcs|get-svn|g", \$get_vcs,
                   "set-vcs|set-svn|s", \$set_vcs,
+                  "git-bin", \$git_executable,
                   "print-vcs", \$print_vcs,
                   "set-version|v", \$set_version,
                   "set-release|r|package-version|p", \$set_release