#!/usr/bin/sh
#----------------------------------------------------------------------------
# /tmp/install.sh - clang21 installation
#
# Creation   :  2025-12-03 holbru
# Last update:  $Id$
#
# Copyright (c) 2025-@@YEAR@@ Holger Bruenjes, holgerbruenjes(at)gmx(dot)net
#
# 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 2 of the License, or
# (at your option) any later version.
#----------------------------------------------------------------------------

# set package name
package_name=clang21

# ---------------------------------------------------------------------------
# activate
# ---------------------------------------------------------------------------
ver=21
veri=2118

/usr/sbin/update-alternatives \
   --install /usr/bin/clang clang /usr/bin/clang-${ver} ${veri} \
   --slave /usr/bin/amdgpu-arch amdgpu-arch /usr/bin/amdgpu-arch-${veri} \
   --slave /usr/bin/c-index-test c-index-test /usr/bin/c-index-test-${ver} \
   --slave /usr/bin/clang++ clang++ /usr/bin/clang++-${ver} \
   --slave /usr/bin/clang-apply-replacements clang-apply-replacements /usr/bin/clang-apply-replacements-${ver} \
   --slave /usr/bin/clang-change-namespace clang-change-namespace /usr/bin/clang-change-namespace-${ver} \
   --slave /usr/bin/clang-check clang-check /usr/bin/clang-check-${ver} \
   --slave /usr/bin/clang-cl clang-cl /usr/bin/clang-cl-${ver} \
   --slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${ver} \
   --slave /usr/bin/clang-extdef-mapping clang-extdef-mapping /usr/bin/clang-extdef-mapping-${ver} \
   --slave /usr/bin/clang-format clang-format /usr/bin/clang-format-${ver} \
   --slave /usr/bin/clang-include-cleaner clang-include-cleaner /usr/bin/clang-include-cleaner-${ver} \
   --slave /usr/bin/clang-include-fixer clang-include-fixer /usr/bin/clang-include-fixer-${ver} \
   --slave /usr/bin/clang-linker-wrapper clang-linker-wrapper /usr/bin/clang-linker-wrapper-${ver} \
   --slave /usr/bin/clang-move clang-move /usr/bin/clang-move-${ver} \
   --slave /usr/bin/clang-offload-bundler clang-offload-bundler /usr/bin/clang-offload-bundler-${ver} \
   --slave /usr/bin/clang-offload-packager clang-offload-packager /usr/bin/clang-offload-packager-${ver} \
   --slave /usr/bin/clang-pseudo clang-pseudo /usr/bin/clang-pseudo-${ver} \
   --slave /usr/bin/clang-query clang-query /usr/bin/clang-query-${ver} \
   --slave /usr/bin/clang-refactor clang-refactor /usr/bin/clang-refactor-${ver} \
   --slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-${ver} \
   --slave /usr/bin/clang-reorder-fields clang-reorder-fields /usr/bin/clang-reorder-fields-${ver} \
   --slave /usr/bin/clang-scan-deps clang-scan-deps /usr/bin/clang-scan-deps-${ver} \
   --slave /usr/bin/clang-tblgen clang-tblgen /usr/bin/clang-tblgen-${ver} \
   --slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-${ver} \
   --slave /usr/bin/clangd clangd /usr/bin/clangd-${ver} \
   --slave /usr/bin/diagtool diagtool /usr/bin/diagtool-${ver} \
   --slave /usr/bin/find-all-symbols find-all-symbols /usr/bin/find-all-symbols-${ver} \
   --slave /usr/bin/modularize modularize /usr/bin/modularize-${ver} \
   --slave /usr/bin/pp-trace pp-trace /usr/bin/pp-trace-${ver}

# activate the best version
/usr/sbin/update-alternatives --auto clang

# check what is the best version
best=$(/usr/sbin/update-alternatives --query clang | /usr/bin/gawk '/Best/ {print $2}')

# if the best version not this version, use this version manual
if ! echo "${best}" | /usr/bin/grep -q "${ver}"
then
    echo "clang manual /usr/bin/clang-${ver}" | /usr/sbin/update-alternatives --set-selections  >/dev/null 2>&1
fi
    
inst_llvm=$(eisman check llvm${ver})
if [ "${inst_llvm}" = "installed" ]
then
    # activate the best version
    /usr/sbin/update-alternatives --auto llvm-ar

    # check what is the best version
    best=$(/usr/sbin/update-alternatives --query llvm-ar | /usr/bin/gawk '/Best/ {print $2}')

    # if the best version not this version, use this version manual
    if ! echo "${best}" | /usr/bin/grep -q "${ver}"
    then
        echo "llvm-ar manual /usr/bin/llvm-ar-${ver}" | /usr/sbin/update-alternatives --set-selections  >/dev/null 2>&1
    fi
fi

inst_lld=$(eisman check lld${ver})
if [ "${inst_lld}" = "installed" ]
then
    # activate the best version
    /usr/sbin/update-alternatives --auto lld

    # check what is the best version
    best=$(/usr/sbin/update-alternatives --query lld | /usr/bin/gawk '/Best/ {print $2}')

    # if the best version not this version, use this version manual
    if ! echo "${best}" | /usr/bin/grep -q "${ver}"
    then
        echo "lld manual /usr/bin/lld-${ver}" | /usr/sbin/update-alternatives --set-selections  >/dev/null 2>&1
    fi

    # activate the best version
    /usr/sbin/update-alternatives --auto ld

    # check what is the best version
    best=$(/usr/sbin/update-alternatives --query ld | /usr/bin/gawk '/Best/ {print $2}')

    # if the best version not this version, use this version manual
    if ! echo "${best}" | /usr/bin/grep -q "${ver}"
    then
        echo "ld manual /usr/bin/ld-${ver}" | /usr/sbin/update-alternatives --set-selections  >/dev/null 2>&1
    fi
fi

exit 0
# ---------------------------------------------------------------------------
# end
# ---------------------------------------------------------------------------
