xref: /Universal-ctags/misc/src-check (revision 619cd66c44552ce6f0b212ec7a4fac572e8dbd5b)
19d66358aSMasatake YAMATO#!/bin/sh
293c4b724Sviccuad#
393c4b724Sviccuad#   Copyright (C) 2014 Masatake YAMATO
493c4b724Sviccuad#
593c4b724Sviccuad#   This program is free software; you can redistribute it and/or modify
693c4b724Sviccuad#   it under the terms of the GNU General Public License as published by
77963e4b9Sviccuad#   the Free Software Foundation; either version 2 of the License, or
893c4b724Sviccuad#   (at your option) any later version.
993c4b724Sviccuad#
1093c4b724Sviccuad#   This program is distributed in the hope that it will be useful,
1193c4b724Sviccuad#   but WITHOUT ANY WARRANTY; without even the implied warranty of
1293c4b724Sviccuad#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1393c4b724Sviccuad#   GNU General Public License for more details.
1493c4b724Sviccuad#
1593c4b724Sviccuad#   You should have received a copy of the GNU General Public License
1693c4b724Sviccuad#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
179d66358aSMasatake YAMATO
187be80f6aSMasatake YAMATOCTAGS=./ctags
197be80f6aSMasatake YAMATO
207f816018SMasatake YAMATOline()
217f816018SMasatake YAMATO{
227f816018SMasatake YAMATO    local i
237f816018SMasatake YAMATO    for i in $(seq 72); do
247f816018SMasatake YAMATO	echo -n -e -
257f816018SMasatake YAMATO    done
267f816018SMasatake YAMATO    echo
277f816018SMasatake YAMATO}
287f816018SMasatake YAMATO
297f816018SMasatake YAMATOheader()
307f816018SMasatake YAMATO{
317f816018SMasatake YAMATO    echo
327f816018SMasatake YAMATO    echo "$1"
337f816018SMasatake YAMATO    line
347f816018SMasatake YAMATO
357f816018SMasatake YAMATO}
367f816018SMasatake YAMATO
379d66358aSMasatake YAMATOcheck_include_general_h_first()
389d66358aSMasatake YAMATO{
399d66358aSMasatake YAMATO    local f
409d66358aSMasatake YAMATO    local l
419d66358aSMasatake YAMATO    local i=0
429d66358aSMasatake YAMATO
437f816018SMasatake YAMATO    header "Check whether general.h is included first: $1"
44b6ba92a3SMasatake YAMATO    # Added -maxdepth 1 to skip parsers/cxx
45b6ba92a3SMasatake YAMATO    for f in $(find $1 -maxdepth 1 -name '*.c'); do
469d66358aSMasatake YAMATO	if grep -a -q -e '^#[[:space:]]*include' $f; then
479d66358aSMasatake YAMATO	    l=$()
489d66358aSMasatake YAMATO	    if ! ( grep -a -e '^#[[:space:]]*include' $f | head -1 | grep -q "general.h" ); then
49e565e930SMasatake YAMATO		i=$(expr $i + 1)
509d66358aSMasatake YAMATO		echo "$f: general.h should be included FIRST" 2>&1
519d66358aSMasatake YAMATO	    fi
529d66358aSMasatake YAMATO	fi
539d66358aSMasatake YAMATO    done
549d66358aSMasatake YAMATO
559d66358aSMasatake YAMATO    return $i
569d66358aSMasatake YAMATO}
579d66358aSMasatake YAMATO
587be80f6aSMasatake YAMATOcheck_name_cpp_macro()
597be80f6aSMasatake YAMATO{
607be80f6aSMasatake YAMATO    local dir=$1
617be80f6aSMasatake YAMATO    local r=0
627be80f6aSMasatake YAMATO    local n
637be80f6aSMasatake YAMATO
647be80f6aSMasatake YAMATO    header "Check whether '_' is not used as ctags own macro name"
65dcda2353SMasatake YAMATO    for f in $(find $dir -name '*.[ch]' | grep -v portable-dirent_p.h); do
667be80f6aSMasatake YAMATO	if ${CTAGS} --language-force=C -x --_xformat='%F:%N' --kinds-C=d -o - $f | grep -q '.*:_.*H'; then
677be80f6aSMasatake YAMATO	    for n in $(${CTAGS} --language-force=C -x --_xformat='%N' --kinds-C=d -o - $f | grep  '^_.*H'); do
687be80f6aSMasatake YAMATO		echo "#" $n
697be80f6aSMasatake YAMATO		echo sed -i \""s|$n|CTAGS_$(echo $dir | tr a-z A-Z)_${n#_}|g\"" $f
707be80f6aSMasatake YAMATO	    done
717be80f6aSMasatake YAMATO	   r=1
727be80f6aSMasatake YAMATO	fi
737be80f6aSMasatake YAMATO    done
747be80f6aSMasatake YAMATO    return $r
757be80f6aSMasatake YAMATO}
769d66358aSMasatake YAMATO
77e7b739e0SMasatake YAMATOcheck_vStringCatS_usage()
78e7b739e0SMasatake YAMATO{
79e7b739e0SMasatake YAMATO    local i=0
80e7b739e0SMasatake YAMATO
81e7b739e0SMasatake YAMATO    header "Check wrong vStringCatS usage(use vStringPut instead): $1"
82e7b739e0SMasatake YAMATO    for f in $(find $1 -name '*.c'); do
83e7b739e0SMasatake YAMATO	if grep -H -a -e 'vStringCatS[[:space:]]*(.*,[[:space:]]*"."[[:space:]]*)' $f; then
84e7b739e0SMasatake YAMATO	    i=$(expr $i + 1)
85e7b739e0SMasatake YAMATO	elif grep -H -a -e 'vStringCatS[[:space:]]*(.*,[[:space:]]*"\\."[[:space:]]*)' $f; then
86e7b739e0SMasatake YAMATO	    i=$(expr $i + 1)
87e7b739e0SMasatake YAMATO	fi
88e7b739e0SMasatake YAMATO    done
89e7b739e0SMasatake YAMATO
90e7b739e0SMasatake YAMATO    return $i
91e7b739e0SMasatake YAMATO}
92f56362bfSMasatake YAMATO
93f56362bfSMasatake YAMATOcheck_eof_chars_in_vcxproj()
94f56362bfSMasatake YAMATO{
95*619cd66cSHiroo HAYASHI    local r=4
96f56362bfSMasatake YAMATO    local f
97f56362bfSMasatake YAMATO
98f27ee018SK.Takata    # *.vcxproj* should not have the last CRLF.
99*619cd66cSHiroo HAYASHI    for f in win32/ctags_vs2013.vcxproj.in win32/ctags_vs2013.vcxproj.filters.in \
100*619cd66cSHiroo HAYASHI             win32/ctags_vs2013.vcxproj    win32/ctags_vs2013.vcxproj.filters; do
101f56362bfSMasatake YAMATO	header "Check the EOF characters of $f"
102f27ee018SK.Takata	local s=$(od -t c  -j $(expr $(stat -c %s $f) - 1) $f)
103f27ee018SK.Takata	if echo "$s" | grep -q '>$'; then
104f56362bfSMasatake YAMATO	    r=$(expr $r - 1)
105f56362bfSMasatake YAMATO	else
106f56362bfSMasatake YAMATO	    echo "unexpected chars: $s"
107f56362bfSMasatake YAMATO	fi
108f56362bfSMasatake YAMATO    done
109f56362bfSMasatake YAMATO
110f56362bfSMasatake YAMATO    return $r
111f56362bfSMasatake YAMATO}
112f56362bfSMasatake YAMATO
1139d66358aSMasatake YAMATOmain()
1149d66358aSMasatake YAMATO{
1159d66358aSMasatake YAMATO    local i=0
1169d66358aSMasatake YAMATO
1179d66358aSMasatake YAMATO    if ! [ -d ./main ]; then
1189d66358aSMasatake YAMATO	echo "cannot find ./main"
1199d66358aSMasatake YAMATO	return 2
1209d66358aSMasatake YAMATO    fi
1219d66358aSMasatake YAMATO
1229d66358aSMasatake YAMATO    if ! [ -d ./parsers ]; then
1239d66358aSMasatake YAMATO	echo "cannot find ./parsers"
1249d66358aSMasatake YAMATO	return 2
1259d66358aSMasatake YAMATO    fi
1269d66358aSMasatake YAMATO
1279d66358aSMasatake YAMATO    if ! check_include_general_h_first main; then
128ccce4330SMasatake YAMATO	i=$(expr $i + 1)
129171cb48dSMasatake YAMATO	echo "failed"
130171cb48dSMasatake YAMATO    else
131171cb48dSMasatake YAMATO	echo "ok"
1329d66358aSMasatake YAMATO    fi
1339d66358aSMasatake YAMATO
1349d66358aSMasatake YAMATO    if ! check_include_general_h_first parsers; then
135ccce4330SMasatake YAMATO	i=$(expr $i + 1)
136171cb48dSMasatake YAMATO	echo "failed"
137171cb48dSMasatake YAMATO    else
138171cb48dSMasatake YAMATO	echo "ok"
1399d66358aSMasatake YAMATO    fi
1409d66358aSMasatake YAMATO
1417be80f6aSMasatake YAMATO    if ! check_name_cpp_macro main; then
1427be80f6aSMasatake YAMATO	i=$(expr $i + 1)
143171cb48dSMasatake YAMATO	echo "failed"
144171cb48dSMasatake YAMATO    else
145171cb48dSMasatake YAMATO	echo "ok"
1467be80f6aSMasatake YAMATO    fi
1477be80f6aSMasatake YAMATO
1489f8b3ee4SMasatake YAMATO    if ! check_name_cpp_macro parsers; then
1499f8b3ee4SMasatake YAMATO	i=$(expr $i + 1)
150171cb48dSMasatake YAMATO	echo "failed"
151171cb48dSMasatake YAMATO    else
152171cb48dSMasatake YAMATO	echo "ok"
1539f8b3ee4SMasatake YAMATO    fi
1549f8b3ee4SMasatake YAMATO
155e7b739e0SMasatake YAMATO    if ! check_vStringCatS_usage main; then
156e7b739e0SMasatake YAMATO	i=$(expr $i + 1)
157171cb48dSMasatake YAMATO	echo "failed"
158171cb48dSMasatake YAMATO    else
159171cb48dSMasatake YAMATO	echo "ok"
160e7b739e0SMasatake YAMATO    fi
161e7b739e0SMasatake YAMATO
162e7b739e0SMasatake YAMATO    if ! check_vStringCatS_usage parsers; then
163e7b739e0SMasatake YAMATO	i=$(expr $i + 1)
164171cb48dSMasatake YAMATO	echo "failed"
165171cb48dSMasatake YAMATO    else
166171cb48dSMasatake YAMATO	echo "ok"
167e7b739e0SMasatake YAMATO    fi
168e7b739e0SMasatake YAMATO
169f56362bfSMasatake YAMATO    if ! check_eof_chars_in_vcxproj; then
170f56362bfSMasatake YAMATO	i=$(expr $i + 1)
171171cb48dSMasatake YAMATO	echo "failed"
172171cb48dSMasatake YAMATO    else
173171cb48dSMasatake YAMATO	echo "ok"
174f56362bfSMasatake YAMATO    fi
175f56362bfSMasatake YAMATO
1761b2248f3SMasatake YAMATO    return $i
1779d66358aSMasatake YAMATO}
1789d66358aSMasatake YAMATO
1799d66358aSMasatake YAMATOmain "$@"
1809d66358aSMasatake YAMATOexit $?
181