#!/bin/sh -e # Copyright @BABOLO (C)2004 .. 2012 http://www.babolo.ru/ # 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. # # $Id: MAKE,v 1.81 2018/04/27 17:42:30 babolo Exp $ mv=/bin/mv ln=/bin/ln rm=/bin/rm cat=/bin/cat sed=/usr/bin/sed diff=/usr/bin/diff find=/usr/bin/find make=/usr/bin/make uname=/usr/bin/uname readlink=/usr/bin/readlink LOCALDIR=/home/LOCAL PORTSDIR=/usr/ports srcdir=/usr/src osverlist="`${uname} -r | ${sed} -Ee 's|[^0-9].*$||'`" if [ -e /usr/local/etc/srcUP.conf ]; then . /usr/local/etc/srcUP.conf fi case ${1} in in) shift ;; *) echo "Ill comm ${1}" exit 1 ;; esac if [ -n "${baseversrcdir}" ]; then osverlist="4 5 6 7 8 9 10 11 12" fi cd ${LOCALDIR} ex=0 for i in `echo */Makefile.local | ${sed} -e "s|/Makefile.local||g"`; do case ${i} in ports|usr) md="" ;; *) md="${i}/" ;; esac mf="${md}Makefile.local" if [ -L ${mf} ]; then if [ `${readlink} ${mf}` != "${PORTSDIR}/${mf}" ]; then echo "Ошибка: ${mf} ссылается не на ${PORTSDIR}/${mf}" ex=1 elif [ ! -f ${mf} ]; then echo "Ошибка: ${mf}/ не файл" ex=1 fi elif [ -f ${mf} ]; then if [ -e ${PORTSDIR}/${mf} ]; then echo "Предупреждение: ${PORTSDIR}/${mf} существует" set +e ${diff} ${mf} ${PORTSDIR}/${mf} exx=$? set -e if [ "${exx}" != "0" ]; then ex=${exx} fi ${rm} ${PORTSDIR}/${mf} fi ${mv} ${mf} ${PORTSDIR}/${md} ${ln} -s ${PORTSDIR}/${mf} ${mf} elif [ -e ${mf} ]; then echo "Ошибка: ${mf} существует, но не ссылка и не файл" ex=1 else echo "Ошибка: ${mf} не существует" ex=1 fi for j in `${make} -f ${mf} -V SUBDIR`; do if [ -L ${md}${j} ]; then if [ `${readlink} ${md}${j}` != "${PORTSDIR}/${md}${j}" ] then echo "Ошибка: ${md}${j} ссылается не на ${PORTSDIR}/${md}${j}" ex=1 elif [ ! -d ${md}${j} ]; then echo "Ошибка: ${md}${j}/ не каталог" ex=1 fi elif [ -d ${md}${j} ]; then if [ ! -e ${PORTSDIR}/${md}${j} ]; then ${mv} ${md}${j} ${PORTSDIR}/${md} ${ln} -s ${PORTSDIR}/${md}${j} ${md}${j} elif ${diff} -qr ${md}${j} ${PORTSDIR}/${md}${j}; then ${rm} -rf ${md}${j} ${ln} -s ${PORTSDIR}/${md}${j} ${md}${j} else echo "Ошибка: ${PORTSDIR}/${md}${j} существует" ex=1 fi elif [ -e ${md}${j} ]; then echo "Ошибка: ${md}${j} существует, но не ссылка" ex=1 elif [ -d ${PORTSDIR}/${md}${j} ]; then echo "Предупреждение: ${md}${j} не существовало" ${ln} -s ${PORTSDIR}/${md}${j} ${md}${j} else echo "Ошибка: ${md}${j} не существует" ex=1 fi done done for p in amd64 i386; do for osver in ${osverlist}; do if [ -n "${baseversrcdir}" ]; then srcdir="${baseversrcdir}${osver}" fi SYSCFDIR=${srcdir}/sys/${p}/conf if [ -d "${LOCALDIR}/NON_ports/kern${osver}config-${p}" -a -d "${SYSCFDIR}" ]; then cd "${LOCALDIR}/NON_ports/kern${osver}config-${p}" for i in `${find} . -depth 1 -type f | ${sed} -e 's|^\./||'`; do if [ -L ${i} ]; then if [ `${readlink} ${i}` != "${SYSCFDIR}/${i}" ]; then echo "Ошибка: ${i} ссылается не на ${SYSCFDIR}/${i}" ex=1 elif [ ! -f ${i} ]; then echo "Ошибка: ${i} не файл" ex=1 fi elif [ -f ${i} ]; then if [ ! -e ${SYSCFDIR}/${i} ]; then ${mv} ${i} ${SYSCFDIR}/${i} ${ln} -s ${SYSCFDIR}/${i} ${i} else set +e ${diff} ${i} ${SYSCFDIR}/${i} > /dev/null 2>&1 exx=$? set -e if [ "${exx}" = "0" ]; then ${rm} ${i} ${ln} -s ${SYSCFDIR}/${i} ${i} else echo "Ошибка: ${SYSCFDIR}/${i} существует" ${diff} ${i} ${SYSCFDIR}/${i} || : fi; fi elif [ -e ${i} ]; then echo "Ошибка: ${i} существует, но не ссылка" ex=1 elif [ -f ${SYSCFDIR}/${i} ]; then echo "Предупреждение: ${i} не существовало" ${ln} -s ${SYSCFDIR}/${i} ${i} else echo "Ошибка: ${i} не существовует" ex=1 fi done fi done done if [ "${ex}" != "0" ]; then echo "Возможно, требуется ручное вмешательство" fi exit ${ex}