public inbox for buildroot@busybox.net
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories
@ 2026-03-13 11:07 Shubham Chakraborty
  2026-03-13 11:07 ` [Buildroot] [PATCH] DEVELOPERS: add Shubham Chakraborty as ccache maintainer Shubham Chakraborty
  2026-03-13 17:06 ` [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories Fiona Klute via buildroot
  0 siblings, 2 replies; 6+ messages in thread
From: Shubham Chakraborty @ 2026-03-13 11:07 UTC (permalink / raw)
  To: buildroot; +Cc: Shubham Chakraborty

Override ccache's default cache directory paths to use Buildroot's
BR_CACHE_DIR environment variable instead of CCACHE_DIR and XDG
standard directories.

By default, ccache stores its cache in user home directories
(~/.ccache, ~/.cache/ccache, ~/.config/ccache) based on XDG_CACHE_HOME
and XDG_CONFIG_HOME environment variables. This causes issues in
Buildroot because:

 - Pollutes user home directories during builds
 - Breaks reproducibility across different build environments
 - Complicates cache management in CI/CD systems
 - May cause permission issues in shared build systems

This patch modifies ccache source to:
 - Replace util::getenv_path("CCACHE_DIR") with "BR_CACHE_DIR"
 - Replace hardcoded paths (.ccache, .cache/ccache, .config/ccache)
   with Buildroot's HOST_CCACHE_DEFAULT_CCACHE_DIR
 - Disable XDG_CACHE_HOME, XDG_CONFIG_HOME, and XDG_RUNTIME_DIR lookups
 - Update command-line option handling to use BR_CACHE_DIR

This ensures ccache respects Buildroot's cache directory configuration
and avoids user home directory pollution.

Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
---
 ...ost-ccache-force-use-of-BR_CACHE_DIR.patch | 108 ++++++++++++++++++
 package/ccache/ccache.mk                      |  11 +-
 2 files changed, 110 insertions(+), 9 deletions(-)
 create mode 100644 package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch

diff --git a/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch b/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
new file mode 100644
index 0000000000..a990c43dd2
--- /dev/null
+++ b/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
@@ -0,0 +1,108 @@
+From 5140c64cdd2d469ff5be7f94cc11de928cbe585a Mon Sep 17 00:00:00 2001
+From: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
+Date: Fri, 13 Mar 2026 15:38:53 +0530
+Subject: [PATCH] package/host-ccache: force use of BR_CACHE_DIR.
+
+Override ccache's default cache directory paths to use Buildroot's
+BR_CACHE_DIR environment variable instead of CCACHE_DIR and XDG
+standard directories.
+
+By default, ccache stores its cache in user home directories
+(~/.ccache, ~/.cache/ccache, ~/.config/ccache) based on XDG_CACHE_HOME
+and XDG_CONFIG_HOME environment variables. This causes issues in
+Buildroot because:
+
+ - Pollutes user home directories during builds
+ - Breaks reproducibility across different build environments
+ - Complicates cache management in CI/CD systems
+ - May cause permission issues in shared build systems
+
+This patch modifies ccache source to:
+ - Replace util::getenv_path("CCACHE_DIR") with "BR_CACHE_DIR"
+ - Replace hardcoded paths (.ccache, .cache/ccache, .config/ccache)
+   with Buildroot's HOST_CCACHE_DEFAULT_CCACHE_DIR
+ - Disable XDG_CACHE_HOME, XDG_CONFIG_HOME, and XDG_RUNTIME_DIR lookups
+ - Update command-line option handling to use BR_CACHE_DIR
+
+This ensures ccache respects Buildroot's cache directory configuration
+and avoids user home directory pollution.
+
+Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
+---
+ src/ccache/config.cpp           | 14 +++++++-------
+ src/ccache/core/mainoptions.cpp |  2 +-
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/ccache/config.cpp b/src/ccache/config.cpp
+index a4f67d8..1a6e130 100644
+--- a/src/ccache/config.cpp
++++ b/src/ccache/config.cpp
+@@ -500,7 +500,7 @@ default_cache_dir(const fs::path& home_dir)
+ #  ifdef __APPLE__
+   return home_dir / "Library/Caches/ccache";
+ #  else
+-  return home_dir / ".cache/ccache";
++  return home_dir / HOST_CCACHE_DEFAULT_CCACHE_DIR;
+ #  endif
+ }
+ 
+@@ -510,7 +510,7 @@ default_config_dir(const fs::path& home_dir)
+ #  ifdef __APPLE__
+   return home_dir / "Library/Preferences/ccache";
+ #  else
+-  return home_dir / ".config/ccache";
++  return home_dir / HOST_CCACHE_DEFAULT_CCACHE_DIR;
+ #  endif
+ }
+ 
+@@ -598,13 +598,13 @@ Config::read(const std::vector<std::string>& cmdline_config_settings)
+     create_cmdline_settings_map(cmdline_config_settings);
+ 
+   const fs::path home_dir = home_directory();
+-  const util::DirEntry legacy_ccache_dir = home_dir / ".ccache";
++  const util::DirEntry legacy_ccache_dir = home_dir / HOST_CCACHE_DEFAULT_CCACHE_DIR;
+ #ifdef _WIN32
+   auto env_appdata = util::getenv_path("APPDATA");
+   auto env_local_appdata = util::getenv_path("LOCALAPPDATA");
+ #else
+-  auto env_xdg_cache_home = util::getenv_path("XDG_CACHE_HOME");
+-  auto env_xdg_config_home = util::getenv_path("XDG_CONFIG_HOME");
++  auto env_xdg_cache_home = std::optional<fs::path>(std::nullopt);
++  auto env_xdg_config_home = std::optional<fs::path>(std::nullopt);
+ #endif
+ 
+   auto env_ccache_configpath = util::getenv_path("CCACHE_CONFIGPATH");
+@@ -627,7 +627,7 @@ Config::read(const std::vector<std::string>& cmdline_config_settings)
+     // A missing config file in SYSCONFDIR is OK so don't check return value.
+     update_from_file(system_config_path());
+ 
+-    auto env_ccache_dir = util::getenv_path("CCACHE_DIR");
++    auto env_ccache_dir = util::getenv_path("BR_CACHE_DIR");
+     auto cmdline_cache_dir = cmdline_settings_map.find("cache_dir");
+ 
+     fs::path config_dir;
+@@ -1232,7 +1232,7 @@ Config::default_temporary_dir() const
+ {
+   static const fs::path run_user_tmp_dir = [] {
+ #ifndef _WIN32
+-    const char* const xdg_runtime_dir = getenv("XDG_RUNTIME_DIR");
++    const char* const xdg_runtime_dir = nullptr;
+     if (xdg_runtime_dir && DirEntry(xdg_runtime_dir).is_directory()) {
+       fs::path dir = FMT("{}/ccache-tmp", xdg_runtime_dir);
+       if (fs::create_directories(dir) && access(dir.c_str(), W_OK) == 0) {
+diff --git a/src/ccache/core/mainoptions.cpp b/src/ccache/core/mainoptions.cpp
+index d253ebc..9ad2824 100644
+--- a/src/ccache/core/mainoptions.cpp
++++ b/src/ccache/core/mainoptions.cpp
+@@ -527,7 +527,7 @@ process_main_options(int argc, const char* const* argv)
+ 
+     switch (c) {
+     case 'd': // --dir
+-      util::setenv("CCACHE_DIR", arg);
++      util::setenv("BR_CACHE_DIR", arg);
+       break;
+     case FORMAT:
+       if (arg == "tab") {
+-- 
+2.53.0
+
diff --git a/package/ccache/ccache.mk b/package/ccache/ccache.mk
index 30f87f7d90..f2f73a115d 100644
--- a/package/ccache/ccache.mk
+++ b/package/ccache/ccache.mk
@@ -42,16 +42,9 @@ HOST_CCACHE_CONF_OPTS += \
 #    so rewrite BR_CACHE_DIR to take that into consideration for SDK purpose
 HOST_CCACHE_DEFAULT_CCACHE_DIR = $(patsubst $(HOME)/%,%,$(BR_CACHE_DIR))
 
-define HOST_CCACHE_PATCH_CONFIGURATION
-	sed -i 's,getenv("CCACHE_DIR"),getenv("BR_CACHE_DIR"),' $(@D)/src/ccache/config.cpp
-	sed -i 's,".ccache","$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",' $(@D)/src/ccache/config.cpp
-	sed -i 's,"/.cache/ccache","/$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",' $(@D)/src/ccache/config.cpp
-	sed -i 's,"/.config/ccache","/$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",' $(@D)/src/ccache/config.cpp
-	sed -i 's,getenv("XDG_CACHE_HOME"),nullptr,' $(@D)/src/ccache/config.cpp
-	sed -i 's,getenv("XDG_CONFIG_HOME"),nullptr,' $(@D)/src/ccache/config.cpp
-endef
+HOST_CCACHE_CONF_OPTS += \
+	-DCMAKE_CXX_FLAGS='$(HOST_CXXFLAGS) -DHOST_CCACHE_DEFAULT_CCACHE_DIR=\"$(HOST_CCACHE_DEFAULT_CCACHE_DIR)\"'
 
-HOST_CCACHE_POST_PATCH_HOOKS += HOST_CCACHE_PATCH_CONFIGURATION
 
 define HOST_CCACHE_MAKE_CACHE_DIR
 	mkdir -p $(BR_CACHE_DIR)
-- 
2.53.0

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Buildroot] [PATCH] DEVELOPERS: add Shubham Chakraborty as ccache maintainer
  2026-03-13 11:07 [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories Shubham Chakraborty
@ 2026-03-13 11:07 ` Shubham Chakraborty
  2026-03-27 20:33   ` Julien Olivain via buildroot
  2026-04-03 10:28   ` Thomas Perale via buildroot
  2026-03-13 17:06 ` [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories Fiona Klute via buildroot
  1 sibling, 2 replies; 6+ messages in thread
From: Shubham Chakraborty @ 2026-03-13 11:07 UTC (permalink / raw)
  To: buildroot; +Cc: Shubham Chakraborty

Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
---
 DEVELOPERS | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/DEVELOPERS b/DEVELOPERS
index ba6ba6b221..124f5dca4e 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -3025,6 +3025,9 @@ F:	package/tunctl/
 F:	package/ubus/
 F:	package/wolfssl/
 
+N:	Shubham Chakraborty <chakrabortyshubham66@gmail.com>
+F:	package/ccache
+
 N:	Simon Dawson <spdawson@gmail.com>
 F:	boot/at91bootstrap3/
 F:	package/cppzmq/
-- 
2.53.0

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories
  2026-03-13 11:07 [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories Shubham Chakraborty
  2026-03-13 11:07 ` [Buildroot] [PATCH] DEVELOPERS: add Shubham Chakraborty as ccache maintainer Shubham Chakraborty
@ 2026-03-13 17:06 ` Fiona Klute via buildroot
  2026-03-13 17:21   ` Shubham Chakraborty
  1 sibling, 1 reply; 6+ messages in thread
From: Fiona Klute via buildroot @ 2026-03-13 17:06 UTC (permalink / raw)
  To: Shubham Chakraborty, buildroot

Am 13.03.26 um 13:07 schrieb Shubham Chakraborty:
> Override ccache's default cache directory paths to use Buildroot's
> BR_CACHE_DIR environment variable instead of CCACHE_DIR and XDG
> standard directories.
> 
> By default, ccache stores its cache in user home directories
> (~/.ccache, ~/.cache/ccache, ~/.config/ccache) based on XDG_CACHE_HOME
> and XDG_CONFIG_HOME environment variables. This causes issues in
> Buildroot because:
> 
>   - Pollutes user home directories during builds
>   - Breaks reproducibility across different build environments
>   - Complicates cache management in CI/CD systems
>   - May cause permission issues in shared build systems

Under what circumstances can these issues appear? I've done many 
Buildroot builds with CCache enabled and haven't encountered any of 
them. HOST_CCACHE_PATCH_CONFIGURATION should already be doing what you 
describe as the purpose of the new patch, if that's not working 
understanding why seems important.

Best regards,
Fiona

> This patch modifies ccache source to:
>   - Replace util::getenv_path("CCACHE_DIR") with "BR_CACHE_DIR"
>   - Replace hardcoded paths (.ccache, .cache/ccache, .config/ccache)
>     with Buildroot's HOST_CCACHE_DEFAULT_CCACHE_DIR
>   - Disable XDG_CACHE_HOME, XDG_CONFIG_HOME, and XDG_RUNTIME_DIR lookups
>   - Update command-line option handling to use BR_CACHE_DIR
> 
> This ensures ccache respects Buildroot's cache directory configuration
> and avoids user home directory pollution.
> 
> Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
> ---
>   ...ost-ccache-force-use-of-BR_CACHE_DIR.patch | 108 ++++++++++++++++++
>   package/ccache/ccache.mk                      |  11 +-
>   2 files changed, 110 insertions(+), 9 deletions(-)
>   create mode 100644 package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
> 
> diff --git a/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch b/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
> new file mode 100644
> index 0000000000..a990c43dd2
> --- /dev/null
> +++ b/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
> @@ -0,0 +1,108 @@
> +From 5140c64cdd2d469ff5be7f94cc11de928cbe585a Mon Sep 17 00:00:00 2001
> +From: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
> +Date: Fri, 13 Mar 2026 15:38:53 +0530
> +Subject: [PATCH] package/host-ccache: force use of BR_CACHE_DIR.
> +
> +Override ccache's default cache directory paths to use Buildroot's
> +BR_CACHE_DIR environment variable instead of CCACHE_DIR and XDG
> +standard directories.
> +
> +By default, ccache stores its cache in user home directories
> +(~/.ccache, ~/.cache/ccache, ~/.config/ccache) based on XDG_CACHE_HOME
> +and XDG_CONFIG_HOME environment variables. This causes issues in
> +Buildroot because:
> +
> + - Pollutes user home directories during builds
> + - Breaks reproducibility across different build environments
> + - Complicates cache management in CI/CD systems
> + - May cause permission issues in shared build systems
> +
> +This patch modifies ccache source to:
> + - Replace util::getenv_path("CCACHE_DIR") with "BR_CACHE_DIR"
> + - Replace hardcoded paths (.ccache, .cache/ccache, .config/ccache)
> +   with Buildroot's HOST_CCACHE_DEFAULT_CCACHE_DIR
> + - Disable XDG_CACHE_HOME, XDG_CONFIG_HOME, and XDG_RUNTIME_DIR lookups
> + - Update command-line option handling to use BR_CACHE_DIR
> +
> +This ensures ccache respects Buildroot's cache directory configuration
> +and avoids user home directory pollution.
> +
> +Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
> +---
> + src/ccache/config.cpp           | 14 +++++++-------
> + src/ccache/core/mainoptions.cpp |  2 +-
> + 2 files changed, 8 insertions(+), 8 deletions(-)
> +
> +diff --git a/src/ccache/config.cpp b/src/ccache/config.cpp
> +index a4f67d8..1a6e130 100644
> +--- a/src/ccache/config.cpp
> ++++ b/src/ccache/config.cpp
> +@@ -500,7 +500,7 @@ default_cache_dir(const fs::path& home_dir)
> + #  ifdef __APPLE__
> +   return home_dir / "Library/Caches/ccache";
> + #  else
> +-  return home_dir / ".cache/ccache";
> ++  return home_dir / HOST_CCACHE_DEFAULT_CCACHE_DIR;
> + #  endif
> + }
> +
> +@@ -510,7 +510,7 @@ default_config_dir(const fs::path& home_dir)
> + #  ifdef __APPLE__
> +   return home_dir / "Library/Preferences/ccache";
> + #  else
> +-  return home_dir / ".config/ccache";
> ++  return home_dir / HOST_CCACHE_DEFAULT_CCACHE_DIR;
> + #  endif
> + }
> +
> +@@ -598,13 +598,13 @@ Config::read(const std::vector<std::string>& cmdline_config_settings)
> +     create_cmdline_settings_map(cmdline_config_settings);
> +
> +   const fs::path home_dir = home_directory();
> +-  const util::DirEntry legacy_ccache_dir = home_dir / ".ccache";
> ++  const util::DirEntry legacy_ccache_dir = home_dir / HOST_CCACHE_DEFAULT_CCACHE_DIR;
> + #ifdef _WIN32
> +   auto env_appdata = util::getenv_path("APPDATA");
> +   auto env_local_appdata = util::getenv_path("LOCALAPPDATA");
> + #else
> +-  auto env_xdg_cache_home = util::getenv_path("XDG_CACHE_HOME");
> +-  auto env_xdg_config_home = util::getenv_path("XDG_CONFIG_HOME");
> ++  auto env_xdg_cache_home = std::optional<fs::path>(std::nullopt);
> ++  auto env_xdg_config_home = std::optional<fs::path>(std::nullopt);
> + #endif
> +
> +   auto env_ccache_configpath = util::getenv_path("CCACHE_CONFIGPATH");
> +@@ -627,7 +627,7 @@ Config::read(const std::vector<std::string>& cmdline_config_settings)
> +     // A missing config file in SYSCONFDIR is OK so don't check return value.
> +     update_from_file(system_config_path());
> +
> +-    auto env_ccache_dir = util::getenv_path("CCACHE_DIR");
> ++    auto env_ccache_dir = util::getenv_path("BR_CACHE_DIR");
> +     auto cmdline_cache_dir = cmdline_settings_map.find("cache_dir");
> +
> +     fs::path config_dir;
> +@@ -1232,7 +1232,7 @@ Config::default_temporary_dir() const
> + {
> +   static const fs::path run_user_tmp_dir = [] {
> + #ifndef _WIN32
> +-    const char* const xdg_runtime_dir = getenv("XDG_RUNTIME_DIR");
> ++    const char* const xdg_runtime_dir = nullptr;
> +     if (xdg_runtime_dir && DirEntry(xdg_runtime_dir).is_directory()) {
> +       fs::path dir = FMT("{}/ccache-tmp", xdg_runtime_dir);
> +       if (fs::create_directories(dir) && access(dir.c_str(), W_OK) == 0) {
> +diff --git a/src/ccache/core/mainoptions.cpp b/src/ccache/core/mainoptions.cpp
> +index d253ebc..9ad2824 100644
> +--- a/src/ccache/core/mainoptions.cpp
> ++++ b/src/ccache/core/mainoptions.cpp
> +@@ -527,7 +527,7 @@ process_main_options(int argc, const char* const* argv)
> +
> +     switch (c) {
> +     case 'd': // --dir
> +-      util::setenv("CCACHE_DIR", arg);
> ++      util::setenv("BR_CACHE_DIR", arg);
> +       break;
> +     case FORMAT:
> +       if (arg == "tab") {
> +--
> +2.53.0
> +
> diff --git a/package/ccache/ccache.mk b/package/ccache/ccache.mk
> index 30f87f7d90..f2f73a115d 100644
> --- a/package/ccache/ccache.mk
> +++ b/package/ccache/ccache.mk
> @@ -42,16 +42,9 @@ HOST_CCACHE_CONF_OPTS += \
>   #    so rewrite BR_CACHE_DIR to take that into consideration for SDK purpose
>   HOST_CCACHE_DEFAULT_CCACHE_DIR = $(patsubst $(HOME)/%,%,$(BR_CACHE_DIR))
>   
> -define HOST_CCACHE_PATCH_CONFIGURATION
> -	sed -i 's,getenv("CCACHE_DIR"),getenv("BR_CACHE_DIR"),' $(@D)/src/ccache/config.cpp
> -	sed -i 's,".ccache","$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",' $(@D)/src/ccache/config.cpp
> -	sed -i 's,"/.cache/ccache","/$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",' $(@D)/src/ccache/config.cpp
> -	sed -i 's,"/.config/ccache","/$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",' $(@D)/src/ccache/config.cpp
> -	sed -i 's,getenv("XDG_CACHE_HOME"),nullptr,' $(@D)/src/ccache/config.cpp
> -	sed -i 's,getenv("XDG_CONFIG_HOME"),nullptr,' $(@D)/src/ccache/config.cpp
> -endef
> +HOST_CCACHE_CONF_OPTS += \
> +	-DCMAKE_CXX_FLAGS='$(HOST_CXXFLAGS) -DHOST_CCACHE_DEFAULT_CCACHE_DIR=\"$(HOST_CCACHE_DEFAULT_CCACHE_DIR)\"'
>   
> -HOST_CCACHE_POST_PATCH_HOOKS += HOST_CCACHE_PATCH_CONFIGURATION
>   
>   define HOST_CCACHE_MAKE_CACHE_DIR
>   	mkdir -p $(BR_CACHE_DIR)

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories
  2026-03-13 17:06 ` [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories Fiona Klute via buildroot
@ 2026-03-13 17:21   ` Shubham Chakraborty
  0 siblings, 0 replies; 6+ messages in thread
From: Shubham Chakraborty @ 2026-03-13 17:21 UTC (permalink / raw)
  To: Fiona Klute; +Cc: buildroot


[-- Attachment #1.1: Type: text/plain, Size: 9817 bytes --]

Hi Fiona,

Thank you for the review and for raising this important point.

You're absolutely correct - the existing HOST_CCACHE_PATCH_CONFIGURATION
approach does work and achieves the same functional goal. This patch is
primarily a maintainability improvement rather than fixing a specific bug.

My rationale for proposing this change was:

   1. *Maintainability*: A proper patch file is easier to maintain across
   ccache version updates than runtime sed commands, which can silently
   break if the source code structure changes.
   2. *Transparency*: Having the modifications as a formal patch file makes
   the changes more visible and reviewable.
   3. *Potential upstream path*: A well-formed patch could potentially be
   submitted upstream to ccache with a Buildroot-specific configuration option.

However, if the current sed-based approach is working well and is the
preferred method by the Buildroot maintainers, I'm happy to withdraw this
patch. I don't want to introduce unnecessary churn if the existing solution
is adequate.

Please let me know your preference. If you'd like me to proceed, I can add
more context to the commit message explaining the maintenance benefits.
Otherwise, I'll withdraw the patch.

Best regards, Shubham


On Fri, 13 Mar, 2026, 10:36 pm Fiona Klute, <fiona.klute@gmx.de> wrote:

> Am 13.03.26 um 13:07 schrieb Shubham Chakraborty:
> > Override ccache's default cache directory paths to use Buildroot's
> > BR_CACHE_DIR environment variable instead of CCACHE_DIR and XDG
> > standard directories.
> >
> > By default, ccache stores its cache in user home directories
> > (~/.ccache, ~/.cache/ccache, ~/.config/ccache) based on XDG_CACHE_HOME
> > and XDG_CONFIG_HOME environment variables. This causes issues in
> > Buildroot because:
> >
> >   - Pollutes user home directories during builds
> >   - Breaks reproducibility across different build environments
> >   - Complicates cache management in CI/CD systems
> >   - May cause permission issues in shared build systems
>
> Under what circumstances can these issues appear? I've done many
> Buildroot builds with CCache enabled and haven't encountered any of
> them. HOST_CCACHE_PATCH_CONFIGURATION should already be doing what you
> describe as the purpose of the new patch, if that's not working
> understanding why seems important.
>
> Best regards,
> Fiona
>
> > This patch modifies ccache source to:
> >   - Replace util::getenv_path("CCACHE_DIR") with "BR_CACHE_DIR"
> >   - Replace hardcoded paths (.ccache, .cache/ccache, .config/ccache)
> >     with Buildroot's HOST_CCACHE_DEFAULT_CCACHE_DIR
> >   - Disable XDG_CACHE_HOME, XDG_CONFIG_HOME, and XDG_RUNTIME_DIR lookups
> >   - Update command-line option handling to use BR_CACHE_DIR
> >
> > This ensures ccache respects Buildroot's cache directory configuration
> > and avoids user home directory pollution.
> >
> > Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
> > ---
> >   ...ost-ccache-force-use-of-BR_CACHE_DIR.patch | 108 ++++++++++++++++++
> >   package/ccache/ccache.mk                      |  11 +-
> >   2 files changed, 110 insertions(+), 9 deletions(-)
> >   create mode 100644
> package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
> >
> > diff --git
> a/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
> b/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
> > new file mode 100644
> > index 0000000000..a990c43dd2
> > --- /dev/null
> > +++
> b/package/ccache/0001-package-host-ccache-force-use-of-BR_CACHE_DIR.patch
> > @@ -0,0 +1,108 @@
> > +From 5140c64cdd2d469ff5be7f94cc11de928cbe585a Mon Sep 17 00:00:00 2001
> > +From: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
> > +Date: Fri, 13 Mar 2026 15:38:53 +0530
> > +Subject: [PATCH] package/host-ccache: force use of BR_CACHE_DIR.
> > +
> > +Override ccache's default cache directory paths to use Buildroot's
> > +BR_CACHE_DIR environment variable instead of CCACHE_DIR and XDG
> > +standard directories.
> > +
> > +By default, ccache stores its cache in user home directories
> > +(~/.ccache, ~/.cache/ccache, ~/.config/ccache) based on XDG_CACHE_HOME
> > +and XDG_CONFIG_HOME environment variables. This causes issues in
> > +Buildroot because:
> > +
> > + - Pollutes user home directories during builds
> > + - Breaks reproducibility across different build environments
> > + - Complicates cache management in CI/CD systems
> > + - May cause permission issues in shared build systems
> > +
> > +This patch modifies ccache source to:
> > + - Replace util::getenv_path("CCACHE_DIR") with "BR_CACHE_DIR"
> > + - Replace hardcoded paths (.ccache, .cache/ccache, .config/ccache)
> > +   with Buildroot's HOST_CCACHE_DEFAULT_CCACHE_DIR
> > + - Disable XDG_CACHE_HOME, XDG_CONFIG_HOME, and XDG_RUNTIME_DIR lookups
> > + - Update command-line option handling to use BR_CACHE_DIR
> > +
> > +This ensures ccache respects Buildroot's cache directory configuration
> > +and avoids user home directory pollution.
> > +
> > +Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>
> > +---
> > + src/ccache/config.cpp           | 14 +++++++-------
> > + src/ccache/core/mainoptions.cpp |  2 +-
> > + 2 files changed, 8 insertions(+), 8 deletions(-)
> > +
> > +diff --git a/src/ccache/config.cpp b/src/ccache/config.cpp
> > +index a4f67d8..1a6e130 100644
> > +--- a/src/ccache/config.cpp
> > ++++ b/src/ccache/config.cpp
> > +@@ -500,7 +500,7 @@ default_cache_dir(const fs::path& home_dir)
> > + #  ifdef __APPLE__
> > +   return home_dir / "Library/Caches/ccache";
> > + #  else
> > +-  return home_dir / ".cache/ccache";
> > ++  return home_dir / HOST_CCACHE_DEFAULT_CCACHE_DIR;
> > + #  endif
> > + }
> > +
> > +@@ -510,7 +510,7 @@ default_config_dir(const fs::path& home_dir)
> > + #  ifdef __APPLE__
> > +   return home_dir / "Library/Preferences/ccache";
> > + #  else
> > +-  return home_dir / ".config/ccache";
> > ++  return home_dir / HOST_CCACHE_DEFAULT_CCACHE_DIR;
> > + #  endif
> > + }
> > +
> > +@@ -598,13 +598,13 @@ Config::read(const std::vector<std::string>&
> cmdline_config_settings)
> > +     create_cmdline_settings_map(cmdline_config_settings);
> > +
> > +   const fs::path home_dir = home_directory();
> > +-  const util::DirEntry legacy_ccache_dir = home_dir / ".ccache";
> > ++  const util::DirEntry legacy_ccache_dir = home_dir /
> HOST_CCACHE_DEFAULT_CCACHE_DIR;
> > + #ifdef _WIN32
> > +   auto env_appdata = util::getenv_path("APPDATA");
> > +   auto env_local_appdata = util::getenv_path("LOCALAPPDATA");
> > + #else
> > +-  auto env_xdg_cache_home = util::getenv_path("XDG_CACHE_HOME");
> > +-  auto env_xdg_config_home = util::getenv_path("XDG_CONFIG_HOME");
> > ++  auto env_xdg_cache_home = std::optional<fs::path>(std::nullopt);
> > ++  auto env_xdg_config_home = std::optional<fs::path>(std::nullopt);
> > + #endif
> > +
> > +   auto env_ccache_configpath = util::getenv_path("CCACHE_CONFIGPATH");
> > +@@ -627,7 +627,7 @@ Config::read(const std::vector<std::string>&
> cmdline_config_settings)
> > +     // A missing config file in SYSCONFDIR is OK so don't check return
> value.
> > +     update_from_file(system_config_path());
> > +
> > +-    auto env_ccache_dir = util::getenv_path("CCACHE_DIR");
> > ++    auto env_ccache_dir = util::getenv_path("BR_CACHE_DIR");
> > +     auto cmdline_cache_dir = cmdline_settings_map.find("cache_dir");
> > +
> > +     fs::path config_dir;
> > +@@ -1232,7 +1232,7 @@ Config::default_temporary_dir() const
> > + {
> > +   static const fs::path run_user_tmp_dir = [] {
> > + #ifndef _WIN32
> > +-    const char* const xdg_runtime_dir = getenv("XDG_RUNTIME_DIR");
> > ++    const char* const xdg_runtime_dir = nullptr;
> > +     if (xdg_runtime_dir && DirEntry(xdg_runtime_dir).is_directory()) {
> > +       fs::path dir = FMT("{}/ccache-tmp", xdg_runtime_dir);
> > +       if (fs::create_directories(dir) && access(dir.c_str(), W_OK) ==
> 0) {
> > +diff --git a/src/ccache/core/mainoptions.cpp
> b/src/ccache/core/mainoptions.cpp
> > +index d253ebc..9ad2824 100644
> > +--- a/src/ccache/core/mainoptions.cpp
> > ++++ b/src/ccache/core/mainoptions.cpp
> > +@@ -527,7 +527,7 @@ process_main_options(int argc, const char* const*
> argv)
> > +
> > +     switch (c) {
> > +     case 'd': // --dir
> > +-      util::setenv("CCACHE_DIR", arg);
> > ++      util::setenv("BR_CACHE_DIR", arg);
> > +       break;
> > +     case FORMAT:
> > +       if (arg == "tab") {
> > +--
> > +2.53.0
> > +
> > diff --git a/package/ccache/ccache.mk b/package/ccache/ccache.mk
> > index 30f87f7d90..f2f73a115d 100644
> > --- a/package/ccache/ccache.mk
> > +++ b/package/ccache/ccache.mk
> > @@ -42,16 +42,9 @@ HOST_CCACHE_CONF_OPTS += \
> >   #    so rewrite BR_CACHE_DIR to take that into consideration for SDK
> purpose
> >   HOST_CCACHE_DEFAULT_CCACHE_DIR = $(patsubst
> $(HOME)/%,%,$(BR_CACHE_DIR))
> >
> > -define HOST_CCACHE_PATCH_CONFIGURATION
> > -     sed -i 's,getenv("CCACHE_DIR"),getenv("BR_CACHE_DIR"),'
> $(@D)/src/ccache/config.cpp
> > -     sed -i 's,".ccache","$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",'
> $(@D)/src/ccache/config.cpp
> > -     sed -i 's,"/.cache/ccache","/$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",'
> $(@D)/src/ccache/config.cpp
> > -     sed -i 's,"/.config/ccache","/$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",'
> $(@D)/src/ccache/config.cpp
> > -     sed -i 's,getenv("XDG_CACHE_HOME"),nullptr,'
> $(@D)/src/ccache/config.cpp
> > -     sed -i 's,getenv("XDG_CONFIG_HOME"),nullptr,'
> $(@D)/src/ccache/config.cpp
> > -endef
> > +HOST_CCACHE_CONF_OPTS += \
> > +     -DCMAKE_CXX_FLAGS='$(HOST_CXXFLAGS)
> -DHOST_CCACHE_DEFAULT_CCACHE_DIR=\"$(HOST_CCACHE_DEFAULT_CCACHE_DIR)\"'
> >
> > -HOST_CCACHE_POST_PATCH_HOOKS += HOST_CCACHE_PATCH_CONFIGURATION
> >
> >   define HOST_CCACHE_MAKE_CACHE_DIR
> >       mkdir -p $(BR_CACHE_DIR)
>
>

[-- Attachment #1.2: Type: text/html, Size: 14359 bytes --]

[-- Attachment #2: Type: text/plain, Size: 150 bytes --]

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Buildroot] [PATCH] DEVELOPERS: add Shubham Chakraborty as ccache maintainer
  2026-03-13 11:07 ` [Buildroot] [PATCH] DEVELOPERS: add Shubham Chakraborty as ccache maintainer Shubham Chakraborty
@ 2026-03-27 20:33   ` Julien Olivain via buildroot
  2026-04-03 10:28   ` Thomas Perale via buildroot
  1 sibling, 0 replies; 6+ messages in thread
From: Julien Olivain via buildroot @ 2026-03-27 20:33 UTC (permalink / raw)
  To: Shubham Chakraborty; +Cc: buildroot

On 13/03/2026 12:07, Shubham Chakraborty wrote:
> Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>

Applied to master, thanks.
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Buildroot] [PATCH] DEVELOPERS: add Shubham Chakraborty as ccache maintainer
  2026-03-13 11:07 ` [Buildroot] [PATCH] DEVELOPERS: add Shubham Chakraborty as ccache maintainer Shubham Chakraborty
  2026-03-27 20:33   ` Julien Olivain via buildroot
@ 2026-04-03 10:28   ` Thomas Perale via buildroot
  1 sibling, 0 replies; 6+ messages in thread
From: Thomas Perale via buildroot @ 2026-04-03 10:28 UTC (permalink / raw)
  To: Shubham Chakraborty; +Cc: Thomas Perale, buildroot

In reply of:
> Signed-off-by: Shubham Chakraborty <chakrabortyshubham66@gmail.com>

Applied to 2025.02.x & 2026.02.x. Thanks

> ---
>  DEVELOPERS | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index ba6ba6b221..124f5dca4e 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -3025,6 +3025,9 @@ F:	package/tunctl/
>  F:	package/ubus/
>  F:	package/wolfssl/
>  
> +N:	Shubham Chakraborty <chakrabortyshubham66@gmail.com>
> +F:	package/ccache
> +
>  N:	Simon Dawson <spdawson@gmail.com>
>  F:	boot/at91bootstrap3/
>  F:	package/cppzmq/
> -- 
> 2.53.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-04-03 10:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-13 11:07 [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories Shubham Chakraborty
2026-03-13 11:07 ` [Buildroot] [PATCH] DEVELOPERS: add Shubham Chakraborty as ccache maintainer Shubham Chakraborty
2026-03-27 20:33   ` Julien Olivain via buildroot
2026-04-03 10:28   ` Thomas Perale via buildroot
2026-03-13 17:06 ` [Buildroot] [PATCH] package/host-ccache: force use of BR_CACHE_DIR instead of user directories Fiona Klute via buildroot
2026-03-13 17:21   ` Shubham Chakraborty

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox