diff options
author | Roger Leigh <rleigh@debian.org> | 2013-09-08 22:51:43 +0100 |
---|---|---|
committer | Roger Leigh <rleigh@debian.org> | 2013-09-29 16:45:34 +0100 |
commit | 4a272b256ea0cae74cad442eca75363e9d8edb47 (patch) | |
tree | 1450526d5688bb52b058db50634cfef0a1f53624 | |
parent | f71acb7a31d7932cf3d5f8aaa1682787c18b2127 (diff) | |
download | schroot-4a272b256ea0cae74cad442eca75363e9d8edb47.tar.gz |
build: Add cmake build infrastructure
This permits building using cmake rather than the existing
autoconf/automake/libtool infrastructure. The autotools-
based build may be removed in future commits, but either
may be used until that point.
43 files changed, 6732 insertions, 34 deletions
diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..05088657 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +.gitattributes export-ignore +.gitignore export-ignore diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..5d4a6ae0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,332 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# schroot is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +cmake_minimum_required(VERSION 2.8) + +project(schroot) +# Obtain version information from VERSION and/or git. +set(GIT_VERSION_FILE "cmake/GitVersion.cmake" + CACHE FILEPATH "Location of version metadata") +set(GIT_VERSION_FILE_COMPAT "VERSION" + CACHE FILEPATH "Location of compatibility version metadata") +set(GIT_VERSION_FILE_USE_COMPAT ON + CACHE BOOL "Use compatibility version file") +include("${PROJECT_SOURCE_DIR}/cmake/GitRelease.cmake") + +set(VERSION ${GIT_RELEASE_VERSION}) +set(RELEASE_DATE ${GIT_RELEASE_DATE_UNIX}) +set(RELEASE_DATE_S ${GIT_RELEASE_DATE}) + +string(REGEX MATCH "^([0-9]+-[0-9]+-[0-9]+).*" date_valid "${RELEASE_DATE_S}") +if (date_valid) + string(REGEX REPLACE "^([0-9]+-[0-9]+-[0-9]+).*" "\\1" + RELEASE_DATE_SHORT ${RELEASE_DATE_S}) +else (date_valid) + set(RELEASE_DATE_SHORT ${RELEASE_DATE_S}) +endif (date_valid) + +message(STATUS "Configuring ${CMAKE_PROJECT_NAME} ${GIT_RELEASE_VERSION} (${RELEASE_DATE_SHORT})") + +# TODO: Check NEWS version + +include(GNUInstallDirs) +include(CheckIncludeFileCXX) +include(CheckCXXCompilerFlag) +include(CheckCXXSourceCompiles) + +CHECK_CXX_COMPILER_FLAG(-std=c++11 CXX_FLAG_CXX11) +if (CXX_FLAG_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +else(CXX_FLAG_CXX11) + CHECK_CXX_COMPILER_FLAG(-std=c++03 CXX_FLAG_CXX03) + if (CXX_FLAG_CXX03) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03") + else(CXX_FLAG_CXX03) + CHECK_CXX_COMPILER_FLAG(-std=c++98 CXX_FLAG_CXX98) + if (CXX_FLAG_CXX98) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") + else(CXX_FLAG_CXX98) + endif(CXX_FLAG_CXX98) + endif(CXX_FLAG_CXX03) +endif(CXX_FLAG_CXX11) + +set(test_flags + -invalid-flag -pedantic -Wall -Wcast-align -Wwrite-strings + -Wswitch-default -Wcast-qual -Wunused-variable -Wredundant-decls + -Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder -Wold-style-cast + -Woverloaded-virtual -fstrict-aliasing) + +foreach(flag ${test_flags}) + set(test_cxx_flag "CXX_FLAG${flag}") + CHECK_CXX_COMPILER_FLAG(${flag} "${test_cxx_flag}") + if (${test_cxx_flag}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") + endif (${test_cxx_flag}) +endforeach(flag ${test_flags}) + +find_package(Threads REQUIRED) +find_package(GTest) + +include(FindBoost) +find_package(Boost REQUIRED + COMPONENTS filesystem system iostreams program_options regex) + +# HEADER CHECKS +include(CheckIncludeFileCXX) +# memory +check_include_file_cxx ("memory" HAVE_CXX_MEMORY) +# tuple +check_include_file_cxx ("tuple" HAVE_CXX_TUPLE) + +# LIBRARY CHECKS +include (CheckLibraryExists) +include (CheckFunctionExists) + +include("cmake/boost-checks.cmake") +include("cmake/regex-checks.cmake") + +# Configure dchroot and dchroot-dsa +option(dchroot "Enable dchroot compatibility" OFF) +option(dchroot-dsa "Enable dchroot-dsa compatibility" OFF) +set(BUILD_DCHROOT 0) +set(BUILD_DCHROOT_DSA 0) +set(BUILD_LIBDCHROOT 0) +if(dchroot) + set(BUILD_LIBDCHROOT 1) + set(BUILD_DCHROOT 1) +endif(dchroot) +if(dchroot-dsa) + set(BUILD_LIBDCHROOT 1) + set(BUILD_DCHROOT_DSA 1) +endif(dchroot-dsa) + +# Configure debugging +option(debug "Enable debugging messages" OFF) +set(SBUILD_DEBUG 0) +if(debug) + set(SBUILD_DEBUG 1) +endif(debug) + +# Configure debugging +set(BUILD_TESTS OFF) +if(GTEST_FOUND) + set(BUILD_TESTS ON) +endif(GTEST_FOUND) +option(test "Enable unit tests" ${BUILD_TESTS}) +set(BUILD_TESTS ${test}) + +# Environment filter default +set(default_environment_filter "^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|TERMINFO_DIRS|TERMPATH)\$" + CACHE STRING "Default environment filter") +set(SBUILD_DEFAULT_ENVIRONMENT_FILTER ${default_environment_filter}) + +# bash completion directory +set(bash_completion_dir "${CMAKE_INSTALL_SYSCONFDIR}/bash_completion.d" + CACHE PATH "bash shell completion directory") +#==> bashcompletiondir (use cache val directly) + +# schroot directories +set(SCHROOT_LOCALE_DIR "${CMAKE_INSTALL_FULL_LOCALEDIR}" + CACHE PATH "Locale directory") +set(SCHROOT_MOUNT_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/${CMAKE_PROJECT_NAME}/mount" + CACHE PATH "Directory under which mount chroots") +set(SCHROOT_SESSION_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/${CMAKE_PROJECT_NAME}/session" + CACHE PATH "Directory for storing session metadata") +set(SCHROOT_FILE_UNPACK_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/${CMAKE_PROJECT_NAME}/unpack" + CACHE PATH "Directory for unpacking chroot file archives under") +set(SCHROOT_OVERLAY_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/${CMAKE_PROJECT_NAME}/union/overlay" + CACHE PATH "Directory for union filesystem writable overlays") +set(SCHROOT_UNDERLAY_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/${CMAKE_PROJECT_NAME}/union/underlay" + CACHE PATH "Directory for union filesystem read-only underlays") +set(SCHROOT_MODULE_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/${CMAKE_PROJECT_NAME}/${GIT_RELEASE_VERSION}/modules" + CACHE PATH "Directory for loadable modules") +set(SCHROOT_DATA_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${CMAKE_PROJECT_NAME}" + CACHE PATH "Directory for schroot data files") +set(SCHROOT_LIBEXEC_DIR "${CMAKE_INSTALL_FULL_LIBEXECDIR}/${CMAKE_PROJECT_NAME}" + CACHE PATH "Directory for schroot helper programs") +set(SCHROOT_SYSCONF_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${CMAKE_PROJECT_NAME}" + CACHE PATH "Directory for configuration files") +set(SCHROOT_CONF_CHROOT_D "${SCHROOT_SYSCONF_DIR}/chroot.d" + CACHE PATH "Directory for chroot configuration fragments") +set(SCHROOT_CONF_SETUP_D "${SCHROOT_SYSCONF_DIR}/setup.d" + CACHE PATH "Directory for chroot setup scripts") +set(SCHROOT_SETUP_DATA_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${CMAKE_PROJECT_NAME}/setup" + CACHE PATH "Directory for common setup script data") +mark_as_advanced(SCHROOT_LOCALE_DIR SCHROOT_MOUNT_DIR + SCHROOT_SESSION_DIR SCHROOT_FILE_UNPACK_DIR + SCHROOT_OVERLAY_DIR SCHROOT_UNDERLAY_DIR + SCHROOT_MODULE_DIR SCHROOT_DATA_DIR + SCHROOT_LIBEXEC_DIR SCHROOT_SYSCONF_DIR + SCHROOT_CONF_CHROOT_D SCHROOT_CONF_SETUP_D + SCHROOT_SETUP_DATA_DIR) + +set(TESTDATADIR "${PROJECT_BINARY_DIR}/test/testdata") + +# schroot files +set(SCHROOT_CONF "${SCHROOT_SYSCONF_DIR}/schroot.conf") + +# Platform +string(TOLOWER ${CMAKE_SYSTEM_NAME} SBUILD_PLATFORM) + +# Localisation with gettext +include(FindGettext) +find_package(Gettext) +set(NLS_DEFAULT OFF) +if(GETTEXT_FOUND) + set(NLS_DEFAULT ON) +endif(GETTEXT_FOUND) +option(nls "Enable national language support (requires gettext)" ${NLS_DEFAULT}) +set(BUILD_NLS ${nls}) +set(SBUILD_FEATURE_NLS ${pam}) + +# PAM authentication feature +check_include_file_cxx (security/pam_appl.h PAM_HEADER) +check_library_exists(pam pam_authenticate "" PAM_FUNC) +set(PAM_DEFAULT OFF) +if(PAM_HEADER AND PAM_FUNC) + set(PAM_DEFAULT ON) +endif(PAM_HEADER AND PAM_FUNC) +option(pam "Enable support for PAM authentication (requires libpam)" ${PAM_DEFAULT}) +set(BUILD_PAM ${pam}) +set(SBUILD_FEATURE_PAM ${pam}) +if(BUILD_PAM) + set(PAM_LIBRARY pam) +endif(BUILD_PAM) + +# Set early, so it can be overridden by lvm-snapshot and block-device +set(BLOCKDEV_DEFAULT ON) + +# LVM snapshot mount feature +find_program(LVCREATE_EXECUTABLE lvcreate PATHS /sbin /usr/sbin /usr/local/sbin) +find_program(LVREMOVE_EXECUTABLE lvremove PATHS /sbin /usr/sbin /usr/local/sbin) +set(LVMSNAP_DEFAULT OFF) +if (LVCREATE_EXECUTABLE AND LVREMOVE_EXECUTABLE) + set (LVMSNAP_DEFAULT ON) +endif (LVCREATE_EXECUTABLE AND LVREMOVE_EXECUTABLE) +option(lvm-snapshot "Enable support for LVM snapshots (requires LVM)" ${LVMSNAP_DEFAULT}) +set(BUILD_LVMSNAP ${lvm-snapshot}) +set(SBUILD_FEATURE_LVMSNAP ${lvm-snapshot}) +if (lvm-snapshot) + set(BLOCKDEV_DEFAULT ON) +endif(lvm-snapshot) + +# Btrfs snapshot mount feature +find_program(BTRFS_EXECUTABLE btrfs PATHS /sbin /usr/sbin /usr/local/sbin) +set(BTRFSSNAP_DEFAULT OFF) +if (BTRFS_EXECUTABLE) + set (BTRFSSNAP_DEFAULT ON) +endif (BTRFS_EXECUTABLE) +option(btrfs-snapshot "Enable support for btrfs snapshots (requires Btrfs)" ${BTRFSSNAP_DEFAULT}) +set(BUILD_BTRFSSNAP ${btrfs-snapshot}) +set(SBUILD_FEATURE_BTRFSSNAP ${btrfs-snapshot}) +if (btrfs-snapshot) + set(BLOCKDEV_DEFAULT ON) +endif(btrfs-snapshot) + +# Block device mount feature +option(block-device "Enable support for block devices" ${BLOCKDEV_DEFAULT}) +set(BUILD_BLOCKDEV ${block-device}) +set(SBUILD_FEATURE_BLOCKDEV ${block-device}) +# Check for blockdev/lvmsnap option compatibility +if(lvm-snapshot AND NOT block-device) + message(FATAL_ERROR "block-device must be enabled when lvm-snapshot is enabled") +endif(lvm-snapshot AND NOT block-device) +if(btrfs-snapshot AND NOT block-device) + message(FATAL_ERROR "block-device must be enabled when btrfs-snapshot is enabled") +endif(btrfs-snapshot AND NOT block-device) + +# Loopback mount feature +find_program(LOSETUP_EXECUTABLE losetup PATHS /sbin /usr/sbin /usr/local/sbin) +set(LOOPBACK_DEFAULT OFF) +if (LOSETUP_EXECUTABLE) + set (LOOPBACK_DEFAULT ON) +endif (LOSETUP_EXECUTABLE) +option(loopback "Enable support for loopback mounts" ${LOOPBACK_DEFAULT}) +set(BUILD_LOOPBACK ${loopback}) +set(SBUILD_FEATURE_LOOPBACK ${loopback}) + +# Filesystem union mount feature +set(UNION_DEFAULT ON) +option(union "Enable support for union mounts" ${UNION_DEFAULT}) +set(BUILD_UNION ${union}) +set(SBUILD_FEATURE_UNION ${union}) + +# Doxygen documentation +include(FindDoxygen) +find_package(Doxygen) +set(DOXYGEN_DEFAULT OFF) +if (DOXYGEN_EXECUTABLE) + set (DOXYGEN_DEFAULT ON) +endif (DOXYGEN_EXECUTABLE) +option(doxygen "Enable doxygen documentation" ${DOXYGEN_DEFAULT}) +set(BUILD_DOXYGEN ${doxygen}) + +# Namespace unshare feature +# sched.h ==> UNSHARE_HEADER +check_include_file_cxx (sched.h UNSHARE_HEADER) +check_function_exists(unshare UNSHARE_FUNC) +set(UNSHARE_DEFAULT OFF) +if (UNSHARE_HEADER AND UNSHARE_FUNC) + set (UNSHARE_DEFAULT ON) +endif (UNSHARE_HEADER AND UNSHARE_FUNC) +option(unshare "Enable unshare support (Linux only)" ${UNSHARE_DEFAULT}) +set(BUILD_UNSHARE ${unshare}) +set(SBUILD_FEATURE_UNSHARE ${unshare}) + +# Kernel personality feature +# sys/personality.h ==> PERSONALITY_HEADER +check_include_file_cxx (sys/personality.h PERSONALITY_HEADER) +check_function_exists(personality PERSONALITY_FUNC) +set(PERSONALITY_DEFAULT OFF) +if (PERSONALITY_HEADER AND PERSONALITY_FUNC) + set (PERSONALITY_DEFAULT ON) +endif (PERSONALITY_HEADER AND PERSONALITY_FUNC) +option(personality "Enable personality support (Linux only)" ${PERSONALITY_DEFAULT}) +set(BUILD_PERSONALITY ${personality}) +set(SBUILD_FEATURE_PERSONALITY ${personality}) + +# GENERATED FILES: +configure_file(${PROJECT_SOURCE_DIR}/config.h.cmake ${PROJECT_BINARY_DIR}/config.h) + +include_directories(${PROJECT_BINARY_DIR}/lib + ${PROJECT_SOURCE_DIR}/lib + ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}) + +enable_testing() + +add_subdirectory(lib/sbuild) +add_subdirectory(lib/bin-common) +add_subdirectory(lib/schroot-common) +add_subdirectory(lib/dchroot-common) +add_subdirectory(lib/test) +add_subdirectory(bin/schroot) +add_subdirectory(bin/dchroot) +add_subdirectory(bin/dchroot-dsa) +add_subdirectory(libexec/listmounts) +add_subdirectory(libexec/mount) +add_subdirectory(test) +add_subdirectory(doc) +add_subdirectory(etc) +add_subdirectory(po) +add_subdirectory(man) + +add_custom_target(check-news + COMMAND if grep -q "Welcome to ${CMAKE_PROJECT_NAME} ${GIT_RELEASE_VERSION}" "${PROJECT_SOURCE_DIR}/NEWS" \; then echo "NEWS current version ${GIT_RELEASE_VERSION}" \; else echo "NEWS current version does not match release version ${GIT_RELEASE_VERSION}" \; exit 1 \; fi + COMMAND if grep -q "Major changes in ${GIT_RELEASE_VERSION}:" "${PROJECT_SOURCE_DIR}/NEWS" \; then echo "NEWS contains changes for version ${GIT_RELEASE_VERSION}" \; else echo "NEWS version does not contain changes for version ${GIT_RELEASE_VERSION}" \; exit 1 \; fi) + +if(GIT_RELEASE_ENABLE) + add_dependencies(git-release check-news) +endif(GIT_RELEASE_ENABLE) @@ -26,6 +26,7 @@ libboost-dev } libboost-program-options-dev } The Boost C++ libraries libboost-regex-dev } groff (or troff) soelim +cmake (required unless using the autotools configure script) If building from GIT, you will also need: gettext (0.16 or greater) @@ -40,11 +41,25 @@ configure with GTEST_ROOT=/path/to/libgtest (it will be added as a linker -L option). On Debian systems, which don't provide a precompiled libgtest, build a version for the build with, for example: + + mkdir build + cd build mkdir gtest - cd gtest; \ + (cd gtest; \ CXX="g++ -std=c++11" cmake /usr/src/gtest ; \ - make VERBOSE=1 - ./configure CXX="g++ -std=c++11" GTEST_ROOT="$(pwd)/gtest" + make VERBOSE=1 \ + ) + +And then to build with cmake: + + CXX="g++ -std=c++11" GTEST_ROOT="$(pwd)/gtest" cmake /path/to/schroot + make + +Or with autotools configure: + + /path/to/schroot/configure CXX="g++ -std=c++11" GTEST_ROOT="$(pwd)/gtest" + make + Translation ----------- @@ -53,20 +68,62 @@ If you would like to see the schroot messages output in your own language, please consider translating the pot file (po/schroot.pot). If you would like to see the schroot man pages in your own language, please consider translating the pot file -(man/po4a/po/schroot-man.pot). +(man/po/schroot-man.pot). Building and installation ------------------------- -Please see the INSTALL file for generic installation instructions. -Note that the testsuite ("make check") should be run under fakeroot or -real root in order to work correctly. There are the following -additional options: +cmake +^^^^^ + +Run "cmake -LH" to see basic configurable options. The following basic +options are supported: + + btrfs-snapshot=(ON|OFF) Enable support for btrfs snapshots (requires Btrfs) + dchroot=(ON|OFF) Enable dchroot compatibility + dchroot-dsa=(ON|OFF) Enable dchroot-dsa compatibility + debug=(ON|OFF) Enable debugging messages + default_environment_filter=REGEX + Default environment filter + doxygen=(ON|OFF) Enable doxygen documentation + loopback=(ON|OFF) Enable support for loopback mounts + lvm-snapshot=(ON|OFF) Enable support for LVM snapshots (requires LVM) + nls=(ON|OFF) Enable national language support (requires gettext) + pam=(ON|PFF) Enable support for PAM authentication (requires libpam) + personality=(ON|OFF) Enable personality support (Linux only) + test=(ON|OFF) Enable unit tests + union=(ON|OFF) Enable support for union mounts + unshare=(ON|OFF) Enable unshare support (Linux only) + +cmake will autodetect and enable all available features by default, +with the exception of dchroot and dchroot-dsa which require manually +specifying, so these options are mostly useful for disabling features +which are not required. + +Run "cmake -LA" to see all settable options. CMAKE_INSTALL_PREFIX is +the equivalent of the configure --prefix option. Additionally, +CMAKE_INSTALL_SYSCONFDIR, CMAKE_INSTALL_LOCALSTATEDIR, +CMAKE_INSTALL_LIBDIR etc. provide the equivalent sysconfdir, +localstatedir and libdir, etc. options. - --enable-dchroot: Build dchroot for backward compatibility - --enable-dchroot-dsa: Build DSA dchroot for backward compatibility - --enable-debug: Enable debugging features +Run "make doc" to make the doxygen documentation. +Run "make test" to run the testsuite. + +Note that the testsuite ("make test") should be run under fakeroot or +real root in order to work correctly. + + +autotools configure +^^^^^^^^^^^^^^^^^^^ + +Please see the INSTALL file for generic autotools configure +installation instructions. There are the following additional +options: + + --enable-dchroot Build dchroot for backward compatibility + --enable-dchroot-dsa Build DSA dchroot for backward compatibility + --enable-debug Enable debugging features (not recommended--use --debug at runtime instead) --enable-environment-filter Enable default environment filtering (regex) @@ -83,7 +140,10 @@ if supported by your system, so the above options should not usually be required. Run "make doc" to make the doxygen documentation. +Run "make check" to run the testsuite. +Note that the testsuite ("make check") should be run under fakeroot or +real root in order to work correctly. Configuration ------------- diff --git a/bin/dchroot-dsa/CMakeLists.txt b/bin/dchroot-dsa/CMakeLists.txt new file mode 100644 index 00000000..04fd1e43 --- /dev/null +++ b/bin/dchroot-dsa/CMakeLists.txt @@ -0,0 +1,40 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(dchroot_dsa_sources + session.h + session.cc + options.h + options.cc + main.h + main.cc + dchroot-dsa.cc) + +include_directories(${PROJECT_BINARY_DIR}/bin ${PROJECT_SOURCE_DIR}/bin) + +if(BUILD_DCHROOT_DSA) + add_executable(dchroot-dsa ${dchroot_dsa_sources}) + target_link_libraries(dchroot-dsa sbuild bin-common schroot-common dchroot-common) + + install(TARGETS dchroot-dsa RUNTIME + DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + SETUID) +endif(BUILD_DCHROOT_DSA) diff --git a/bin/dchroot/CMakeLists.txt b/bin/dchroot/CMakeLists.txt new file mode 100644 index 00000000..ca9dcef2 --- /dev/null +++ b/bin/dchroot/CMakeLists.txt @@ -0,0 +1,40 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(dchroot_sources + session.h + session.cc + options.h + options.cc + main.h + main.cc + dchroot.cc) + +include_directories(${PROJECT_BINARY_DIR}/bin ${PROJECT_SOURCE_DIR}/bin) + +if(BUILD_DCHROOT) + add_executable(dchroot ${dchroot_sources}) + target_link_libraries(dchroot sbuild bin-common schroot-common dchroot-common) + + install(TARGETS dchroot RUNTIME + DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + SETUID) +endif(BUILD_DCHROOT) diff --git a/bin/schroot/CMakeLists.txt b/bin/schroot/CMakeLists.txt new file mode 100644 index 00000000..39adc65f --- /dev/null +++ b/bin/schroot/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(schroot_sources + main.h + main.cc + schroot.cc + options.h + options.cc) + +include_directories(${PROJECT_BINARY_DIR}/bin ${PROJECT_SOURCE_DIR}/bin) +add_executable(schroot ${schroot_sources}) +target_link_libraries(schroot sbuild bin-common schroot-common) + +install(TARGETS schroot RUNTIME + DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + SETUID) + +set(installdirs + ${SCHROOT_CONF_CHROOT_D} + ${SCHROOT_MOUNT_DIR} + ${SCHROOT_SESSION_DIR} + ${SCHROOT_FILE_UNPACK_DIR} + ${SCHROOT_OVERLAY_DIR} + ${SCHROOT_UNDERLAY_DIR}) + +foreach(dir ${installdirs}) + install(CODE " +message(STATUS \"Installing: \$ENV{DESTDIR}${dir}\") +make_directory(\"\$ENV{DESTDIR}${dir}\") +") +endforeach(dir ${installdirs}) diff --git a/cmake/GitRelease.cmake b/cmake/GitRelease.cmake new file mode 100644 index 00000000..577660b5 --- /dev/null +++ b/cmake/GitRelease.cmake @@ -0,0 +1,1009 @@ +# Copyright © 2009-2013 Roger Leigh <rleigh@debian.org> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +# Versioning, releasing and distribution management with git and cmake +# ==================================================================== +# +# This facility is a cmake reimplementation of an earlier +# autoconf/automake version from +# http://anonscm.debian.org/gitweb/?p=buildd-tools/schroot.git;a=blob;f=scripts/git-dist.mk;hb=refs/heads/schroot-1.6 +# but is further generalised and is rather more configurable, and +# integrates quite seamlessly with cmake. +# +# Most projects currently handle versioning by hardcoding the version +# number in the source repository in some form, for example in the +# cmake scripts, or in the sources or some other file. This script +# handles release versioning using the metadata in git tags, and for +# distributed release archives, it embeds a generated file so that git +# isn't required to retrieve the release metadata. +# +# This script also handles release and distribution of a project +# entirely within git, which is described in more detail below. +# +# A number of variables customise the behaviour of the script for a +# particular project; set them before including this file. While the +# defaults will work for most projects, it will typically require +# adapting to the existing conventions used by a particular project. +# +# The intended use of this facility is to replace a manual step in the +# release process with an automated one, such that releasing may be +# done entirely automatically, and the version numbering may be +# controlled at a higher level, for example via a continuous +# integration system such as Jenkins, or by a release manager, etc. +# The versioning is handled external to the source tree, but is done +# entirely within the git repository. +# +# Terms +# ----- +# +# Release +# Tagging the working git branch with a "release tag". This tag is +# signed by default, and the naming scheme allows identification of +# the current or previous release when running cmake. +# +# Distribution +# Creation of a distributable form of the tagged release. This +# involves committing of the tagged release source tree to a +# "distribution branch" and creation of a "distribution tag". This +# tag is signed by default. The distributed source tree is the +# release source tree with the addition of release metadata +# including the version number, and may also include other generated +# data, e.g. documentation. This tagged distribution may be +# subsequently exported as a tarfile or zipfile with "git archive", +# or used directly from git by downstream consumers. +# +# +# Version metadata +# ---------------- +# +# Set GIT_VERSION_FILE, which is the location of a cmake script +# relative to PROJECT_SOURCE_DIR. The default is "version.cmake". +# For backward compatibility with the preexisting autoconf/automake +# implementation, GIT_VERSION_FILE_COMPAT may also be set, defaulting +# to "VERSION"; this also needs GIT_VERSION_FILE_USE_COMPAT setting to +# ON (default is OFF). +# +# When developing from git, no version file will be used; version +# information will be obtained directly from git. When using a +# distributed release, version information will be obtained from the +# version file. +# +# +# Release configuration +# --------------------- +# +# This script will not allow tagging of a release if the working git +# branch contains uncommitted changes. This is in order to prevent +# creation of broken releases—the working tree may appear to build +# and work correctly, but the uncommitted changes won't be tagged. +# Additionally, it will not allow tagging of a release if untracked +# files are present in the tree (for the same reasons--the untracked +# files may require adding and committing). Set +# GIT_RELEASE_CHECK_UNTRACKED to OFF to allow releasing if untracked +# files are present. +# +# Releasing isn't enabled by default in order to prevent unintentional +# or accidental modification of the git repository. That is to say, +# making a release must be explicitly requested as a safety check; set +# GIT_RELEASE_ENABLE to ON in order to make a release. +# +# Release tagging is customised using the following options: +# +# GIT_RELEASE_TAG_OPTIONS +# A list of options to pass to "git tag"; defaults to "-s" to sign +# the tag. +# +# GIT_RELEASE_TAG_NAME +# The name of the release tag. Defaults to +# "release/${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION}", but may be +# changed to just "v${GIT_RELEASE_VERSION}" or any name desired. +# The only restriction is that it must contain the release version +# somewhere in the string, and must be a valid git tag name. +# +# GIT_RELEASE_TAG_MATCH +# A pattern to patch all release versions when using "git describe +# --match". Defaults to "release/${CMAKE_PROJECT_NAME}-*", +# i.e. containing the constant part of GIT_RELEASE_TAG_NAME without +# the version number. Must be changed appropriately if +# GIT_RELEASE_TAG_NAME is customised. +# +# GIT_RELEASE_TAG_REGEX +# A regular expression to match the release version in the tag name. +# The release version number must be the first match ("\1"). +# Defaults to "^release/${CMAKE_PROJECT_NAME}-([0-9].*)\$". Must be +# changed appropriately if GIT_RELEASE_TAG_NAME is customised. +# +# GIT_RELEASE_TAG_MESSAGE +# The release tag message. Any text is permitted here, though it is +# advisable (but not required) to include GIT_RELEASE_VERSION as +# part of the message. +# +# +# Releasing +# --------- +# +# Run "cmake" as normal, but add the options: +# +# -DGIT_RELEASE_ENABLE=ON -DGIT_RELEASE_VERSION=${new_version} +# +# This will provide a new "git-release" target. If using make, run: +# +# make git-release +# +# If tag signing is enabled, you'll be prompted for your key +# passphrase. +# +# Run "git log --decorate" or "git describe" and you'll see the +# release tag. This tag marks the current commit as the release of +# version ${new_version}. +# +# +# Distribution configuration +# -------------------------- +# +# Making a distribution of a release requires releasing first (as +# documented above) +# +# Distributing isn't enabled by default in order to prevent +# unintentional or accidental modification of the git repository. +# That is to say, making a distribution must be explicitly requested +# as a safety check; set GIT_DIST_ENABLE to ON in order to make a +# distribution. +# +# Distribution tagging is customised using the following options: +# +# GIT_DIST_TAG_OPTIONS +# A list of options to pass to "git tag"; defaults to "-s" to sign +# the tag. +# +# GIT_DIST_TAG_NAME +# The name of the distribution tag. Defaults to +# "distribution/${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION}", but +# may be changed to just "v${GIT_RELEASE_VERSION}" or any name +# desired. The only restriction is that it must contain the +# distribution version somewhere in the string, and must be a valid +# git tag name. +# +# GIT_DIST_TAG_MESSAGE +# The distribution tag message. Any text is permitted here, though +# it is advisable (but not required) to include GIT_DIST_VERSION as +# part of the message. +# +# Distribution committing and branching is customised using the +# following options: +# +# GIT_DIST_BRANCH +# The name of the branch to commit onto. The branch will be created +# if it does not already exist. The default is +# "distribution/${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION_MAJOR}.${GIT_RELEASE_VERSION_MINOR}" +# which is to say that it includes the major and minor version +# numbers, so that you get a new distribution branch each time the +# major or minor number is changed, with the patch release versions +# being committed in sequence on each branch. This enables +# downstream tracking of a given release series, and maintenance of +# multiple release series in parallel. It is advised to customise +# this to meet the project's versioning and release strategy such +# that major stable release series are kept on different branches. +# +# GIT_DIST_COMMIT_MESSAGE +# The distribution commit message. Any text is permitted here, +# though it is advisable (but not required) to include +# GIT_DIST_VERSION as part of the message. +# +# GIT_DIST_NAME +# Naming scheme for the release. This is the name of the release +# directory, and will be used to prefix the path for release +# archives. Defaults to +# "${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION}". +# +# GIT_DIST_TMPDIR +# Temporary directory used for staging the release distribution tree +# prior to committing into git. Defaults to +# "${PROJECT_BINARY_DIR}/GitRelease" but may be +# adjusted if this clashes with existing usage of this path. +# +# GIT_DIST_ROOT +# Root of the staged release distribution. Defaults to +# "${GIT_DIST_TMPDIR}/${GIT_DIST_NAME}". +# +# +# +# Distributing +# ------------ +# +# Run "cmake" as normal, but add the option: +# +# -DGIT_DIST_ENABLE=ON +# +# This will provide a new "git-dist" target. If using make, run: +# +# make git-dist +# +# If tag signing is enabled, you'll be prompted for your key +# passphrase. +# +# Look at the distribution branch with "git log --decorate --graph" or +# "gitk". You'll see that the distribution has the tagged release as +# its parent and (if present) the prior distribution. That is to say, +# the relationships between the releases and distributions are +# explicitly defined. While this might not be of immediately obvious +# benefit, it means that downstream consumers can make changes and +# push them back to you; merging the changes back upstream is much +# easier since the origin of the changes is fully described by the +# dependency graph. + +cmake_policy(SET CMP0007 NEW) + +# Settings file used to pass configuration settings +set(GIT_RELEASE_SETTINGS "${CMAKE_BINARY_DIR}/GitRelease.cmake") + +# When running in script mode, read the saved settings first +if (CMAKE_SCRIPT_MODE_FILE) + include("${GIT_RELEASE_SETTINGS}") +endif (CMAKE_SCRIPT_MODE_FILE) + +if (NOT CMAKE_SCRIPT_MODE_FILE) +# Version file settings +set(GIT_VERSION_FILE "GitVersion.cmake" + CACHE FILEPATH "Relative path to cmake version file in distributed source tree") +set(GIT_VERSION_FILE_COMPAT "VERSION" + CACHE FILEPATH "Relative path to compatibility version file in distributed source tree") +set(GIT_VERSION_FILE_USE_COMPAT OFF + CACHE BOOL "Create compatibility version file in distributed source tree") +mark_as_advanced(FORCE GIT_VERSION_FILE GIT_VERSION_FILE_COMPAT GIT_VERSION_FILE_USE_COMPAT) + +# Release sanity checking +set(GIT_RELEASE_CHECK_UNCOMMITTED ON + CACHE BOOL "Check for uncommitted files in working tree") +set(GIT_RELEASE_CHECK_UNTRACKED ON + CACHE BOOL "Check for untracked files in working tree") +set(GIT_RELEASE_ENABLE OFF + CACHE BOOL "Enable to permit git-release; not enabled by default for safety") +mark_as_advanced(FORCE GIT_RELEASE_CHECK_UNCOMMITTED GIT_RELEASE_CHECK_UNTRACKED GIT_RELEASE_ENABLE) + +# Release matching +set(GIT_RELEASE_TAG_MATCH "release/${CMAKE_PROJECT_NAME}-*" + CACHE STRING "Pattern match for all release tags for use with \"git describe --match\"") +set(GIT_RELEASE_TAG_REGEX "^release/${CMAKE_PROJECT_NAME}-([0-9].*)\$" +CACHE STRING "Regular expression to extract the version number from the tag name") +mark_as_advanced(FORCE GIT_RELEASE_TAG_MATCH GIT_RELEASE_TAG_REGEX) + +# Distribution sanity checking +set(GIT_DIST_ENABLE OFF + CACHE BOOL "Enable to permit git-dist; not enabled by default for safety") +mark_as_advanced(FORCE GIT_DIST_ENABLE) +endif (NOT CMAKE_SCRIPT_MODE_FILE) + +# Split a version number into separate components +# version the version number to split +# major variable name to store the major version in +# minor variable name to store the minor version in +# patch variable name to store the patch version in +# extra variable name to store a version suffix in +function(git_release_version_split version major minor patch extra) + string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" version_valid ${version}) + if(version_valid) + string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" "\\1;\\2;\\3;\\4" VERSION_MATCHES ${version}) + list(GET VERSION_MATCHES 0 version_major) + set(${major} ${version_major} PARENT_SCOPE) + list(GET VERSION_MATCHES 1 version_minor) + set(${minor} ${version_minor} PARENT_SCOPE) + list(GET VERSION_MATCHES 2 version_patch) + set(${patch} ${version_patch} PARENT_SCOPE) + list(GET VERSION_MATCHES 3 version_extra) + set(${extra} ${version_extra} PARENT_SCOPE) + else(version_valid) + message(AUTHOR_WARNING "Bad version ${version}; falling back to 0 (have you made an initial release?)") + set(${major} "0" PARENT_SCOPE) + set(${minor} "" PARENT_SCOPE) + set(${patch} "" PARENT_SCOPE) + set(${extra} "" PARENT_SCOPE) + endif(version_valid) +endfunction(git_release_version_split) + +function(git_release_version_from_file_compat git_version_file) + if(NOT EXISTS ${git_version_file}) + message(FATAL_ERROR "git version file ${git_version_file} does not exist") + endif(NOT EXISTS ${git_version_file}) + FILE(READ "${git_version_file}" VERSION_CONTENT) + STRING(REGEX REPLACE ";" "\\\\;" VERSION_CONTENT "${VERSION_CONTENT}") + STRING(REGEX REPLACE "\n" ";" VERSION_CONTENT "${VERSION_CONTENT}") + + foreach(line ${VERSION_CONTENT}) + string(REGEX MATCH "^([A-Z][a-zA-Z-]*): (.*)" line_valid ${line}) + if(line_valid) + string(REGEX REPLACE "^([A-Z][a-zA-Z-]*): (.*)" "\\1;\\2" line_matches ${line}) + list(GET line_matches 0 key) + list(GET line_matches 1 value) + + if (${key} STREQUAL "Package") + if (NOT ${CMAKE_PROJECT_NAME} STREQUAL ${value}) + message(FATAL_ERROR "Project name ${CMAKE_PROJECT_NAME} does not match name in ${git_version_file} (${value})") + endif (NOT ${CMAKE_PROJECT_NAME} STREQUAL ${value}) + set(GIT_RELEASE_PACKAGE ${value} PARENT_SCOPE) + endif(${key} STREQUAL "Package") + if (${key} STREQUAL "Version") + set(GIT_RELEASE_VERSION ${value} PARENT_SCOPE) + endif(${key} STREQUAL "Version") + if (${key} STREQUAL "Release-Date") + set(GIT_RELEASE_DATE ${value} PARENT_SCOPE) + endif(${key} STREQUAL "Release-Date") + if (${key} STREQUAL "Release-Date-Unix") + set(GIT_RELEASE_DATE_UNIX ${value} PARENT_SCOPE) + endif(${key} STREQUAL "Release-Date-Unix") + if (${key} STREQUAL "Released-By") + set(GIT_RELEASE_BY ${value} PARENT_SCOPE) + endif(${key} STREQUAL "Released-By") + if (${key} STREQUAL "Git-Tag") + set(GIT_RELEASE_TAG ${value} PARENT_SCOPE) + endif(${key} STREQUAL "Git-Tag") + endif(line_valid) + endforeach(line) +endfunction(git_release_version_from_file_compat) + +function(git_release_version_from_file git_version_file) + include("${git_version_file}") + + set(GIT_RELEASE_PACKAGE ${GIT_RELEASE_PACKAGE} PARENT_SCOPE) + set(GIT_RELEASE_VERSION ${GIT_RELEASE_VERSION} PARENT_SCOPE) + set(GIT_RELEASE_DATE ${GIT_RELEASE_DATE} PARENT_SCOPE) + set(GIT_RELEASE_DATE_UNIX ${GIT_RELEASE_DATE_UNIX} PARENT_SCOPE) + set(GIT_RELEASE_BY ${GIT_RELEASE_BY} PARENT_SCOPE) + set(GIT_RELEASE_TAG ${GIT_RELEASE_TAG} PARENT_SCOPE) +endfunction(git_release_version_from_file) + +function(git_release_version_from_git_tag git_tag tag_exists) + execute_process(COMMAND git show ${git_tag} + OUTPUT_VARIABLE tag_content RESULT_VARIABLE show_fail ERROR_QUIET + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if (tag_exists AND show_fail) + message(FATAL_ERROR "Could not obtain release tag ${git_tag} from git") + endif (tag_exists AND show_fail) + STRING(REGEX REPLACE ";" "\\\\;" tag_content "${tag_content}") + STRING(REGEX REPLACE "\n" ";" tag_content "${tag_content}") + + foreach(line ${tag_content}) + string(REGEX MATCH "^Tagger: (.*)" tagger_valid ${line}) + if (tagger_valid) + string(REGEX REPLACE "^Tagger: (.*)" "\\1" tagger ${line}) + endif (tagger_valid) + endforeach(line) + + # If tagger is undefined, set to "Unreleased". + if(NOT tagger) + set(tagger "Unreleased") + endif(NOT tagger) + set(GIT_RELEASE_BY ${tagger} PARENT_SCOPE) + + set(GIT_RELEASE_TAG ${git_tag} PARENT_SCOPE) + execute_process(COMMAND git rev-parse "${git_tag}^{}" + OUTPUT_VARIABLE commit RESULT_VARIABLE revparse_fail ERROR_QUIET + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if (revparse_fail) + message(FATAL_ERROR "Could not obtain release commit information from git") + endif (revparse_fail) + string(REPLACE "\n" "" commit "${commit}") + execute_process(COMMAND git log -1 "${commit}" --pretty=%ai + OUTPUT_VARIABLE commit_date RESULT_VARIABLE revparse_fail ERROR_QUIET + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if (revparse_fail) + message(FATAL_ERROR "Could not obtain release commit date from git") + endif (revparse_fail) + string(REPLACE "\n" "" commit_date "${commit_date}") + execute_process(COMMAND git log -1 "${commit}" --pretty=%at + OUTPUT_VARIABLE commit_date_unix RESULT_VARIABLE revparse_fail ERROR_QUIET + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if (revparse_fail) + message(FATAL_ERROR "Could not obtain release commit timestamp from git") + endif (revparse_fail) + string(REPLACE "\n" "" commit_date_unix "${commit_date_unix}") + + set(GIT_RELEASE_DATE ${commit_date} PARENT_SCOPE) + set(GIT_RELEASE_DATE_UNIX ${commit_date_unix} PARENT_SCOPE) + set(GIT_RELEASE_PACKAGE ${CMAKE_PROJECT_NAME} PARENT_SCOPE) + + string(REGEX REPLACE "${GIT_RELEASE_TAG_REGEX}" "\\1" git_release_version ${git_tag}) + set(GIT_RELEASE_VERSION ${git_release_version} PARENT_SCOPE) +endfunction(git_release_version_from_git_tag) + +function(git_release_version_from_git tag_match) + set(tag_exists TRUE) + + execute_process(COMMAND git describe --match "${tag_match}" --exact-match + OUTPUT_VARIABLE git_tag RESULT_VARIABLE git_fail ERROR_QUIET + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + string(REPLACE "\n" "" git_tag "${git_tag}") + if(git_fail) + set(tag_exists FALSE) + # This commit is not a tagged release; + execute_process(COMMAND git describe --match "${tag_match}" + OUTPUT_VARIABLE git_tag RESULT_VARIABLE git_fail2 ERROR_QUIET + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + string(REPLACE "\n" "" git_tag "${git_tag}") + if(git_fail2) + message(FATAL_ERROR "Could not obtain release information from git") + endif(git_fail2) + endif(git_fail) + + git_release_version_from_git_tag(${git_tag} ${tag_exists}) + + set(GIT_RELEASE_PACKAGE ${GIT_RELEASE_PACKAGE} PARENT_SCOPE) + set(GIT_RELEASE_VERSION ${GIT_RELEASE_VERSION} PARENT_SCOPE) + set(GIT_RELEASE_DATE ${GIT_RELEASE_DATE} PARENT_SCOPE) + set(GIT_RELEASE_DATE_UNIX ${GIT_RELEASE_DATE_UNIX} PARENT_SCOPE) + set(GIT_RELEASE_BY ${GIT_RELEASE_BY} PARENT_SCOPE) + set(GIT_RELEASE_TAG ${GIT_RELEASE_TAG} PARENT_SCOPE) +endfunction(git_release_version_from_git) + +function(git_release_version_to_file_compat git_version_file) + set(keys + "Package: ${CMAKE_PROJECT_NAME}" + "Version: ${GIT_RELEASE_VERSION}") + if (GIT_RELEASE_DATE) + set(keys ${keys} "Release-Date: ${GIT_RELEASE_DATE}") + endif (GIT_RELEASE_DATE) + if (GIT_RELEASE_DATE_UNIX) + set(keys ${keys} "Release-Date-Unix: ${GIT_RELEASE_DATE_UNIX}") + endif (GIT_RELEASE_DATE_UNIX) + if (GIT_RELEASE_BY) + set(keys ${keys} "Released-By: ${GIT_RELEASE_BY}") + endif (GIT_RELEASE_BY) + if (GIT_RELEASE_TAG) + set(keys ${keys} "Git-Tag: ${GIT_RELEASE_TAG}") + endif (GIT_RELEASE_TAG) + STRING(REGEX REPLACE ";" "\\n" keys "${keys}") + + get_filename_component(dirname ${git_version_file} PATH) + file(MAKE_DIRECTORY "${dirname}") + file(WRITE "${git_version_file}" "${keys}\n") +endfunction(git_release_version_to_file_compat) + +function(git_release_version_to_file git_version_file) + set(lines + "set(GIT_RELEASE_PACKAGE \"${CMAKE_PROJECT_NAME}\")") + set(lines ${lines} + "set(GIT_RELEASE_VERSION \"${GIT_RELEASE_VERSION}\")") + if (GIT_RELEASE_DATE) + set(lines ${lines} + "set(GIT_RELEASE_DATE \"${GIT_RELEASE_DATE}\")") + endif (GIT_RELEASE_DATE) + if (GIT_RELEASE_DATE_UNIX) + set(lines ${lines} + "set(GIT_RELEASE_DATE_UNIX \"${GIT_RELEASE_DATE_UNIX}\")") + endif (GIT_RELEASE_DATE_UNIX) + if (GIT_RELEASE_BY) + set(lines ${lines} + "set(GIT_RELEASE_BY \"${GIT_RELEASE_BY}\")") + endif (GIT_RELEASE_BY) + if (GIT_RELEASE_TAG) + set(lines ${lines} + "set(GIT_RELEASE_TAG \"${GIT_RELEASE_TAG}\")") + endif (GIT_RELEASE_TAG) + STRING(REGEX REPLACE ";" "\\n" lines "${lines}") + + get_filename_component(dirname ${git_version_file} PATH) + file(MAKE_DIRECTORY "${dirname}") + file(WRITE "${git_version_file}" "${lines}\n") +endfunction(git_release_version_to_file) + +function(git_release_version tag_match) + if(GIT_RELEASE_ENABLE OR GIT_DIST_ENABLE) + if (NOT GIT_RELEASE_VERSION) + message(FATAL_ERROR "GIT_RELEASE_VERSION not set; required if GIT_RELEASE_ENABLE or GIT_DIST_ENABLE is enabled") + endif (NOT GIT_RELEASE_VERSION) + else(GIT_RELEASE_ENABLE OR GIT_DIST_ENABLE) + if(EXISTS "${PROJECT_SOURCE_DIR}/${GIT_VERSION_FILE}") + message(STATUS "Reading release metadata from ${GIT_VERSION_FILE}") + git_release_version_from_file("${PROJECT_SOURCE_DIR}/${GIT_VERSION_FILE}") + else(EXISTS "${PROJECT_SOURCE_DIR}/${GIT_VERSION_FILE}") + if(GIT_VERSION_FILE_USE_COMPAT AND EXISTS "${PROJECT_SOURCE_DIR}/${GIT_VERSION_FILE_COMPAT}") + message(STATUS "Reading release metadata from ${GIT_VERSION_FILE_COMPAT}") + git_release_version_from_file_compat("${PROJECT_SOURCE_DIR}/${GIT_VERSION_FILE_COMPAT}") + else(GIT_VERSION_FILE_USE_COMPAT AND EXISTS "${PROJECT_SOURCE_DIR}/${GIT_VERSION_FILE_COMPAT}") + message(STATUS "Reading release metadata from git") + git_release_version_from_git("${tag_match}") + endif(GIT_VERSION_FILE_USE_COMPAT AND EXISTS "${PROJECT_SOURCE_DIR}/${GIT_VERSION_FILE_COMPAT}") + endif(EXISTS "${PROJECT_SOURCE_DIR}/${GIT_VERSION_FILE}") + endif(GIT_RELEASE_ENABLE OR GIT_DIST_ENABLE) + + git_release_version_split(${GIT_RELEASE_VERSION} major minor patch extra) + + if(NOT GIT_RELEASE_DATE) + set(GIT_RELEASE_DATE "unreleased") + endif(NOT GIT_RELEASE_DATE) + if(NOT GIT_RELEASE_DATE_UNIX) + set(GIT_RELEASE_DATE_UNIX 0) + endif(NOT GIT_RELEASE_DATE_UNIX) + + set(GIT_RELEASE_PACKAGE ${GIT_RELEASE_PACKAGE} PARENT_SCOPE) + set(GIT_RELEASE_VERSION ${GIT_RELEASE_VERSION} PARENT_SCOPE) + set(GIT_RELEASE_VERSION_MAJOR ${major} PARENT_SCOPE) + set(GIT_RELEASE_VERSION_MINOR ${minor} PARENT_SCOPE) + set(GIT_RELEASE_VERSION_PATCH ${patch} PARENT_SCOPE) + set(GIT_RELEASE_VERSION_EXTRA ${extra} PARENT_SCOPE) + set(GIT_RELEASE_DATE ${GIT_RELEASE_DATE} PARENT_SCOPE) + set(GIT_RELEASE_DATE_UNIX ${GIT_RELEASE_DATE_UNIX} PARENT_SCOPE) + set(GIT_RELEASE_BY ${GIT_RELEASE_BY} PARENT_SCOPE) + set(GIT_RELEASE_TAG ${GIT_RELEASE_TAG} PARENT_SCOPE) +endfunction(git_release_version) + +if (NOT CMAKE_SCRIPT_MODE_FILE) +# Get initial version information + git_release_version("${GIT_RELEASE_TAG_MATCH}") + +set(GIT_RELEASE_VERSION "${GIT_RELEASE_VERSION}" + CACHE STRING "Release version number") +mark_as_advanced(FORCE GIT_RELEASE_VERSION) + +# Release tagging +set(GIT_RELEASE_TAG_OPTIONS "-s" + CACHE STRING "GPG release tagging options; signing enabled by default") +set(GIT_RELEASE_TAG_NAME "release/${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION}" + CACHE STRING "Naming scheme for release tags; must include version number") +set(GIT_RELEASE_TAG_MESSAGE "Release of ${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION}" + CACHE STRING "Message for release tags") +mark_as_advanced(FORCE GIT_RELEASE_TAG_OPTIONS GIT_RELEASE_TAG_NAME GIT_RELEASE_TAG_MESSAGE) + +# Distribution tagging +set(GIT_DIST_TAG_OPTIONS "-s" + CACHE STRING "GPG distribution tagging options; signing enabled by default") +set(GIT_DIST_TAG_NAME distribution/${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION} + CACHE STRING "Naming scheme for distribution tags; must include version number") +set(GIT_DIST_TAG_MESSAGE "Distribution of ${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION}" + CACHE STRING "Message for distribution tags") +mark_as_advanced(FORCE GIT_DIST_TAG_OPTIONS GIT_DIST_TAG_NAME GIT_DIST_TAG_MESSAGE) + +# Distribution branch commit +set(GIT_DIST_BRANCH distribution/${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION_MAJOR}.${GIT_RELEASE_VERSION_MINOR} + CACHE STRING "Branch to place distributed release on") +# Message for distribution commit +set(GIT_DIST_COMMIT_MESSAGE "Distribution of ${CMAKE_PROJECT_NAME} version ${GIT_RELEASE_VERSION}" + CACHE STRING "Message for distribution commit") +# Release directory to distribute +set(GIT_DIST_NAME ${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION} + CACHE STRING "Name of the release distribution; must include version number") +set(GIT_DIST_TMPDIR ${PROJECT_BINARY_DIR}/GitRelease + CACHE STRING "Temporary staging directory for release") +set(GIT_DIST_ROOT ${GIT_DIST_TMPDIR}/${GIT_DIST_NAME} + CACHE STRING "Release directory to distribute; must include version number") +mark_as_advanced(FORCE GIT_DIST_BRANCH GIT_DIST_COMMIT_MESSAGE GIT_DIST_NAME GIT_DIST_TMPDIR GIT_DIST_ROOT) +endif (NOT CMAKE_SCRIPT_MODE_FILE) + + +function(git_check_repo) + if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git) + message(FATAL_ERROR "Source directory ${PROJECT_SOURCE_DIR} is not a git repository") + endif(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git) +endfunction(git_check_repo) + +# Check that the working tree and index are clean prior to making any +# changes. If dirty, then the changes may be unreproducible and not +# match what was expected. For example, the distributed files may not +# match those actually committed or may not even be under version +# control. +# +# Project customisation: +# Checking of untracked files may be disabled by setting +# GIT_RELEASE_CHECK_UNTRACKED to OFF. +function(git_check_clean) + git_check_repo() + + execute_process(COMMAND git diff-index --quiet HEAD + RESULT_VARIABLE diff_index_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if(diff_index_status GREATER 1) + message(FATAL_ERROR "Error checking git index git diff-index: error status ${diff_index_status}") + endif(diff_index_status GREATER 1) + if(diff_index_status EQUAL 1) + if (GIT_RELEASE_CHECK_UNCOMMITTED) + message(FATAL_ERROR "Uncommitted changes in source directory") + else (GIT_RELEASE_CHECK_UNCOMMITTED) + message(WARNING "Uncommitted changes in source directory") + endif (GIT_RELEASE_CHECK_UNCOMMITTED) + endif(diff_index_status EQUAL 1) + + if(diff_index_status EQUAL 0 OR diff_index_status EQUAL 1) + execute_process(COMMAND git ls-files --others --exclude-standard --error-unmatch . + OUTPUT_FILE /dev/null + ERROR_FILE /dev/null + RESULT_VARIABLE ls_files_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + # Exit status 1 is OK. + if(ls_files_status GREATER 1) + message(FATAL_ERROR "Error checking working directory with git ls-files: error status ${ls_files_status}") + endif(ls_files_status GREATER 1) + if(ls_files_status EQUAL 0) + if (GIT_RELEASE_CHECK_UNTRACKED) + message(FATAL_ERROR "Untracked files present in working directory") + else (GIT_RELEASE_CHECK_UNTRACKED) + message(WARNING "Untracked files present in working directory") + endif (GIT_RELEASE_CHECK_UNTRACKED) + endif(ls_files_status EQUAL 0) + endif(diff_index_status EQUAL 0 OR diff_index_status EQUAL 1) +endfunction(git_check_clean) + +# Make a release. +# +# The current working tree is tagged as a new release. If the release +# tag already exists then the operation will do nothing if the tag +# matches the current working tree, or else it will abort with an +# error. If the repository has been accidentally tagged previously, +# then remove the tag with "git tag -d TAG" before releasing. +# +# NOTE: Set GIT_RELEASE_ENABLE=true when running make. This is a +# safety check to avoid accidental damage to the git repository. +# +# NOTE: Running release-git independently of dist-git is NOT +# RECOMMENDED. The distdir rule can update files in the working tree +# (for example, gettext translations in po/), so running "make +# distdir" prior to tagging the release will ensure the tagged release +# will not differ from the distributed release. +# +# Project customisation: +# The tag will be signed by default; set GIT_RELEASE_TAG_OPTIONS to +# alter. The tag will be named using GIT_RELEASE_TAG_NAME with the +# GIT_RELEASE_TAG_MESSAGE specifying an appropriate message for the +# tag. +function(git_release fail_if_tag_exists) + # Check if release tag exists + execute_process(COMMAND git show-ref --tags -q ${GIT_RELEASE_TAG_NAME} + RESULT_VARIABLE show_ref_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if (show_ref_status EQUAL 0) + # Release tag already exists + if(fail_if_tag_exists) + message(FATAL_ERROR "git release tag ${GIT_RELEASE_TAG_NAME} already exists; not releasing") + else(fail_if_tag_exists) + message(STATUS "git release tag ${GIT_RELEASE_TAG_NAME} found") + endif(fail_if_tag_exists) + else(show_ref_status EQUAL 0) + # Release tag does not exist + if (NOT GIT_RELEASE_ENABLE) + message(FATAL_ERROR "GIT_RELEASE_ENABLE not set; not releasing") + endif (NOT GIT_RELEASE_ENABLE) + + # Check repository is clean to tag + git_check_clean() + + # Create release tag + message("Releasing ${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION}") + message("Creating git release tag ${GIT_RELEASE_TAG_NAME}") + execute_process(COMMAND git tag -m "${GIT_RELEASE_TAG_MESSAGE}" + ${GIT_RELEASE_TAG_OPTIONS} "${GIT_RELEASE_TAG_NAME}" + HEAD + RESULT_VARIABLE tag_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if(tag_status GREATER 0) + message(FATAL_ERROR "Failed to create release tag ${GIT_RELEASE_TAG_NAME}: error status ${tag_status}") + endif(tag_status GREATER 0) + + message(STATUS "${CMAKE_PROJECT_NAME} ${GIT_RELEASE_VERSION} release tagged as ${GIT_RELEASE_TAG_NAME}") + endif (show_ref_status EQUAL 0) + +endfunction(git_release) + +# Make a distribution of a release. +# +# A distribution is created and committed onto the specified branch. +# The commit is then tagged. The distribution commit will have the +# release commit and the previous distribution (if any) as its +# parents. Thus distribution releases appear to git as merges (with +# the exception of the initial release). +# +# NOTE: Set GIT_DIST_ENABLE=true when running make, plus +# GIT_RELEASE_ENABLE=true if the working tree has not already been +# tagged with a release tag. This is a safety check to avoid +# accidental damage to the git repository. +# +# Project customisation: +# GIT_DIST_COMMIT_MESSAGE specifies the commit message for the commit, +# and GIT_DIST_BRANCH specifies the branch to add the commit to. +# The tag will be signed by default; set GIT_DIST_TAG_OPTIONS to +# alter. The tag will be named using GIT_DIST_TAG_NAME with the +# GIT_DIST_TAG_MESSAGE specifying an appropriate message for the +# tag. +function(git_rev_parse ref var) + execute_process(COMMAND git rev-parse ${ref} + OUTPUT_VARIABLE rev_parse_output + RESULT_VARIABLE rev_parse_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if(rev_parse_status GREATER 0) + message(FATAL_ERROR "git rev-parse failed to parse ref ${ref}") + endif(rev_parse_status GREATER 0) + string(REPLACE "\n" "" rev_parse_output "${rev_parse_output}") + set(${var} ${rev_parse_output} PARENT_SCOPE) +endfunction(git_rev_parse) + +function(git_archive_tree) + # TODO: Add full export. + file(REMOVE_RECURSE "${GIT_DIST_TMPDIR}") + file(MAKE_DIRECTORY "${GIT_DIST_TMPDIR}") + execute_process(COMMAND git archive --prefix "${GIT_DIST_NAME}/" + -o "${GIT_DIST_TMPDIR}/tmp.tar" "${GIT_RELEASE_TAG_NAME}" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + execute_process(COMMAND tar -xf tmp.tar + WORKING_DIRECTORY "${GIT_DIST_TMPDIR}") + file(REMOVE "${GIT_DIST_TMPDIR}/tmp.tar") +endfunction(git_archive_tree) + +function(git_dist) + git_release(OFF) + + git_rev_parse("${GIT_RELEASE_TAG_NAME}^{}" release_commit) + git_rev_parse(HEAD head_commit) + + if(NOT ${release_commit} STREQUAL ${head_commit}) + message(FATAL_ERROR "Working directory is not at release tag ${GIT_RELEASE_TAG_NAME}^{} (commit ${release_commit}); not distributing") + endif(NOT ${release_commit} STREQUAL ${head_commit}) + + git_check_clean() + + git_archive_tree() + + git_release_version_from_git_tag("${GIT_RELEASE_TAG_NAME}" TRUE) + + git_release_version_to_file("${GIT_DIST_ROOT}/${GIT_VERSION_FILE}") + if(GIT_VERSION_FILE_USE_COMPAT) + git_release_version_to_file_compat("${GIT_DIST_ROOT}/${GIT_VERSION_FILE_COMPAT}") + endif(GIT_VERSION_FILE_USE_COMPAT) + + git_dist_generic() +endfunction(git_dist) + +# Make a distribution of an arbitrary release. +# +# The same as git_dist, but this allows addition of any distribution +# rather than just the release in the current working tree. This rule +# is intended for allowing retrospective addition of a project's +# entire release history (driven by a shell script), for example. +# See below for an example of how to do this. +# +# GIT_DIST_ROOT must be set to specify the release to distribute and +# GIT_RELEASE_VERSION must match the release version. GIT_DIST_BRANCH may also +# require setting if not using the default. GIT_RELEASE_TAG_NAME must +# be set to the tag name of the existing release. +function(git_dist_generic) + git_check_repo() + + execute_process(COMMAND git show-ref --tags -q ${GIT_DIST_TAG_NAME} + RESULT_VARIABLE show_ref_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if (show_ref_status EQUAL 0) + message(FATAL_ERROR "git dist tag ${GIT_DIST_TAG_NAME} already exists; not distributing") + endif (show_ref_status EQUAL 0) + + if (NOT GIT_DIST_ENABLE) + message(FATAL_ERROR "GIT_DIST_ENABLE not set; not distributing") + endif (NOT GIT_DIST_ENABLE) + + message("Distributing ${CMAKE_PROJECT_NAME}-${GIT_RELEASE_VERSION} on git branch ${GIT_DIST_BRANCH}") + set(dist_index "${GIT_DIST_TMPDIR}/index") + if(EXISTS ${dist_index}) + file(REMOVE ${dist_index}) + endif(EXISTS ${dist_index}) + + set(ENV{GIT_INDEX_FILE} ${dist_index}) + set(ENV{GIT_WORK_TREE} ${GIT_DIST_ROOT}) + execute_process(COMMAND git add -A + RESULT_VARIABLE git_add_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + unset(ENV{GIT_WORK_TREE}) + if(git_add_status GREATER 0) + message(FATAL_ERROR "Failed to add archive tree to git index") + endif(git_add_status GREATER 0) + + execute_process(COMMAND git write-tree + OUTPUT_VARIABLE tree + RESULT_VARIABLE git_write_tree_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + string(REPLACE "\n" "" tree "${tree}") + if(git_tree_write_status GREATER 0) + message(FATAL_ERROR "Failed to write git index to tree") + endif(git_tree_write_status GREATER 0) + + unset(ENV{GIT_INDEX_FILE}) + + file(REMOVE ${dist_index}) + + string(LENGTH ${tree} tree_length) + if (tree_length EQUAL 0) + message(FATAL_ERROR "Failed to get tree hash") + endif (tree_length EQUAL 0) + + git_rev_parse("${GIT_RELEASE_TAG_NAME}^{}" release_commit) + + set(commit_options -p ${release_commit}) + + execute_process(COMMAND git show-ref --heads -s refs/heads/${GIT_DIST_BRANCH} + OUTPUT_VARIABLE dist_parent + RESULT_VARIABLE show_ref_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + string(REPLACE "\n" "" dist_parent "${dist_parent}") + if (show_ref_status GREATER 0) + set(newroot "(root-commit) ") + else (show_ref_status GREATER 0) + set(commit_opts ${commit_opts} -p ${dist_parent}) + endif (show_ref_status GREATER 0) + + file(WRITE "${GIT_DIST_TMPDIR}/commit-message" "${GIT_DIST_COMMIT_MESSAGE}") + execute_process(COMMAND git commit-tree -F "${GIT_DIST_TMPDIR}/commit-message" "${tree}" ${commit_options} + OUTPUT_VARIABLE commit + RESULT_VARIABLE commit_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + file(REMOVE "${GIT_DIST_TMPDIR}/commit-message") + string(REPLACE "\n" "" commit "${commit}") + if (commit_status GREATER 0) + message(FATAL_ERROR "Failed to commit tree") + endif (commit_status GREATER 0) + + string(LENGTH ${commit} commit_length) + if(${commit_length} EQUAL 0) + message(FATAL_ERROR "Failed to get commit hash") + endif(${commit_length} EQUAL 0) + + execute_process(COMMAND git update-ref "refs/heads/${GIT_DIST_BRANCH}" ${commit} ${dist_parent} + RESULT_VARIABLE update_ref_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if (update_ref_status GREATER 0) + message(FATAL_ERROR "Failed to update reference for commit") + endif (update_ref_status GREATER 0) + + message("[${GIT_DIST_BRANCH} ${newroot}${commit}] ${GIT_DIST_COMMIT_MESSAGE}") + + message("Creating git distribution tag ${GIT_DIST_TAG_NAME}") + execute_process(COMMAND git tag -m "${GIT_DIST_TAG_MESSAGE}" ${GIT_DIST_TAG_OPTIONS} "${GIT_DIST_TAG_NAME}" ${commit} + RESULT_VARIABLE tag_status + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + if(tag_status GREATER 0) + message(FATAL_ERROR "Failed to create distribution tag ${GIT_DIST_TAG_NAME}: error status ${tag_status}") + endif(tag_status GREATER 0) + + message(STATUS "${CMAKE_PROJECT_NAME} ${GIT_RELEASE_VERSION} distribution tagged as ${GIT_DIST_TAG_NAME}") +endfunction(git_dist_generic) + +# Add targets if not in script mode +if (NOT CMAKE_SCRIPT_MODE_FILE) + + set(script_options + -D CMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME} + -D PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} + -D PROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}) + + if (GIT_RELEASE_ENABLE OR GIT_DIST_ENABLE) + # Preserve current configuration in a form which may be sourced by + # a standalone script file. + file(WRITE "${GIT_RELEASE_SETTINGS}" +"set(GIT_VERSION_FILE \"${GIT_VERSION_FILE}\") +set(GIT_VERSION_FILE_COMPAT \"${GIT_VERSION_FILE_COMPAT}\") +set(GIT_VERSION_FILE_USE_COMPAT \"${GIT_VERSION_FILE_USE_COMPAT}\") +set(GIT_RELEASE_VERSION \"${GIT_RELEASE_VERSION}\") +set(GIT_RELEASE_CHECK_UNCOMMITTED ${GIT_RELEASE_CHECK_UNCOMMITTED}) +set(GIT_RELEASE_CHECK_UNTRACKED ${GIT_RELEASE_CHECK_UNTRACKED}) +set(GIT_RELEASE_ENABLE ${GIT_RELEASE_ENABLE}) +set(GIT_RELEASE_TAG_OPTIONS \"${GIT_RELEASE_TAG_OPTIONS}\") +set(GIT_RELEASE_TAG_NAME \"${GIT_RELEASE_TAG_NAME}\") +set(GIT_RELEASE_TAG_MATCH \"${GIT_RELEASE_TAG_MATCH}\") +set(GIT_RELEASE_TAG_REGEX \"${GIT_RELEASE_TAG_REGEX}\") +set(GIT_RELEASE_TAG_MESSAGE \"${GIT_RELEASE_TAG_MESSAGE}\") +set(GIT_DIST_ENABLE ${GIT_DIST_ENABLE}) +set(GIT_DIST_TAG_OPTIONS \"${GIT_DIST_TAG_OPTIONS}\") +set(GIT_DIST_TAG_NAME \"${GIT_DIST_TAG_NAME}\") +set(GIT_DIST_TAG_MESSAGE \"${GIT_DIST_TAG_MESSAGE}\") +set(GIT_DIST_BRANCH \"${GIT_DIST_BRANCH}\") +set(GIT_DIST_COMMIT_MESSAGE \"${GIT_DIST_COMMIT_MESSAGE}\") +set(GIT_DIST_NAME \"${GIT_DIST_NAME}\") +set(GIT_DIST_TMPDIR \"${GIT_DIST_TMPDIR}\") +set(GIT_DIST_ROOT \"${GIT_DIST_ROOT}\") +") + + # The following targets re-execute this script file with the above + # configuration. + + add_custom_target(git-check-repo + COMMAND ${CMAKE_COMMAND} ${script_options} + -D git_release_command=git-check-repo + -P ${CMAKE_CURRENT_LIST_FILE}) + endif (GIT_RELEASE_ENABLE OR GIT_DIST_ENABLE) + + if (GIT_RELEASE_ENABLE) + add_custom_target(git-check-clean + COMMAND ${CMAKE_COMMAND} ${script_options} + -D PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} + -D git_release_command=git-check-clean + -P ${CMAKE_CURRENT_LIST_FILE}) + + add_custom_target(git-release + COMMAND ${CMAKE_COMMAND} ${script_options} + -D PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} + -D git_release_command=git-release + -P ${CMAKE_CURRENT_LIST_FILE}) + endif (GIT_RELEASE_ENABLE) + + if (GIT_DIST_ENABLE) + add_custom_target(git-dist + COMMAND ${CMAKE_COMMAND} ${script_options} + -D PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} + -D git_release_command=git-dist + -P ${CMAKE_CURRENT_LIST_FILE}) + endif (GIT_DIST_ENABLE) +endif (NOT CMAKE_SCRIPT_MODE_FILE) + +# In script mode, run specified command +if (CMAKE_SCRIPT_MODE_FILE) + if(git_release_command) + if(git_release_command STREQUAL git-check-repo) + git_check_repo() + endif(git_release_command STREQUAL git-check-repo) + + if(git_release_command STREQUAL git-check-clean) + git_check_clean() + endif(git_release_command STREQUAL git-check-clean) + + if(git_release_command STREQUAL git-release) + git_release(ON) + endif(git_release_command STREQUAL git-release) + + if(git_release_command STREQUAL git-dist) + git_dist() + endif(git_release_command STREQUAL git-dist) + endif(git_release_command) +endif (CMAKE_SCRIPT_MODE_FILE) + +# Example: How to retrospectively insert the complete distribution +# history for a project. Note: GIT_RELEASE_TAG_NAME must match the +# pattern used to tag all previous releases since this requires tags +# for all releases. +# +# #!/bin/sh +# +# set -e +# +# # Clean up any existing distribution branches and tags which could +# # interfere with addition of a complete clean distribution history. +# git tag -l | grep distribution | while read tag; do +# git tag -d $tag +# done; +# git branch -l | grep distribution | while read branch; do +# git branch -D $branch +# done; +# +# # Read an ordered list of versions from release-versions and get +# # distribution for each version from the given path and distribute +# # in git +# while read version; do +# make git_dist_generic GIT_DIST_ROOT="/path/to/unpacked/releases/$package-$version" GIT_RELEASE_VERSION="$version" GIT_DIST_ENABLE=true +# done < release-versions + +# Example: How to check that the added distributions are correctly +# representing the content of the old distributed releases following +# import as in the above example. +# +# #!/bin/sh +# +# set -e +# +# # For each version in the list of releases, check out and unpack +# # that version, and then compare it with the original. +# while read version; do +# git checkout distribution/package-$version +# rm -rf /tmp/package-$version +# mkdir /tmp/package-$version +# git archive HEAD | tar -x -C /tmp/$package-$version +# diff -urN /tmp/$package-$version "/path/to/unpacked/releases/$package-$version" | lsdiff +# rm -rf /tmp/package-$version +# done < release-versions diff --git a/cmake/boost-checks.cmake b/cmake/boost-checks.cmake new file mode 100644 index 00000000..ccb33e23 --- /dev/null +++ b/cmake/boost-checks.cmake @@ -0,0 +1,87 @@ +include(CheckIncludeFileCXX) +include(CheckCXXSourceCompiles) + +check_include_file_cxx (boost/format.hpp HAVE_BOOST_FORMAT_HPP) +# boost/iostreams/device/file_descriptor.hpp +check_include_file_cxx (boost/iostreams/device/file_descriptor.hpp HAVE_BOOST_IOSTREAMS_DEVICE_FILE_DESCRIPTOR_HPP) +# boost/program_options.hpp +check_include_file_cxx (boost/program_options.hpp HAVE_BOOST_PROGRAM_OPTIONS_HPP) +# boost/type_traits.hpp +check_include_file_cxx (boost/type_traits.hpp HAVE_BOOST_TYPE_TRAITS_HPP) + +# Boost library checks could be dropped? +# boost::program_options::variables_map in -lboost_program_options +# + BOOST_PROGRAM_OPTIONS_DESCRIPTION_OLD (drop?) +SET(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE}) + +check_cxx_source_compiles( +"#include <boost/program_options.hpp> + +int main() { + boost::program_options::variables_map dummy(); +}" +BOOST_PROGRAM_OPTIONS_LINK) +# boost::program_options::validation_error in -lboost_program_options +# + BOOST_PROGRAM_OPTIONS_VALIDATION_ERROR_OLD (drop?) + +check_cxx_source_compiles( +"#include <boost/program_options.hpp> + +int main() { + boost::program_options::validation_error + err(boost::program_options::validation_error::invalid_option, \"error\"); +}" +BOOST_PROGRAM_OPTIONS_DESCRIPTION_CURRENT_LINK) + +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) + +set(BOOST_PROGRAM_OPTIONS_DESCRIPTION_OLD 0) +if (BOOST_PROGRAM_OPTIONS AND NOT BOOST_PROGRAM_OPTIONS_DESCRIPTION_CURRENT) + set(BOOST_PROGRAM_OPTIONS_DESCRIPTION_OLD 1) +endif(BOOST_PROGRAM_OPTIONS AND NOT BOOST_PROGRAM_OPTIONS_DESCRIPTION_CURRENT) + +SET(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${Boost_IOSTREAMS_LIBRARY_RELEASE}) +# <regex> tests; boost/regex.hpp fallback ==> HAVE_REGEX +# boost::iostreams in -lboost_iostreams +check_cxx_source_compiles( +"#include <boost/iostreams/device/file_descriptor.hpp> +#include <boost/iostreams/stream.hpp> + +int main() { + boost::iostreams::stream<boost::iostreams::file_descriptor> fdstream; +}" +BOOST_IOSTREAMS_LINK) +# boost::iostreams::file_descriptor_source in -lboost_iostreams +# + BOOST_IOSTREAMS_CLOSE_HANDLE_OLD + +check_cxx_source_compiles( +"#include <boost/iostreams/device/file_descriptor.hpp> +#include <boost/iostreams/stream.hpp> +#include <unistd.h> + +int main() { +boost::iostreams::file_descriptor_sink dummy(STDOUT_FILENO, boost::iostreams::close_handle); +}" +BOOST_IOSTREAMS_CLOSE_HANDLE_CURRENT_LINK) + +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) + +set(BOOST_IOSTREAMS_CLOSE_HANDLE_OLD 0) +if (BOOST_IOSTREAMS AND NOT BOOST_IOSTREAMS_CLOSE_HANDLE_CURRENT) + set(BOOST_IOSTREAMS_CLOSE_HANDLE_OLD 1) +endif(BOOST_IOSTREAMS AND NOT BOOST_IOSTREAMS_CLOSE_HANDLE_CURRENT) + + +SET(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${Boost_FILESYSTEM_LIBRARY_RELEASE} ${Boost_SYSTEM_LIBRARY_RELEASE}) +# boost::filesystem in -lboost_filesystem +check_cxx_source_compiles( +"#include <boost/filesystem.hpp> + +int main() { + boost::filesystem::is_directory(\"/\"); +}" +BOOST_FILESYSTEM_LINK) +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) diff --git a/cmake/regex-checks.cmake b/cmake/regex-checks.cmake new file mode 100644 index 00000000..366240b4 --- /dev/null +++ b/cmake/regex-checks.cmake @@ -0,0 +1,61 @@ +include(CheckCXXSourceRuns) +#regex +check_cxx_source_runs( +"#include <regex> + +int main() { + std::regex foo(\"^foo[bar]\$\"); + std::regex bar(\"^foo[bar]\$\", std::regex::extended); + std::regex check(\"^[^:/,.][^:/,]*\$\", std::regex::extended); +}" +STD_REGEX) + +# regex broken +check_cxx_source_runs( +"#include <regex> + +int main() { + std::regex foo(\"^foo[bar]\$\"); + std::regex bar(\"^foo[bar]\$\", std::regex::extended); +}" +STD_REGEX_BROKEN) + +# tr1 regex +check_cxx_source_runs( +"#include <tr1/regex> + +int main() { + std::tr1::regex foo(\"^foo[bar]\$\"); + std::tr1::regex bar(\"^foo[bar]\$\", std::tr1::regex::extended); + std::tr1::regex check(\"^[^:/,.][^:/,]*\$\", std::tr1::regex::extended); +}" +TR1_REGEX) + +# tr1 regex broken +check_cxx_source_runs( +"#include <tr1/regex> + +int main() { + std::tr1::regex foo(\"^foo[bar]\$\"); + std::tr1::regex bar(\"^foo[bar]\$\", std::tr1::regex::extended); +}" +TR1_REGEX_BROKEN) + +# boost regex +SET(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${Boost_REGEX_LIBRARY_RELEASE}) +check_cxx_source_runs( +"#include <boost/regex.hpp> + +int main() { + boost::regex(\"^foo[bar]\$\"); + boost::regex bar(\"^foo[bar]\$\", boost::regex::extended); +}" +BOOST_REGEX) +SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) + +if(NOT STD_REGEX OR NOT STD_REGEX_BROKEN) + if(NOT TR1_REGEX OR NOT TR1_REGEX_BROKEN) + set(REGEX_LIBRARY ${Boost_REGEX_LIBRARY_RELEASE}) + endif(NOT TR1_REGEX OR NOT TR1_REGEX_BROKEN) +endif(NOT STD_REGEX OR NOT STD_REGEX_BROKEN) diff --git a/config.h.cmake b/config.h.cmake new file mode 100644 index 00000000..16442be9 --- /dev/null +++ b/config.h.cmake @@ -0,0 +1,168 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Set if boost::iostreams::file_descriptor close_handle is not available */ +#cmakedefine BOOST_IOSTREAMS_CLOSE_HANDLE_OLD 1 + +/* Set if boost::program_options::options_description::options() is not + available */ +#cmakedefine BOOST_PROGRAM_OPTIONS_DESCRIPTION_OLD 1 + +/* Set if boost::program_options::validation error uses old construction + semantics */ +#cmakedefine BOOST_PROGRAM_OPTIONS_VALIDATION_ERROR_OLD 1 + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#cmakedefine ENABLE_NLS 1 + +/* Define to 1 if you have the <boost/format.hpp> header file. */ +#cmakedefine HAVE_BOOST_FORMAT_HPP 1 + +/* Define to 1 if you have the <boost/iostreams/device/file_descriptor.hpp> + header file. */ +#cmakedefine HAVE_BOOST_IOSTREAMS_DEVICE_FILE_DESCRIPTOR_HPP 1 + +/* Define to 1 if you have the <boost/program_options.hpp> header file. */ +#cmakedefine HAVE_BOOST_PROGRAM_OPTIONS_HPP 1 + +/* Define to 1 if you have the <boost/type_traits.hpp> header file. */ +#cmakedefine HAVE_BOOST_TYPE_TRAITS_HPP 1 + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#cmakedefine HAVE_DCGETTEXT 1 + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#cmakedefine HAVE_GETTEXT 1 + +/* Define if you have the iconv() function. */ +#cmakedefine HAVE_ICONV 1 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the <memory> header file. */ +#cmakedefine HAVE_MEMORY 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define if you have POSIX threads libraries and header files. */ +#cmakedefine HAVE_PTHREAD 1 + +/* Set if the <regex> header file includes std::regex */ +#cmakedefine HAVE_REGEX_REGEX 1 + +/* Define to 1 if you have the <sched.h> header file. */ +#cmakedefine HAVE_SCHED_H 1 + +/* Define to 1 if you have the <security/pam_appl.h> header file. */ +#cmakedefine HAVE_SECURITY_PAM_APPL_H 1 + +/* Define to 1 if you have the <stdint.h> header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the <sys/personality.h> header file. */ +#cmakedefine HAVE_SYS_PERSONALITY_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <tuple> header file. */ +#cmakedefine HAVE_TUPLE 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Name of package */ +#cmakedefine PACKAGE ${PACKAGE} + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT 1 + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME 1 + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING 1 + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME 1 + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL1 + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION ${VERSION} + +/* Package release date (integer). */ +#define RELEASE_DATE ${RELEASE_DATE} + +/* Package release date (string). */ +#cmakedefine RELEASE_DATE_S "${RELEASE_DATE_S}" + +/* Enable debugging */ +#cmakedefine SBUILD_DEBUG 1 + +/* Default regular expression used to filter user environment */ +#cmakedefine SBUILD_DEFAULT_ENVIRONMENT_FILTER "${SBUILD_DEFAULT_ENVIRONMENT_FILTER}" + +/* Set if the block-device chroot type is present */ +#cmakedefine SBUILD_FEATURE_BLOCKDEV 1 + +/* Set if the btrfs-snapshot chroot type is present */ +#cmakedefine SBUILD_FEATURE_BTRFSSNAP 1 + +/* Set if the loopback chroot type is present */ +#cmakedefine SBUILD_FEATURE_LOOPBACK 1 + +/* Set if the lvm-snapshot chroot type is present */ +#cmakedefine SBUILD_FEATURE_LVMSNAP 1 + +/* Set if PAM support is available */ +#cmakedefine SBUILD_FEATURE_PAM 1 + +/* Set if personality support is present */ +#cmakedefine SBUILD_FEATURE_PERSONALITY 1 + +/* Set if the union filesystem type is present */ +#cmakedefine SBUILD_FEATURE_UNION 1 + +/* Set if unshare support is present */ +#cmakedefine SBUILD_FEATURE_UNSHARE 1 + +/* Host GNU architecture triplet */ +#cmakedefine SBUILD_HOST "${SBUILD_HOST}" + +/* Host CPU */ +#cmakedefine SBUILD_HOST_CPU "${SBUILD_HOST_CPU}" + +/* Host OS */ +#cmakedefine SBUILD_HOST_OS "${SBUILD_HOST_OS}" + +/* Host vendor */ +#cmakedefine SBUILD_HOST_VENDOR "${SBUILD_HOST_VENDOR}" + +/* Platform type, used to modify run-time platform-specific behaviour */ +#cmakedefine SBUILD_PLATFORM "${SBUILD_PLATFORM}" + +/* Test data directory */ +#cmakedefine TESTDATADIR "${TESTDATADIR}" + +/* Version number of package */ +#cmakedefine VERSION "${VERSION}" diff --git a/configure.ac b/configure.ac index 0d40a2d5..83ffeeda 100644 --- a/configure.ac +++ b/configure.ac @@ -364,6 +364,19 @@ AC_CHECK_FUNC([unshare], [UNSHARE_FUNC="no"]) # Determine which features to enable. +AC_MSG_CHECKING([whether to build NLS support]) +BUILD_NLS="yes" +if test "$USE_NLS" = "no"; then + BUILD_NLS="no" +fi +AC_MSG_RESULT([$BUILD_NLS]) + +AM_CONDITIONAL([BUILD_NLS], [test "$BUILD_NLS" = "yes"]) +AH_TEMPLATE(SBUILD_FEATURE_NLS, [Set if NLS support is present]) +if test "$BUILD_NLS" = "yes"; then + AC_DEFINE(SBUILD_FEATURE_NLS, 1) +fi + AC_MSG_CHECKING([whether to build unshare support]) BUILD_UNSHARE="yes" if test "$UNSHARE_HEADER" = "no"; then diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 index 00000000..3ee4c2e9 --- /dev/null +++ b/doc/CMakeLists.txt @@ -0,0 +1,42 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +if(BUILD_DOXYGEN) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sbuild.dox.cmake + ${CMAKE_CURRENT_BINARY_DIR}/sbuild.dox @ONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/schroot.dox.cmake + ${CMAKE_CURRENT_BINARY_DIR}/schroot.dox @ONLY) + + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sbuild.log + COMMAND ${CMAKE_COMMAND} -E remove_directory sbuild + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/sbuild.dox + COMMAND ${CMAKE_COMMAND} -E echo "══════════ UNDOCUMENTED CODE ══════════" + COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/sbuild.log + COMMAND ${CMAKE_COMMAND} -E echo "═════════ END UNDOCUMENTED CODE ═══════" + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/sbuild.dox) + + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/schroot.log + COMMAND ${CMAKE_COMMAND} -E remove_directory schroot + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/schroot.dox + COMMAND ${CMAKE_COMMAND} -E echo "══════════ UNDOCUMENTED CODE ══════════" + COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/schroot.log + COMMAND ${CMAKE_COMMAND} -E echo "═════════ END UNDOCUMENTED CODE ═══════" + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/schroot.dox) + + add_custom_target(doc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/sbuild.log ${CMAKE_CURRENT_BINARY_DIR}/schroot.log) +endif(BUILD_DOXYGEN) diff --git a/doc/sbuild.dox.cmake b/doc/sbuild.dox.cmake new file mode 100644 index 00000000..06d41d0d --- /dev/null +++ b/doc/sbuild.dox.cmake @@ -0,0 +1,1809 @@ +# Doxyfile 1.8.1.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = sbuild + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @GIT_RELEASE_VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = sbuild + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = @abs_top_srcdir@ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command <command> <input-file>, where <command> is the value of +# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = sbuild.log + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @PROJECT_SOURCE_DIR@/lib/sbuild \ + @PROJECT_SOURCE_DIR@/lib/sbuild/auth \ + @PROJECT_SOURCE_DIR@/lib/sbuild/chroot \ + @PROJECT_SOURCE_DIR@/lib/sbuild/chroot/facet + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.cc \ + *.tcc \ + *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = YES + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> +# Qt Help Project / Custom Filters</a>. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> +# Qt Help Project / Filter Attributes</a>. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = SBUILD_FEATURE_PAM \ + SBUILD_FEATURE_PERSONALITY \ + SBUILD_FEATURE_BLOCKDEV \ + SBUILD_FEATURE_BTRFSSNAP \ + SBUILD_FEATURE_LVMSNAP \ + SBUILD_FEATURE_LOOPBACK \ + SBUILD_FEATURE_UNION \ + HAVE_BOOST_FORMAT_HPP \ + HAVE_BOOST_PROGRAM_OPTIONS_HPP \ + HAVE_BOOST_SHARED_PTR_HPP \ + HAVE_BOOST_TUPLE_TUPLE_HPP \ + HAVE_TR1_MEMORY \ + HAVE_TR1_TUPLE + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = sbuild/sbuild.tag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/doc/schroot.dox.cmake b/doc/schroot.dox.cmake new file mode 100644 index 00000000..93b84dcb --- /dev/null +++ b/doc/schroot.dox.cmake @@ -0,0 +1,1800 @@ +# Doxyfile 1.8.1.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = schroot + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @GIT_RELEASE_VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = schroot + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command <command> <input-file>, where <command> is the value of +# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = schroot.log + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @PROJECT_SOURCE_DIR@/bin/dchroot \ + @PROJECT_SOURCE_DIR@/bin/dchroot-dsa \ + @PROJECT_SOURCE_DIR@/bin/schroot \ + @PROJECT_SOURCE_DIR@/lib/bin-common \ + @PROJECT_SOURCE_DIR@/lib/dchroot-common \ + @PROJECT_SOURCE_DIR@/lib/schroot-common \ + @PROJECT_SOURCE_DIR@/libexec/listmounts \ + @PROJECT_SOURCE_DIR@/libexec/mount \ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.cc \ + *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = YES + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> +# Qt Help Project / Custom Filters</a>. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> +# Qt Help Project / Filter Attributes</a>. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = "sbuild/sbuild.tag = @CMAKE_CURRENT_BUILD_DIR@/sbuild/html" + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = schroot/schroot.tag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = YES + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/etc/CMakeLists.txt b/etc/CMakeLists.txt new file mode 100644 index 00000000..7500271c --- /dev/null +++ b/etc/CMakeLists.txt @@ -0,0 +1,73 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(schroot_sysconf_data + schroot.conf) + +install(FILES ${schroot_sysconf_data} + DESTINATION ${SCHROOT_SYSCONF_DIR}) + +set(files + copyfiles + fstab + nssdatabases) + +set(profiles + buildd + default + desktop + minimal + sbuild) + +set(arches + ${SBUILD_PLATFORM}) + +foreach(profile ${profiles}) + foreach(file ${files}) + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/profiles/${profile}") + set(output_file "${CMAKE_CURRENT_BINARY_DIR}/profiles/${profile}/${file}") + foreach(arch ${arches}) + if(EXISTS ${output_file}) + file(REMOVE ${output_file}) + endif(EXISTS ${output_file}) + foreach(source_file + ${CMAKE_CURRENT_SOURCE_DIR}/profile-templates/all/all/${file} + ${CMAKE_CURRENT_SOURCE_DIR}/profile-templates/all/${arch}/${file} + ${CMAKE_CURRENT_SOURCE_DIR}/profile-templates/${profile}/all/${file} + ${CMAKE_CURRENT_SOURCE_DIR}/profile-templates/${profile}/${arch}/${file}) + if(EXISTS ${source_file}) + file(READ ${source_file} content) + if(EXISTS ${source_file}) + file(APPEND ${output_file} ${content}) + else(EXISTS ${source_file}) + file(WRITE ${output_file} ${content}) + endif(EXISTS ${source_file}) + endif(EXISTS ${source_file}) + endforeach(source_file) + if(EXISTS ${output_file}) + message(STATUS "Generated schroot profile ${profile}/${file}") + install(FILES ${output_file} + DESTINATION ${SCHROOT_SYSCONF_DIR}/${profile}) + endif(EXISTS ${output_file}) + endforeach(arch) + endforeach(file) +endforeach(profile) + +add_subdirectory(pam) +add_subdirectory(bash_completion) +add_subdirectory(setup.d) diff --git a/etc/bash_completion/CMakeLists.txt b/etc/bash_completion/CMakeLists.txt new file mode 100644 index 00000000..c12ecc54 --- /dev/null +++ b/etc/bash_completion/CMakeLists.txt @@ -0,0 +1,22 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(bash_completion_data schroot) + +install(FILES ${bash_completion_data} + DESTINATION ${bash_completion_dir}) diff --git a/etc/pam/CMakeLists.txt b/etc/pam/CMakeLists.txt new file mode 100644 index 00000000..43a26c7e --- /dev/null +++ b/etc/pam/CMakeLists.txt @@ -0,0 +1,23 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(pam_data schroot) +set(pam_dir "/etc/pam.d") + +install(FILES ${pam_data} + DESTINATION ${pam_dir}) diff --git a/etc/setup.d/CMakeLists.txt b/etc/setup.d/CMakeLists.txt new file mode 100644 index 00000000..3f19f32f --- /dev/null +++ b/etc/setup.d/CMakeLists.txt @@ -0,0 +1,47 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(setup_data + common-config + common-data + common-functions) + +set(setup_scripts + 00check + 05file + 05btrfs + 05lvm + 05union + 10mount + 15binfmt + 15killprocs + 20copyfiles + 20nssdatabases + 50chrootname + 70services) + +install(FILES ${setup_data} + DESTINATION ${SCHROOT_SETUP_DATA_DIR}) + +install(PROGRAMS ${setup_scripts} + DESTINATION ${SCHROOT_CONF_SETUP_D}) + +install(CODE " +message(STATUS \"Symlinking: \$ENV{DESTDIR}${SCHROOT_CONF_SETUP_D}/99check\") +execute_process(COMMAND ln -sf 00check \$ENV{DESTDIR}${SCHROOT_CONF_SETUP_D}/99check) +") diff --git a/lib/bin-common/CMakeLists.txt b/lib/bin-common/CMakeLists.txt new file mode 100644 index 00000000..307cb81a --- /dev/null +++ b/lib/bin-common/CMakeLists.txt @@ -0,0 +1,29 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(bin_common_sources + main.h + main.cc + option-action.h + option-action.cc + options.h + options.cc + run.h) + +add_library(bin-common STATIC ${bin_common_sources}) +target_link_libraries(bin-common ${Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE}) diff --git a/lib/bin-common/run.h b/lib/bin-common/run.h index f8e4413f..2bb97621 100644 --- a/lib/bin-common/run.h +++ b/lib/bin-common/run.h @@ -63,7 +63,7 @@ namespace bin_common std::cout.imbue(std::locale()); std::cerr.imbue(std::locale()); - bindtextdomain (SBUILD_MESSAGE_CATALOGUE, LOCALEDIR); + bindtextdomain (SBUILD_MESSAGE_CATALOGUE, SCHROOT_LOCALE_DIR); textdomain (SBUILD_MESSAGE_CATALOGUE); typename options_type::ptr opts(new options_type); diff --git a/lib/dchroot-common/CMakeLists.txt b/lib/dchroot-common/CMakeLists.txt new file mode 100644 index 00000000..3cac2a43 --- /dev/null +++ b/lib/dchroot-common/CMakeLists.txt @@ -0,0 +1,27 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(dchroot_common_sources + main.h + main.cc + session.h + session.cc) + +if (BUILD_LIBDCHROOT) + add_library(dchroot-common STATIC ${dchroot_common_sources}) +endif (BUILD_LIBDCHROOT) diff --git a/lib/sbuild/CMakeLists.txt b/lib/sbuild/CMakeLists.txt new file mode 100644 index 00000000..bb2dcc22 --- /dev/null +++ b/lib/sbuild/CMakeLists.txt @@ -0,0 +1,252 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sbuild.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/sbuild.pc @ONLY) + +set(public_generated_h_sources + config.h) + +if(BUILD_PAM) + set(public_auth_pam_h_sources + auth/pam-conv.h + auth/pam-conv-tty.h + auth/pam.h + auth/pam-message.h) + set(public_auth_pam_cc_sources + auth/pam-conv.cc + auth/pam-conv-tty.cc + auth/pam.cc + auth/pam-message.cc) +endif(BUILD_PAM) + +if(BUILD_PERSONALITY) + set(public_personality_facet_h_sources + chroot/facet/personality.h) + set(public_personality_facet_cc_sources + chroot/facet/personality.cc) + set(public_personality_h_sources + personality.h) + set(public_personality_cc_sources + personality.cc) +endif(BUILD_PERSONALITY) + +if(BUILD_BLOCKDEV) + set(public_blockdev_base_h_sources + chroot/facet/block-device-base.h) + set(public_blockdev_base_cc_sources + chroot/facet/block-device-base.cc) + set(public_blockdev_h_sources + chroot/facet/block-device.h) + set(public_blockdev_cc_sources + chroot/facet/block-device.cc) +endif(BUILD_BLOCKDEV) + +if(BUILD_LVMSNAP) + set(public_blockdev_base_h_sources + chroot/facet/block-device-base.h) + set(public_blockdev_base_cc_sources + chroot/facet/block-device-base.cc) + set(public_lvmsnap_h_sources + chroot/facet/lvm-snapshot.h) + set(public_lvmsnap_cc_sources + chroot/facet/lvm-snapshot.cc) +endif(BUILD_LVMSNAP) + +if(BUILD_BTRFSSNAP) + set(public_btrfssnap_h_sources + chroot/facet/btrfs-snapshot.h) + set(public_btrfssnap_cc_sources + chroot/facet/btrfs-snapshot.cc) +endif(BUILD_BTRFSSNAP) + +if(BUILD_LOOPBACK) + set(public_loopback_h_sources + chroot/facet/loopback.h) + set(public_loopback_cc_sources + chroot/facet/loopback.cc) +endif(BUILD_LOOPBACK) + +if(BUILD_UNION) + set(public_union_h_sources + chroot/facet/fsunion.h) + set(public_union_cc_sources + chroot/facet/fsunion.cc) +endif(BUILD_UNION) + +if(BUILD_UNSHARE) + set(public_unshare_h_sources + chroot/facet/unshare.h) + set(public_unshare_cc_sources + chroot/facet/unshare.cc) +endif(BUILD_UNSHARE) + +set(public_h_sources + ctty.h + custom-error.h + environment.h + error.h + error.tcc + fdstream.h + feature.h + format-detail.h + i18n.h + keyfile.h + keyfile-reader.h + keyfile-writer.h + lock.h + log.h + mntstream.h + nostream.h + parse-error.h + parse-value.h + regex.h + run-parts.h + session.h + types.h + util.h + ${public_personality_h_sources}) + +set(public_cc_sources + ctty.cc + environment.cc + feature.cc + format-detail.cc + keyfile.cc + keyfile-reader.cc + keyfile-writer.cc + lock.cc + log.cc + mntstream.cc + nostream.cc + parse-value.cc + run-parts.cc + session.cc + types.cc + util.cc + ${public_personality_cc_sources}) + +set(public_auth_h_sources + auth/auth.h + auth/deny.h + ${public_auth_pam_h_sources}) + +set(public_auth_cc_sources + auth/auth.cc + auth/deny.cc + ${public_auth_pam_cc_sources}) + +set(public_chroot_h_sources + chroot/chroot.h + chroot/config.h) + +set(public_chroot_cc_sources + chroot/chroot.cc + chroot/config.cc) + +set(public_chroot_facet_h_sources + chroot/facet/custom.h + chroot/facet/directory.h + chroot/facet/directory-base.h + chroot/facet/facet.h + chroot/facet/factory.h + chroot/facet/file.h + chroot/facet/mountable.h + chroot/facet/plain.h + chroot/facet/session.h + chroot/facet/session-clonable.h + chroot/facet/session-setup.h + chroot/facet/source.h + chroot/facet/source-clonable.h + chroot/facet/source-setup.h + chroot/facet/storage.h + chroot/facet/userdata.h + ${public_blockdev_base_h_sources} + ${public_blockdev_h_sources} + ${public_lvmsnap_h_sources} + ${public_btrfssnap_h_sources} + ${public_loopback_h_sources} + ${public_personality_facet_h_sources} + ${public_union_h_sources} + ${public_unshare_h_sources}) + +set(public_chroot_facet_cc_sources + chroot/facet/custom.cc + chroot/facet/directory.cc + chroot/facet/directory-base.cc + chroot/facet/facet.cc + chroot/facet/factory.cc + chroot/facet/file.cc + chroot/facet/mountable.cc + chroot/facet/plain.cc + chroot/facet/session.cc + chroot/facet/session-clonable.cc + chroot/facet/session-setup.cc + chroot/facet/source.cc + chroot/facet/source-clonable.cc + chroot/facet/source-setup.cc + chroot/facet/storage.cc + chroot/facet/userdata.cc + ${public_blockdev_base_cc_sources} + ${public_blockdev_cc_sources} + ${public_lvmsnap_cc_sources} + ${public_btrfssnap_cc_sources} + ${public_loopback_cc_sources} + ${public_personality_facet_cc_sources} + ${public_union_cc_sources} + ${public_unshare_cc_sources}) + +add_library(sbuild SHARED + ${public_h_sources} + ${public_cc_sources} + ${public_auth_h_sources} + ${public_auth_cc_sources} + ${public_chroot_h_sources} + ${public_chroot_cc_sources} + ${public_chroot_facet_h_sources} + ${public_chroot_facet_cc_sources}) +target_link_libraries(sbuild + ${CMAKE_THREAD_LIBS_INIT} + ${PAM_LIBRARY} + ${REGEX_LIBRARY} + ${Boost_IOSTREAMS_LIBRARY_RELEASE} + ${Boost_FILESYSTEM_LIBRARY_RELEASE} + ${Boost_SYSTEM_LIBRARY_RELEASE}) +set_target_properties(sbuild PROPERTIES VERSION ${GIT_RELEASE_VERSION}) + +set(pkgincludedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}/sbuild") +set(pkgincludeauthdir "${CMAKE_INSTALL_FULL_INCLUDEDIR}/sbuild/auth") +set(pkgincludechrootdir "${CMAKE_INSTALL_FULL_INCLUDEDIR}/sbuild/chroot") +set(pkgincludechrootfacetdir "${CMAKE_INSTALL_FULL_INCLUDEDIR}/sbuild/chroot/facet") +set(pkgconfigdatadir "${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig") + +install(FILES ${public_h_sources} + DESTINATION ${pkgincludedir}) +install(FILES ${public_auth_h_sources} + DESTINATION ${pkgincludeauthdir}) +install(FILES ${public_chroot_h_sources} + DESTINATION ${pkgincludechrootdir}) +install(FILES ${public_chroot_facet_h_sources} + DESTINATION ${pkgincludechrootfacetdir}) + +install(TARGETS sbuild LIBRARY + DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) + +set(pkgconfig_files "${CMAKE_CURRENT_BINARY_DIR}/sbuild.pc") +install(FILES ${pkgconfig_files} + DESTINATION ${pkgconfigdatadir}) diff --git a/lib/sbuild/config.h.cmake b/lib/sbuild/config.h.cmake new file mode 100644 index 00000000..9590cb1f --- /dev/null +++ b/lib/sbuild/config.h.cmake @@ -0,0 +1,96 @@ +/* Copyright © 2005-2013 Roger Leigh <rleigh@debian.org> + * + * + * schroot is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * schroot is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + * <http://www.gnu.org/licenses/>. + * + *********************************************************************/ + +#ifndef SBUILD_CONFIG_H +#define SBUILD_CONFIG_H + +/* This header contains configuration macros which determine the + correct library to use. This depends upon the libraries found at + configure time. */ + +/* Set if NLS support is available */ +#cmakedefine SBUILD_FEATURE_NLS 1 + +/* Set if PAM support is available */ +#cmakedefine SBUILD_FEATURE_PAM 1 + +/* Set if personality support is present */ +#cmakedefine SBUILD_FEATURE_PERSONALITY 1 + +/* Set if the block-device chroot type is present */ +#cmakedefine SBUILD_FEATURE_BLOCKDEV 1 + +/* Set if the btrfs-snapshot chroot type is present */ +#cmakedefine SBUILD_FEATURE_BTRFSSNAP 1 + +/* Set if the lvm-snapshot chroot type is present */ +#cmakedefine SBUILD_FEATURE_LVMSNAP 1 + +/* Set if the loopback chroot type is present */ +#cmakedefine SBUILD_FEATURE_LOOPBACK 1 + +/* Set if the union filesystem type is present */ +#cmakedefine SBUILD_FEATURE_UNION 1 + +/* Define to 1 if you have the <boost/format.hpp> header file. */ +#cmakedefine HAVE_BOOST_FORMAT_HPP 1 + +/* Define to 1 if you have the <boost/program_options.hpp> header file. */ +#cmakedefine HAVE_BOOST_PROGRAM_OPTIONS_HPP 1 + +/* Define to 1 if you have the <memory> header file. */ +#cmakedefine HAVE_MEMORY 1 + +/* Define to 1 if you have the <tuple> header file. */ +#cmakedefine HAVE_TUPLE 1 + +/* Define to 1 if you have the <regex> header file and std::regex. */ +#cmakedefine HAVE_REGEX_REGEX 1 + +/* Default regular expression used to filter user environment */ +#cmakedefine SBUILD_DEFAULT_ENVIRONMENT_FILTER "${SBUILD_DEFAULT_ENVIRONMENT_FILTER}" + +/* Filesystem locations */ +#cmakedefine SCHROOT_LIBEXEC_DIR "${SCHROOT_LIBEXEC_DIR}" +#cmakedefine SCHROOT_MOUNT_DIR "${SCHROOT_MOUNT_DIR}" +#cmakedefine SCHROOT_SESSION_DIR "${SCHROOT_SESSION_DIR}" +#cmakedefine SCHROOT_FILE_UNPACK_DIR "${SCHROOT_FILE_UNPACK_DIR}" +#cmakedefine SCHROOT_OVERLAY_DIR "${SCHROOT_OVERLAY_DIR}" +#cmakedefine SCHROOT_UNDERLAY_DIR "${SCHROOT_UNDERLAY_DIR}" +#cmakedefine SCHROOT_SYSCONF_DIR "${SCHROOT_SYSCONF_DIR}" +#cmakedefine SCHROOT_CONF "${SCHROOT_CONF}" +#cmakedefine SCHROOT_CONF_CHROOT_D "${SCHROOT_CONF_CHROOT_D}" +#cmakedefine SCHROOT_CONF_SETUP_D "${SCHROOT_CONF_SETUP_D}" +#cmakedefine SCHROOT_SETUP_DATA_DIR "${SCHROOT_SETUP_DATA_DIR}" +#cmakedefine SCHROOT_LOCALE_DIR "${SCHROOT_LOCALE_DIR}" +// TODO: Remove when autotools are removed and sources updated. +#define PACKAGE_LOCALE_DIR SCHROOT_LOCALE_DIR +#cmakedefine SCHROOT_DATA_DIR "${SCHROOT_DATA_DIR}" +#cmakedefine SCHROOT_MODULE_DIR "${SCHROOT_MODULE_DIR}" + +/* Translation catalogue name */ +#define SBUILD_MESSAGE_CATALOGUE "schroot" + +#endif /* SBUILD_H */ + +/* + * Local Variables: + * mode:C++ + * End: + */ diff --git a/lib/sbuild/config.h.in b/lib/sbuild/config.h.in index 21a1efe6..d4fdbe70 100644 --- a/lib/sbuild/config.h.in +++ b/lib/sbuild/config.h.in @@ -24,6 +24,9 @@ correct library to use. This depends upon the libraries found at configure time. */ +/* Set if NLS support is available */ +#undef SBUILD_FEATURE_NLS + /* Set if PAM support is available */ #undef SBUILD_FEATURE_PAM @@ -54,12 +57,6 @@ /* Define to 1 if you have the <memory> header file. */ #undef HAVE_MEMORY -/* Define to 1 if you have the <tr1/memory> header file. */ -#undef HAVE_TR1_MEMORY - -/* Define to 1 if you have the <tr1/tuple> header file. */ -#undef HAVE_TR1_TUPLE - /* Define to 1 if you have the <tuple> header file. */ #undef HAVE_TUPLE diff --git a/lib/sbuild/i18n.h b/lib/sbuild/i18n.h index a9fa9894..c773542a 100644 --- a/lib/sbuild/i18n.h +++ b/lib/sbuild/i18n.h @@ -28,7 +28,9 @@ #include <string> -#include <libintl.h> +#ifdef SBUILD_FEATURE_NLS +# include <libintl.h> +#endif // SBUILD_FEATURE_NLS // Undefine macros which would interfere with our functions. #ifdef gettext @@ -55,7 +57,11 @@ namespace sbuild inline const char * gettext (const char *message) { +#ifdef SBUILD_FEATURE_NLS return dgettext (SBUILD_MESSAGE_CATALOGUE, message); +#else + return message; +#endif // SBUILD_FEATURE_NLS } /** diff --git a/lib/sbuild/sbuild.pc.cmake b/lib/sbuild/sbuild.pc.cmake new file mode 100644 index 00000000..5d8da6f9 --- /dev/null +++ b/lib/sbuild/sbuild.pc.cmake @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: Sbuild +Description: Debian Source Builder +Version: ${GIT_RELEASE_VERSION} +Libs: -L${libdir} -lsbuild +Cflags: -I${includedir} diff --git a/lib/sbuild/session.cc b/lib/sbuild/session.cc index 93c1b1ee..b4875b00 100644 --- a/lib/sbuild/session.cc +++ b/lib/sbuild/session.cc @@ -1171,11 +1171,21 @@ namespace sbuild env.add("DATA_DIR", SCHROOT_DATA_DIR); env.add("SETUP_DATA_DIR", SCHROOT_SETUP_DATA_DIR); env.add("PID", getpid()); +#ifdef SBUILD_HOST env.add("HOST", SBUILD_HOST); +#endif // SBUILD_HOST +#ifdef SBUILD_HOST_OS env.add("HOST_OS", SBUILD_HOST_OS); +#endif // SBUILD_HOST_OS +#ifdef SBUILD_HOST_VENDOR env.add("HOST_VENDOR", SBUILD_HOST_VENDOR); +#endif // SBUILD_HOST_VENDOR +#ifdef SBUILD_HOST_CPU env.add("HOST_CPU", SBUILD_HOST_CPU); +#endif // SBUILD_HOST_CPU +#ifdef SBUILD_PLATFORM env.add("PLATFORM", SBUILD_PLATFORM); +#endif // SBUILD_PLATFORM env.add("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"); diff --git a/lib/schroot-common/CMakeLists.txt b/lib/schroot-common/CMakeLists.txt new file mode 100644 index 00000000..9419de3a --- /dev/null +++ b/lib/schroot-common/CMakeLists.txt @@ -0,0 +1,26 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(schroot_common_sources + options.h + options.cc + main.h + main.cc) + +add_library(schroot-common STATIC ${schroot_common_sources}) +target_link_libraries(schroot-common bin-common) diff --git a/lib/test/CMakeLists.txt b/lib/test/CMakeLists.txt new file mode 100644 index 00000000..b8a5c17a --- /dev/null +++ b/lib/test/CMakeLists.txt @@ -0,0 +1,25 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(test_sources + testmain.cc) + +if (BUILD_TESTS) + add_library(testmain STATIC ${test_sources}) + target_link_libraries(testmain sbuild ${GTEST_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) +endif (BUILD_TESTS) diff --git a/libexec/listmounts/CMakeLists.txt b/libexec/listmounts/CMakeLists.txt new file mode 100644 index 00000000..53d2e497 --- /dev/null +++ b/libexec/listmounts/CMakeLists.txt @@ -0,0 +1,30 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(listmounts_sources + main.h + main.cc + options.h + options.cc + listmounts.cc) + +add_executable(listmounts ${listmounts_sources}) +target_link_libraries(listmounts sbuild bin-common) + +install(TARGETS listmounts RUNTIME + DESTINATION ${SCHROOT_LIBEXEC_DIR}) diff --git a/libexec/mount/CMakeLists.txt b/libexec/mount/CMakeLists.txt new file mode 100644 index 00000000..a670ea47 --- /dev/null +++ b/libexec/mount/CMakeLists.txt @@ -0,0 +1,32 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +set(mount_sources + main.h + main.cc + options.h + options.cc + mount.cc) + +add_executable(mount ${mount_sources}) +target_link_libraries(mount sbuild bin-common + ${Boost_FILESYSTEM_LIBRARY_RELEASE} + ${Boost_SYSTEM_LIBRARY_RELEASE}) + +install(TARGETS mount RUNTIME + DESTINATION ${SCHROOT_LIBEXEC_DIR}) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt new file mode 100644 index 00000000..cf6d3635 --- /dev/null +++ b/man/CMakeLists.txt @@ -0,0 +1,217 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +find_program(PO4A_EXECUTABLE po4a) +find_program(GROFFER_EXECUTABLE groffer) +find_program(SOELIM_EXECUTABLE soelim) + +# generate config.man +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.man.cmake + ${CMAKE_CURRENT_BINARY_DIR}/config.man) + +set(common_dependencies + ${CMAKE_CURRENT_BINARY_DIR}/config.man + authors.man + copyright.man) + +set(manpage_sources + dchroot.1.man + dchroot-dsa.1.man + schroot.1.man + schroot-setup.5.man + schroot.conf.5.man + schroot-script-config.5.man + schroot-faq.7.man) + +# Translated manual pages + +file(READ po/LINGUAS languages) +STRING(REGEX REPLACE "\n" ";" languages "${languages}") +foreach(lang ${languages}) + if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/po/${lang}.po") + set(po_sources ${po_sources} "${CMAKE_CURRENT_SOURCE_DIR}/po/${lang}.po") + endif (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/po/${lang}.po") +endforeach(lang) + +set(po4a_command + ${PO4A_EXECUTABLE} --package-name ${CMAKE_PROJECT_NAME} + --package-version ${GIT_RELEASE_VERSION} + --copyright-holder "Roger Leigh <rleigh@debian.org>" + "--srcdir=${CMAKE_CURRENT_SOURCE_DIR}" + "--destdir=${CMAKE_CURRENT_BINARY_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/po4a.cfg") + +if(PO4A_EXECUTABLE) + # We need to run po4a initially to see what it generates, prior to + # generating the rule to autogenerate from source. + execute_process(COMMAND ${po4a_command}) + + file(GLOB translated_dirs RELATIVE + ${CMAKE_CURRENT_BINARY_DIR}/translated + ${CMAKE_CURRENT_BINARY_DIR}/translated/*) + foreach(lang ${translated_dirs}) + if(IS_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/translated/${lang}") + set(languages {languages} ${lang}) + file(GLOB translated_files + ${CMAKE_CURRENT_BINARY_DIR}/translated/${lang}/*.man) + set(translated_manpage_sources + ${translated_manpage_sources} + ${translated_files}) + endif(IS_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/translated/${lang}") + endforeach(lang) + + add_custom_command(OUTPUT ${translated_manpage_sources} + COMMAND ${po4a_command} + DEPENDS ${common_dependencies} ${manpage_sources} + ${po_sources} + "${CMAKE_CURRENT_SOURCE_DIR}/po4a.cfg" + VERBATIM) +else(PO4A_EXECUTABLE) + warn("po4a not available; not translating manual pages") +endif(PO4A_EXECUTABLE) + +set(manpage_sources + ${manpage_sources} + ${translated_manpage_sources}) + +add_custom_target(manpage-sources ALL DEPENDS ${manpage_sources}) +if(GIT_RELEASE_ENABLE) + add_dependencies(git-release manpage-sources) +endif(GIT_RELEASE_ENABLE) + +foreach(manpage_source ${manpage_sources}) + unset(lang) + unset(pagename) + unset(setion) + string(REGEX MATCH ".*/translated/([^/]+)/(.+)\\.([0-9])\\.man\$" is_translation ${manpage_source}) + if(is_translation) + string(REGEX REPLACE ".*/translated/([^/]+)/(.+)\\.([0-9])\\.man\$" "\\1;\\2;\\3" translation_matches ${manpage_source}) + list(GET translation_matches 0 lang) + list(GET translation_matches 1 pagename) + list(GET translation_matches 2 section) + set(manpage_source_file ${manpage_source}) + else(is_translation) + string(REGEX MATCH "^(.+)\\.([0-9])\\.man\$" is_manpage ${manpage_source}) + if (is_manpage) + string(REGEX REPLACE "^(.+)\\.([0-9])\\.man\$" "\\1;\\2" manpage_matches ${manpage_source}) + unset(lang) + list(GET manpage_matches 0 pagename) + list(GET manpage_matches 1 section) + set(manpage_source_file "${CMAKE_CURRENT_SOURCE_DIR}/${manpage_source}") + endif (is_manpage) + endif(is_translation) + + if(pagename AND NOT BUILD_DCHROOT) + string(REGEX MATCH "^dchroot\$" dchroot_match ${pagename}) + if (dchroot_match) + unset(pagename) + endif (dchroot_match) + endif(pagename AND NOT BUILD_DCHROOT) + if(pagename AND NOT BUILD_DCHROOT_DSA) + string(REGEX MATCH "^dchroot-dsa\$" dchroot_dsa_match ${pagename}) + if (dchroot_dsa_match) + unset(pagename) + endif (dchroot_dsa_match) + endif(pagename AND NOT BUILD_DCHROOT_DSA) + + if(pagename) + # Filter out manpages which should not be built or installed. We + # have to do this here due to the translated manpage sources being + # created whether we want all of them or not. + + set(manpage_includes + -I${CMAKE_CURRENT_BINARY_DIR} + -I${CMAKE_CURRENT_SOURCE_DIR}) + if (lang) + set(manpage "${CMAKE_CURRENT_BINARY_DIR}/translated/${lang}/${pagename}.${section}") + set(manpage_path "${lang}/man${section}") + set(manpage_includes + -I${CMAKE_CURRENT_BINARY_DIR}/translated/${lang} + ${manpage_includes}) + else (lang) + set(lang "en") + set(manpage "${CMAKE_CURRENT_BINARY_DIR}/${pagename}.${section}") + set(manpage_path "man${section}") + endif (lang) + + add_custom_command(OUTPUT ${manpage} + COMMAND ${SOELIM_EXECUTABLE} + ${manpage_includes} + < "${manpage_source_file}" + > "${manpage}" + DEPENDS "${manpage_source_file}" + ${common_dependencies} + VERBATIM) + install(FILES "${manpage}" + DESTINATION "${CMAKE_INSTALL_FULL_MANDIR}/${manpage_path}") + + set(manpages ${manpages} ${manpage}) + set(schroot-${lang} ${schroot-${lang}} ${manpage}) + list(FIND combined "schroot-${lang}" combined_exists) + if (combined_exists EQUAL -1) + set(combined ${combined} "schroot-${lang}") + endif(combined_exists EQUAL -1) + endif(pagename) +endforeach(manpage_source) + +add_custom_target(manpages ALL DEPENDS ${manpages}) + +if(GROFFER_EXECUTABLE) + foreach(manpage ${manpages}) + set(manpages_ps ${manpages_ps} "${manpage}.ps") + add_custom_command(OUTPUT "${manpage}.ps" + COMMAND ${GROFFER_EXECUTABLE} -K utf8 --ps -man --to-stdout "${manpage}" > "${manpage}.ps" + DEPENDS "${manpage}" ${common_dependencies} + VERBATIM) + + set(manpages_pdf ${manpages_pdf} "${manpage}.pdf") + add_custom_command(OUTPUT "${manpage}.pdf" + COMMAND ${GROFFER_EXECUTABLE} -K utf8 --pdf -man --to-stdout "${manpage}" > "${manpage}.pdf" + DEPENDS "${manpage}" ${common_dependencies} + VERBATIM) + endforeach(manpage) + + add_custom_target(manpages-ps DEPENDS ${manpages_ps}) + add_custom_target(manpages-pdf DEPENDS ${manpages_pdf}) + + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/combined) + foreach(combined_lang ${combined}) + list(SORT ${combined_lang}) + + add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/combined/${combined_lang}.ps" + COMMAND ${GROFFER_EXECUTABLE} -K UTF8 -T ps -man --to-stdout ${${combined_lang}} > "${CMAKE_CURRENT_BINARY_DIR}/combined/${combined_lang}.ps" + DEPENDS ${${combined_lang}} + VERBATIM) + set(combined_ps ${combined_ps} "${CMAKE_CURRENT_BINARY_DIR}/combined/${combined_lang}.ps") + + add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/combined/${combined_lang}.pdf" + COMMAND ${GROFFER_EXECUTABLE} -K UTF8 -T pdf -man --to-stdout ${${combined_lang}} > "${CMAKE_CURRENT_BINARY_DIR}/combined/${combined_lang}.pdf" + DEPENDS ${${combined_lang}} + VERBATIM) + set(combined_pdf ${combined_pdf} "${CMAKE_CURRENT_BINARY_DIR}/combined/${combined_lang}.pdf") + + endforeach(combined_lang) + + add_custom_target(manpages-combined-ps DEPENDS ${combined_ps}) + add_custom_target(manpages-combined-pdf DEPENDS ${combined_pdf}) + + add_custom_target(man-po-notify + COMMAND ${po4a_command} + COMMAND podebconf-report-po --call --withtranslators --noforce --podir=${CMAKE_CURRENT_SOURCE_DIR}/po) + +endif(GROFFER_EXECUTABLE) diff --git a/man/Makefile.am b/man/Makefile.am index 81a0d258..c09327f2 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -128,7 +128,7 @@ man/config.man: Makefile echo -e "$(CONFIG)" | sed -e 's/^[ ]//' > $@ man-update-po: - if [ -n "$(PO4A)" ]; then $(PO4A) --package-name $(PACKAGE) --package-version $(VERSION) --copyright-holder "Roger Leigh <rleigh@debian.org>" "--srcdir=$(srcdir)" "--destdir=$(builddir)" "$(srcdir)/man/po4a.cfg"; fi + if [ -n "$(PO4A)" ]; then cd man && $(PO4A) --package-name $(PACKAGE) --package-version $(VERSION) --copyright-holder "Roger Leigh <rleigh@debian.org>" "--srcdir=$(abs_top_srcdir)/man" "--destdir=$(abs_top_builddir)/man" "$(abs_top_srcdir)/man/po4a.cfg"; fi dist-hook:: man-update-po diff --git a/man/config.man.cmake b/man/config.man.cmake new file mode 100644 index 00000000..0005054a --- /dev/null +++ b/man/config.man.cmake @@ -0,0 +1,17 @@ +.ds RELEASE_DATE ${RELEASE_DATE_SHORT} +.ds VERSION ${GIT_RELEASE_VERSION} +.ds SCHROOT_LIBEXEC_DIR ${SCHROOT_LIBEXEC_DIR} +.ds SCHROOT_MOUNT_DIR ${SCHROOT_MOUNT_DIR} +.ds SCHROOT_SESSION_DIR ${SCHROOT_SESSION_DIR} +.ds SCHROOT_FILE_UNPACK_DIR ${SCHROOT_FILE_UNPACK_DIR} +.ds SCHROOT_OVERLAY_DIR ${SCHROOT_OVERLAY_DIR} +.ds SCHROOT_UNDERLAY_DIR ${SCHROOT_UNDERLAY_DIR} +.ds SCHROOT_SYSCONF_DIR ${SCHROOT_SYSCONF_DIR} +.ds SCHROOT_CONF ${SCHROOT_CONF} +.ds SCHROOT_CONF_CHROOT_D ${SCHROOT_CONF_CHROOT_D} +.ds SCHROOT_CONF_SETUP_D ${SCHROOT_CONF_SETUP_D} +.ds SCHROOT_DATA_DIR ${SCHROOT_DATA_DIR} +.ds SCHROOT_SETUP_DATA_DIR ${SCHROOT_SETUP_DATA_DIR} +.ds SCHROOT_LOCALE_DIR ${SCHROOT_LOCALE_DIR} +.ds PACKAGE_LOCALE_DIR ${SCHROOT_LOCALE_DIR} +.ds PROGRAM schroot diff --git a/man/po4a.cfg b/man/po4a.cfg index 7ff534e9..b5a5aba4 100644 --- a/man/po4a.cfg +++ b/man/po4a.cfg @@ -1,22 +1,22 @@ -[po_directory] man/po/ +[po_directory] po/ [po4a_alias:man] man opt:"-M UTF-8 -L UTF-8" -[type: man] man/authors.man $lang:man/translated/$lang/authors.man -[type: man] man/copyright.man $lang:man/translated/$lang/copyright.man -[type: man] man/schroot.1.man $lang:man/translated/$lang/schroot.1.man \ +[type: man] authors.man $lang:translated/$lang/authors.man +[type: man] copyright.man $lang:translated/$lang/copyright.man +[type: man] schroot.1.man $lang:translated/$lang/schroot.1.man \ add_$lang:?add/$lang.add -[type: man] man/schroot-setup.5.man $lang:man/translated/$lang/schroot-setup.5.man \ +[type: man] schroot-setup.5.man $lang:translated/$lang/schroot-setup.5.man \ add_$lang:?add/$lang.add -[type: man] man/schroot.conf.5.man $lang:man/translated/$lang/schroot.conf.5.man \ +[type: man] schroot.conf.5.man $lang:translated/$lang/schroot.conf.5.man \ add_$lang:?add/$lang.add -[type: man] man/schroot-script-config.5.man $lang:man/translated/$lang/schroot-script-config.5.man \ +[type: man] schroot-script-config.5.man $lang:translated/$lang/schroot-script-config.5.man \ add_$lang:?add/$lang.add -[type: man] man/schroot-faq.7.man $lang:man/translated/$lang/schroot-faq.7.man \ +[type: man] schroot-faq.7.man $lang:translated/$lang/schroot-faq.7.man \ add_$lang:?add/$lang.add -[type: man] man/dchroot.1.man $lang:man/translated/$lang/dchroot.1.man \ - add_$lang:?add/$lang.add -[type: man] man/dchroot-dsa.1.man $lang:man/translated/$lang/dchroot-dsa.1.man \ - add_$lang:?add/$lang.add +[type: man] dchroot.1.man $lang:translated/$lang/dchroot.1.man \ + add_$lang:?add/$lang.add +[type: man] dchroot-dsa.1.man $lang:translated/$lang/dchroot-dsa.1.man \ + add_$lang:?add/$lang.add diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 00000000..fb42a9c4 --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,93 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +if(BUILD_NLS) + + set(domain schroot) + set(xgettext_options --keyword=_ --keyword=N_ --from-code=UTF-8 + --boost --no-location) + set(copyright_holder "Roger Leigh <rleigh@debian.org>") + set(bug_address "Roger Leigh <rleigh@debian.org>") + + file(READ LINGUAS languages) + STRING(REGEX REPLACE "\n" ";" languages "${languages}") + foreach(lang ${languages}) + set(po_files ${po_files} "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.po") + set(gmo_files ${gmo_files} "${lang}.gmo") + install(FILES "${lang}.gmo" + DESTINATION "${SCHROOT_LOCALE_DIR}/${lang}/LC_MESSAGES" + RENAME "${domain}.mo") + endforeach(lang) + + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/POTFILES.in potfiles) + STRING(REGEX REPLACE "\n" ";" potfiles "${potfiles}") + file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/POTFILES) + foreach(file ${potfiles}) + set(translated_files ${translated_files} "${PROJECT_SOURCE_DIR}/${file}") + endforeach(file ${potfiles}) + + foreach(file ${translated_files}) + if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/POTFILES) + file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/POTFILES "${file}\n") + else(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/POTFILES) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/POTFILES "${file}\n") + endif(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/POTFILES) + endforeach(file ${translated_files}) + + # xgettext creates schroot.pot + add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${domain}.pot" + COMMAND xgettext --default-domain=${domain} --add-comments=TRANSLATORS: + ${xgettext_options} --files-from "${CMAKE_CURRENT_BINARY_DIR}/POTFILES" + --copyright-holder=${copyright_holder} + --msgid-bugs-address=${bug_address} + -d "${domain}" -p "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND ${CMAKE_COMMAND} -E rename "${CMAKE_CURRENT_SOURCE_DIR}/${domain}.po" "${CMAKE_CURRENT_SOURCE_DIR}/${domain}.pot" + DEPENDS ${translated_files} + VERBATIM) + + # msgmerge --update + foreach(pofile ${po_files}) + add_custom_command(OUTPUT "${pofile}" + COMMAND msgmerge --update "${pofile}" + "${CMAKE_CURRENT_SOURCE_DIR}/${domain}.pot" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${domain}.pot" + VERBATIM) + endforeach(pofile) + + # msgfmt + foreach(lang ${languages}) + add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${lang}.gmo" + COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_CURRENT_BINARY_DIR}/${lang}.gmo" + COMMAND msgfmt -c --statistics -o "${CMAKE_CURRENT_BINARY_DIR}/${lang}.gmo" + "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.po" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.po" + VERBATIM) + endforeach(lang) + + add_custom_target(update-pot DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${domain}.pot") + add_custom_target(update-po DEPENDS ${po_files}) +if(GIT_RELEASE_ENABLE) + add_dependencies(git-release update-pot update-po) +endif(GIT_RELEASE_ENABLE) + + add_custom_target(update-gmo DEPENDS ${gmo_files}) + + add_custom_target(po-notify + COMMAND podebconf-report-po --call --withtranslators --noforce --podir=${CMAKE_CURRENT_SOURCE_DIR}) + +endif(BUILD_NLS) diff --git a/po/schroot.pot b/po/schroot.pot index 2102d288..dad90ae6 100644 --- a/po/schroot.pot +++ b/po/schroot.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: Roger Leigh <rleigh@debian.org>\n" -"POT-Creation-Date: 2013-05-05 00:58+0100\n" +"POT-Creation-Date: 2013-09-23 16:31+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/scripts/global.mk b/scripts/global.mk index 47c2d22f..8159ea6d 100644 --- a/scripts/global.mk +++ b/scripts/global.mk @@ -51,4 +51,5 @@ DEFS = -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \ -DSCHROOT_DATA_DIR=\"$(schroot_datadir)\" \ -DSCHROOT_MODULE_DIR=\"$(schroot_moduledir)\" \ --DLOCALEDIR=\"$(localedir)\" +-DLOCALEDIR=\"$(localedir)\" \ +-DSCHROOT_LOCALE_DIR=\"$(localedir)\" diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 00000000..9a1c324c --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,144 @@ +# Copyright © 2004-2013 Roger Leigh <rleigh@debian.org> +# +# schroot is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# schroot is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. +# +##################################################################### + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/sbuild) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/sbuild/chroot) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin-common) + +set(srcdir ${PROJECT_SOURCE_DIR}) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup-test-data + ${CMAKE_CURRENT_BINARY_DIR}/setup-test-data) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cleanup-test-data + ${CMAKE_CURRENT_BINARY_DIR}/cleanup-test-data) + +if(BUILD_BLOCKDEV) + set(sbuild_chroot_blockdev_sources + sbuild/chroot/block-device.cc) +endif(BUILD_BLOCKDEV) + +if(BUILD_LOOPBACK) + set(sbuild_chroot_loopback_sources + sbuild/chroot/loopback.cc) +endif(BUILD_LOOPBACK) + +if(BUILD_LVMSNAP) + set(sbuild_chroot_lvmsnap_sources + sbuild/chroot/lvm-snapshot.cc) +endif(BUILD_LVMSNAP) + +if(BUILD_BTRFSSNAP) + set(sbuild_chroot_btrfssnap_sources + sbuild/chroot/btrfs-snapshot.cc) +endif(BUILD_BTRFSSNAP) + +if(BUILD_PERSONALITY) + set(sbuild_personality_sources + sbuild/personality.cc) +endif(BUILD_PERSONALITY) + +set(sbuild_chroot_chroot_sources + sbuild/chroot/chroot.h + sbuild/chroot/chroot.cc + sbuild/chroot/plain.cc + sbuild/chroot/custom.cc + sbuild/chroot/file.cc + sbuild/chroot/directory.cc + ${sbuild_chroot_blockdev_sources} + ${sbuild_chroot_lvmsnap_sources} + ${sbuild_chroot_btrfssnap_sources} + ${sbuild_chroot_loopback_sources} + sbuild/chroot/facet/userdata.cc) + +if (BUILD_TESTS) + add_test(NAME setup-test-data + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/setup-test-data) +endif (BUILD_TESTS) + +if (BUILD_TESTS) + add_executable(sbuild/chroot/chroot ${sbuild_chroot_chroot_sources}) + target_link_libraries(sbuild/chroot/chroot sbuild testmain) + add_test(sbuild/chroot/chroot sbuild/chroot/chroot) +endif (BUILD_TESTS) + +set(sbuild_chroot_config_sources + sbuild/chroot/config.cc) + +if (BUILD_TESTS) + add_executable(sbuild/chroot/config ${sbuild_chroot_config_sources}) + target_link_libraries(sbuild/chroot/config sbuild testmain) + add_test(sbuild/chroot/config sbuild/chroot/config) +endif (BUILD_TESTS) + +set(sbuild_standard_sources + sbuild/environment.cc + sbuild/log.cc + sbuild/nostream.cc + sbuild/parse-value.cc + ${sbuild_personality_sources} + sbuild/regex.cc + sbuild/util.cc) + +if (BUILD_TESTS) + add_executable(sbuild/standard ${sbuild_standard_sources}) + target_link_libraries(sbuild/standard sbuild testmain) + add_test(sbuild/standard sbuild/standard) +endif (BUILD_TESTS) + +set(sbuild_keyfile_sources + sbuild/keyfile.cc) + +if (BUILD_TESTS) + add_executable(sbuild/keyfile ${sbuild_keyfile_sources}) + target_link_libraries(sbuild/keyfile sbuild testmain) + add_test(sbuild/keyfile sbuild/keyfile) +endif (BUILD_TESTS) + +set(sbuild_lock_sources + sbuild/lock.cc) + +if (BUILD_TESTS) + add_executable(sbuild/lock ${sbuild_lock_sources}) + target_link_libraries(sbuild/lock sbuild testmain) + # lock is excluded, because it is timing dependent and can fail + # randomly on slow or heavily-loaded systems. +endif (BUILD_TESTS) + +set(sbuild_run_parts_sources + sbuild/run-parts.cc) + +if (BUILD_TESTS) + add_executable(sbuild/run-parts ${sbuild_run_parts_sources}) + target_link_libraries(sbuild/run-parts sbuild testmain) + add_test(sbuild/run-parts sbuild/run-parts) +endif (BUILD_TESTS) + +set(bin_common_option_action_sources + bin-common/option-action.cc) + +if (BUILD_TESTS) + add_executable(bin-common/option-action ${bin_common_option_action_sources}) + target_link_libraries(bin-common/option-action bin-common testmain) + add_test(bin-common/option-action bin-common/option-action) +endif (BUILD_TESTS) + +if (BUILD_TESTS) + add_test(NAME cleanup-test-data + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/cleanup-test-data) +endif (BUILD_TESTS) diff --git a/test/sbuild/chroot/config.cc b/test/sbuild/chroot/config.cc index b58bd323..68538d47 100644 --- a/test/sbuild/chroot/config.cc +++ b/test/sbuild/chroot/config.cc @@ -25,6 +25,8 @@ #include <sstream> #include <vector> +#include <config.h> + class ChrootConfig : public ::testing::Test { public: diff --git a/test/sbuild/keyfile.cc b/test/sbuild/keyfile.cc index e820e61f..757ae8b0 100644 --- a/test/sbuild/keyfile.cc +++ b/test/sbuild/keyfile.cc @@ -26,6 +26,8 @@ #include <sstream> #include <vector> +#include <config.h> + class Keyfile : public ::testing::Test { protected: diff --git a/test/sbuild/lock.cc b/test/sbuild/lock.cc index 3078796e..9e2644d2 100644 --- a/test/sbuild/lock.cc +++ b/test/sbuild/lock.cc @@ -26,6 +26,8 @@ #include <sys/wait.h> #include <unistd.h> +#include <config.h> + class FileLockParameters { public: diff --git a/test/sbuild/run-parts.cc b/test/sbuild/run-parts.cc index 397977bc..5ebb2618 100644 --- a/test/sbuild/run-parts.cc +++ b/test/sbuild/run-parts.cc @@ -27,6 +27,8 @@ #include <boost/filesystem/operations.hpp> +#include <config.h> + class RunParts : public ::testing::Test { public: |