]> git.pond.sub.org Git - empserver/commitdiff
tests: Fix for builds outside git-controlled source tree
authorMarkus Armbruster <armbru@pond.sub.org>
Tue, 3 Mar 2015 19:09:50 +0000 (20:09 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 3 Mar 2015 19:18:38 +0000 (20:18 +0100)
We run "git ls-files" in the build tree.  Doesn't work when the source
directory isn't a git repository, or the build directory is outside
the source directory.  Broken in commit 71cb2d8.

Find source files like Make.mk does: if the source tree is a git
repository, use git ls-files, else use sources.mk.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
src/scripts/ls-sources.pl [new file with mode: 0755]

diff --git a/src/scripts/ls-sources.pl b/src/scripts/ls-sources.pl
new file mode 100755 (executable)
index 0000000..b34f8b0
--- /dev/null
@@ -0,0 +1,82 @@
+#!/usr/bin/perl
+#
+#   Empire - A multi-player, client/server Internet based war game.
+#   Copyright (C) 1986-2015, Dave Pare, Jeff Bailey, Thomas Ruschak,
+#                 Ken Stevens, Steve McClure, Markus Armbruster
+#
+#   Empire 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, either version 3 of the License, or
+#   (at your option) any later version.
+#
+#   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/>.
+#
+#   ---
+#
+#   See files README, COPYING and CREDITS in the root of the source
+#   tree for related information and legal notices.  It is expected
+#   that future projects/authors will amend these files as needed.
+#
+#   ---
+#
+#   ls-sources.pl: List source files
+#
+#   Known contributors to this file:
+#      Markus Armbruster, 2015
+#
+# Usage: ls-sources.pl DIR REGEX
+#
+# List source files in DIR with names matching REGEX.  If DIR is under
+# version control, list version-controlled files.  Else, list files in
+# sources.mk.
+
+use warnings;
+use strict;
+
+if ($#ARGV != 1) {
+    print STDERR "Usage: $0 DIR REGEX\n";
+    exit 1;
+}
+
+my $dir = $ARGV[0];
+my $regex = $ARGV[1];
+
+my $srcdir = $dir;
+my $subdir = "";
+
+while (! -d "$srcdir/.git" and ! -r "$srcdir/sources.mk"
+       and $srcdir =~ m,^(.*)/([^/]*),) {
+    $srcdir = $1;
+    $subdir = "$2/$subdir";
+}
+
+my @sources;
+if (-d "$srcdir/.git") {
+    open IN, "cd '$srcdir' && git ls-files '$subdir' | uniq |"
+       or die "can't run git ls-files: $!";
+    while (<IN>) {
+       chomp;
+       push @sources, $_;
+    }
+    close IN;
+} elsif (-r "$srcdir/sources.mk") {
+    open IN, "<$srcdir/sources.mk"
+       or die "can't open $srcdir/sources.mk: $!";
+    $_ = <IN>;
+    s/.*=//;
+    @sources = grep m,^\Q$subdir\E,, split;
+    close IN;
+} else {
+    print STDERR "Can't find source tree\n";
+    exit 1;
+}
+
+for (grep m/$regex/, @sources) {
+    print "$srcdir/$_\n";
+}