/* * Copyright (c) 2003-2015, John Wiegley. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of New Artisans LLC nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @addtogroup util * * @file system.hh * @author John Wiegley * * @brief All system headers needed by Ledger. * * These are collected here so that a pre-compiled header can be made. * None of these header files (with the exception of acconf.h, when * configure is re-run) are expected to change. */ #ifndef _SYSTEM_HH #define _SYSTEM_HH //#warning("Loading system.hh. This should occur only once!") /*------------------------------------------------------------------------*/ /* Application configuration */ /*------------------------------------------------------------------------*/ #define Ledger_VERSION_MAJOR @Ledger_VERSION_MAJOR@ #define Ledger_VERSION_MINOR @Ledger_VERSION_MINOR@ #define Ledger_VERSION_PATCH @Ledger_VERSION_PATCH@ #define Ledger_VERSION_DATE @Ledger_VERSION_DATE@ #define HAVE_EDIT @HAVE_EDIT@ #define HAVE_GETTEXT @HAVE_GETTEXT@ #define HAVE_ACCESS @HAVE_ACCESS@ #define HAVE_REALPATH @HAVE_REALPATH@ #define HAVE_GETPWUID @HAVE_GETPWUID@ #define HAVE_GETPWNAM @HAVE_GETPWNAM@ #define HAVE_IOCTL @HAVE_IOCTL@ #define HAVE_ISATTY @HAVE_ISATTY@ #define HAVE_UNIX_PIPES @HAVE_UNIX_PIPES@ #define HAVE_BOOST_PYTHON @HAVE_BOOST_PYTHON@ #define HAVE_BOOST_REGEX_UNICODE @HAVE_BOOST_REGEX_UNICODE@ #define HAVE_BOOST_SERIALIZATION 0 #define DEBUG_MODE @DEBUG_MODE@ #define NO_ASSERTS @NO_ASSERTS@ #define DOCUMENT_MODEL 0 #define REDUCE_TO_INTEGER 0 /*------------------------------------------------------------------------*/ /* System includes */ /*------------------------------------------------------------------------*/ #if defined(__GNUG__) && __GNUG__ < 3 #define _XOPEN_SOURCE #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(__GNUG__) && __GNUG__ < 3 namespace std { inline ostream & right (ostream & i) { i.setf(i.right, i.adjustfield); return i; } inline ostream & left (ostream & i) { i.setf(i.left, i.adjustfield); return i; } } typedef std::streamoff istream_pos_type; typedef std::streamoff ostream_pos_type; #else // ! (defined(__GNUG__) && __GNUG__ < 3) typedef std::istream::pos_type istream_pos_type; typedef std::ostream::pos_type ostream_pos_type; #endif #include #include #include #include #include #include #include #if defined __FreeBSD__ && __FreeBSD__ <= 4 // FreeBSD has a broken isspace macro, so don't use it #undef isspace(c) #endif #include #if defined(WIN32) #include #else #include #endif #if HAVE_GETPWUID || HAVE_GETPWNAM #include #endif #if HAVE_IOCTL #include #endif #if HAVE_UNIX_PIPES #include #include #endif #include /* needed for gcc 4.9 */ #include #include #include "utf8.h" #if HAVE_EDIT #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BOOST_IOSTREAMS_USE_DEPRECATED 1 #include #include #include #include #include #include #include #include #include #include #include #include #include // jww (2012-05-20): This must be included before Boost.Regex #include #if HAVE_BOOST_REGEX_UNICODE #include #else #include #endif // HAVE_BOOST_REGEX_UNICODE #include #include #include #include #include #if HAVE_GETTEXT #include #define _(str) gettext(str) #else #define _(str) str #endif #define _f(str) boost::format(_(str)) #if HAVE_BOOST_SERIALIZATION #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace serialization { template void serialize(Archive& ar, boost::filesystem::path& p, const unsigned int) { std::string s; if (Archive::is_saving::value) s = p.string(); ar & s; if (Archive::is_loading::value) p = s; } template void serialize(Archive& ar, boost::intrusive_ptr& ptr, const unsigned int) { if (Archive::is_saving::value) { T * p = ptr.get(); ar & p; } else if (Archive::is_loading::value) { T * p; ar & p; ptr.reset(p); } } template void serialize(Archive&, boost::any&, const unsigned int) { // jww (2012-03-29): Should we really ignore any fields entirely? // These occur inside value_t::storage_t::data's variant. } template void serialize(Archive&, boost::blank&, const unsigned int) {} template void serialize(Archive&, boost::function&, const unsigned int) {} template void serialize(Archive& ar, istream_pos_type& pos, const unsigned int) { ar & make_binary_object(&pos, sizeof(istream_pos_type)); } } // namespace serialization } // namespace boost #else // HAVE_BOOST_SERIALIZATION #include #endif // HAVE_BOOST_SERIALIZATION #if HAVE_BOOST_PYTHON #include #include #include #include #include #include #include #endif // HAVE_BOOST_PYTHON #endif // _SYSTEM_HH