#!/bin/sh # # get-hdr-loc.sh -- get Darwin XNU kernel header file location # # Interactively requests the specification of the path to the host's Darwin # XNU kernel header files. Checks that path and returns it to the caller. # # Usage: file1 file2 ... fileN # # Where: file1 first header file needed # file2 second header file needed # ... # fileN last header file needed # # Exit: # # Exit code: 0 if path found; path returned on STDOUT # # 1 if path not found: error message returned # on STDOUT # #set -x # for DEBUGging # Check argument count. There must be at least one argument. if test $# -lt 1 # { then echo "insufficient arguments: $#" exit 1 fi # } lst=$* # Request the path to the Darwin XNU kernel header files. trap 'stty echo; echo interrupted; exit 1' 1 2 3 15 FOREVER=1 while test $FOREVER -ge 1 # { do if test $FOREVER -eq 1 # { then echo "---------------------------------------------------------------" 1>&2 echo "" 1>&2 echo "Lsof cannot find some Darwin XNU kernel header files it needs." 1>&2 echo "They should have already been downloaded from:" 1>&2 echo "" 1>&2 echo " http://www.opensource.apple.com/darwinsource/index.html" 1>&2 echo "" 1>&2 echo "and then installed. (See 00FAQ for download and installation" 1>&2 echo "instructions.)" 1>&2 echo "" 1>&2 echo "Please specify the path to the place where they were installed." 1>&2 echo "" 1>&2 echo "---------------------------------------------------------------" 1>&2 fi # } END=0 while test $END = 0 # { do echo "" 1>&2 echo -n "What is the path? " 1>&2 read HP EXCESS HP=`echo echo $HP | /bin/csh -fs` if test $? -eq 0 # { then if test "X$HP" = "X" # { then echo "" 1>&2 echo "+================================+" 1>&2 echo "| Please enter a non-empty path. |" 1>&2 echo "+================================+" 1>&2 echo "" 1>&2 else END=1 fi # } else echo "" 1>&2 echo "+============================+" 1>&2 echo "| Please enter a legal path. |" 1>&2 echo "+============================+" 1>&2 echo "" 1>&2 fi # } done # } # See if the header files are available in the specified path. MH="" for i in $lst # { do if test ! -f ${HP}/bsd/$i -a ! -f ${HP}/osfmk/$i # { then if test "X$MH" = "X" # { then MH=$i else MH="$MH $i" fi # } fi # } done # } if test "X$MH" = "X" # { then # All header files are available, so return the path and exit cleanly. echo $HP exit 0 else echo "" 1>&2 echo "ERROR: not all header files are in:" 1>&2 echo "" 1>&2 echo " ${HP}" 1>&2 echo "" 1>&2 echo " These are missing:" 1>&2 echo "" 1>&2 echo " $MH" 1>&2 FOREVER=2 fi # } done # } echo "unknown error" exit 1