/* 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.
 */

/**
 * @file  ap_config_layout.h
 * @brief Apache Config Layout
 */

#ifndef AP_CONFIG_LAYOUT_H
#define AP_CONFIG_LAYOUT_H

/* Configured Apache directory layout */
#define DEFAULT_PREFIX "@prefix@"
#define DEFAULT_EXP_EXEC_PREFIX "@exp_exec_prefix@"
#define DEFAULT_REL_EXEC_PREFIX "@rel_exec_prefix@"
#define DEFAULT_EXP_BINDIR "@exp_bindir@"
#define DEFAULT_REL_BINDIR "@rel_bindir@"
#define DEFAULT_EXP_SBINDIR "@exp_sbindir@"
#define DEFAULT_REL_SBINDIR "@rel_sbindir@"
#define DEFAULT_EXP_LIBEXECDIR "@exp_libexecdir@"
#define DEFAULT_REL_LIBEXECDIR "@rel_libexecdir@"
#define DEFAULT_EXP_MANDIR "@exp_mandir@"
#define DEFAULT_REL_MANDIR "@rel_mandir@"
#define DEFAULT_EXP_SYSCONFDIR "@exp_sysconfdir@"
#define DEFAULT_REL_SYSCONFDIR "@rel_sysconfdir@"
#define DEFAULT_EXP_DATADIR "@exp_datadir@"
#define DEFAULT_REL_DATADIR "@rel_datadir@"
#define DEFAULT_EXP_INSTALLBUILDDIR "@exp_installbuilddir@"
#define DEFAULT_REL_INSTALLBUILDDIR "@rel_installbuilddir@"
#define DEFAULT_EXP_ERRORDIR "@exp_errordir@"
#define DEFAULT_REL_ERRORDIR "@rel_errordir@"
#define DEFAULT_EXP_ICONSDIR "@exp_iconsdir@"
#define DEFAULT_REL_ICONSDIR "@rel_iconsdir@"
#define DEFAULT_EXP_HTDOCSDIR "@exp_htdocsdir@"
#define DEFAULT_REL_HTDOCSDIR "@rel_htdocsdir@"
#define DEFAULT_EXP_MANUALDIR "@exp_manualdir@"
#define DEFAULT_REL_MANUALDIR "@rel_manualdir@"
#define DEFAULT_EXP_CGIDIR "@exp_cgidir@"
#define DEFAULT_REL_CGIDIR "@rel_cgidir@"
#define DEFAULT_EXP_INCLUDEDIR "@exp_includedir@"
#define DEFAULT_REL_INCLUDEDIR "@rel_includedir@"
#define DEFAULT_EXP_LOCALSTATEDIR "@exp_localstatedir@"
#define DEFAULT_REL_LOCALSTATEDIR "@rel_localstatedir@"
#define DEFAULT_EXP_RUNTIMEDIR "@exp_runtimedir@"
#define DEFAULT_REL_RUNTIMEDIR "@rel_runtimedir@"
#define DEFAULT_EXP_LOGFILEDIR "@exp_logfiledir@"
#define DEFAULT_REL_LOGFILEDIR "@rel_logfiledir@"
#define DEFAULT_EXP_PROXYCACHEDIR "@exp_proxycachedir@"
#define DEFAULT_REL_PROXYCACHEDIR "@rel_proxycachedir@"
#define DEFAULT_EXP_DAVLOCKDB "@exp_davlockdb@"
#define DEFAULT_REL_DAVLOCKDB "@rel_davlockdb@"

#endif /* AP_CONFIG_LAYOUT_H */
