#include "AtomicFile.hpp"
#include "Compression.hpp"
+#include "Sloppiness.hpp"
#include "Util.hpp"
#include "assertions.hpp"
-#include "ccache.hpp"
#include "exceptions.hpp"
#include "fmtmacros.hpp"
#include "Args.hpp"
#include "ArgsInfo.hpp"
#include "Config.hpp"
+#include "Counters.hpp"
#include "Digest.hpp"
#include "File.hpp"
#include "MiniTrace.hpp"
#include "NonCopyable.hpp"
-#include "ccache.hpp"
+#include "Sloppiness.hpp"
#ifdef INODE_CACHE_SUPPORTED
# include "InodeCache.hpp"
#include "Counters.hpp"
-#include "Statistics.hpp"
+#include "Statistic.hpp"
#include "assertions.hpp"
#include <algorithm>
#include "File.hpp"
#include "Hash.hpp"
#include "Logging.hpp"
+#include "Sloppiness.hpp"
#include "StdMakeUnique.hpp"
-#include "ccache.hpp"
#include "fmtmacros.hpp"
#include "hashutil.hpp"
#include "File.hpp"
#include "Logging.hpp"
#include "Stat.hpp"
-#include "Statistics.hpp"
+#include "Statistic.hpp"
#include "Util.hpp"
#include "exceptions.hpp"
#include "fmtmacros.hpp"
--- /dev/null
+// Copyright (C) 2021 Joel Rosdahl and other contributors
+//
+// See doc/AUTHORS.adoc for a complete list of contributors.
+//
+// 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, write to the Free Software Foundation, Inc., 51
+// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+#pragma once
+
+enum Sloppiness {
+ SLOPPY_INCLUDE_FILE_MTIME = 1 << 0,
+ SLOPPY_INCLUDE_FILE_CTIME = 1 << 1,
+ SLOPPY_TIME_MACROS = 1 << 2,
+ SLOPPY_PCH_DEFINES = 1 << 3,
+ // Allow us to match files based on their stats (size, mtime, ctime), without
+ // looking at their contents.
+ SLOPPY_FILE_STAT_MATCHES = 1 << 4,
+ // Allow us to not include any system headers in the manifest include files,
+ // similar to -MM versus -M for dependencies.
+ SLOPPY_SYSTEM_HEADERS = 1 << 5,
+ // Allow us to ignore ctimes when comparing file stats, so we can fake mtimes
+ // if we want to (it is much harder to fake ctimes, requires changing clock)
+ SLOPPY_FILE_STAT_MATCHES_CTIME = 1 << 6,
+ // Allow us to not include the -index-store-path option in the manifest hash.
+ SLOPPY_CLANG_INDEX_STORE = 1 << 7,
+ // Ignore locale settings.
+ SLOPPY_LOCALE = 1 << 8,
+ // Allow caching even if -fmodules is used.
+ SLOPPY_MODULES = 1 << 9,
+};
--- /dev/null
+// Copyright (C) 2021 Joel Rosdahl and other contributors
+//
+// See doc/AUTHORS.adoc for a complete list of contributors.
+//
+// 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, write to the Free Software Foundation, Inc., 51
+// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+#pragma once
+
+// Statistics fields in storage order.
+enum class Statistic {
+ none = 0,
+ compiler_produced_stdout = 1,
+ compile_failed = 2,
+ internal_error = 3,
+ cache_miss = 4,
+ preprocessor_error = 5,
+ could_not_find_compiler = 6,
+ missing_cache_file = 7,
+ preprocessed_cache_hit = 8,
+ bad_compiler_arguments = 9,
+ called_for_link = 10,
+ files_in_cache = 11,
+ cache_size_kibibyte = 12,
+ obsolete_max_files = 13,
+ obsolete_max_size = 14,
+ unsupported_source_language = 15,
+ bad_output_file = 16,
+ no_input_file = 17,
+ multiple_source_files = 18,
+ autoconf_test = 19,
+ unsupported_compiler_option = 20,
+ output_to_stdout = 21,
+ direct_cache_hit = 22,
+ compiler_produced_no_output = 23,
+ compiler_produced_empty_output = 24,
+ error_hashing_extra_file = 25,
+ compiler_check_failed = 26,
+ could_not_use_precompiled_header = 27,
+ called_for_preprocessing = 28,
+ cleanups_performed = 29,
+ unsupported_code_directive = 30,
+ stats_zeroed_timestamp = 31,
+ could_not_use_modules = 32,
+
+ END
+};
#include "system.hpp"
#include "Counters.hpp"
+#include "Statistic.hpp" // Any reasonable use of Statistics requires the Statistic enum.
#include "third_party/nonstd/optional.hpp"
class Config;
-// Statistics fields in storage order.
-enum class Statistic {
- none = 0,
- compiler_produced_stdout = 1,
- compile_failed = 2,
- internal_error = 3,
- cache_miss = 4,
- preprocessor_error = 5,
- could_not_find_compiler = 6,
- missing_cache_file = 7,
- preprocessed_cache_hit = 8,
- bad_compiler_arguments = 9,
- called_for_link = 10,
- files_in_cache = 11,
- cache_size_kibibyte = 12,
- obsolete_max_files = 13,
- obsolete_max_size = 14,
- unsupported_source_language = 15,
- bad_output_file = 16,
- no_input_file = 17,
- multiple_source_files = 18,
- autoconf_test = 19,
- unsupported_compiler_option = 20,
- output_to_stdout = 21,
- direct_cache_hit = 22,
- compiler_produced_no_output = 23,
- compiler_produced_empty_output = 24,
- error_hashing_extra_file = 25,
- compiler_check_failed = 26,
- could_not_use_precompiled_header = 27,
- called_for_preprocessing = 28,
- cleanups_performed = 29,
- unsupported_code_directive = 30,
- stats_zeroed_timestamp = 31,
- could_not_use_modules = 32,
-
- END
-};
-
namespace Statistics {
// Read counters from `path`. No lock is acquired.
#pragma once
#include "Args.hpp"
-#include "Statistics.hpp"
+#include "Statistic.hpp"
#include "third_party/nonstd/optional.hpp"
#include "ResultExtractor.hpp"
#include "ResultRetriever.hpp"
#include "SignalHandler.hpp"
+#include "Statistics.hpp"
#include "StdMakeUnique.hpp"
#include "TemporaryFile.hpp"
#include "UmaskScope.hpp"
// stored in the cache changes in a backwards-incompatible way.
const char HASH_PREFIX[] = "3";
+namespace {
+
+// Throw a Failure if ccache did not succeed in getting or putting a result in
+// the cache. If `exit_code` is set, just exit with that code directly,
+// otherwise execute the real compiler and exit with its exit code. Also updates
+// statistics counter `statistic` if it's not `Statistic::none`.
+class Failure : public std::exception
+{
+public:
+ Failure(Statistic statistic,
+ nonstd::optional<int> exit_code = nonstd::nullopt);
+
+ nonstd::optional<int> exit_code() const;
+ Statistic statistic() const;
+
+private:
+ Statistic m_statistic;
+ nonstd::optional<int> m_exit_code;
+};
+
+inline Failure::Failure(Statistic statistic, nonstd::optional<int> exit_code)
+ : m_statistic(statistic), m_exit_code(exit_code)
+{
+}
+
+inline nonstd::optional<int>
+Failure::exit_code() const
+{
+ return m_exit_code;
+}
+
+inline Statistic
+Failure::statistic() const
+{
+ return m_statistic;
+}
+
+} // namespace
+
static void
add_prefix(const Context& ctx, Args& args, const std::string& prefix_command)
{
extern const char CCACHE_VERSION[];
-const uint32_t SLOPPY_INCLUDE_FILE_MTIME = 1 << 0;
-const uint32_t SLOPPY_INCLUDE_FILE_CTIME = 1 << 1;
-const uint32_t SLOPPY_TIME_MACROS = 1 << 2;
-const uint32_t SLOPPY_PCH_DEFINES = 1 << 3;
-// Allow us to match files based on their stats (size, mtime, ctime), without
-// looking at their contents.
-const uint32_t SLOPPY_FILE_STAT_MATCHES = 1 << 4;
-// Allow us to not include any system headers in the manifest include files,
-// similar to -MM versus -M for dependencies.
-const uint32_t SLOPPY_SYSTEM_HEADERS = 1 << 5;
-// Allow us to ignore ctimes when comparing file stats, so we can fake mtimes
-// if we want to (it is much harder to fake ctimes, requires changing clock)
-const uint32_t SLOPPY_FILE_STAT_MATCHES_CTIME = 1 << 6;
-// Allow us to not include the -index-store-path option in the manifest hash.
-const uint32_t SLOPPY_CLANG_INDEX_STORE = 1 << 7;
-// Ignore locale settings.
-const uint32_t SLOPPY_LOCALE = 1 << 8;
-// Allow caching even if -fmodules is used.
-const uint32_t SLOPPY_MODULES = 1 << 9;
-
using FindExecutableFunction =
std::function<std::string(const Context& ctx,
const std::string& name,
#include "Config.hpp"
#include "Context.hpp"
#include "Logging.hpp"
+#include "Statistics.hpp"
#include "Util.hpp"
#ifdef INODE_CACHE_SUPPORTED
#include "system.hpp"
#include "FormatNonstdStringView.hpp"
-#include "Statistics.hpp"
#include "third_party/fmt/core.h"
#include "third_party/nonstd/optional.hpp"
: ErrorBase(fmt::format(std::forward<T>(args)...))
{
}
-
-// Throw a Failure if ccache did not succeed in getting or putting a result in
-// the cache. If `exit_code` is set, just exit with that code directly,
-// otherwise execute the real compiler and exit with its exit code. Also updates
-// statistics counter `statistic` if it's not `Statistic::none`.
-class Failure : public std::exception
-{
-public:
- Failure(Statistic statistic,
- nonstd::optional<int> exit_code = nonstd::nullopt);
-
- nonstd::optional<int> exit_code() const;
- Statistic statistic() const;
-
-private:
- Statistic m_statistic;
- nonstd::optional<int> m_exit_code;
-};
-
-inline Failure::Failure(Statistic statistic, nonstd::optional<int> exit_code)
- : m_statistic(statistic), m_exit_code(exit_code)
-{
-}
-
-inline nonstd::optional<int>
-Failure::exit_code() const
-{
- return m_exit_code;
-}
-
-inline Statistic
-Failure::statistic() const
-{
- return m_statistic;
-}
#include "Context.hpp"
#include "Hash.hpp"
#include "Logging.hpp"
+#include "Sloppiness.hpp"
#include "Stat.hpp"
-#include "ccache.hpp"
#include "execute.hpp"
#include "fmtmacros.hpp"
#include "macroskip.hpp"
// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "../src/Config.hpp"
+#include "../src/Sloppiness.hpp"
#include "../src/Util.hpp"
-#include "../src/ccache.hpp"
#include "../src/exceptions.hpp"
#include "../src/fmtmacros.hpp"
#include "TestUtil.hpp"
// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "../src/Counters.hpp"
-#include "../src/Statistics.hpp"
+#include "../src/Statistic.hpp"
#include "TestUtil.hpp"
#include "third_party/doctest.h"
// this program; if not, write to the Free Software Foundation, Inc., 51
// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#include "../src/Statistic.hpp"
#include "../src/Statistics.hpp"
#include "../src/Util.hpp"
#include "../src/fmtmacros.hpp"
#include "../src/Args.hpp"
#include "../src/Config.hpp"
#include "../src/Context.hpp"
-#include "../src/Statistics.hpp"
+#include "../src/Statistic.hpp"
#include "../src/Util.hpp"
#include "../src/fmtmacros.hpp"
#include "TestUtil.hpp"
// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "../src/Context.hpp"
+#include "../src/Sloppiness.hpp"
#include "../src/ccache.hpp"
#include "../src/fmtmacros.hpp"
#include "TestUtil.hpp"