# This file is part of MXE. See LICENSE.md for licensing information.

PKG             := ccache
$(PKG)_WEBSITE  := https://ccache.samba.org
$(PKG)_DESCR    := ccache – a fast compiler cache
$(PKG)_IGNORE   :=
$(PKG)_VERSION  := 3.6
$(PKG)_CHECKSUM := a6b129576328fcefad00cb72035bc87bc98b6a76aec0f4b59bed76d67a399b1f
$(PKG)_SUBDIR   := ccache-$($(PKG)_VERSION)
$(PKG)_FILE     := ccache-$($(PKG)_VERSION).tar.xz
$(PKG)_URL      := https://www.samba.org/ftp/ccache/ccache-$($(PKG)_VERSION).tar.xz
$(PKG)_DEPS     := $(BUILD)~$(PKG)
$(PKG)_TARGETS  := $(BUILD) $(MXE_TARGETS)

$(PKG)_DEPS_$(BUILD) :=

define $(PKG)_UPDATE
    $(call GET_LATEST_VERSION, https://www.samba.org/ftp/ccache)
endef

BOOTSTRAP_PKGS += ccache

$(PKG)_SYS_CONF := $(MXE_CCACHE_DIR)/etc/$(PKG).conf
$(PKG)_USR_CONF := $(MXE_CCACHE_CACHE_DIR)/$(PKG).conf

ifeq (mxe,$(MXE_USE_CCACHE))
define $(PKG)_BUILD_$(BUILD)
    # remove any previous symlinks
    rm -fv '$(PREFIX)/$(BUILD)/bin/$(BUILD_CC)' '$(PREFIX)/$(BUILD)/bin/$(BUILD_CXX)'

    # minimal reqs build with bundled zlib
    cd '$(BUILD_DIR)' && $(SOURCE_DIR)/configure \
        $(MXE_CONFIGURE_OPTS) \
        --with-bundled-zlib \
        --disable-man \
        --prefix='$(MXE_CCACHE_DIR)' \
        --sysconfdir='$(dir $($(PKG)_SYS_CONF))'
    $(MAKE) -C '$(BUILD_DIR)' -j '$(JOBS)' $(MXE_DISABLE_DOCS)
    $(MAKE) -C '$(BUILD_DIR)' -j 1 install $(MXE_DISABLE_DOCS)

    # setup symlinks
    ln -sf '$(MXE_CCACHE_DIR)/bin/ccache' '$(PREFIX)/$(BUILD)/bin/$(BUILD_CC)'
    ln -sf '$(MXE_CCACHE_DIR)/bin/ccache' '$(PREFIX)/$(BUILD)/bin/$(BUILD_CXX)'

    # https://ccache.samba.org/manual/latest.html#_configuration_settings
    # always set/replace mxe `system` config
    mkdir -p '$(dir $($(PKG)_SYS_CONF))'
    (echo '# ccache system config'; \
     echo '# this file is controlled by mxe, user config is in:'; \
     echo '# $($(PKG)_USR_CONF)'; \
     echo; \
     echo 'base_dir = $(MXE_CCACHE_BASE_DIR)'; \
     echo 'cache_dir = $(MXE_CCACHE_CACHE_DIR)'; \
     echo 'compiler_check = %compiler% -v'; \
     ) > '$($(PKG)_SYS_CONF)'

    # leave user config alone if set
    [ -f '$($(PKG)_USR_CONF)' ] || \
    (mkdir -p '$(dir $($(PKG)_USR_CONF))' && \
    (echo '# ccache user config'; \
     echo '# https://ccache.samba.org/manual/latest.html#_configuration_settings'; \
     echo '# system config: $($(PKG)_SYS_CONF)'; \
     echo; \
     echo 'max_size = 20.0G'; \
     ) > '$($(PKG)_USR_CONF)')
endef

define $(PKG)_BUILD
    # setup symlinks
    ln -sf '$(MXE_CCACHE_DIR)/bin/ccache' '$(PREFIX)/$(BUILD)/bin/$(TARGET)-gcc'
    ln -sf '$(MXE_CCACHE_DIR)/bin/ccache' '$(PREFIX)/$(BUILD)/bin/$(TARGET)-g++'

    # setup cmake toolchain to allow runtime override
    # CMAKE_CXX_COMPILER_LAUNCHER shows original cc and isn't clear in logs etc.
    mkdir -p '$(CMAKE_TOOLCHAIN_DIR)'
    (echo 'option(MXE_USE_CCACHE "Enable ccache by default" ON)'; \
     echo 'if(MXE_USE_CCACHE)'; \
     echo '  set(CMAKE_C_COMPILER $(PREFIX)/$(BUILD)/bin/$(TARGET)-gcc)'; \
     echo '  set(CMAKE_CXX_COMPILER $(PREFIX)/$(BUILD)/bin/$(TARGET)-g++)'; \
     echo 'endif()'; \
     ) > '$(CMAKE_TOOLCHAIN_DIR)/$(PKG).cmake'
endef
else
define $(PKG)_BUILD_$(BUILD)
    # remove symlinks
    rm -fv '$(PREFIX)/$(BUILD)/bin/$(BUILD_CC)' '$(PREFIX)/$(BUILD)/bin/$(BUILD_CXX)'
endef

define $(PKG)_BUILD
    # remove symlinks and cmake toolchain
    rm -fv '$(PREFIX)/$(BUILD)/bin/$(TARGET)-'*
    rm -fv '$(CMAKE_TOOLCHAIN_DIR)/$(PKG).cmake'
endef
endif