xref: /aosp_15_r20/frameworks/av/media/codec2/doxygen.sh (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1#!/bin/bash
2# Copyright (C) 2024 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16# =============================================================================
17# DOCUMENTATION GENERATION
18# =============================================================================
19
20if [ -z "$ANDROID_BUILD_TOP" ]; then
21  echo "error: Android build is not set up. Run this command after lunch." >&2
22  exit 2
23fi
24
25OUT_DIR=$ANDROID_BUILD_TOP/out
26
27# Codec 2.0 source and target paths
28C2_ROOT=$(dirname "$0")
29C2_DOCS_ROOT=$OUT_DIR/target/common/docs/codec2
30C2_OUT_TEMP=$ANDROID_PRODUCT_OUT/gen/ETC/Codec2-docs_intermediates
31
32# Doxygen path
33DOXY=$(which doxygen)
34DOXY_MAC="/Applications/Doxygen.app/Contents/Resources/doxygen"
35if [ -z "$DOXY" -a -x "$DOXY_MAC" ]; then
36  DOXY=$DOXY_MAC
37fi
38
39if [ -z "$DOXY" ]; then
40  echo "error: doxygen is not available" >&2
41  exit 2
42fi
43
44# Create doxygen config
45# ---------------------
46gen_doxy() {
47  local variant=$1
48  local variant_lc=$(echo $variant | tr A-Z a-z)
49  mkdir -p $C2_OUT_TEMP
50  if [ "$variant_lc" == "api" ]; then
51    # only document include directory, no internal sections
52    sed 's/\(^INPUT *=.*\)/\1core\/include\//;
53      s/\(^INTERNAL_DOCS *= *\).*/\1NO/;
54      s/\(^ENABLED_SECTIONS *=.*\)INTERNAL\(.*\).*/\1\2/;
55      s:\(^OUTPUT_DIRECTORY *= \)out\(.*\)api:\1'$OUT_DIR'\2'$variant_lc':;' \
56      $C2_ROOT/docs/doxygen.config > $C2_OUT_TEMP/doxy-$variant_lc.config
57
58    ls -la $C2_OUT_TEMP/doxy-$variant_lc.config
59  else
60    sed 's:\(^OUTPUT_DIRECTORY *= \)out\(.*\)api:\1'$OUT_DIR'\2'$variant_lc':;' \
61      $C2_ROOT/docs/doxygen.config > $C2_OUT_TEMP/doxy-$variant_lc.config
62  fi
63
64  echo $variant docs are building in $C2_DOCS_ROOT/$variant_lc
65  rm -rf $C2_DOCS_ROOT/$variant_lc
66  mkdir -p $C2_DOCS_ROOT/$variant_lc
67  pushd $ANDROID_BUILD_TOP
68  $DOXY $C2_OUT_TEMP/doxy-$variant_lc.config
69  popd
70}
71
72usage() {
73  echo "usage: $(basename "$0") [target]"
74  echo "  where target can be one of:"
75  echo "    all:      build both API and internal docs (default)"
76  echo "    api:      build API docs only"
77  echo "    internal: build internal docs which include implementation details"
78}
79
80TARGET=${1:-all}
81case "$TARGET" in
82  api) gen_doxy API;;
83  internal) gen_doxy Internal;;
84  all) gen_doxy API; gen_doxy Internal;;
85  -h) usage; exit 0;;
86  *) echo "unknown target '$TARGET'" >&2; usage; exit 2;;
87esac
88