Building openjdk-11 fails with FEATURES=ccache enabled. configure: Please use --enable-ccache instead of providing a wrapped compiler. configure: error: /usr/lib/ccache/bin/x86_64-pc-linux-gnu-gcc is a symbolic link to ccache. This is not supported. Perhaps a check for this could be added to pkg_pretend? if has ccache ${FEATURES:-none}; then die "FEATURES=ccache is unsupported for this package" fi Also, it would be nice if the --enable-ccache configure option was exposed via a USE flag.
Thanks. as a workaround you can try passing --enable-ccache via EXTRA_ECONF and disable FEATURES=ccache for openjdk. Last time I tried openjdk's build system did it's own handing of ccache, ignoring portage/system settings. I'd rather disable it completely than try to wrap it into portage, so not sure about use flag, I'll poke around and see how things are now.
it's still a mess. it will die if detects ccache symlink and with no ccache in FEATURES but with --enable-ccache it'll blow up on sandbox violations. will just die in pkg_pretend.
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6136f3c691e05e542e644be851bea9f035337fdd commit 6136f3c691e05e542e644be851bea9f035337fdd Author: Georgy Yakovlev <gyakovlev@gentoo.org> AuthorDate: 2019-02-13 20:42:17 +0000 Commit: Georgy Yakovlev <gyakovlev@gentoo.org> CommitDate: 2019-02-13 20:42:55 +0000 dev-java/openjdk: die if FEATURES=ccache ./configure will die anyway, so we die a bit earlier before unpacking. openjdk wants to handle ccache itself and ignores portage or system settings. Bug: https://bugs.gentoo.org/677876 Package-Manager: Portage-2.3.60, Repoman-2.3.12 Signed-off-by: Georgy Yakovlev <gyakovlev@gentoo.org> dev-java/openjdk/openjdk-11.0.1_p13.ebuild | 1 + dev-java/openjdk/openjdk-11.0.2_p7.ebuild | 1 + dev-java/openjdk/openjdk-8.202_p08.ebuild | 1 + 3 files changed, 3 insertions(+)
why don't you export CCACHE_DISABLE=1 ? per man ccache: disable (CCACHE_DISABLE or CCACHE_NODISABLE, see Boolean values above) When true, ccache will just call the real compiler, bypassing the cache completely. The default is false. And export CCACHE_DISABLE=1 is being used by nvidia-drivers ebuilds without issues Thanks!
(In reply to Pacho Ramos from comment #4) The configure check would probably still fail, regardless of that environment variable.
yep, it's jdk build system that checks for ccache and complains. I'll test it though, I don't like blowing up in user's face with that feature enabled, but we can't RESTRICT ccache unfortunately to disable it.
autoconf/toolchain.m4 571: # We can't handle ccache by gcc wrappers, since we need to know if we're 572: # using ccache. Instead ccache usage must be controlled by a configure option. 574: if test "x$COMPILER_BASENAME" = "xccache"; then 575: AC_MSG_NOTICE([Please use --enable-ccache instead of providing a wrapped compiler.]) 576: AC_MSG_ERROR([$TEST_COMPILER is a symbolic link to ccache. This is not supported.]) well, without this ugly hack (stripping ccache from PATH) PATH="${PATH/\/usr\/lib\/ccache\/bin\:/}" configure still fails with CCACHE_DISABLE=1 I guess with CCACHE_DISABLE=1 and PATH="${PATH/\/usr\/lib\/ccache\/bin\:/}" set just before running econf can potentially disable ccache pretty transparently. even if ccache got run it promises to keep call gcc directly. but I don't like modifying path like that.
Created attachment 574094 [details, diff] openjdk-ccache.patch I kinda made ccache work with it CCACHE_DIR=/var/cache/ccache ccache -s cache directory /var/cache/ccache primary config /var/cache/ccache/ccache.conf secondary config (readonly) /etc/ccache.conf stats updated Wed Apr 24 22:39:07 2019 cache hit (direct) 0 cache hit (preprocessed) 0 cache miss 3576 cache hit rate 0.00 % cleanups performed 0 files in cache 10501 cache size 10.8 MB max cache size 5.0 GB CCACHE_DIR=/var/cache/ccache ccache -s cache directory /var/cache/ccache primary config /var/cache/ccache/ccache.conf secondary config (readonly) /etc/ccache.conf stats updated Wed Apr 24 22:44:37 2019 cache hit (direct) 3269 cache hit (preprocessed) 305 cache miss 3578 cache hit rate 49.97 % cleanups performed 0 files in cache 10521 cache size 10.8 MB max cache size but idk if it's a good idea to do that. opinions? diff attached.
Personally I would opt for disabling ccache with CCACHE_DISABLE=1 (as it seems upstream doesn't want it) and dropping the ugly check from configure
Created attachment 637826 [details] emerge.txt Hi everyone! I get an error while installing as a binary package: * openjdk-8.242.tbz2 MD5 SHA1 size ;-) ... [ ok ] * ERROR: dev-java/openjdk-8.242::gentoo failed (pretend phase): * FEATURES=ccache doesn't work with openjdk * * Call stack: * ebuild.sh, line 125: Called pkg_pretend * environment, line 4492: Called die * The specific snippet of code: * has ccache ${FEATURES} && die "FEATURES=ccache doesn't work with ${PN}" * * If you need support, post the output of `emerge --info '=dev-java/openjdk-8.242::gentoo'`, * the complete build log and the output of `emerge -pqv '=dev-java/openjdk-8.242::gentoo'`. Can you exclude the ccache feature checking for binary packages?
I completely forgot about dev-java/openjdk-bin Does it make sense to fix this?
yeah, it's possible to fix, thanks for catching it should not die if the binpkg is being installed.
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=91385d013bd1fbc0c8a8e5bc5ec43d8e0f3906f5 commit 91385d013bd1fbc0c8a8e5bc5ec43d8e0f3906f5 Author: Georgy Yakovlev <gyakovlev@gentoo.org> AuthorDate: 2020-05-11 04:42:25 +0000 Commit: Georgy Yakovlev <gyakovlev@gentoo.org> CommitDate: 2020-05-11 04:42:54 +0000 dev-java/openjdk: don't die on ccache if binpkg is being used Bug: https://bugs.gentoo.org/677876 Package-Manager: Portage-2.3.99, Repoman-2.3.22 Signed-off-by: Georgy Yakovlev <gyakovlev@gentoo.org> dev-java/openjdk/openjdk-11.0.7_p10.ebuild | 4 +++- dev-java/openjdk/openjdk-8.252_p09.ebuild | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-)
Created attachment 757227 [details, diff] openjdk-ccache.patch I don't see any issues with --enable-ccache=no and removed symlink checking in make/autoconf/toolchain.m4. With this configuration openjdk compiles fine and still uses ccache via wrapper without any issues. Patch attached.
Same with openjdk-11.0.13_p8: * Messages for package dev-java/openjdk-11.0.13_p8: * ERROR: dev-java/openjdk-11.0.13_p8::gentoo failed (pretend phase): * FEATURES=ccache doesn't work with openjdk, bug #677876
Another workaround: echo 'dev-java/openjdk without_ccache.conf' >> /etc/portage/package.env echo 'FEATURES="-ccache"' >> /etc/portage/env/without_ccache.conf It will disabled the FEATURES just for openjdk.
(In reply to Azamat H. Hackimov from comment #14) > Created attachment 757227 [details, diff] [details, diff] > openjdk-ccache.patch > > I don't see any issues with --enable-ccache=no and removed symlink checking > in make/autoconf/toolchain.m4. With this configuration openjdk compiles fine > and still uses ccache via wrapper without any issues. > Patch attached. It works like a charm even for dev-java/openjdk-17.0.6_p10. Thank you, Azamat!
I got same issue compiling dev-java/openjdk-17.0.6_p10 with FEATURES="-ccache" Tried-out some workaround given here but couldn't get it compiling.
what is the current proper way to disable ccache for openjdk? I got the warning, so I've put FEATURES="-ccache" into /etc/portage/env/dev-java/openjdk now I'm getting past the warning, but it still fails with the error below note that this looks like total nonsense, no ccache symlinks should be involved # which x86_64-pc-linux-gnu-gcc /usr/bin/x86_64-pc-linux-gnu-gcc # ls -l /usr/bin/x86_64-pc-linux-gnu-gcc lrwxrwxrwx 1 root root 59 8. říj 09.38 /usr/bin/x86_64-pc-linux-gnu-gcc -> /usr/x86_64-pc-linux-gnu/gcc-bin/13/x86_64-pc-linux-gnu-gcc where /usr/x86_64-pc-linux-gnu/gcc-bin/13/x86_64-pc-linux-gnu-gcc is the real gcc binary, no ccache in the chain from emerge output: >>> Configuring source in /var/tmp/portage/dev-java/openjdk-17.0.8.1_p1/work/jdk17u-jdk-17.0.8.1-ga ... * ACCESS DENIED: symlink: /var/cache/ccache/2/9/stats.lock ... configure: Using default toolchain gcc (GNU Compiler Collection) checking for x86_64-pc-linux-gnu-gcc... /usr/lib/ccache/bin/x86_64-pc-linux-gnu-gcc checking resolved symbolic links for CC... /usr/bin/ccache configure: Please use --enable-ccache instead of providing a wrapped compiler. configure: error: /usr/lib/ccache/bin/x86_64-pc-linux-gnu-gcc is a symbolic link to ccache. This is not supported. configure exiting with result code 1 !!! Please attach the following file when seeking support: !!! /var/tmp/portage/dev-java/openjdk-17.0.8.1_p1/work/jdk17u-jdk-17.0.8.1-ga/config.log * ERROR: dev-java/openjdk-17.0.8.1_p1::gentoo failed (configure phase): * econf failed * * Call stack: * ebuild.sh, line 136: Called src_configure * environment, line 4041: Called econf '--disable-ccache' '--disable-precompiled-headers' '--disable-warnings-as-errors' '--enable-full-docs=no' '--with-boot-jdk=/opt/openjdk-bin-17.0.8.1_p1' '--with-extra-cflags=-march=native -O2 -pipe -fcommon' '--with-extra-cxxflags=-march=native -O2 -pipe -fcommon' '--with-extra-ldflags=-Wl,-O1 -Wl,--as-needed' '--with-freetype=system' '--with-giflib=system' '--with-harfbuzz=system' '--with-lcms=system' '--with-libjpeg=system' '--with-libpng=system' '--with-native-debug-symbols=none' '--with-vendor-name=Gentoo' '--with-vendor-url=https://gentoo.org' '--with-vendor-bug-url=https://bugs.gentoo.org' '--with-vendor-vm-bug-url=https://bugs.openjdk.java.net' '--with-vendor-version-string=17.0.8.1_p1' '--with-version-pre=' '--with-version-string=17.0.8.1' '--with-version-build=1' '--with-zlib=system' '--enable-jvm-feature-dtrace=no' '--enable-headless-only=no' * phase-helpers.sh, line 732: Called __helpers_die 'econf failed' * isolated-functions.sh, line 112: Called die * The specific snippet of code: * die "$@" * * If you need support, post the output of `emerge --info '=dev-java/openjdk-17.0.8.1_p1::gentoo'`, * the complete build log and the output of `emerge -pqv '=dev-java/openjdk-17.0.8.1_p1::gentoo'`. !!! When you file a bug report, please include the following information: GENTOO_VM=openjdk-bin-17 CLASSPATH="" JAVA_HOME="/opt/openjdk-bin-17.0.8.1_p1" JAVACFLAGS="-source 17 -target 17" COMPILER="" and of course, the output of emerge --info =openjdk-17.0.8.1_p1 * The complete build log is located at '/var/tmp/portage/dev-java/openjdk-17.0.8.1_p1/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/dev-java/openjdk-17.0.8.1_p1/temp/environment'. * Working directory: '/var/tmp/portage/dev-java/openjdk-17.0.8.1_p1/work/jdk17u-jdk-17.0.8.1-ga' * S: '/var/tmp/portage/dev-java/openjdk-17.0.8.1_p1/work/jdk17u-jdk-17.0.8.1-ga' * ----------------------- SANDBOX ACCESS VIOLATION SUMMARY ----------------------- * LOG FILE: "/var/tmp/portage/dev-java/openjdk-17.0.8.1_p1/temp/sandbox.log" * VERSION 1.0 FORMAT: F - Function called FORMAT: S - Access Status FORMAT: P - Path as passed to function FORMAT: A - Absolute Path (not canonical) FORMAT: R - Canonical Path FORMAT: C - Command Line F: symlink S: deny P: /var/cache/ccache/2/9/stats.lock A: /var/cache/ccache/2/9/stats.lock R: /var/cache/ccache/2/9/stats.lock C: x86_64-pc-linux-gnu-gcc -E -E -P - * -------------------------------------------------------------------------------- >>> Failed to emerge dev-java/openjdk-17.0.8.1_p1, Log file: ...
This still works: (In reply to Sébastien P. from comment #16) > Another workaround: > echo 'dev-java/openjdk without_ccache.conf' >> /etc/portage/package.env > echo 'FEATURES="-ccache"' >> /etc/portage/env/without_ccache.conf > > It will disabled the FEATURES just for openjdk. I do not understand why “/etc/portage/env/<category>/<package_name>” does not work in your case. It should but according to: https://wiki.gentoo.org/wiki//etc/portage/package.env > If all that is needed is to set environment variables, use a free-form file name directly in /etc/portage/env, then add a line in /etc/portage/package.env with a package atom followed by the chosen file name, like in the following examples. Same thing on man: > Note that if package-specific environment variable settings are all that’s needed, then /etc/portage/package.env should be used instead of the bashrc approach that is describe here. Also note that special variables such as FEATURES and INSTALL_MASK will not produce the intended results if they are set in bashrc, and therefore /etc/portage/package.env should be used instead.
Any news regarding this? I've been testing and by removing ccache checks from the ebuild and applying @Azamat H. Hackimov patch it compiles (and runs) perfectly with ccache. I think it is an acceptable solution.
Does the error persist with 11.0.22_p7 or any other presently stable version? If so, please update the summary.
Created attachment 890726 [details] Modified ebuild for openjdk-17 The code quoted in https://bugs.gentoo.org/677876#c7 is still present in openjdk-17.0.10_p7. Patch of Azamat H. Hackimov is still working with some modification in the ebuild (I am using what Georgy Yakovlev have done): --- /usr/portage/dev-java/openjdk/openjdk-17.0.10_p7.ebuild 2024-04-11 17:11:04.000000000 +0200 +++ /usr/local/portage/dev-java/openjdk/openjdk-17.0.10_p7-r9999.ebuild 2024-04-13 15:41:03.524000000 +0200 @@ -110,6 +110,10 @@ ) " +PATCHES=( + "${FILESDIR}/openjdk-ccache.patch" +) + S="${WORKDIR}/jdk${SLOT}u-jdk-${MY_PV//+/-}" # The space required to build varies wildly depending on USE flags, @@ -127,9 +131,6 @@ pkg_pretend() { openjdk_check_requirements - if [[ ${MERGE_TYPE} != binary ]]; then - has ccache ${FEATURES} && die "FEATURES=ccache doesn't work with ${PN}, bug #677876" - fi } pkg_setup() { @@ -198,7 +199,6 @@ # graphviz are detected. pandoc has loads of dependencies anyway. local myconf=( - --disable-ccache --disable-precompiled-headers --disable-warnings-as-errors --enable-full-docs=no @@ -227,6 +227,14 @@ $(tc-is-clang && echo "--with-toolchain-type=clang") ) + if has ccache ${FEATURES}; then + myconf+=( --enable-ccache ) + myconf+=( --with-ccache-dir=${CCACHE_DIR} ) + else + export CCACHE_DISABLE=1 + myconf+=( --disable-ccache ) + fi + use lto && myconf+=( --with-jvm-features=link-time-opt ) if use javafx; then Hits are increasing: # ccache -s Cacheable calls: 1809163 / 2115656 (85.51%) Hits: 453181 / 1809163 (25.05%) Direct: 409479 / 453181 (90.36%) Preprocessed: 43702 / 453181 ( 9.64%) Misses: 1355982 / 1809163 (74.95%) # ccache -s Cacheable calls: 1809226 / 2115765 (85.51%) Hits: 453244 / 1809226 (25.05%) Direct: 409542 / 453244 (90.36%) Preprocessed: 43702 / 453244 ( 9.64%) Misses: 1355982 / 1809226 (74.95%)
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d57754cd3fe53161d876a8043ec720ed7f0f1d3d commit d57754cd3fe53161d876a8043ec720ed7f0f1d3d Author: Volkmar W. Pogatzki <gentoo@pogatzki.net> AuthorDate: 2024-05-15 21:13:52 +0000 Commit: Miroslav Šulc <fordfrog@gentoo.org> CommitDate: 2024-05-17 09:28:04 +0000 dev-java/openjdk: drop 11.0.22_p7 Bug: https://bugs.gentoo.org/925020 Bug: https://bugs.gentoo.org/916211 Bug: https://bugs.gentoo.org/898978 Bug: https://bugs.gentoo.org/833096 Bug: https://bugs.gentoo.org/907680 Bug: https://bugs.gentoo.org/677876 Bug: https://bugs.gentoo.org/927028 Signed-off-by: Volkmar W. Pogatzki <gentoo@pogatzki.net> Closes: https://github.com/gentoo/gentoo/pull/36690 Signed-off-by: Miroslav Šulc <fordfrog@gentoo.org> dev-java/openjdk/Manifest | 1 - dev-java/openjdk/openjdk-11.0.22_p7.ebuild | 312 ----------------------------- 2 files changed, 313 deletions(-)
Created attachment 895409 [details] openjdk-17.0.11_p9.ebuild Uprade version of the ebuild from portage with patch.
(In reply to Sébastien P. from comment #20) > This still works: > > (In reply to Sébastien P. from comment #16) > > Another workaround: > > echo 'dev-java/openjdk without_ccache.conf' >> /etc/portage/package.env > > echo 'FEATURES="-ccache"' >> /etc/portage/env/without_ccache.conf > > > > It will disabled the FEATURES just for openjdk. > > I do not understand why “/etc/portage/env/<category>/<package_name>” does > not work in your case. It should but according to: > https://wiki.gentoo.org/wiki//etc/portage/package.env > > If all that is needed is to set environment variables, use a free-form file name directly in /etc/portage/env, then add a line in /etc/portage/package.env with a package atom followed by the chosen file name, like in the following examples. > > Same thing on man: > > Note that if package-specific environment variable settings are all that’s needed, then /etc/portage/package.env should be used instead of the bashrc approach that is describe here. Also note that special variables such as FEATURES and INSTALL_MASK will not produce the intended results if they are set in bashrc, and therefore /etc/portage/package.env should be used instead. In case `/etc/portage/package.env` is a directory, the first command (exactly as given) will not work, although that's easily adjusted by appending a more or less arbitrary filename, say, "openjdk". ;-) Something like the snippet below SHOULD work: --- ( penv=/etc/portage/package.env ! [ -d $penv ] || penv+=/openjdk # replace by penv=$penv/openjdk for POSIX echo 'dev-java/openjdk no-ccache.conf' >> $penv ) echo 'FEATURES="-ccache"' >> /etc/portage/env/no-ccache.conf --- BTW, I still got breakage for 17.0.13_p11 and 11.0.25_p9 without the above surgical configuration adjustments.