# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Shared Doxygen configuration

# Look in subdirectories for files to be documented
RECURSIVE              = YES

# Generate brief descriptions like Javadoc does
JAVADOC_AUTOBRIEF      = YES

# Always generate a detailed description of functions
ALWAYS_DETAILED_SEC    = YES

# Include a detailed description of the class/file like Javadoc does
DETAILS_AT_TOP         = YES

# We're generating documentation for C
OPTIMIZE_OUTPUT_FOR_C  = YES

# We're not generating documentation for Java
OPTIMIZE_OUTPUT_JAVA   = NO

# Don't show #include information, it is not interesting
SHOW_INCLUDE_FILES     = NO

# Document c, cpp, h, and dox files
FILE_PATTERNS          = *.c *.cpp *.h *.dox

# Don't include the source code in the generated HTML
SOURCE_BROWSER         = NO

# Generate HTML output
GENERATE_HTML          = YES

# Don't generate these kinds of output
GENERATE_LATEX         = NO
GENERATE_RTF           = NO
GENERATE_MAN           = NO
GENERATE_XML           = NO

# Preprocess macros
ENABLE_PREPROCESSING   = YES

# Don't generate class diagrams
CLASS_DIAGRAMS         = NO

# Add aliases to selectivly hide comments
ALIASES = "cacheserver=\if cacheserver" \
	  "endcacheserver=\endif"  \
	  "nativeclient=\if nativeclient"  \
	  "endnativeclient=\endif" \
	  "notsupported_cacheserver=\if cacheserver \
This functionality is unsupported in the C++ Cache Server Product. \endif" \
	  "notsupported_nativeclient=\if nativeclient \
This functionality is unsupported in the Native Client Product. \endif" \

