From 5fd83771641d15c418f747bd343ba6738d3875f7 Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Sun, 9 May 2021 14:20:58 -0400 Subject: Import macOS userland adv_cmds-176 basic_cmds-55 bootstrap_cmds-116.100.1 developer_cmds-66 diskdev_cmds-667.40.1 doc_cmds-53.60.1 file_cmds-321.40.3 mail_cmds-35 misc_cmds-34 network_cmds-606.40.1 patch_cmds-17 remote_cmds-63 shell_cmds-216.60.1 system_cmds-880.60.2 text_cmds-106 --- bootstrap_cmds/migcom.tproj/mig.sh | 218 +++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 bootstrap_cmds/migcom.tproj/mig.sh (limited to 'bootstrap_cmds/migcom.tproj/mig.sh') diff --git a/bootstrap_cmds/migcom.tproj/mig.sh b/bootstrap_cmds/migcom.tproj/mig.sh new file mode 100644 index 0000000..85cf5a2 --- /dev/null +++ b/bootstrap_cmds/migcom.tproj/mig.sh @@ -0,0 +1,218 @@ +#!/bin/bash +# +# Copyright (c) 1999-2008 Apple Inc. All rights reserved. +# +# @APPLE_LICENSE_HEADER_START@ +# +# "Portions Copyright (c) 1999, 2008 Apple Inc. All Rights +# Reserved. This file contains Original Code and/or Modifications of +# Original Code as defined in and that are subject to the Apple Public +# Source License Version 1.0 (the 'License'). You may not use this file +# except in compliance with the License. Please obtain a copy of the +# License at http://www.apple.com/publicsource and read it before using +# this file. +# +# The Original Code and all software distributed under the License are +# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, +# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the +# License for the specific language governing rights and limitations +# under the License." +# +# @APPLE_LICENSE_HEADER_END@ +# +# Mach Operating System +# Copyright (c) 1991,1990 Carnegie Mellon University +# All Rights Reserved. +# +# Permission to use, copy, modify and distribute this software and its +# documentation is hereby granted, provided that both the copyright +# notice and this permission notice appear in all copies of the +# software, derivative works or modified versions, and any portions +# thereof, and that both notices appear in supporting documentation. +# +# CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" +# CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR +# ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. +# +# Carnegie Mellon requests users of this software to return to +# +# Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU +# School of Computer Science +# Carnegie Mellon University +# Pittsburgh PA 15213-3890 +# +# any improvements or extensions that they make and grant Carnegie Mellon +# the rights to redistribute these changes. +# + +realpath() +{ + local FILE="$1" + local PARENT=$(dirname "$FILE") + local BASE=$(basename "$FILE") + pushd "$PARENT" >/dev/null 2>&1 || return 0 + local DIR=$(pwd -P) + popd >/dev/null + if [ "$DIR" == "/" ]; then + echo "/$BASE" + else + echo "$DIR/$BASE" + fi + return 1 +} + +scriptPath=$(realpath "$0") +scriptRoot=$(dirname "$scriptPath") +migcomPath=$(realpath "${scriptRoot}/../libexec/migcom") + +if [ -n "${SDKROOT}" ]; then + sdkRoot="${SDKROOT}"; +fi + +if [ -z "${MIGCC}" ]; then + xcrunPath="/usr/bin/xcrun" + if [ -x "${xcrunPath}" ]; then + MIGCC=`"${xcrunPath}" -sdk "$sdkRoot" -find cc` + else + MIGCC=$(realpath "${scriptRoot}/cc") + fi +fi + +C=${MIGCC} +M=${MIGCOM-${migcomPath}} + +if [ $# -eq 1 ] && [ "$1" = "-version" ] ; then + "$M" "$@" + exit $? +fi + +cppflags="-D__MACH30__" + +files= +arch=`/usr/bin/arch` + +WORKTMP=`/usr/bin/mktemp -d "${TMPDIR:-/tmp}/mig.XXXXXX"` +if [ $? -ne 0 ]; then + echo "Failure creating temporary work directory: ${WORKTMP}" + echo "Exiting..." + exit 1 +fi + +# parse out the arguments until we hit plain file name(s) + +until [ $# -eq 0 ] +do + case "$1" in + -[dtqkKQvVtTrRsSlLxXnN] ) migflags=( "${migflags[@]}" "$1" ); shift;; + -i ) sawI=1; migflags=( "${migflags[@]}" "$1" "$2" ); shift; shift;; + -user ) user="$2"; if [ ! "${sawI-}" ]; then migflags=( "${migflags[@]}" "$1" "$2" ); fi; shift; shift;; + -server ) server="$2"; migflags=( "${migflags[@]}" "$1" "$2" ); shift; shift;; + -header ) header="$2"; migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;; + -sheader ) sheader="$2"; migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;; + -iheader ) iheader="$2"; migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;; + -dheader ) dheader="$2"; migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;; + -arch ) arch="$2"; shift; shift;; + -target ) target=( "$1" "$2"); shift; shift;; + -maxonstack ) migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;; + -split ) migflags=( "${migflags[@]}" "$1" ); shift;; + -novouchers ) migflags=( "${migflags[@]}" "$1" ); shift;; + -MD ) sawMD=1; cppflags=( "${cppflags[@]}" "$1"); shift;; + -cpp) shift; shift;; + -cc) C="$2"; shift; shift;; + -migcom) M="$2"; shift; shift;; + -isysroot) sdkRoot=$(realpath "$2"); shift; shift;; + -* ) cppflags=( "${cppflags[@]}" "$1"); shift;; + * ) break;; + esac +done + +# process the rest as files +until [ $# -eq 0 ] +do + case "$1" in + -[dtqkKQvVtTrRsSlLxXnN] ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;; + -i ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -user ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -server ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -header ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -sheader ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -iheader ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -dheader ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -arch ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift ; shift; continue;; + -target ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift ; shift; continue;; + -maxonstack ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -split ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;; + -novouchers ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;; + -MD ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;; + -cpp) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -cc) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -migcom) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -isysroot) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;; + -* ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;; + * ) file="$1"; shift;; + esac + base="$(basename "${file}" .defs)" + temp="${WORKTMP}/${base}.$$" + sourcedir="$(dirname "${file}")" + if [ -n "${sdkRoot}" ] + then + iSysRootParm=( "-isysroot" "${sdkRoot}" ) + fi + if [ ! -r "${file}" ] + then + echo "error: cannot read file ${file}" + rm -rf ${WORKTMP} + exit 1 + fi + rm -f "${temp}.c" "${temp}.d" + (echo '#line 1 '\"${file}\" ; cat "${file}" ) > "${temp}.c" + "$C" -E -arch ${arch} "${target[@]}" "${cppflags[@]}" -I "${sourcedir}" "${iSysRootParm[@]}" "${temp}.c" | "$M" "${migflags[@]}" + if [ $? -ne 0 ] + then + rm -rf "${temp}.c" "${temp}.d" "${WORKTMP}" + exit 1 + fi + if [ "${sawMD}" -a -f "${temp}.d" ] + then + deps= + s= + rheader="${header-${base}.h}" + if [ "${rheader}" != /dev/null ]; then + deps="${deps}${s}${rheader}"; s=" " + fi + ruser="${user-${base}User.c}" + if [ "${ruser}" != /dev/null ]; then + deps="${deps}${s}${ruser}"; s=" " + fi + rserver="${server-${base}Server.c}" + if [ "${rserver}" != /dev/null ]; then + deps="${deps}${s}${rserver}"; s=" " + fi + rsheader="${sheader-/dev/null}" + if [ "${rsheader}" != /dev/null ]; then + deps="${deps}${s}${rsheader}"; s=" " + fi + riheader="${iheader-/dev/null}" + if [ "${riheader}" != /dev/null ]; then + deps="${deps}${s}${riheader}"; s=" " + fi + rdheader="${dheader-/dev/null}" + if [ "${rdheader}" != /dev/null ]; then + deps="${deps}${s}${rdheader}"; s=" " + fi + for target in "${deps}" + do + sed -e 's;^'"${temp}"'.o[ ]*:;'"${target}"':;' \ + -e 's;: '"${temp}"'.c;: '"$file"';' \ + < "${temp}.d" > "${target}.d" + done + rm -f "${temp}.d" + fi + rm -f "${temp}.c" +done + +/bin/rmdir "${WORKTMP}" +exit 0 + -- cgit v1.2.3-56-ge451