summaryrefslogtreecommitdiff
path: root/t/cscope.tap
diff options
context:
space:
mode:
Diffstat (limited to 't/cscope.tap')
-rwxr-xr-xt/cscope.tap168
1 files changed, 168 insertions, 0 deletions
diff --git a/t/cscope.tap b/t/cscope.tap
new file mode 100755
index 000000000..c39feedd7
--- /dev/null
+++ b/t/cscope.tap
@@ -0,0 +1,168 @@
+#! /bin/sh
+# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+#
+# This program 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 2, 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/>.
+
+# Test cscope functionality.
+
+. ./defs || Exit 1
+
+plan_ 18
+
+ocwd=`pwd` || fatal_ "getting top-level directory"
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_SUBST([CC], [who-cares])
+AC_SUBST([CXX], [who-cares])
+AC_SUBST([FC], [who-cares])
+AC_SUBST([GCJ], [who-cares])
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+mkdir sub sub/subsub
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c bar.cpp baz.f90
+lisp_LISP = foo.el
+EXTRA_DIST = foo.el
+END
+
+cat > sub/Makefile.am <<'END'
+bin_PROGRAMS = bar
+bar_SOURCES = subsub/dist.c
+nodist_bar_SOURCES = subsub/gen.c
+subsub/gen.c:
+ $(MKDIR_P) subsub
+ echo 'int generated_subsub () { return 0; }' > $@
+CLEANFILES = subsub/gen.c
+END
+
+echo 'int foo_func () { return 0; }' > foo.c
+echo 'int main () { return 0; }' > bar.cpp
+cat > baz.f90 <<'END'
+ subroutine baz
+ end
+END
+: > foo.el
+echo 'int main () { return 0; }' > sub/subsub/dist.c
+
+$ACLOCAL || fatal_ "aclocal failed"
+$AUTOCONF || fatal_ "autoconf failed"
+$AUTOMAKE -i -a || fatal_ "automake -i -a failed"
+
+# Sun cscope is interactive without redirection.
+if cscope --version </dev/null; then
+ have_cscope=yes
+else
+ have_cscope=no
+fi
+
+test_cleanup ()
+{
+ r=ok
+ if test -f configure; then
+ # In-tree build.
+ $MAKE distclean
+ else
+ # VPATH build.
+ $MAKE distcleancheck
+ fi \
+ && test ! -f cscope.files \
+ && test ! -f cscope.out \
+ && test ! -f cscope.in.out \
+ && test ! -f cscope.po.out \
+ || r='not ok'
+ result_ "$r" "[$pfx] make distcheck"
+}
+
+test_cscope ()
+{
+ r=ok
+ $MAKE -n cscope || r='not ok'
+ result_ "$r" "[$pfx] make -n cscope"
+
+ if test $have_cscope = no; then
+ # For later tests.
+ touch cscope.files cscope.out cscope.in.out cscope.po.out
+ skip_row_ 3 -r "no cscope program avaiable"
+ return 0
+ fi
+
+ r=ok
+ $MAKE cscope 2>stderr || r='not ok'
+ cat stderr >&2
+ grep 'cannot find file' stderr && r='not ok'
+ rm -f stderr
+ result_ "$r" "[$pfx] make cscope"
+
+ r=ok
+ test -f cscope.files \
+ && $FGREP foo.c cscope.files \
+ && $FGREP bar.cpp cscope.files \
+ && $FGREP sub/subsub/dist.c cscope.files \
+ && $FGREP sub/subsub/gen.c cscope.files \
+ || r='not ok'
+ result_ "$r" "[$pfx] cscope.files looks correct"
+
+ r=ok
+ # cscope.files might not exist of the earlier "make cscope" failed.
+ cp cscope.files cscope.files1 \
+ && $MAKE cscope \
+ && diff cscope.files cscope.files1 \
+ || r='not ok'
+ rm -f cscope.files1
+ result_ "$r" "[$pfx] second \"make cscope\" is consistent"
+}
+
+my_configure ()
+{
+ command_ok_ "[$pfx] configure" \
+ "$1"/configure EMACS=no --with-lispdir=/who/cares
+}
+
+if using_gmake; then
+
+ cd "$ocwd"
+ pfx="relative VPATH"
+ mkdir build
+ cd build
+ my_configure ..
+ test_cscope
+ test_cleanup
+
+ cd "$ocwd"
+ pfx="absolute VPATH"
+ mkdir build2
+ cd build2
+ my_configure "$ocwd"
+ test_cscope
+ test_cleanup
+
+else
+
+ skip_row_ 12 -r "cscope in VPATH required GNU make"
+
+fi
+
+cd "$ocwd"
+pfx="in-tree build"
+my_configure .
+test_cscope
+test_cleanup
+
+: