xref: /Universal-ctags/Tmain/utils.sh (revision f7bdb88541374fdf1421365df6cfad8b7e5b07cf)
126b54c23SMasatake YAMATO__SKIP__=77
226b54c23SMasatake YAMATO
31ea57ac0SMasatake YAMATOskip()
41ea57ac0SMasatake YAMATO{
51ea57ac0SMasatake YAMATO	echo "$@"
61ea57ac0SMasatake YAMATO	exit ${__SKIP__}
71ea57ac0SMasatake YAMATO}
81ea57ac0SMasatake YAMATO
93409fbe4SMasatake YAMATOremove_commit_id()
103409fbe4SMasatake YAMATO{
113409fbe4SMasatake YAMATO    # Remove a commit id embedded in tags file
123409fbe4SMasatake YAMATO    sed -i -e '/!_TAG_PROGRAM_VERSION.*/s#/[^/]*/#//#' $1
133409fbe4SMasatake YAMATO}
1426b54c23SMasatake YAMATO
155742f4c7SAman Guptafilesize()
165742f4c7SAman Gupta{
175742f4c7SAman Gupta    wc -c < "$1"
185742f4c7SAman Gupta}
195742f4c7SAman Gupta
2026b54c23SMasatake YAMATOis_feature_available()
2126b54c23SMasatake YAMATO{
2226b54c23SMasatake YAMATO    local ctags=$1
23a639b861SMasatake YAMATO	local tmp=$2
2429f8d8e7SMasatake YAMATO	local o="--quiet --options=NONE"
25a639b861SMasatake YAMATO	local neg
26a639b861SMasatake YAMATO	local feat
2726b54c23SMasatake YAMATO
28a639b861SMasatake YAMATO	if [ "${tmp}" = '!' ]; then
29a639b861SMasatake YAMATO		neg=1
30a639b861SMasatake YAMATO		feat=$3
31a639b861SMasatake YAMATO	else
32a639b861SMasatake YAMATO		feat=$2
33a639b861SMasatake YAMATO	fi
34a639b861SMasatake YAMATO
35a639b861SMasatake YAMATO	if [ "${neg}" = 1 ]; then
3615348a1dSMasatake YAMATO		if ${ctags} $o --with-list-header=no --list-features | grep -q "$feat"; then
37a639b861SMasatake YAMATO			skip "feature \"$feat\" is available in $ctags"
38a639b861SMasatake YAMATO		fi
39a639b861SMasatake YAMATO	else
4015348a1dSMasatake YAMATO		if ! ${ctags} $o --with-list-header=no --list-features | grep -q "$feat"; then
411ea57ac0SMasatake YAMATO			skip "feature \"$feat\" is not available in $ctags"
4226b54c23SMasatake YAMATO		fi
43a639b861SMasatake YAMATO	fi
4426b54c23SMasatake YAMATO}
4526b54c23SMasatake YAMATO
46b2a1b44dSMasatake YAMATOskip_if_user_has_dot_ctags_d()
47b2a1b44dSMasatake YAMATO{
48b2a1b44dSMasatake YAMATO	if [ -d ~/.ctags.d ]; then
49b2a1b44dSMasatake YAMATO		skip "this test case doesn't work well if you have ~/.ctags.d"
50b2a1b44dSMasatake YAMATO	fi
51b2a1b44dSMasatake YAMATO}
52b2a1b44dSMasatake YAMATO
53a639b861SMasatake YAMATOexit_if_win32()
54a639b861SMasatake YAMATO{
55a639b861SMasatake YAMATO	is_feature_available $1 '!' win32
56a639b861SMasatake YAMATO}
57a639b861SMasatake YAMATO
586db8ff33SMasatake YAMATOexit_unless_win32()
596db8ff33SMasatake YAMATO{
606db8ff33SMasatake YAMATO	is_feature_available $1 win32
616db8ff33SMasatake YAMATO}
626db8ff33SMasatake YAMATO
63c160cf6cSMasatake YAMATOexit_if_no_case_insensitive_filenames()
64c160cf6cSMasatake YAMATO{
65c160cf6cSMasatake YAMATO	is_feature_available $1 case-insensitive-filenames
66c160cf6cSMasatake YAMATO}
67c160cf6cSMasatake YAMATO
6823b7096eSMasatake YAMATOrun_with_format()
6923b7096eSMasatake YAMATO{
70d1be9012SAman Gupta    echo '#' $*
71d1be9012SAman Gupta    local format=$1
72d1be9012SAman Gupta    shift
732682e1f2SMasatake YAMATO    ${CTAGS} --quiet --options=NONE --output-format=$format "$@" -o - input.*
7423b7096eSMasatake YAMATO}
75eb47af96SMasatake YAMATO
76eb47af96SMasatake YAMATOexit_status_for_input_c()
77eb47af96SMasatake YAMATO{
78eb47af96SMasatake YAMATO	local ctags=$1
79eb47af96SMasatake YAMATO	shift
80eb47af96SMasatake YAMATO
81eb47af96SMasatake YAMATO	local remove_file=$1
82eb47af96SMasatake YAMATO	shift
83eb47af96SMasatake YAMATO
84474efcd6SK.Takata	printf "%s => " "$(echo "$*" | sed -e 's#[^ ][^ ]*/\([^ ]*\)#\1#g')"
85eb47af96SMasatake YAMATO	${ctags} --quiet --options=NONE "$@" input.c > /dev/null
86eb47af96SMasatake YAMATO	local result_local=$?
87eb47af96SMasatake YAMATO
88eb47af96SMasatake YAMATO	if [ "$remove_file" != "none" ]; then
89eb47af96SMasatake YAMATO		rm -f "$remove_file"
90eb47af96SMasatake YAMATO	fi
91eb47af96SMasatake YAMATO
92eb47af96SMasatake YAMATO	if [ "$result_local" = 0 ]; then
93eb47af96SMasatake YAMATO		echo "ok"
94eb47af96SMasatake YAMATO	else
95eb47af96SMasatake YAMATO		echo "failed"
96eb47af96SMasatake YAMATO	fi
97eb47af96SMasatake YAMATO}
98c9a90de9SMasatake YAMATO
99c9a90de9SMasatake YAMATOget_column_index()
100c9a90de9SMasatake YAMATO{
101c9a90de9SMasatake YAMATO	local index=0
102c9a90de9SMasatake YAMATO	local ctags=$1
103c9a90de9SMasatake YAMATO	local option=$2
104c9a90de9SMasatake YAMATO	local column=$3
105c9a90de9SMasatake YAMATO
106c9a90de9SMasatake YAMATO	for x in $($ctags  --quiet --options=NONE --with-list-header "$option" | sed -ne 's/^#\(.*\)$/\1/p'); do
107c9a90de9SMasatake YAMATO		if [ "$x" = "$column" ]; then
108c9a90de9SMasatake YAMATO			echo $index
109c9a90de9SMasatake YAMATO			return 0
110c9a90de9SMasatake YAMATO		fi
111c9a90de9SMasatake YAMATO		index=$(expr $index + 1)
112c9a90de9SMasatake YAMATO	done
113c9a90de9SMasatake YAMATO
114c9a90de9SMasatake YAMATO	echo -1
115c9a90de9SMasatake YAMATO	return 1
116c9a90de9SMasatake YAMATO}
117c9a90de9SMasatake YAMATO
118c9a90de9SMasatake YAMATOfilter_by_column_index()
119c9a90de9SMasatake YAMATO{
120c9a90de9SMasatake YAMATO	local index=$1
121c9a90de9SMasatake YAMATO
1227b2dfa86SK.Takata	awk '{print $'$(expr $index + 1)'}'
123c9a90de9SMasatake YAMATO}
124b28506aaSMasatake YAMATO
125b28506aaSMasatake YAMATOecho2()
126b28506aaSMasatake YAMATO{
127b28506aaSMasatake YAMATO	# use a external echo command here.
128b28506aaSMasatake YAMATO	# built-in echo suppresses \1.
129b28506aaSMasatake YAMATO	/bin/echo "$@"
130b28506aaSMasatake YAMATO	/bin/echo "$@" 1>&2
131b28506aaSMasatake YAMATO}
132474efcd6SK.Takata
133eb101098SMasatake YAMATOdireq_maybe ()
134474efcd6SK.Takata{
135474efcd6SK.Takata    [ "$(cd ${1} && pwd)" = "$(cd ${2} && pwd)" ]
136474efcd6SK.Takata    return $?
137474efcd6SK.Takata}
138*f7bdb885SMasatake YAMATO
139*f7bdb885SMasatake YAMATOcheck_encoding()
140*f7bdb885SMasatake YAMATO{
141*f7bdb885SMasatake YAMATO    if iconv -l | grep -qi "$1"; then
142*f7bdb885SMasatake YAMATO		return 0
143*f7bdb885SMasatake YAMATO	fi
144*f7bdb885SMasatake YAMATO	skip "iconv doesn't know about the encoding: $1"
145*f7bdb885SMasatake YAMATO}
146