comparison make/cscope.make @ 3291:d6cdc6c77582

7037250: cscope.make database generation is silently broken Reviewed-by: stefank
author jcoomes
date Sat, 23 Apr 2011 04:20:09 -0700
parents make/solaris/makefiles/cscope.make@c18cbe5936b8
children f08d439fab8c
comparison
equal deleted inserted replaced
3290:7f3faf7159fd 3291:d6cdc6c77582
1 #
2 # Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 #
5 # This code is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License version 2 only, as
7 # published by the Free Software Foundation.
8 #
9 # This code is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 # version 2 for more details (a copy is included in the LICENSE file that
13 # accompanied this code).
14 #
15 # You should have received a copy of the GNU General Public License version
16 # 2 along with this work; if not, write to the Free Software Foundation,
17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 #
19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 # or visit www.oracle.com if you need additional information or have any
21 # questions.
22 #
23 #
24
25 # The cscope.out file is generated in the current directory. The old cscope.out
26 # file is *not* removed because cscope is smart enough to only build what has
27 # changed. cscope can be confused if files are renamed or removed, so it may be
28 # necessary to remove cscope.out (gmake cscope.clean) if a lot of reorganization
29 # has occurred.
30
31 include $(GAMMADIR)/make/scm.make
32
33 RM = rm -f
34 HG = hg
35 CS_TOP = $(GAMMADIR)
36
37 CSDIRS = $(CS_TOP)/src $(CS_TOP)/make
38 CSINCS = $(CSDIRS:%=-I%)
39
40 CSCOPE = cscope
41 CSCOPE_OUT = cscope.out
42 CSCOPE_FLAGS = -b
43
44 # Allow .java files to be added from the environment (CSCLASSES=yes).
45 ifdef CSCLASSES
46 ADDCLASSES= -o -name '*.java'
47 endif
48
49 # Adding CClassHeaders also pushes the file count of a full workspace up about
50 # 200 files (these files also don't exist in a new workspace, and thus will
51 # cause the recreation of the database as they get created, which might seem
52 # a little confusing). Thus allow these files to be added from the environment
53 # (CSHEADERS=yes).
54 ifndef CSHEADERS
55 RMCCHEADERS= -o -name CClassHeaders
56 endif
57
58 # Ignore build products.
59 CS_PRUNE_GENERATED = -o -name '${OSNAME}_*_core' -o \
60 -name '${OSNAME}_*_compiler?'
61
62 # O/S-specific files for all systems are included by default. Set CS_OS to a
63 # space-separated list of identifiers to include only those systems.
64 ifdef CS_OS
65 CS_PRUNE_OS = $(patsubst %,-o -name '*%*',\
66 $(filter-out ${CS_OS},linux macos solaris windows))
67 endif
68
69 # CPU-specific files for all processors are included by default. Set CS_CPU
70 # space-separated list identifiers to include only those CPUs.
71 ifdef CS_CPU
72 CS_PRUNE_CPU = $(patsubst %,-o -name '*%*',\
73 $(filter-out ${CS_CPU},arm ppc sparc x86 zero))
74 endif
75
76 # What files should we include? A simple rule might be just those files under
77 # SCCS control, however this would miss files we create like the opcodes and
78 # CClassHeaders. The following attempts to find everything that is *useful*.
79 # (.del files are created by sccsrm, demo directories contain many .java files
80 # that probably aren't useful for development, and the pkgarchive may contain
81 # duplicates of files within the source hierarchy).
82
83 # Directories to exclude.
84 CS_PRUNE_STD = $(SCM_DIRS) \
85 -o -name '.del-*' \
86 -o -name '*demo' \
87 -o -name pkgarchive
88
89 # Placeholder for user-defined excludes.
90 CS_PRUNE_EX =
91
92 CS_PRUNE = $(CS_PRUNE_STD) \
93 $(CS_PRUNE_OS) \
94 $(CS_PRUNE_CPU) \
95 $(CS_PRUNE_GENERATED) \
96 $(CS_PRUNE_EX) \
97 $(RMCCHEADERS)
98
99 # File names to include.
100 CSFILENAMES = -name '*.[ch]pp' \
101 -o -name '*.[Ccshlxy]' \
102 $(CS_ADD_GENERATED) \
103 -o -name '*.d' \
104 -o -name '*.il' \
105 -o -name '*.cc' \
106 -o -name '*[Mm]akefile*' \
107 -o -name '*.gmk' \
108 -o -name '*.make' \
109 -o -name '*.ad' \
110 $(ADDCLASSES)
111
112 .PHONY: cscope cscope.clean cscope.scratch TAGS.clean FORCE
113 .PRECIOUS: cscope.out
114
115 cscope $(CSCOPE_OUT): cscope.files FORCE
116 $(CSCOPE) -f $(CSCOPE_OUT) $(CSCOPE_FLAGS)
117
118 cscope.clean:
119 $(QUIETLY) $(RM) $(CSCOPE_OUT) cscope.files
120
121 cscope.scratch: cscope.clean cscope
122
123 # The raw list is reordered so cscope displays the most relevant files first.
124 cscope.files:
125 $(QUIETLY) \
126 raw=cscope.$$$$; \
127 find $(CSDIRS) -type d \( $(CS_PRUNE) \) -prune -o \
128 -type f \( $(CSFILENAMES) \) -print > $$raw; \
129 { \
130 echo "$(CSINCS)"; \
131 egrep -v "\.java|/make/" $$raw; \
132 fgrep ".java" $$raw; \
133 fgrep "/make/" $$raw; \
134 } > $@; \
135 rm -f $$raw
136
137 TAGS: cscope.files FORCE
138 egrep -v '^-|^$$' $< | etags --members -
139
140 TAGS.clean:
141 $(RM) TAGS