From 9a81ca4486a494603b21790e2c765b4ae6498461 Mon Sep 17 00:00:00 2001 From: Rozhuk Ivan Date: Mon, 21 Dec 2020 06:00:14 +0300 Subject: [PATCH] devel/ccache-devel: add devel ccache 4.8.3 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=252088 --- devel/ccache-devel/Makefile | 113 ++++++++++++++++++ devel/ccache-devel/distinfo | 3 + .../files/ccache-update-links.sh.in | 72 +++++++++++ devel/ccache-devel/files/ccache_clean.in | 71 +++++++++++ devel/ccache-devel/files/world-ccache.in | 9 ++ devel/ccache-devel/pkg-descr | 6 + devel/ccache-devel/pkg-plist | 8 ++ 7 files changed, 282 insertions(+) create mode 100644 devel/ccache-devel/Makefile create mode 100644 devel/ccache-devel/distinfo create mode 100644 devel/ccache-devel/files/ccache-update-links.sh.in create mode 100755 devel/ccache-devel/files/ccache_clean.in create mode 100644 devel/ccache-devel/files/world-ccache.in create mode 100644 devel/ccache-devel/pkg-descr create mode 100644 devel/ccache-devel/pkg-plist diff --git a/devel/ccache-devel/Makefile b/devel/ccache-devel/Makefile new file mode 100644 index 000000000000..2b13f5c3d059 --- /dev/null +++ b/devel/ccache-devel/Makefile @@ -0,0 +1,113 @@ +PORTNAME= ccache +PORTVERSION= 4.8.3 +DISTVERSIONPREFIX= v +CATEGORIES= devel +PKGNAMESUFFIX= -devel + +PATCH_SITES= https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/ +PATCHFILES+= + +MAINTAINER= rozhuk.im@gmail.com +COMMENT= Tool to minimize the compile time of C/C++ programs + +LICENSE= GPLv3+ +LICENSE_FILE= ${WRKSRC}/GPL-3.0.txt + +CONFLICTS_INSTALL?= ccache-[0-9]* ccache-static-[0-9]* \ + ccache-memcached-[0-9]* ccache-memcached-static-[0-9]* + +PORTDOCS= AUTHORS.adoc AUTHORS.html LICENSE.html MANUAL.adoc \ + MANUAL.html NEWS.adoc NEWS.html + +LIB_DEPENDS= libzstd.so:archivers/zstd + +USES= cmake:noninja pathfix pkgconfig shebangfix compiler:c++17-lang +USE_GITHUB= yes +SUB_FILES= world-ccache ccache-update-links.sh ccache_clean +# Prevent infinite recursion. +NO_CCACHE_DEPEND=yes +.export NO_CCACHE_DEPEND + +CMAKE_OFF= WARNINGS_AS_ERRORS \ + ENABLE_IPO \ + ENABLE_TRACING \ + ENABLE_COVERAGE \ + ENABLE_SANITIZER_ADDRESS \ + ENABLE_SANITIZER_MEMORY \ + ENABLE_SANITIZER_UNDEFINED_BEHAVIOR \ + ENABLE_SANITIZER_THREAD \ + ENABLE_CPPCHECK \ + ENABLE_CLANG_TIDY \ + USE_FASTER_LINKER \ + ZSTD_FROM_INTERNET \ + HIREDIS_FROM_INTERNET + +OPTIONS_DEFINE= DOCS CLANGLINK HIREDIS LLVMLINK STATIC TEST +OPTIONS_DEFAULT= CLANGLINK LLVMLINK +OPTIONS_SUB= yes + +DOCS_ALL_TARGET= all doc +DOCS_BUILD_DEPENDS= asciidoctor:textproc/rubygem-asciidoctor +DOCS_CMAKE_BOOL= ENABLE_DOCUMENTATION +DOCS_USES= perl5 + +CLANGLINK_DESC= Create clang compiler links if clang is installed +LLVMLINK_DESC= Create llvm compiler links if llvm is installed + +HIREDIS_DESC= Enable Redis remote storage +HIREDIS_CMAKE_BOOL= REDIS_STORAGE_BACKEND +HIREDIS_LIB_DEPENDS= libhiredis.so:databases/hiredis + +STATIC_CMAKE_BOOL= STATIC_LINK +STATIC_LDFLAGS= -static + +TEST_DEPENDS= bash:shells/bash +TEST_CMAKE_BOOL= ENABLE_TESTING +TEST_TARGET= check + +.include + +CCLINKDIR= libexec/ccache +PLIST_SUB+= CCLINKDIR="${CCLINKDIR}" + +.if ${ARCH}=="i386" +CCACHE_COMPILERS+= icc icpc +.endif + +GNU_COMPILERS+= 48 8 9 10 11 12 13 14 15 16 17 18 19 20 +CCACHE_COMPILERS+= cc c++ CC gcc g++ ${GNU_COMPILERS:S|^|gcc|} \ + ${GNU_COMPILERS:S|^|g++|} \ + ${GNU_COMPILERS:S|^|cpp|} + +.if ${PORT_OPTIONS:MCLANGLINK} +CLANG_COMPILERS+= 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 \ + 26 27 28 29 30 31 32 -devel +CCACHE_COMPILERS+= clang clang++ ${CLANG_COMPILERS:S|^|clang|} \ + ${CLANG_COMPILERS:S|^|clang++|} \ + ${CLANG_COMPILERS:S|^|cpp|} +.endif + +.if ${PORT_OPTIONS:MLLVMLINK} +CCACHE_COMPILERS+= llvm-gcc llvm-c++ llvm-g++ +.endif + +CCACHE_COMPILERS+= ${EXTRA_COMPILERS} +SUB_LIST+= CCACHE_COMPILERS="${CCACHE_COMPILERS}" \ + CCLINKDIR="${CCLINKDIR}" + +post-install: + ${MKDIR} ${STAGEDIR}${PREFIX}/${CCLINKDIR}/world + ${INSTALL_SCRIPT} ${WRKDIR}/world-ccache \ + ${STAGEDIR}${PREFIX}/${CCLINKDIR}/world/ccache + ${INSTALL_SCRIPT} ${WRKDIR}/ccache-update-links.sh \ + ${STAGEDIR}${PREFIX}/bin/ccache-update-links + @${MKDIR} ${STAGEDIR}${PREFIX}/etc/periodic/daily + ${INSTALL_SCRIPT} ${WRKDIR}/ccache_clean \ + ${STAGEDIR}${PREFIX}/etc/periodic/daily + +post-install-DOCS-on: + ${MKDIR} ${STAGEDIR}${DOCSDIR} + ${INSTALL_DATA} ${BUILD_WRKSRC}/doc/*.html ${STAGEDIR}${DOCSDIR} + ${INSTALL_DATA} ${WRKSRC}/doc/*.adoc ${STAGEDIR}${DOCSDIR} + +.include diff --git a/devel/ccache-devel/distinfo b/devel/ccache-devel/distinfo new file mode 100644 index 000000000000..5204cfb2959c --- /dev/null +++ b/devel/ccache-devel/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1694268280 +SHA256 (ccache-ccache-v4.8.3_GH0.tar.gz) = 9418e1c5c9f62ee31d450a2a04a6bbdc7575dc8a0179880cc48c67c721431375 +SIZE (ccache-ccache-v4.8.3_GH0.tar.gz) = 786057 diff --git a/devel/ccache-devel/files/ccache-update-links.sh.in b/devel/ccache-devel/files/ccache-update-links.sh.in new file mode 100644 index 000000000000..15bc180aef2d --- /dev/null +++ b/devel/ccache-devel/files/ccache-update-links.sh.in @@ -0,0 +1,72 @@ +#!/bin/sh +# +# Author: Emanuel Haupt +# +# $FreeBSD: head/devel/ccache/files/ccache-update-links.sh.in 435560 2017-03-06 17:50:14Z bdrewery $ +# + +CCACHE_COMPILERS="%%CCACHE_COMPILERS%% ${EXTRA_COMPILERS}" +CCLINKDIR="%%CCLINKDIR%%" +PREFIX="%%PREFIX%%" + +usage() { + cat << "EOUSAGE" +Usage: ccache-update-links [hv] + +ccache-update-links maintains symlinks needed by ccache to work with additional +compilers. + + -h, --help this help + -v verbose + +EOUSAGE +} + +case "$1" +in + -h|--help) + usage + ;; +esac + +strip_path() { + local IFS=":" + local path + set -- ${PATH} + while [ $# -gt 0 ]; do + if ! [ "${1}" = "${PREFIX}/libexec/ccache" ]; then + path="${path}${path:+:}${1}" + fi + shift + done + echo "${path}" +} + +# Remove ccache wrappers from PATH +PATH=$(strip_path) + +# create compiler links +for comp in ${CCACHE_COMPILERS} +do + if command -v "${comp}" >/dev/null; then + if [ ! -L "${PREFIX}/${CCLINKDIR}/${comp}" ]; then + [ "$1" = "-v" ] && echo "create symlink for ${comp}" + ln -sf ${PREFIX}/bin/ccache ${PREFIX}/${CCLINKDIR}/${comp} + fi + + if [ ! -L "${PREFIX}/${CCLINKDIR}/world/${comp}" ]; then + [ "$1" = "-v" ] && echo "create symlink for ${comp} (world)" + ln -sf ccache ${PREFIX}/${CCLINKDIR}/world/${comp} + fi + else + if [ -L "${PREFIX}/${CCLINKDIR}/${comp}" ]; then + [ "$1" = "-v" ] && echo "remove symlink for ${comp}" + rm -f ${PREFIX}/${CCLINKDIR}/${comp} + fi + + if [ -L "${PREFIX}/${CCLINKDIR}/world/${comp}" ]; then + [ "$1" = "-v" ] && echo "remove symlink for ${comp} (world)" + rm -f ${PREFIX}/${CCLINKDIR}/world/${comp} + fi + fi +done diff --git a/devel/ccache-devel/files/ccache_clean.in b/devel/ccache-devel/files/ccache_clean.in new file mode 100755 index 000000000000..c68d621bba64 --- /dev/null +++ b/devel/ccache-devel/files/ccache_clean.in @@ -0,0 +1,71 @@ +#!/bin/sh +# +# Copyright (c) 2020 Rozhuk Ivan +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. 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. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +# +# $FreeBSD$ +# + +if [ -r /etc/defaults/periodic.conf ]; then + . /etc/defaults/periodic.conf + source_periodic_confs +fi + + +case "${daily_ccache_clean_enable:-YES}" in +[Nn][Oo]) + ;; +*) + SYS_CCACHE_DIR=`make -V CCACHE_DIR` + if [ -z "${SYS_CCACHE_DIR}" ]; then + SYS_CCACHE_DIR='/var/cache/ccache' + fi + if [ -d "${SYS_CCACHE_DIR}" ]; then + echo "ccache dir: ${SYS_CCACHE_DIR}" + env CCACHE_DIR="${SYS_CCACHE_DIR}" \ + /usr/bin/nice -n 15 \ + %%PREFIX%%/bin/ccache --cleanup + fi + + _USERS_HOME_DIRS=`pw usershow -a | awk -F":" '{print $9}' | sort -u` + for _USER_HOME in ${_USERS_HOME_DIRS}; do + if [ -d "${_USER_HOME}/.ccache" ]; then + echo "ccache dir: ${_USER_HOME}/.ccache" + env CCACHE_DIR="${_USER_HOME}/.ccache" \ + /usr/bin/nice -n 15 \ + %%PREFIX%%/bin/ccache --cleanup + fi + if [ -d "${_USER_HOME}/.cache/ccache" ]; then + echo "ccache dir: ${_USER_HOME}/.cache/ccache" + env CCACHE_DIR="${_USER_HOME}/.cache/ccache" \ + CCACHE_CONFIGPATH="${_USER_HOME}/.config/ccache/ccache.conf" \ + /usr/bin/nice -n 15 \ + %%PREFIX%%/bin/ccache --cleanup + fi + done + ;; +esac + + +exit 0 diff --git a/devel/ccache-devel/files/world-ccache.in b/devel/ccache-devel/files/world-ccache.in new file mode 100644 index 000000000000..9803d12b8298 --- /dev/null +++ b/devel/ccache-devel/files/world-ccache.in @@ -0,0 +1,9 @@ +#!/bin/sh + +[ "${0##*/}" = "ccache" ] && + printf "Please, use one of the compiler links in\n%%PREFIX%%/%%CCLINKDIR%%/world\nto invoke ccache\n" >&2 && + exit 1 + +unset CCACHE_PATH +export CCACHE_COMPILERCHECK=content +exec %%PREFIX%%/%%CCLINKDIR%%/${0##*/} "$@" diff --git a/devel/ccache-devel/pkg-descr b/devel/ccache-devel/pkg-descr new file mode 100644 index 000000000000..4ee9e3a189f4 --- /dev/null +++ b/devel/ccache-devel/pkg-descr @@ -0,0 +1,6 @@ +ccache is a compiler cache. It acts as a caching pre-processor to C/C++ +compilers, using the -E compiler switch and a hash to detect when a +compilation can be satisfied from cache. This often results in a 5 to 10 +times speedup in common compilations. + +WWW: https://ccache.samba.org/ diff --git a/devel/ccache-devel/pkg-plist b/devel/ccache-devel/pkg-plist new file mode 100644 index 000000000000..2a8146cc210e --- /dev/null +++ b/devel/ccache-devel/pkg-plist @@ -0,0 +1,8 @@ +etc/periodic/daily/ccache_clean +bin/ccache +bin/ccache-update-links +%%CCLINKDIR%%/world/ccache +%%PORTDOCS%%share/man/man1/ccache.1.gz +@postexec echo "Create compiler links..." +@postexec %D/bin/ccache-update-links -v +@preunexec find %D/%%CCLINKDIR%% -type l -exec rm -f {} \;