]> git.ipfire.org Git - thirdparty/openssl.git/blame - util/ctags.sh
run-checker-daily.yml: If the openssl app is not built do not run it
[thirdparty/openssl.git] / util / ctags.sh
CommitLineData
859521e5
MY
1#!/bin/sh
2#
3# Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
4#
5# Licensed under the Apache License 2.0 (the "License"). You may not use
6# this file except in compliance with the License. You can obtain a copy
7# in the file LICENSE in the source distribution or at
8# https://www.openssl.org/source/license.html
9
10#
11# Usage: ./util/ctags.sh [...arguments for ctags...]
12#
13# This script runs ctags twice. In the first pass, ctags extract macro
14# definitions. readtags that is part of Universal Ctags converts them
15# to ctags options. In the second pass, ctags reads the options and
16# extracts language objects with expanding the macros.
17#
18# Universal Ctags 6.0.0 or higher is assumed.
19#
20: ${CTAGS=ctags}
21: ${READTAGS=readtags}
22
23if ! type "${CTAGS}" > /dev/null; then
24 echo "${CTAGS}: not found" 1>&2
25 exit 1
26fi
27
28if [ $# -eq 0 ]; then
29 set - -R
30fi
31
32if ! "${CTAGS}" --version | grep -q "Universal Ctags"; then
33 "${CTAGS}" "$@"
34 exit $?
35fi
36
37if "${CTAGS}" --version | grep -q "Universal Ctags 5.*"; then
38 "${CTAGS}" "$@"
39 exit $?
40fi
41
42if ! type "${READTAGS}" > /dev/null 2>&1; then
43 echo "WARNING: ${READTAGS}: not found" 1>&2
44 echo "WARNING: \"tagging after macro expanding\" doesn't work" 1>&2
45 "${CTAGS}" "$@"
46 exit $?
47fi
48
49if ! [ -d ./.ctags.d ]; then
50 echo "No ./.ctags.d directory" 1>&2
51 exit 1
52fi
53
54{
55 # At the first pass, ctags should not be affected by personal
6ea4da6e 56 # configuration files. So --options=NONE is passed.
859521e5
MY
57 #
58 # However, if the option is passed, ctags doesn't load the project
6ea4da6e
DP
59 # default configuration files under $project/.ctags.d. So we load
60 # the project default configuration files, add-dir.ctags and
859521e5
MY
61 # exclude.ctags, explicitly.
62 #
6ea4da6e 63 # openssl-stage1 contains a configuration file specialized to
859521e5
MY
64 # extract macro definitions. It should not be used in normal ctags
65 # usage.
66 $CTAGS --quiet --options=NONE \
67 --options=./.ctags.d/add-dir.ctags \
68 --options=./.ctags.d/exclude.ctags \
69 --options=openssl-stage1
70} | {
71 macros=.ctags.d/openssl-stage2/50macro-definitons.ctags
72 cat > "$macros" <<EOF
73#
74# This file is automatically generated by $0.
75# DON'T EDIT THIS FILE MANUALLY
76#
77EOF
78 # Extract macro definitions and convert them to ctags options.
79 $READTAGS --tag-file - \
80 -Q '(and (eq? $kind "d") ($ "macrodef"))' \
81 -F '(list "-D" $name $signature "=" ($ "macrodef") #t)' \
82 -l >> "$macros" &&
83 # At the second path, ctags extract tags with expanding macros stored in
84 # 50macro-definitons.ctags.
85 $CTAGS --options=openssl-stage2 \
86 "$@"
87}