runtest: allow passing a sub directory to search in.

Resolves #134
diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt
index d301c0b..47c25d8 100644
--- a/regress/CMakeLists.txt
+++ b/regress/CMakeLists.txt
@@ -209,7 +209,7 @@
 string(REPLACE ";" "\\;" path "${path}")
 
 FOREACH(CASE ${EXTRA_TESTS})
-  ADD_TEST(NAME ${CASE} COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/runtest ${CMAKE_CURRENT_SOURCE_DIR}/${CASE})
+  ADD_TEST(NAME ${CASE} COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/runtest --bin-sub-directory $<CONFIG> ${CMAKE_CURRENT_SOURCE_DIR}/${CASE})
   SET_TESTS_PROPERTIES(${CASE} PROPERTIES SKIP_RETURN_CODE 77)
   SET_TESTS_PROPERTIES(${CASE} PROPERTIES ENVIRONMENT "PATH=${path}")
 ENDFOREACH()
diff --git a/regress/NiHTest.pm b/regress/NiHTest.pm
index 2fce7f4..66c2f0c 100644
--- a/regress/NiHTest.pm
+++ b/regress/NiHTest.pm
@@ -420,6 +420,7 @@
 	@ARGV = @argv;
 	my $ok = GetOptions(
 		'help|h' => \my $help,
+	        'bin-sub-directory=s' => \$self->{bin_sub_directory},
 		'keep-broken|k' => \$self->{keep_broken},
 		'no-cleanup' => \$self->{no_cleanup},
 		# 'run-gdb' => \$self->{run_gdb},
@@ -430,7 +431,7 @@
 	@ARGV = @save_argv;
 
 	if (!$ok || scalar(@argv) != 1 || $help) {
-		print STDERR "Usage: $0 [-hv] [--keep-broken] [--no-cleanup] [--setup-only] testcase\n";
+		print STDERR "Usage: $0 [-hv] [--bin-sub-directory DIR] [--keep-broken] [--no-cleanup] [--setup-only] testcase\n";
 		exit(1);
 	}
 
@@ -601,7 +602,7 @@
 
 	while (scalar(@dirs) > 0) {
 		my $dir = shift @dirs;
-		
+
 		opendir($ls, $dir);
 		unless ($ls) {
 			# TODO: handle error
@@ -611,7 +612,7 @@
 			if ($dir eq '.') {
 				$file = $entry;
 			}
-			
+
 			if (-f $file) {
 				push @files, "$file";
 			}
@@ -1138,13 +1139,18 @@
 
 
 sub find_program() {
-	my ($self, $pname) = @_;
+        my ($self, $pname) = @_;
 
-	for my $up (('.', '..', '../..', '../../..', '../../../..')) {
+	my @directories = (".");
+	if ($self->{bin_sub_directory}) {
+	        push @directories, $self->{bin_sub_directory};
+	}
+
+	for my $up (('.', '..', '../..', '../../..')) {
 		for my $sub (('.', 'src')) {
-			for my $conf (('.', 'Debug', 'Release', 'Relwithdebinfo', 'Minsizerel')) {
+		        for my $dir (@directories) {
 				for my $ext (('', '.exe')) {
-					my $f = "$up/$sub/$conf/$pname$ext";
+					my $f = "$up/$sub/$dir/$pname$ext";
 					return $f if (-f $f);
 				}
 			}