#!/bin/sh
# Copyright (C) 2002, 2005  Slackware Linux, Inc.
# Copyright 2005, 2006, 2011, 2012, 2018, 2026  Patrick J. Volkerding, Sebeka, Minnesota, USA
#
# 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.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# Swap glibc on the fly.
#
# If we're on a running system we have to handle this _very_ carefully.  :-)
# The tricks involved here get trickier every time...

# Install the glibc libraries.
# Try to protect with flock against another installpkg/removepkg running
# ldconfig while we're doing the on-the-fly install:
mkdir -p run/lock/pkgtools
( flock 9 || exit 11
  ( cd lib@@LIBDIRSUFFIX@@/incoming

    # Everything's going files these days. Otherwise the well-loved Easy Anti
    # Cheat thinks that we're tampering with the system. These have been
    # symlinks since the beginning, but we better go along with the times. The
    # first thing we'll do is make sure that if any of these are symlinks in
    # /lib@@LIBDIRSUFFIX@@, make them into files.
    for library in * ; do
      if [ -L ../${library} ]; then
        ( cd .. ; mv $(readlink ${library}) ${library} )
      fi
    done

    # OK, we've made sure all of those are files, not symlinks, and gotten rid
    # of the most recent set of linked files (e.g. libc-2.42.so) that was in
    # use. If there's other junk in your /lib@@LIBDIRSUFFIX@@ for some reason, we won't worry
    # about that because ldconfig won't link over a file. You might see some
    # warnings about it though.

    # Since libcrypt remains symlinked, we do need to ensure there are no old
    # versions that might try to take over the link:
    rm -f ../libcrypt*-2.??.so

    # Send them home:
    mv * ..

    # Get rid of the incoming directory:
    cd ..
    rmdir incoming

  )

) 9> run/lock/pkgtools/ldconfig.lock

