unix 2.3.1.0 → 2.3.2.0
raw patch · 16 files changed
+4729/−683 lines, 16 files
Files
- System/Posix/Process.hsc +6/−49
- System/Posix/Process/Internals.hs +54/−1
- System/Posix/SharedMem.hsc +15/−13
- System/Posix/Signals.hs +0/−533
- System/Posix/Signals.hsc +605/−0
- System/Posix/Unistd.hsc +1/−1
- cbits/HsUnix.c +106/−3
- config.guess +1500/−0
- config.sub +1608/−0
- configure +277/−1
- configure.ac +21/−0
- include/HsUnix.h +21/−77
- include/HsUnixConfig.h +2/−2
- install-sh +507/−0
- unix.buildinfo.in +3/−1
- unix.cabal +3/−2
System/Posix/Process.hsc view
@@ -72,12 +72,10 @@ import Foreign.StablePtr ( StablePtr, newStablePtr, freeStablePtr ) import Foreign.Storable ( Storable(..) ) import System.IO-import System.IO.Error import System.Exit import System.Posix.Error-import System.Posix.Process.Internals ( pPrPr_disableITimers, c_execvpe )+import System.Posix.Process.Internals import System.Posix.Types-import System.Posix.Signals import Control.Monad #ifdef __GLASGOW_HASKELL__@@ -314,11 +312,6 @@ -- ----------------------------------------------------------------------------- -- Waiting for process termination -data ProcessStatus = Exited ExitCode- | Terminated Signal- | Stopped Signal- deriving (Eq, Ord, Show)- -- | @'getProcessStatus' blk stopped pid@ calls @waitpid@, returning -- @'Just' tc@, the 'ProcessStatus' for process @pid@ if it is -- available, 'Nothing' otherwise. If @blk@ is 'False', then@@ -332,7 +325,7 @@ (c_waitpid pid wstatp (waitOptions block stopped)) case pid' of 0 -> return Nothing- _ -> do ps <- decipherWaitStatus wstatp+ _ -> do ps <- readWaitStatus wstatp return (Just ps) -- safe, because this call might block@@ -356,7 +349,7 @@ (c_waitpid (-pgid) wstatp (waitOptions block stopped)) case pid of 0 -> return Nothing- _ -> do ps <- decipherWaitStatus wstatp+ _ -> do ps <- readWaitStatus wstatp return (Just (pid, ps)) -- | @'getAnyProcessStatus' blk stopped@ calls @waitpid@, returning -- @'Just' (pid, tc)@, the 'ProcessID' and 'ProcessStatus' for any@@ -376,46 +369,10 @@ -- Turn a (ptr to a) wait status into a ProcessStatus -decipherWaitStatus :: Ptr CInt -> IO ProcessStatus-decipherWaitStatus wstatp = do+readWaitStatus :: Ptr CInt -> IO ProcessStatus+readWaitStatus wstatp = do wstat <- peek wstatp- if c_WIFEXITED wstat /= 0- then do- let exitstatus = c_WEXITSTATUS wstat- if exitstatus == 0- then return (Exited ExitSuccess)- else return (Exited (ExitFailure (fromIntegral exitstatus)))- else do- if c_WIFSIGNALED wstat /= 0- then do- let termsig = c_WTERMSIG wstat- return (Terminated (fromIntegral termsig))- else do- if c_WIFSTOPPED wstat /= 0- then do- let stopsig = c_WSTOPSIG wstat- return (Stopped (fromIntegral stopsig))- else do- ioError (mkIOError illegalOperationErrorType- "waitStatus" Nothing Nothing)--foreign import ccall unsafe "__hsunix_wifexited"- c_WIFEXITED :: CInt -> CInt --foreign import ccall unsafe "__hsunix_wexitstatus"- c_WEXITSTATUS :: CInt -> CInt--foreign import ccall unsafe "__hsunix_wifsignaled"- c_WIFSIGNALED :: CInt -> CInt--foreign import ccall unsafe "__hsunix_wtermsig"- c_WTERMSIG :: CInt -> CInt --foreign import ccall unsafe "__hsunix_wifstopped"- c_WIFSTOPPED :: CInt -> CInt--foreign import ccall unsafe "__hsunix_wstopsig"- c_WSTOPSIG :: CInt -> CInt+ decipherWaitStatus wstat -- ----------------------------------------------------------------------------- -- Exiting
System/Posix/Process/Internals.hs view
@@ -1,9 +1,21 @@ -module System.Posix.Process.Internals (pPrPr_disableITimers, c_execvpe) where+module System.Posix.Process.Internals (+ pPrPr_disableITimers, c_execvpe,+ decipherWaitStatus, ProcessStatus(..) ) where import Foreign import Foreign.C+import System.Exit+import System.IO.Error+import GHC.Conc (Signal) +-- we had to move this into GHC.Conc in GHC to avoid recursive dependencies.+-- it can be moved back when the signal handling stuff in base is moved out.+data ProcessStatus = Exited ExitCode+ | Terminated Signal+ | Stopped Signal+ deriving (Eq, Ord, Show)+ -- this function disables the itimer, which would otherwise cause confusing -- signals to be sent to the new process. foreign import ccall unsafe "pPrPr_disableITimers"@@ -11,3 +23,44 @@ foreign import ccall unsafe "execvpe" c_execvpe :: CString -> Ptr CString -> Ptr CString -> IO CInt++decipherWaitStatus :: CInt -> IO ProcessStatus+decipherWaitStatus wstat =+ if c_WIFEXITED wstat /= 0+ then do+ let exitstatus = c_WEXITSTATUS wstat+ if exitstatus == 0+ then return (Exited ExitSuccess)+ else return (Exited (ExitFailure (fromIntegral exitstatus)))+ else do+ if c_WIFSIGNALED wstat /= 0+ then do+ let termsig = c_WTERMSIG wstat+ return (Terminated (fromIntegral termsig))+ else do+ if c_WIFSTOPPED wstat /= 0+ then do+ let stopsig = c_WSTOPSIG wstat+ return (Stopped (fromIntegral stopsig))+ else do+ ioError (mkIOError illegalOperationErrorType+ "waitStatus" Nothing Nothing)++foreign import ccall unsafe "__hsunix_wifexited"+ c_WIFEXITED :: CInt -> CInt ++foreign import ccall unsafe "__hsunix_wexitstatus"+ c_WEXITSTATUS :: CInt -> CInt++foreign import ccall unsafe "__hsunix_wifsignaled"+ c_WIFSIGNALED :: CInt -> CInt++foreign import ccall unsafe "__hsunix_wtermsig"+ c_WTERMSIG :: CInt -> CInt ++foreign import ccall unsafe "__hsunix_wifstopped"+ c_WIFSTOPPED :: CInt -> CInt++foreign import ccall unsafe "__hsunix_wstopsig"+ c_WSTOPSIG :: CInt -> CInt+
@@ -23,6 +23,8 @@ #include <sys/mman.h> #include <sys/fcntl.h> +#include "HsUnix.h"+ import System.Posix.Types import System.Posix.Error import Foreign.C@@ -43,19 +45,19 @@ shmOpen :: String -> ShmOpenFlags -> FileMode -> IO Fd #ifdef HAVE_SHM_OPEN shmOpen name flags mode =- do cflags <- return 0- cflags <- return $ cflags .|. (if shmReadWrite flags- then #{const O_RDWR}- else #{const O_RDONLY})- cflags <- return $ cflags .|. (if shmCreate flags then #{const O_CREAT} - else 0)- cflags <- return $ cflags .|. (if shmExclusive flags - then #{const O_EXCL} - else 0)- cflags <- return $ cflags .|. (if shmTrunc flags then #{const O_TRUNC} - else 0)- withCAString name (shmOpen' cflags mode)- where shmOpen' cflags mode cname =+ do cflags0 <- return 0+ cflags1 <- return $ cflags0 .|. (if shmReadWrite flags+ then #{const O_RDWR}+ else #{const O_RDONLY})+ cflags2 <- return $ cflags1 .|. (if shmCreate flags then #{const O_CREAT} + else 0)+ cflags3 <- return $ cflags2 .|. (if shmExclusive flags + then #{const O_EXCL} + else 0)+ cflags4 <- return $ cflags3 .|. (if shmTrunc flags then #{const O_TRUNC} + else 0)+ withCAString name (shmOpen' cflags4)+ where shmOpen' cflags cname = do fd <- throwErrnoIfMinus1 "shmOpen" $ shm_open cname cflags mode return $ Fd fd
− System/Posix/Signals.hs
@@ -1,533 +0,0 @@--------------------------------------------------------------------------------- |--- Module : System.Posix.Signals--- Copyright : (c) The University of Glasgow 2002--- License : BSD-style (see the file libraries/base/LICENSE)--- --- Maintainer : libraries@haskell.org--- Stability : provisional--- Portability : non-portable (requires POSIX)------ POSIX signal support-----------------------------------------------------------------------------------#include "HsUnixConfig.h"--module System.Posix.Signals (- -- * The Signal type- Signal,-- -- * Specific signals- nullSignal,- internalAbort, sigABRT,- realTimeAlarm, sigALRM,- busError, sigBUS,- processStatusChanged, sigCHLD,- continueProcess, sigCONT,- floatingPointException, sigFPE,- lostConnection, sigHUP,- illegalInstruction, sigILL,- keyboardSignal, sigINT,- killProcess, sigKILL,- openEndedPipe, sigPIPE,- keyboardTermination, sigQUIT,- segmentationViolation, sigSEGV,- softwareStop, sigSTOP,- softwareTermination, sigTERM,- keyboardStop, sigTSTP,- backgroundRead, sigTTIN,- backgroundWrite, sigTTOU,- userDefinedSignal1, sigUSR1,- userDefinedSignal2, sigUSR2,-#if CONST_SIGPOLL != -1- pollableEvent, sigPOLL,-#endif- profilingTimerExpired, sigPROF,- badSystemCall, sigSYS,- breakpointTrap, sigTRAP,- urgentDataAvailable, sigURG,- virtualTimerExpired, sigVTALRM,- cpuTimeLimitExceeded, sigXCPU,- fileSizeLimitExceeded, sigXFSZ,-- -- * Sending signals- raiseSignal,- signalProcess,- signalProcessGroup,--#ifdef __GLASGOW_HASKELL__- -- * Handling signals- Handler(..),- installHandler,-#endif-- -- * Signal sets- SignalSet,- emptySignalSet, fullSignalSet, - addSignal, deleteSignal, inSignalSet,-- -- * The process signal mask- getSignalMask, setSignalMask, blockSignals, unblockSignals,-- -- * The alarm timer- scheduleAlarm,-- -- * Waiting for signals- getPendingSignals,-#ifndef cygwin32_HOST_OS- awaitSignal,-#endif--#ifdef __GLASGOW_HASKELL__- -- * The @NOCLDSTOP@ flag- setStoppedChildFlag, queryStoppedChildFlag,-#endif-- -- MISSING FUNCTIONALITY:- -- sigaction(), (inc. the sigaction structure + flags etc.)- -- the siginfo structure- -- sigaltstack()- -- sighold, sigignore, sigpause, sigrelse, sigset- -- siginterrupt- ) where--import Foreign-import Foreign.C-import System.IO.Unsafe-import System.Posix.Types-import System.Posix.Internals-import Control.Concurrent (withMVar)--#ifdef __GLASGOW_HASKELL__-#include "Signals.h"-import GHC.Conc ( ensureIOManagerIsRunning, signalHandlerLock )-#endif---- -------------------------------------------------------------------------------- Specific signals--type Signal = CInt--nullSignal :: Signal-nullSignal = 0--sigABRT :: CInt-sigABRT = CONST_SIGABRT-sigALRM :: CInt-sigALRM = CONST_SIGALRM-sigBUS :: CInt-sigBUS = CONST_SIGBUS-sigCHLD :: CInt-sigCHLD = CONST_SIGCHLD-sigCONT :: CInt-sigCONT = CONST_SIGCONT-sigFPE :: CInt-sigFPE = CONST_SIGFPE-sigHUP :: CInt-sigHUP = CONST_SIGHUP-sigILL :: CInt-sigILL = CONST_SIGILL-sigINT :: CInt-sigINT = CONST_SIGINT-sigKILL :: CInt-sigKILL = CONST_SIGKILL-sigPIPE :: CInt-sigPIPE = CONST_SIGPIPE-sigQUIT :: CInt-sigQUIT = CONST_SIGQUIT-sigSEGV :: CInt-sigSEGV = CONST_SIGSEGV-sigSTOP :: CInt-sigSTOP = CONST_SIGSTOP-sigTERM :: CInt-sigTERM = CONST_SIGTERM-sigTSTP :: CInt-sigTSTP = CONST_SIGTSTP-sigTTIN :: CInt-sigTTIN = CONST_SIGTTIN-sigTTOU :: CInt-sigTTOU = CONST_SIGTTOU-sigUSR1 :: CInt-sigUSR1 = CONST_SIGUSR1-sigUSR2 :: CInt-sigUSR2 = CONST_SIGUSR2-#if CONST_SIGPOLL != -1-sigPOLL :: CInt-sigPOLL = CONST_SIGPOLL-#endif-sigPROF :: CInt-sigPROF = CONST_SIGPROF-sigSYS :: CInt-sigSYS = CONST_SIGSYS-sigTRAP :: CInt-sigTRAP = CONST_SIGTRAP-sigURG :: CInt-sigURG = CONST_SIGURG-sigVTALRM :: CInt-sigVTALRM = CONST_SIGVTALRM-sigXCPU :: CInt-sigXCPU = CONST_SIGXCPU-sigXFSZ :: CInt-sigXFSZ = CONST_SIGXFSZ--internalAbort ::Signal-internalAbort = sigABRT--realTimeAlarm :: Signal-realTimeAlarm = sigALRM--busError :: Signal-busError = sigBUS--processStatusChanged :: Signal-processStatusChanged = sigCHLD--continueProcess :: Signal-continueProcess = sigCONT--floatingPointException :: Signal-floatingPointException = sigFPE--lostConnection :: Signal-lostConnection = sigHUP--illegalInstruction :: Signal-illegalInstruction = sigILL--keyboardSignal :: Signal-keyboardSignal = sigINT--killProcess :: Signal-killProcess = sigKILL--openEndedPipe :: Signal-openEndedPipe = sigPIPE--keyboardTermination :: Signal-keyboardTermination = sigQUIT--segmentationViolation :: Signal-segmentationViolation = sigSEGV--softwareStop :: Signal-softwareStop = sigSTOP--softwareTermination :: Signal-softwareTermination = sigTERM--keyboardStop :: Signal-keyboardStop = sigTSTP--backgroundRead :: Signal-backgroundRead = sigTTIN--backgroundWrite :: Signal-backgroundWrite = sigTTOU--userDefinedSignal1 :: Signal-userDefinedSignal1 = sigUSR1--userDefinedSignal2 :: Signal-userDefinedSignal2 = sigUSR2--#if CONST_SIGPOLL != -1-pollableEvent :: Signal-pollableEvent = sigPOLL-#endif--profilingTimerExpired :: Signal-profilingTimerExpired = sigPROF--badSystemCall :: Signal-badSystemCall = sigSYS--breakpointTrap :: Signal-breakpointTrap = sigTRAP--urgentDataAvailable :: Signal-urgentDataAvailable = sigURG--virtualTimerExpired :: Signal-virtualTimerExpired = sigVTALRM--cpuTimeLimitExceeded :: Signal-cpuTimeLimitExceeded = sigXCPU--fileSizeLimitExceeded :: Signal-fileSizeLimitExceeded = sigXFSZ---- -------------------------------------------------------------------------------- Signal-related functions---- | @signalProcess int pid@ calls @kill@ to signal process @pid@ --- with interrupt signal @int@.-signalProcess :: Signal -> ProcessID -> IO ()-signalProcess sig pid - = throwErrnoIfMinus1_ "signalProcess" (c_kill (fromIntegral pid) sig)--foreign import ccall unsafe "kill"- c_kill :: CPid -> CInt -> IO CInt----- | @signalProcessGroup int pgid@ calls @kill@ to signal --- all processes in group @pgid@ with interrupt signal @int@.-signalProcessGroup :: Signal -> ProcessGroupID -> IO ()-signalProcessGroup sig pgid - = throwErrnoIfMinus1_ "signalProcessGroup" (c_killpg (fromIntegral pgid) sig)--foreign import ccall unsafe "killpg"- c_killpg :: CPid -> CInt -> IO CInt---- | @raiseSignal int@ calls @kill@ to signal the current process--- with interrupt signal @int@. -raiseSignal :: Signal -> IO ()-raiseSignal sig = throwErrnoIfMinus1_ "raiseSignal" (c_raise sig)--#if defined(__GLASGOW_HASKELL__) && (defined(openbsd_HOST_OS) || defined(freebsd_HOST_OS))-foreign import ccall unsafe "genericRaise"- c_raise :: CInt -> IO CInt-#else-foreign import ccall unsafe "raise"- c_raise :: CInt -> IO CInt-#endif--#ifdef __GLASGOW_HASKELL__-data Handler = Default- | Ignore- -- not yet: | Hold - | Catch (IO ())- | CatchOnce (IO ())---- | @installHandler int handler iset@ calls @sigaction@ to install an--- interrupt handler for signal @int@. If @handler@ is @Default@,--- @SIG_DFL@ is installed; if @handler@ is @Ignore@, @SIG_IGN@ is--- installed; if @handler@ is @Catch action@, a handler is installed--- which will invoke @action@ in a new thread when (or shortly after) the--- signal is received.--- If @iset@ is @Just s@, then the @sa_mask@ of the @sigaction@ structure--- is set to @s@; otherwise it is cleared. The previously installed--- signal handler for @int@ is returned-installHandler :: Signal- -> Handler- -> Maybe SignalSet -- ^ other signals to block- -> IO Handler -- ^ old handler--#ifdef __PARALLEL_HASKELL__-installHandler = - error "installHandler: not available for Parallel Haskell"-#else--installHandler int handler maybe_mask = do- ensureIOManagerIsRunning -- for the threaded RTS- case maybe_mask of- Nothing -> install' nullPtr- Just (SignalSet x) -> withForeignPtr x $ install' - where - install' mask = - -- prevent race with the IO manager thread, see #1922- withMVar signalHandlerLock $ \_ ->- alloca $ \p_sp -> do-- rc <- case handler of- Default -> stg_sig_install int STG_SIG_DFL p_sp mask- Ignore -> stg_sig_install int STG_SIG_IGN p_sp mask- Catch m -> hinstall m p_sp mask STG_SIG_HAN- CatchOnce m -> hinstall m p_sp mask STG_SIG_RST-- case rc of- STG_SIG_DFL -> return Default- STG_SIG_IGN -> return Ignore- STG_SIG_ERR -> throwErrno "installHandler"- STG_SIG_HAN -> do- m <- peekHandler p_sp- return (Catch m)- STG_SIG_RST -> do- m <- peekHandler p_sp- return (CatchOnce m)- _other ->- error "internal error: System.Posix.Signals.installHandler"-- hinstall m p_sp mask reset = do- sptr <- newStablePtr m- poke p_sp sptr- stg_sig_install int reset p_sp mask-- peekHandler p_sp = do- osptr <- peek p_sp- deRefStablePtr osptr--foreign import ccall unsafe- stg_sig_install- :: CInt -- sig no.- -> CInt -- action code (STG_SIG_HAN etc.)- -> Ptr (StablePtr (IO ())) -- (in, out) Haskell handler- -> Ptr CSigset -- (in, out) blocked- -> IO CInt -- (ret) action code--#endif /* !__PARALLEL_HASKELL__ */-#endif /* __GLASGOW_HASKELL__ */---- -------------------------------------------------------------------------------- Alarms---- | @scheduleAlarm i@ calls @alarm@ to schedule a real time--- alarm at least @i@ seconds in the future.-scheduleAlarm :: Int -> IO Int-scheduleAlarm secs = do- r <- c_alarm (fromIntegral secs)- return (fromIntegral r)--foreign import ccall unsafe "alarm"- c_alarm :: CUInt -> IO CUInt--#ifdef __GLASGOW_HASKELL__--- -------------------------------------------------------------------------------- The NOCLDSTOP flag--foreign import ccall "&nocldstop" nocldstop :: Ptr Int---- | Tells the system whether or not to set the @SA_NOCLDSTOP@ flag when--- installing new signal handlers.-setStoppedChildFlag :: Bool -> IO Bool-setStoppedChildFlag b = do- rc <- peek nocldstop- poke nocldstop $ fromEnum (not b) - return (rc == (0::Int))---- | Queries the current state of the stopped child flag.-queryStoppedChildFlag :: IO Bool-queryStoppedChildFlag = do- rc <- peek nocldstop- return (rc == (0::Int))-#endif /* __GLASGOW_HASKELL__ */---- -------------------------------------------------------------------------------- Manipulating signal sets--newtype SignalSet = SignalSet (ForeignPtr CSigset)--emptySignalSet :: SignalSet-emptySignalSet = unsafePerformIO $ do- fp <- mallocForeignPtrBytes sizeof_sigset_t- throwErrnoIfMinus1_ "emptySignalSet" (withForeignPtr fp $ c_sigemptyset)- return (SignalSet fp)--fullSignalSet :: SignalSet-fullSignalSet = unsafePerformIO $ do- fp <- mallocForeignPtrBytes sizeof_sigset_t- throwErrnoIfMinus1_ "fullSignalSet" (withForeignPtr fp $ c_sigfillset)- return (SignalSet fp)--infixr `addSignal`, `deleteSignal`-addSignal :: Signal -> SignalSet -> SignalSet-addSignal sig (SignalSet fp1) = unsafePerformIO $ do- fp2 <- mallocForeignPtrBytes sizeof_sigset_t- withForeignPtr fp1 $ \p1 ->- withForeignPtr fp2 $ \p2 -> do- copyBytes p2 p1 sizeof_sigset_t- throwErrnoIfMinus1_ "addSignal" (c_sigaddset p2 sig)- return (SignalSet fp2)--deleteSignal :: Signal -> SignalSet -> SignalSet-deleteSignal sig (SignalSet fp1) = unsafePerformIO $ do- fp2 <- mallocForeignPtrBytes sizeof_sigset_t- withForeignPtr fp1 $ \p1 ->- withForeignPtr fp2 $ \p2 -> do- copyBytes p2 p1 sizeof_sigset_t- throwErrnoIfMinus1_ "deleteSignal" (c_sigdelset p2 sig)- return (SignalSet fp2)--inSignalSet :: Signal -> SignalSet -> Bool-inSignalSet sig (SignalSet fp) = unsafePerformIO $- withForeignPtr fp $ \p -> do- r <- throwErrnoIfMinus1 "inSignalSet" (c_sigismember p sig)- return (r /= 0)---- | @getSignalMask@ calls @sigprocmask@ to determine the--- set of interrupts which are currently being blocked.-getSignalMask :: IO SignalSet-getSignalMask = do- fp <- mallocForeignPtrBytes sizeof_sigset_t- withForeignPtr fp $ \p ->- throwErrnoIfMinus1_ "getSignalMask" (c_sigprocmask 0 nullPtr p)- return (SignalSet fp)- -sigProcMask :: String -> CInt -> SignalSet -> IO ()-sigProcMask fn how (SignalSet set) =- withForeignPtr set $ \p_set ->- throwErrnoIfMinus1_ fn (c_sigprocmask how p_set nullPtr)---- | @setSignalMask mask@ calls @sigprocmask@ with--- @SIG_SETMASK@ to block all interrupts in @mask@.-setSignalMask :: SignalSet -> IO ()-setSignalMask set = sigProcMask "setSignalMask" (CONST_SIG_SETMASK :: CInt) set---- | @blockSignals mask@ calls @sigprocmask@ with--- @SIG_BLOCK@ to add all interrupts in @mask@ to the--- set of blocked interrupts.-blockSignals :: SignalSet -> IO ()-blockSignals set = sigProcMask "blockSignals" (CONST_SIG_BLOCK :: CInt) set---- | @unblockSignals mask@ calls @sigprocmask@ with--- @SIG_UNBLOCK@ to remove all interrupts in @mask@ from the--- set of blocked interrupts. -unblockSignals :: SignalSet -> IO ()-unblockSignals set = sigProcMask "unblockSignals" (CONST_SIG_UNBLOCK :: CInt) set---- | @getPendingSignals@ calls @sigpending@ to obtain--- the set of interrupts which have been received but are currently blocked.-getPendingSignals :: IO SignalSet-getPendingSignals = do- fp <- mallocForeignPtrBytes sizeof_sigset_t- withForeignPtr fp $ \p -> - throwErrnoIfMinus1_ "getPendingSignals" (c_sigpending p)- return (SignalSet fp)--#ifndef cygwin32_HOST_OS---- | @awaitSignal iset@ suspends execution until an interrupt is received.--- If @iset@ is @Just s@, @awaitSignal@ calls @sigsuspend@, installing--- @s@ as the new signal mask before suspending execution; otherwise, it--- calls @pause@. @awaitSignal@ returns on receipt of a signal. If you--- have installed any signal handlers with @installHandler@, it may be--- wise to call @yield@ directly after @awaitSignal@ to ensure that the--- signal handler runs as promptly as possible.-awaitSignal :: Maybe SignalSet -> IO ()-awaitSignal maybe_sigset = do- fp <- case maybe_sigset of- Nothing -> do SignalSet fp <- getSignalMask; return fp- Just (SignalSet fp) -> return fp- withForeignPtr fp $ \p -> do- c_sigsuspend p- return ()- -- ignore the return value; according to the docs it can only ever be- -- (-1) with errno set to EINTR.- -foreign import ccall unsafe "sigsuspend"- c_sigsuspend :: Ptr CSigset -> IO CInt-#endif--#ifdef __HUGS__-foreign import ccall unsafe "sigdelset"- c_sigdelset :: Ptr CSigset -> CInt -> IO CInt--foreign import ccall unsafe "sigfillset"- c_sigfillset :: Ptr CSigset -> IO CInt--foreign import ccall unsafe "sigismember"- c_sigismember :: Ptr CSigset -> CInt -> IO CInt-#else-foreign import ccall unsafe "__hscore_sigdelset"- c_sigdelset :: Ptr CSigset -> CInt -> IO CInt--foreign import ccall unsafe "__hscore_sigfillset"- c_sigfillset :: Ptr CSigset -> IO CInt--foreign import ccall unsafe "__hscore_sigismember"- c_sigismember :: Ptr CSigset -> CInt -> IO CInt-#endif /* __HUGS__ */--foreign import ccall unsafe "sigpending"- c_sigpending :: Ptr CSigset -> IO CInt-
+ System/Posix/Signals.hsc view
@@ -0,0 +1,605 @@+{-# LANGUAGE DeriveDataTypeable,PatternGuards #-}+{-# OPTIONS_GHC -fno-cse #-} -- global variables+-----------------------------------------------------------------------------+-- |+-- Module : System.Posix.Signals+-- Copyright : (c) The University of Glasgow 2002+-- License : BSD-style (see the file libraries/base/LICENSE)+-- +-- Maintainer : libraries@haskell.org+-- Stability : provisional+-- Portability : non-portable (requires POSIX)+--+-- POSIX signal support+--+-----------------------------------------------------------------------------++#include "HsUnixConfig.h"+##include "HsUnixConfig.h"++#ifdef HAVE_SIGNAL_H+#include <signal.h>+#endif++module System.Posix.Signals (+ -- * The Signal type+ Signal,++ -- * Specific signals+ nullSignal,+ internalAbort, sigABRT,+ realTimeAlarm, sigALRM,+ busError, sigBUS,+ processStatusChanged, sigCHLD,+ continueProcess, sigCONT,+ floatingPointException, sigFPE,+ lostConnection, sigHUP,+ illegalInstruction, sigILL,+ keyboardSignal, sigINT,+ killProcess, sigKILL,+ openEndedPipe, sigPIPE,+ keyboardTermination, sigQUIT,+ segmentationViolation, sigSEGV,+ softwareStop, sigSTOP,+ softwareTermination, sigTERM,+ keyboardStop, sigTSTP,+ backgroundRead, sigTTIN,+ backgroundWrite, sigTTOU,+ userDefinedSignal1, sigUSR1,+ userDefinedSignal2, sigUSR2,+#if CONST_SIGPOLL != -1+ pollableEvent, sigPOLL,+#endif+ profilingTimerExpired, sigPROF,+ badSystemCall, sigSYS,+ breakpointTrap, sigTRAP,+ urgentDataAvailable, sigURG,+ virtualTimerExpired, sigVTALRM,+ cpuTimeLimitExceeded, sigXCPU,+ fileSizeLimitExceeded, sigXFSZ,++ -- * Sending signals+ raiseSignal,+ signalProcess,+ signalProcessGroup,++#ifdef __GLASGOW_HASKELL__+ -- * Handling signals+ Handler(Default,Ignore,Catch,CatchOnce),+ installHandler,+#endif++ -- * Signal sets+ SignalSet,+ emptySignalSet, fullSignalSet, + addSignal, deleteSignal, inSignalSet,++ -- * The process signal mask+ getSignalMask, setSignalMask, blockSignals, unblockSignals,++ -- * The alarm timer+ scheduleAlarm,++ -- * Waiting for signals+ getPendingSignals,+#ifndef cygwin32_HOST_OS+ awaitSignal,+#endif++#ifdef __GLASGOW_HASKELL__+ -- * The @NOCLDSTOP@ flag+ setStoppedChildFlag, queryStoppedChildFlag,+#endif++ -- MISSING FUNCTIONALITY:+ -- sigaction(), (inc. the sigaction structure + flags etc.)+ -- the siginfo structure+ -- sigaltstack()+ -- sighold, sigignore, sigpause, sigrelse, sigset+ -- siginterrupt+ ) where++import Foreign+import Foreign.C+import System.Posix.Types+import System.Posix.Internals+import System.Posix.Process.Internals+import System.Posix.Process+import Control.Monad+import Data.Dynamic++#ifdef __GLASGOW_HASKELL__+##include "Signals.h"+import GHC.IOBase+import GHC.Conc hiding (Signal)+#endif++-- -----------------------------------------------------------------------------+-- Specific signals++nullSignal :: Signal+nullSignal = 0++sigABRT :: CInt+sigABRT = CONST_SIGABRT+sigALRM :: CInt+sigALRM = CONST_SIGALRM+sigBUS :: CInt+sigBUS = CONST_SIGBUS+sigCHLD :: CInt+sigCHLD = CONST_SIGCHLD+sigCONT :: CInt+sigCONT = CONST_SIGCONT+sigFPE :: CInt+sigFPE = CONST_SIGFPE+sigHUP :: CInt+sigHUP = CONST_SIGHUP+sigILL :: CInt+sigILL = CONST_SIGILL+sigINT :: CInt+sigINT = CONST_SIGINT+sigKILL :: CInt+sigKILL = CONST_SIGKILL+sigPIPE :: CInt+sigPIPE = CONST_SIGPIPE+sigQUIT :: CInt+sigQUIT = CONST_SIGQUIT+sigSEGV :: CInt+sigSEGV = CONST_SIGSEGV+sigSTOP :: CInt+sigSTOP = CONST_SIGSTOP+sigTERM :: CInt+sigTERM = CONST_SIGTERM+sigTSTP :: CInt+sigTSTP = CONST_SIGTSTP+sigTTIN :: CInt+sigTTIN = CONST_SIGTTIN+sigTTOU :: CInt+sigTTOU = CONST_SIGTTOU+sigUSR1 :: CInt+sigUSR1 = CONST_SIGUSR1+sigUSR2 :: CInt+sigUSR2 = CONST_SIGUSR2+#if CONST_SIGPOLL != -1+sigPOLL :: CInt+sigPOLL = CONST_SIGPOLL+#endif+sigPROF :: CInt+sigPROF = CONST_SIGPROF+sigSYS :: CInt+sigSYS = CONST_SIGSYS+sigTRAP :: CInt+sigTRAP = CONST_SIGTRAP+sigURG :: CInt+sigURG = CONST_SIGURG+sigVTALRM :: CInt+sigVTALRM = CONST_SIGVTALRM+sigXCPU :: CInt+sigXCPU = CONST_SIGXCPU+sigXFSZ :: CInt+sigXFSZ = CONST_SIGXFSZ++internalAbort ::Signal+internalAbort = sigABRT++realTimeAlarm :: Signal+realTimeAlarm = sigALRM++busError :: Signal+busError = sigBUS++processStatusChanged :: Signal+processStatusChanged = sigCHLD++continueProcess :: Signal+continueProcess = sigCONT++floatingPointException :: Signal+floatingPointException = sigFPE++lostConnection :: Signal+lostConnection = sigHUP++illegalInstruction :: Signal+illegalInstruction = sigILL++keyboardSignal :: Signal+keyboardSignal = sigINT++killProcess :: Signal+killProcess = sigKILL++openEndedPipe :: Signal+openEndedPipe = sigPIPE++keyboardTermination :: Signal+keyboardTermination = sigQUIT++segmentationViolation :: Signal+segmentationViolation = sigSEGV++softwareStop :: Signal+softwareStop = sigSTOP++softwareTermination :: Signal+softwareTermination = sigTERM++keyboardStop :: Signal+keyboardStop = sigTSTP++backgroundRead :: Signal+backgroundRead = sigTTIN++backgroundWrite :: Signal+backgroundWrite = sigTTOU++userDefinedSignal1 :: Signal+userDefinedSignal1 = sigUSR1++userDefinedSignal2 :: Signal+userDefinedSignal2 = sigUSR2++#if CONST_SIGPOLL != -1+pollableEvent :: Signal+pollableEvent = sigPOLL+#endif++profilingTimerExpired :: Signal+profilingTimerExpired = sigPROF++badSystemCall :: Signal+badSystemCall = sigSYS++breakpointTrap :: Signal+breakpointTrap = sigTRAP++urgentDataAvailable :: Signal+urgentDataAvailable = sigURG++virtualTimerExpired :: Signal+virtualTimerExpired = sigVTALRM++cpuTimeLimitExceeded :: Signal+cpuTimeLimitExceeded = sigXCPU++fileSizeLimitExceeded :: Signal+fileSizeLimitExceeded = sigXFSZ++-- -----------------------------------------------------------------------------+-- Signal-related functions++-- | @signalProcess int pid@ calls @kill@ to signal process @pid@ +-- with interrupt signal @int@.+signalProcess :: Signal -> ProcessID -> IO ()+signalProcess sig pid + = throwErrnoIfMinus1_ "signalProcess" (c_kill (fromIntegral pid) sig)++foreign import ccall unsafe "kill"+ c_kill :: CPid -> CInt -> IO CInt+++-- | @signalProcessGroup int pgid@ calls @kill@ to signal +-- all processes in group @pgid@ with interrupt signal @int@.+signalProcessGroup :: Signal -> ProcessGroupID -> IO ()+signalProcessGroup sig pgid + = throwErrnoIfMinus1_ "signalProcessGroup" (c_killpg (fromIntegral pgid) sig)++foreign import ccall unsafe "killpg"+ c_killpg :: CPid -> CInt -> IO CInt++-- | @raiseSignal int@ calls @kill@ to signal the current process+-- with interrupt signal @int@. +raiseSignal :: Signal -> IO ()+raiseSignal sig = throwErrnoIfMinus1_ "raiseSignal" (c_raise sig)++#if defined(__GLASGOW_HASKELL__) && (defined(openbsd_HOST_OS) || defined(freebsd_HOST_OS))+foreign import ccall unsafe "genericRaise"+ c_raise :: CInt -> IO CInt+#else+foreign import ccall unsafe "raise"+ c_raise :: CInt -> IO CInt+#endif++#ifdef __GLASGOW_HASKELL__+type Signal = CInt+++-- | The actions to perform when a signal is received.+data Handler = Default+ | Ignore+ -- not yet: | Hold + | Catch (IO ())+ | CatchOnce (IO ())+ | CatchInfo (SignalInfo -> IO ())+ | CatchInfoOnce (SignalInfo -> IO ())+ deriving (Typeable)++-- | Information about a received signal (derived from @siginfo_t@).+data SignalInfo = SignalInfo {+ siginfoSignal :: Signal,+ siginfoError :: Errno,+ siginfoSpecific :: SignalSpecificInfo+ }++-- | Information specific to a particular type of signal+-- (derived from @siginfo_t@).+data SignalSpecificInfo+ = NoSignalSpecificInfo+ | SigChldInfo {+ siginfoPid :: ProcessID,+ siginfoUid :: UserID,+ siginfoStatus :: ProcessStatus+ }++-- | @installHandler int handler iset@ calls @sigaction@ to install an+-- interrupt handler for signal @int@. If @handler@ is @Default@,+-- @SIG_DFL@ is installed; if @handler@ is @Ignore@, @SIG_IGN@ is+-- installed; if @handler@ is @Catch action@, a handler is installed+-- which will invoke @action@ in a new thread when (or shortly after) the+-- signal is received.+-- If @iset@ is @Just s@, then the @sa_mask@ of the @sigaction@ structure+-- is set to @s@; otherwise it is cleared. The previously installed+-- signal handler for @int@ is returned+installHandler :: Signal+ -> Handler+ -> Maybe SignalSet -- ^ other signals to block+ -> IO Handler -- ^ old handler++#ifdef __PARALLEL_HASKELL__+installHandler = + error "installHandler: not available for Parallel Haskell"+#else++installHandler sig handler _maybe_mask = do+ ensureIOManagerIsRunning -- for the threaded RTS++ -- if we're setting the action to DFL or IGN, we should do that *first*+ -- if we're setting a handler,+ -- if the previous action was handle, then setHandler is ok+ -- if the previous action was IGN/DFL, then setHandler followed by sig_install+ (old_action, old_handler) <-+ case handler of+ Ignore -> do+ old_action <- stg_sig_install sig STG_SIG_IGN nullPtr+ old_handler <- setHandler sig Nothing+ return (old_action, old_handler)++ Default -> do+ old_action <- stg_sig_install sig STG_SIG_DFL nullPtr+ old_handler <- setHandler sig Nothing+ return (old_action, old_handler)++ _some_kind_of_catch -> do+ -- I don't think it's possible to get CatchOnce right. If+ -- there's a signal in flight, then we might run the handler+ -- more than once.+ let dyn = toDyn handler+ old_handler <- case handler of+ Catch action -> setHandler sig (Just (const action,dyn))+ CatchOnce action -> setHandler sig (Just (const action,dyn))+ CatchInfo action -> setHandler sig (Just (getinfo action,dyn))+ CatchInfoOnce action -> setHandler sig (Just (getinfo action,dyn))+ _ -> error "installHandler"+ + let action = case handler of+ Catch _ -> STG_SIG_HAN+ CatchOnce _ -> STG_SIG_RST+ CatchInfo _ -> STG_SIG_HAN+ CatchInfoOnce _ -> STG_SIG_RST+ _ -> error "installHandler"++ old_action <- stg_sig_install sig action nullPtr+ -- mask is pointless, so leave it NULL++ return (old_action, old_handler)++ case (old_handler,old_action) of+ (_, STG_SIG_DFL) -> return $ Default+ (_, STG_SIG_IGN) -> return $ Ignore+ (Nothing, _) -> return $ Ignore+ (Just (_,dyn), _)+ | Just h <- fromDynamic dyn -> return h+ | Just io <- fromDynamic dyn -> return (Catch io)+ -- handlers put there by the base package have type IO ()+ | otherwise -> return Default++foreign import ccall unsafe+ stg_sig_install+ :: CInt -- sig no.+ -> CInt -- action code (STG_SIG_HAN etc.)+ -> Ptr CSigset -- (in, out) blocked+ -> IO CInt -- (ret) old action code++getinfo :: (SignalInfo -> IO ()) -> ForeignPtr Word8 -> IO ()+getinfo handler fp_info = do+ si <- unmarshalSigInfo fp_info+ handler si++unmarshalSigInfo :: ForeignPtr Word8 -> IO SignalInfo+unmarshalSigInfo fp = do+ withForeignPtr fp $ \p -> do+ sig <- (#peek siginfo_t, si_signo) p+ errno <- (#peek siginfo_t, si_errno) p+ extra <- case sig of+ _ | sig == sigCHLD -> do+ pid <- (#peek siginfo_t, si_pid) p+ uid <- (#peek siginfo_t, si_uid) p+ wstat <- (#peek siginfo_t, si_status) p+ pstat <- decipherWaitStatus wstat+ return SigChldInfo { siginfoPid = pid,+ siginfoUid = uid,+ siginfoStatus = pstat }+ _ | otherwise ->+ return NoSignalSpecificInfo+ return+ SignalInfo {+ siginfoSignal = sig,+ siginfoError = Errno errno,+ siginfoSpecific = extra }++#endif /* !__PARALLEL_HASKELL__ */+#endif /* __GLASGOW_HASKELL__ */++-- -----------------------------------------------------------------------------+-- Alarms++-- | @scheduleAlarm i@ calls @alarm@ to schedule a real time+-- alarm at least @i@ seconds in the future.+scheduleAlarm :: Int -> IO Int+scheduleAlarm secs = do+ r <- c_alarm (fromIntegral secs)+ return (fromIntegral r)++foreign import ccall unsafe "alarm"+ c_alarm :: CUInt -> IO CUInt++#ifdef __GLASGOW_HASKELL__+-- -----------------------------------------------------------------------------+-- The NOCLDSTOP flag++foreign import ccall "&nocldstop" nocldstop :: Ptr Int++-- | Tells the system whether or not to set the @SA_NOCLDSTOP@ flag when+-- installing new signal handlers.+setStoppedChildFlag :: Bool -> IO Bool+setStoppedChildFlag b = do+ rc <- peek nocldstop+ poke nocldstop $ fromEnum (not b) + return (rc == (0::Int))++-- | Queries the current state of the stopped child flag.+queryStoppedChildFlag :: IO Bool+queryStoppedChildFlag = do+ rc <- peek nocldstop+ return (rc == (0::Int))+#endif /* __GLASGOW_HASKELL__ */++-- -----------------------------------------------------------------------------+-- Manipulating signal sets++newtype SignalSet = SignalSet (ForeignPtr CSigset)++emptySignalSet :: SignalSet+emptySignalSet = unsafePerformIO $ do+ fp <- mallocForeignPtrBytes sizeof_sigset_t+ throwErrnoIfMinus1_ "emptySignalSet" (withForeignPtr fp $ c_sigemptyset)+ return (SignalSet fp)++fullSignalSet :: SignalSet+fullSignalSet = unsafePerformIO $ do+ fp <- mallocForeignPtrBytes sizeof_sigset_t+ throwErrnoIfMinus1_ "fullSignalSet" (withForeignPtr fp $ c_sigfillset)+ return (SignalSet fp)++infixr `addSignal`, `deleteSignal`+addSignal :: Signal -> SignalSet -> SignalSet+addSignal sig (SignalSet fp1) = unsafePerformIO $ do+ fp2 <- mallocForeignPtrBytes sizeof_sigset_t+ withForeignPtr fp1 $ \p1 ->+ withForeignPtr fp2 $ \p2 -> do+ copyBytes p2 p1 sizeof_sigset_t+ throwErrnoIfMinus1_ "addSignal" (c_sigaddset p2 sig)+ return (SignalSet fp2)++deleteSignal :: Signal -> SignalSet -> SignalSet+deleteSignal sig (SignalSet fp1) = unsafePerformIO $ do+ fp2 <- mallocForeignPtrBytes sizeof_sigset_t+ withForeignPtr fp1 $ \p1 ->+ withForeignPtr fp2 $ \p2 -> do+ copyBytes p2 p1 sizeof_sigset_t+ throwErrnoIfMinus1_ "deleteSignal" (c_sigdelset p2 sig)+ return (SignalSet fp2)++inSignalSet :: Signal -> SignalSet -> Bool+inSignalSet sig (SignalSet fp) = unsafePerformIO $+ withForeignPtr fp $ \p -> do+ r <- throwErrnoIfMinus1 "inSignalSet" (c_sigismember p sig)+ return (r /= 0)++-- | @getSignalMask@ calls @sigprocmask@ to determine the+-- set of interrupts which are currently being blocked.+getSignalMask :: IO SignalSet+getSignalMask = do+ fp <- mallocForeignPtrBytes sizeof_sigset_t+ withForeignPtr fp $ \p ->+ throwErrnoIfMinus1_ "getSignalMask" (c_sigprocmask 0 nullPtr p)+ return (SignalSet fp)+ +sigProcMask :: String -> CInt -> SignalSet -> IO ()+sigProcMask fn how (SignalSet set) =+ withForeignPtr set $ \p_set ->+ throwErrnoIfMinus1_ fn (c_sigprocmask how p_set nullPtr)++-- | @setSignalMask mask@ calls @sigprocmask@ with+-- @SIG_SETMASK@ to block all interrupts in @mask@.+setSignalMask :: SignalSet -> IO ()+setSignalMask set = sigProcMask "setSignalMask" (CONST_SIG_SETMASK :: CInt) set++-- | @blockSignals mask@ calls @sigprocmask@ with+-- @SIG_BLOCK@ to add all interrupts in @mask@ to the+-- set of blocked interrupts.+blockSignals :: SignalSet -> IO ()+blockSignals set = sigProcMask "blockSignals" (CONST_SIG_BLOCK :: CInt) set++-- | @unblockSignals mask@ calls @sigprocmask@ with+-- @SIG_UNBLOCK@ to remove all interrupts in @mask@ from the+-- set of blocked interrupts. +unblockSignals :: SignalSet -> IO ()+unblockSignals set = sigProcMask "unblockSignals" (CONST_SIG_UNBLOCK :: CInt) set++-- | @getPendingSignals@ calls @sigpending@ to obtain+-- the set of interrupts which have been received but are currently blocked.+getPendingSignals :: IO SignalSet+getPendingSignals = do+ fp <- mallocForeignPtrBytes sizeof_sigset_t+ withForeignPtr fp $ \p -> + throwErrnoIfMinus1_ "getPendingSignals" (c_sigpending p)+ return (SignalSet fp)++#ifndef cygwin32_HOST_OS++-- | @awaitSignal iset@ suspends execution until an interrupt is received.+-- If @iset@ is @Just s@, @awaitSignal@ calls @sigsuspend@, installing+-- @s@ as the new signal mask before suspending execution; otherwise, it+-- calls @pause@. @awaitSignal@ returns on receipt of a signal. If you+-- have installed any signal handlers with @installHandler@, it may be+-- wise to call @yield@ directly after @awaitSignal@ to ensure that the+-- signal handler runs as promptly as possible.+awaitSignal :: Maybe SignalSet -> IO ()+awaitSignal maybe_sigset = do+ fp <- case maybe_sigset of+ Nothing -> do SignalSet fp <- getSignalMask; return fp+ Just (SignalSet fp) -> return fp+ withForeignPtr fp $ \p -> do+ c_sigsuspend p+ return ()+ -- ignore the return value; according to the docs it can only ever be+ -- (-1) with errno set to EINTR.+ +foreign import ccall unsafe "sigsuspend"+ c_sigsuspend :: Ptr CSigset -> IO CInt+#endif++#ifdef __HUGS__+foreign import ccall unsafe "sigdelset"+ c_sigdelset :: Ptr CSigset -> CInt -> IO CInt++foreign import ccall unsafe "sigfillset"+ c_sigfillset :: Ptr CSigset -> IO CInt++foreign import ccall unsafe "sigismember"+ c_sigismember :: Ptr CSigset -> CInt -> IO CInt+#else+foreign import ccall unsafe "__hscore_sigdelset"+ c_sigdelset :: Ptr CSigset -> CInt -> IO CInt++foreign import ccall unsafe "__hscore_sigfillset"+ c_sigfillset :: Ptr CSigset -> IO CInt++foreign import ccall unsafe "__hscore_sigismember"+ c_sigismember :: Ptr CSigset -> CInt -> IO CInt+#endif /* __HUGS__ */++foreign import ccall unsafe "sigpending"+ c_sigpending :: Ptr CSigset -> IO CInt+
System/Posix/Unistd.hsc view
@@ -156,7 +156,7 @@ else throwErrno "nanosleep" loop (fromIntegral tv_sec0 :: CTime) (fromIntegral tv_nsec0 :: CTime) -newtype CTimeSpec = CTimeSpec CTimeSpec+data CTimeSpec foreign import ccall safe "nanosleep" c_nanosleep :: Ptr CTimeSpec -> Ptr CTimeSpec -> IO CInt
cbits/HsUnix.c view
@@ -1,5 +1,4 @@ /* ------------------------------------------------------------------------------ * $Id: HsUnix.c,v 1.1 2002/09/12 16:38:22 simonmar Exp $ * * (c) The University of Glasgow 2002 *@@ -7,7 +6,111 @@ * * ---------------------------------------------------------------------------*/ -// Out-of-line versions of all the inline functions from HsUnix.h-#define INLINE /* nothing */ #include "HsUnix.h"++int __hsunix_wifexited (int stat) { return WIFEXITED(stat); }+int __hsunix_wexitstatus (int stat) { return WEXITSTATUS(stat); }+int __hsunix_wifsignaled (int stat) { return WIFSIGNALED(stat); }+int __hsunix_wtermsig (int stat) { return WTERMSIG(stat); }+int __hsunix_wifstopped (int stat) { return WIFSTOPPED(stat); }+int __hsunix_wstopsig (int stat) { return WSTOPSIG(stat); }++#ifdef HAVE_RTLDNEXT+void *__hsunix_rtldNext (void) {return RTLD_NEXT;} +#endif++#ifdef HAVE_RTLDDEFAULT+void *__hsunix_rtldDefault (void) {return RTLD_DEFAULT;} +#endif++#ifdef SIGINFO+int __hsunix_SIGINFO() { return SIGINFO; }+#endif+#ifdef SIGWINCH+int __hsunix_SIGWINCH() { return SIGWINCH; }+#endif++// lstat is a macro on some platforms, so we need a wrapper:+int __hsunix_lstat(const char *path, struct stat *buf) +{ + return lstat(path,buf);+}++// mknod is a macro on some platforms, so we need a wrapper:+int __hsunix_mknod(const char *pathname, mode_t mode, dev_t dev)+{ + return mknod(pathname,mode,dev);+}++#ifdef HAVE_PTSNAME+// I cannot figure out how to make the definitions of the following+// functions visible in <stdlib.h> on Linux. But these definitions+// follow the POSIX specs, and everything links and runs.++char *__hsunix_ptsname(int fd)+{+ extern char *ptsname(int);+ return ptsname(fd);+}++int __hsunix_grantpt(int fd)+{+ extern int grantpt(int);+ return grantpt(fd);+}++int __hsunix_unlockpt(int fd)+{+ extern int unlockpt(int);+ return unlockpt(fd);+}+#endif++// push a SVR4 STREAMS module; do nothing if STREAMS not available+int __hsunix_push_module(int fd, const char *module)+{+#if defined(I_PUSH) && !defined(__CYGWIN__) && !defined(HAVE_DEV_PTC)+ return ioctl(fd, I_PUSH, module);+#else+ return 0;+#endif+}++#if !defined(__MINGW32__)+int __hscore_mkstemp(char *filetemplate) {+ return (mkstemp(filetemplate));+}+#endif++#if !defined(__MINGW32__) && !defined(irix_HOST_OS)+int __hscore_getrlimit(int resource, struct rlimit *rlim) {+ return (getrlimit(resource, rlim));+}++int __hscore_setrlimit(int resource, struct rlimit *rlim) {+ return (setrlimit(resource, rlim));+}+#endif++int __hsunix_unsetenv(const char *name)+{+#ifdef UNSETENV_RETURNS_VOID+ unsetenv(name);+ return 0;+#else+ return unsetenv(name);+#endif+}++/* A size that will contain many path names, but not necessarily all+ * (PATH_MAX is not defined on systems with unlimited path length,+ * e.g. the Hurd).+ */+HsInt __hsunix_long_path_size() {+#ifdef PATH_MAX+ return PATH_MAX;+#else+ return 4096;+#endif+}
+ config.guess view
@@ -0,0 +1,1500 @@+#! /bin/sh+# Attempt to guess a canonical system name.+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,+# Inc.++timestamp='2006-07-02'++# This file 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.+#+# You should have received a copy of the GNU General Public License+# along with this program; if not, write to the Free Software+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA+# 02110-1301, USA.+#+# As a special exception to the GNU General Public License, if you+# distribute this file as part of a program that contains a+# configuration script generated by Autoconf, you may include it under+# the same distribution terms that you use for the rest of that program.+++# Originally written by Per Bothner <per@bothner.com>.+# Please send patches to <config-patches@gnu.org>. Submit a context+# diff and a properly formatted ChangeLog entry.+#+# This script attempts to guess a canonical system name similar to+# config.sub. If it succeeds, it prints the system name on stdout, and+# exits with 0. Otherwise, it exits with 1.+#+# The plan is that this can be called by configure scripts if you+# don't specify an explicit build system type.++me=`echo "$0" | sed -e 's,.*/,,'`++usage="\+Usage: $0 [OPTION]++Output the configuration name of the system \`$me' is run on.++Operation modes:+ -h, --help print this help, then exit+ -t, --time-stamp print date of last modification, then exit+ -v, --version print version number, then exit++Report bugs and patches to <config-patches@gnu.org>."++version="\+GNU config.guess ($timestamp)++Originally written by Per Bothner.+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005+Free Software Foundation, Inc.++This is free software; see the source for copying conditions. There is NO+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."++help="+Try \`$me --help' for more information."++# Parse command line+while test $# -gt 0 ; do+ case $1 in+ --time-stamp | --time* | -t )+ echo "$timestamp" ; exit ;;+ --version | -v )+ echo "$version" ; exit ;;+ --help | --h* | -h )+ echo "$usage"; exit ;;+ -- ) # Stop option processing+ shift; break ;;+ - ) # Use stdin as input.+ break ;;+ -* )+ echo "$me: invalid option $1$help" >&2+ exit 1 ;;+ * )+ break ;;+ esac+done++if test $# != 0; then+ echo "$me: too many arguments$help" >&2+ exit 1+fi++trap 'exit 1' 1 2 15++# CC_FOR_BUILD -- compiler used by this script. Note that the use of a+# compiler to aid in system detection is discouraged as it requires+# temporary files to be created and, as you can see below, it is a+# headache to deal with in a portable fashion.++# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still+# use `HOST_CC' if defined, but it is deprecated.++# Portable tmp directory creation inspired by the Autoconf team.++set_cc_for_build='+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;+: ${TMPDIR=/tmp} ;+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;+dummy=$tmp/dummy ;+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;+case $CC_FOR_BUILD,$HOST_CC,$CC in+ ,,) echo "int x;" > $dummy.c ;+ for c in cc gcc c89 c99 ; do+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then+ CC_FOR_BUILD="$c"; break ;+ fi ;+ done ;+ if test x"$CC_FOR_BUILD" = x ; then+ CC_FOR_BUILD=no_compiler_found ;+ fi+ ;;+ ,,*) CC_FOR_BUILD=$CC ;;+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;+esac ; set_cc_for_build= ;'++# This is needed to find uname on a Pyramid OSx when run in the BSD universe.+# (ghazi@noc.rutgers.edu 1994-08-24)+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then+ PATH=$PATH:/.attbin ; export PATH+fi++UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown++# Note: order is significant - the case branches are not exclusive.++case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in+ *:NetBSD:*:*)+ # NetBSD (nbsd) targets should (where applicable) match one or+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently+ # switched to ELF, *-*-netbsd* would select the old+ # object file format. This provides both forward+ # compatibility and a consistent mechanism for selecting the+ # object file format.+ #+ # Note: NetBSD doesn't particularly care about the vendor+ # portion of the name. We always set it to "unknown".+ sysctl="sysctl -n hw.machine_arch"+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`+ case "${UNAME_MACHINE_ARCH}" in+ armeb) machine=armeb-unknown ;;+ arm*) machine=arm-unknown ;;+ sh3el) machine=shl-unknown ;;+ sh3eb) machine=sh-unknown ;;+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;+ esac+ # The Operating System including object format, if it has switched+ # to ELF recently, or will in the future.+ case "${UNAME_MACHINE_ARCH}" in+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)+ eval $set_cc_for_build+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \+ | grep __ELF__ >/dev/null+ then+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).+ # Return netbsd for either. FIX?+ os=netbsd+ else+ os=netbsdelf+ fi+ ;;+ *)+ os=netbsd+ ;;+ esac+ # The OS release+ # Debian GNU/NetBSD machines have a different userland, and+ # thus, need a distinct triplet. However, they do not need+ # kernel version information, so it can be replaced with a+ # suitable tag, in the style of linux-gnu.+ case "${UNAME_VERSION}" in+ Debian*)+ release='-gnu'+ ;;+ *)+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`+ ;;+ esac+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:+ # contains redundant information, the shorter form:+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.+ echo "${machine}-${os}${release}"+ exit ;;+ *:OpenBSD:*:*)+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}+ exit ;;+ *:ekkoBSD:*:*)+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}+ exit ;;+ *:SolidBSD:*:*)+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}+ exit ;;+ macppc:MirBSD:*:*)+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}+ exit ;;+ *:MirBSD:*:*)+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}+ exit ;;+ alpha:OSF1:*:*)+ case $UNAME_RELEASE in+ *4.0)+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`+ ;;+ *5.*)+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`+ ;;+ esac+ # According to Compaq, /usr/sbin/psrinfo has been available on+ # OSF/1 and Tru64 systems produced since 1995. I hope that+ # covers most systems running today. This code pipes the CPU+ # types through head -n 1, so we only detect the type of CPU 0.+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`+ case "$ALPHA_CPU_TYPE" in+ "EV4 (21064)")+ UNAME_MACHINE="alpha" ;;+ "EV4.5 (21064)")+ UNAME_MACHINE="alpha" ;;+ "LCA4 (21066/21068)")+ UNAME_MACHINE="alpha" ;;+ "EV5 (21164)")+ UNAME_MACHINE="alphaev5" ;;+ "EV5.6 (21164A)")+ UNAME_MACHINE="alphaev56" ;;+ "EV5.6 (21164PC)")+ UNAME_MACHINE="alphapca56" ;;+ "EV5.7 (21164PC)")+ UNAME_MACHINE="alphapca57" ;;+ "EV6 (21264)")+ UNAME_MACHINE="alphaev6" ;;+ "EV6.7 (21264A)")+ UNAME_MACHINE="alphaev67" ;;+ "EV6.8CB (21264C)")+ UNAME_MACHINE="alphaev68" ;;+ "EV6.8AL (21264B)")+ UNAME_MACHINE="alphaev68" ;;+ "EV6.8CX (21264D)")+ UNAME_MACHINE="alphaev68" ;;+ "EV6.9A (21264/EV69A)")+ UNAME_MACHINE="alphaev69" ;;+ "EV7 (21364)")+ UNAME_MACHINE="alphaev7" ;;+ "EV7.9 (21364A)")+ UNAME_MACHINE="alphaev79" ;;+ esac+ # A Pn.n version is a patched version.+ # A Vn.n version is a released version.+ # A Tn.n version is a released field test version.+ # A Xn.n version is an unreleased experimental baselevel.+ # 1.2 uses "1.2" for uname -r.+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`+ exit ;;+ Alpha\ *:Windows_NT*:*)+ # How do we know it's Interix rather than the generic POSIX subsystem?+ # Should we change UNAME_MACHINE based on the output of uname instead+ # of the specific Alpha model?+ echo alpha-pc-interix+ exit ;;+ 21064:Windows_NT:50:3)+ echo alpha-dec-winnt3.5+ exit ;;+ Amiga*:UNIX_System_V:4.0:*)+ echo m68k-unknown-sysv4+ exit ;;+ *:[Aa]miga[Oo][Ss]:*:*)+ echo ${UNAME_MACHINE}-unknown-amigaos+ exit ;;+ *:[Mm]orph[Oo][Ss]:*:*)+ echo ${UNAME_MACHINE}-unknown-morphos+ exit ;;+ *:OS/390:*:*)+ echo i370-ibm-openedition+ exit ;;+ *:z/VM:*:*)+ echo s390-ibm-zvmoe+ exit ;;+ *:OS400:*:*)+ echo powerpc-ibm-os400+ exit ;;+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)+ echo arm-acorn-riscix${UNAME_RELEASE}+ exit ;;+ arm:riscos:*:*|arm:RISCOS:*:*)+ echo arm-unknown-riscos+ exit ;;+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)+ echo hppa1.1-hitachi-hiuxmpp+ exit ;;+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.+ if test "`(/bin/universe) 2>/dev/null`" = att ; then+ echo pyramid-pyramid-sysv3+ else+ echo pyramid-pyramid-bsd+ fi+ exit ;;+ NILE*:*:*:dcosx)+ echo pyramid-pyramid-svr4+ exit ;;+ DRS?6000:unix:4.0:6*)+ echo sparc-icl-nx6+ exit ;;+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)+ case `/usr/bin/uname -p` in+ sparc) echo sparc-icl-nx7; exit ;;+ esac ;;+ sun4H:SunOS:5.*:*)+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`+ exit ;;+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`+ exit ;;+ i86pc:SunOS:5.*:*)+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`+ exit ;;+ sun4*:SunOS:6*:*)+ # According to config.sub, this is the proper way to canonicalize+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but+ # it's likely to be more like Solaris than SunOS4.+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`+ exit ;;+ sun4*:SunOS:*:*)+ case "`/usr/bin/arch -k`" in+ Series*|S4*)+ UNAME_RELEASE=`uname -v`+ ;;+ esac+ # Japanese Language versions have a version number like `4.1.3-JL'.+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`+ exit ;;+ sun3*:SunOS:*:*)+ echo m68k-sun-sunos${UNAME_RELEASE}+ exit ;;+ sun*:*:4.2BSD:*)+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3+ case "`/bin/arch`" in+ sun3)+ echo m68k-sun-sunos${UNAME_RELEASE}+ ;;+ sun4)+ echo sparc-sun-sunos${UNAME_RELEASE}+ ;;+ esac+ exit ;;+ aushp:SunOS:*:*)+ echo sparc-auspex-sunos${UNAME_RELEASE}+ exit ;;+ # The situation for MiNT is a little confusing. The machine name+ # can be virtually everything (everything which is not+ # "atarist" or "atariste" at least should have a processor+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"+ # to the lowercase version "mint" (or "freemint"). Finally+ # the system name "TOS" denotes a system which is actually not+ # MiNT. But MiNT is downward compatible to TOS, so this should+ # be no problem.+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)+ echo m68k-atari-mint${UNAME_RELEASE}+ exit ;;+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)+ echo m68k-atari-mint${UNAME_RELEASE}+ exit ;;+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)+ echo m68k-atari-mint${UNAME_RELEASE}+ exit ;;+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)+ echo m68k-milan-mint${UNAME_RELEASE}+ exit ;;+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)+ echo m68k-hades-mint${UNAME_RELEASE}+ exit ;;+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)+ echo m68k-unknown-mint${UNAME_RELEASE}+ exit ;;+ m68k:machten:*:*)+ echo m68k-apple-machten${UNAME_RELEASE}+ exit ;;+ powerpc:machten:*:*)+ echo powerpc-apple-machten${UNAME_RELEASE}+ exit ;;+ RISC*:Mach:*:*)+ echo mips-dec-mach_bsd4.3+ exit ;;+ RISC*:ULTRIX:*:*)+ echo mips-dec-ultrix${UNAME_RELEASE}+ exit ;;+ VAX*:ULTRIX*:*:*)+ echo vax-dec-ultrix${UNAME_RELEASE}+ exit ;;+ 2020:CLIX:*:* | 2430:CLIX:*:*)+ echo clipper-intergraph-clix${UNAME_RELEASE}+ exit ;;+ mips:*:*:UMIPS | mips:*:*:RISCos)+ eval $set_cc_for_build+ sed 's/^ //' << EOF >$dummy.c+#ifdef __cplusplus+#include <stdio.h> /* for printf() prototype */+ int main (int argc, char *argv[]) {+#else+ int main (argc, argv) int argc; char *argv[]; {+#endif+ #if defined (host_mips) && defined (MIPSEB)+ #if defined (SYSTYPE_SYSV)+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);+ #endif+ #if defined (SYSTYPE_SVR4)+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);+ #endif+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);+ #endif+ #endif+ exit (-1);+ }+EOF+ $CC_FOR_BUILD -o $dummy $dummy.c &&+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&+ SYSTEM_NAME=`$dummy $dummyarg` &&+ { echo "$SYSTEM_NAME"; exit; }+ echo mips-mips-riscos${UNAME_RELEASE}+ exit ;;+ Motorola:PowerMAX_OS:*:*)+ echo powerpc-motorola-powermax+ exit ;;+ Motorola:*:4.3:PL8-*)+ echo powerpc-harris-powermax+ exit ;;+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)+ echo powerpc-harris-powermax+ exit ;;+ Night_Hawk:Power_UNIX:*:*)+ echo powerpc-harris-powerunix+ exit ;;+ m88k:CX/UX:7*:*)+ echo m88k-harris-cxux7+ exit ;;+ m88k:*:4*:R4*)+ echo m88k-motorola-sysv4+ exit ;;+ m88k:*:3*:R3*)+ echo m88k-motorola-sysv3+ exit ;;+ AViiON:dgux:*:*)+ # DG/UX returns AViiON for all architectures+ UNAME_PROCESSOR=`/usr/bin/uname -p`+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]+ then+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \+ [ ${TARGET_BINARY_INTERFACE}x = x ]+ then+ echo m88k-dg-dgux${UNAME_RELEASE}+ else+ echo m88k-dg-dguxbcs${UNAME_RELEASE}+ fi+ else+ echo i586-dg-dgux${UNAME_RELEASE}+ fi+ exit ;;+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)+ echo m88k-dolphin-sysv3+ exit ;;+ M88*:*:R3*:*)+ # Delta 88k system running SVR3+ echo m88k-motorola-sysv3+ exit ;;+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)+ echo m88k-tektronix-sysv3+ exit ;;+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)+ echo m68k-tektronix-bsd+ exit ;;+ *:IRIX*:*:*)+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`+ exit ;;+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '+ i*86:AIX:*:*)+ echo i386-ibm-aix+ exit ;;+ ia64:AIX:*:*)+ if [ -x /usr/bin/oslevel ] ; then+ IBM_REV=`/usr/bin/oslevel`+ else+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}+ fi+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}+ exit ;;+ *:AIX:2:3)+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then+ eval $set_cc_for_build+ sed 's/^ //' << EOF >$dummy.c+ #include <sys/systemcfg.h>++ main()+ {+ if (!__power_pc())+ exit(1);+ puts("powerpc-ibm-aix3.2.5");+ exit(0);+ }+EOF+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`+ then+ echo "$SYSTEM_NAME"+ else+ echo rs6000-ibm-aix3.2.5+ fi+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then+ echo rs6000-ibm-aix3.2.4+ else+ echo rs6000-ibm-aix3.2+ fi+ exit ;;+ *:AIX:*:[45])+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then+ IBM_ARCH=rs6000+ else+ IBM_ARCH=powerpc+ fi+ if [ -x /usr/bin/oslevel ] ; then+ IBM_REV=`/usr/bin/oslevel`+ else+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}+ fi+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}+ exit ;;+ *:AIX:*:*)+ echo rs6000-ibm-aix+ exit ;;+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)+ echo romp-ibm-bsd4.4+ exit ;;+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to+ exit ;; # report: romp-ibm BSD 4.3+ *:BOSX:*:*)+ echo rs6000-bull-bosx+ exit ;;+ DPX/2?00:B.O.S.:*:*)+ echo m68k-bull-sysv3+ exit ;;+ 9000/[34]??:4.3bsd:1.*:*)+ echo m68k-hp-bsd+ exit ;;+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)+ echo m68k-hp-bsd4.4+ exit ;;+ 9000/[34678]??:HP-UX:*:*)+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`+ case "${UNAME_MACHINE}" in+ 9000/31? ) HP_ARCH=m68000 ;;+ 9000/[34]?? ) HP_ARCH=m68k ;;+ 9000/[678][0-9][0-9])+ if [ -x /usr/bin/getconf ]; then+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`+ case "${sc_cpu_version}" in+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1+ 532) # CPU_PA_RISC2_0+ case "${sc_kernel_bits}" in+ 32) HP_ARCH="hppa2.0n" ;;+ 64) HP_ARCH="hppa2.0w" ;;+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20+ esac ;;+ esac+ fi+ if [ "${HP_ARCH}" = "" ]; then+ eval $set_cc_for_build+ sed 's/^ //' << EOF >$dummy.c++ #define _HPUX_SOURCE+ #include <stdlib.h>+ #include <unistd.h>++ int main ()+ {+ #if defined(_SC_KERNEL_BITS)+ long bits = sysconf(_SC_KERNEL_BITS);+ #endif+ long cpu = sysconf (_SC_CPU_VERSION);++ switch (cpu)+ {+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;+ case CPU_PA_RISC2_0:+ #if defined(_SC_KERNEL_BITS)+ switch (bits)+ {+ case 64: puts ("hppa2.0w"); break;+ case 32: puts ("hppa2.0n"); break;+ default: puts ("hppa2.0"); break;+ } break;+ #else /* !defined(_SC_KERNEL_BITS) */+ puts ("hppa2.0"); break;+ #endif+ default: puts ("hppa1.0"); break;+ }+ exit (0);+ }+EOF+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`+ test -z "$HP_ARCH" && HP_ARCH=hppa+ fi ;;+ esac+ if [ ${HP_ARCH} = "hppa2.0w" ]+ then+ eval $set_cc_for_build++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler+ # generating 64-bit code. GNU and HP use different nomenclature:+ #+ # $ CC_FOR_BUILD=cc ./config.guess+ # => hppa2.0w-hp-hpux11.23+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess+ # => hppa64-hp-hpux11.23++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |+ grep __LP64__ >/dev/null+ then+ HP_ARCH="hppa2.0w"+ else+ HP_ARCH="hppa64"+ fi+ fi+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}+ exit ;;+ ia64:HP-UX:*:*)+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`+ echo ia64-hp-hpux${HPUX_REV}+ exit ;;+ 3050*:HI-UX:*:*)+ eval $set_cc_for_build+ sed 's/^ //' << EOF >$dummy.c+ #include <unistd.h>+ int+ main ()+ {+ long cpu = sysconf (_SC_CPU_VERSION);+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct+ results, however. */+ if (CPU_IS_PA_RISC (cpu))+ {+ switch (cpu)+ {+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;+ default: puts ("hppa-hitachi-hiuxwe2"); break;+ }+ }+ else if (CPU_IS_HP_MC68K (cpu))+ puts ("m68k-hitachi-hiuxwe2");+ else puts ("unknown-hitachi-hiuxwe2");+ exit (0);+ }+EOF+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&+ { echo "$SYSTEM_NAME"; exit; }+ echo unknown-hitachi-hiuxwe2+ exit ;;+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )+ echo hppa1.1-hp-bsd+ exit ;;+ 9000/8??:4.3bsd:*:*)+ echo hppa1.0-hp-bsd+ exit ;;+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)+ echo hppa1.0-hp-mpeix+ exit ;;+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )+ echo hppa1.1-hp-osf+ exit ;;+ hp8??:OSF1:*:*)+ echo hppa1.0-hp-osf+ exit ;;+ i*86:OSF1:*:*)+ if [ -x /usr/sbin/sysversion ] ; then+ echo ${UNAME_MACHINE}-unknown-osf1mk+ else+ echo ${UNAME_MACHINE}-unknown-osf1+ fi+ exit ;;+ parisc*:Lites*:*:*)+ echo hppa1.1-hp-lites+ exit ;;+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)+ echo c1-convex-bsd+ exit ;;+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)+ if getsysinfo -f scalar_acc+ then echo c32-convex-bsd+ else echo c2-convex-bsd+ fi+ exit ;;+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)+ echo c34-convex-bsd+ exit ;;+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)+ echo c38-convex-bsd+ exit ;;+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)+ echo c4-convex-bsd+ exit ;;+ CRAY*Y-MP:*:*:*)+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'+ exit ;;+ CRAY*[A-Z]90:*:*:*)+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \+ -e 's/\.[^.]*$/.X/'+ exit ;;+ CRAY*TS:*:*:*)+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'+ exit ;;+ CRAY*T3E:*:*:*)+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'+ exit ;;+ CRAY*SV1:*:*:*)+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'+ exit ;;+ *:UNICOS/mp:*:*)+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'+ exit ;;+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"+ exit ;;+ 5000:UNIX_System_V:4.*:*)+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"+ exit ;;+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}+ exit ;;+ sparc*:BSD/OS:*:*)+ echo sparc-unknown-bsdi${UNAME_RELEASE}+ exit ;;+ *:BSD/OS:*:*)+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}+ exit ;;+ *:FreeBSD:*:*)+ case ${UNAME_MACHINE} in+ pc98)+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;+ amd64)+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;+ *)+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;+ esac+ exit ;;+ i*:CYGWIN*:*)+ echo ${UNAME_MACHINE}-pc-cygwin+ exit ;;+ i*:MINGW*:*)+ echo ${UNAME_MACHINE}-pc-mingw32+ exit ;;+ i*:windows32*:*)+ # uname -m includes "-pc" on this system.+ echo ${UNAME_MACHINE}-mingw32+ exit ;;+ i*:PW*:*)+ echo ${UNAME_MACHINE}-pc-pw32+ exit ;;+ x86:Interix*:[3456]*)+ echo i586-pc-interix${UNAME_RELEASE}+ exit ;;+ EM64T:Interix*:[3456]*)+ echo x86_64-unknown-interix${UNAME_RELEASE}+ exit ;;+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)+ echo i${UNAME_MACHINE}-pc-mks+ exit ;;+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)+ # How do we know it's Interix rather than the generic POSIX subsystem?+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we+ # UNAME_MACHINE based on the output of uname instead of i386?+ echo i586-pc-interix+ exit ;;+ i*:UWIN*:*)+ echo ${UNAME_MACHINE}-pc-uwin+ exit ;;+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)+ echo x86_64-unknown-cygwin+ exit ;;+ p*:CYGWIN*:*)+ echo powerpcle-unknown-cygwin+ exit ;;+ prep*:SunOS:5.*:*)+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`+ exit ;;+ *:GNU:*:*)+ # the GNU system+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`+ exit ;;+ *:GNU/*:*:*)+ # other systems with GNU libc and userland+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu+ exit ;;+ i*86:Minix:*:*)+ echo ${UNAME_MACHINE}-pc-minix+ exit ;;+ arm*:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-gnu+ exit ;;+ avr32*:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-gnu+ exit ;;+ cris:Linux:*:*)+ echo cris-axis-linux-gnu+ exit ;;+ crisv32:Linux:*:*)+ echo crisv32-axis-linux-gnu+ exit ;;+ frv:Linux:*:*)+ echo frv-unknown-linux-gnu+ exit ;;+ ia64:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-gnu+ exit ;;+ m32r*:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-gnu+ exit ;;+ m68*:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-gnu+ exit ;;+ mips:Linux:*:*)+ eval $set_cc_for_build+ sed 's/^ //' << EOF >$dummy.c+ #undef CPU+ #undef mips+ #undef mipsel+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)+ CPU=mipsel+ #else+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)+ CPU=mips+ #else+ CPU=+ #endif+ #endif+EOF+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '+ /^CPU/{+ s: ::g+ p+ }'`"+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }+ ;;+ mips64:Linux:*:*)+ eval $set_cc_for_build+ sed 's/^ //' << EOF >$dummy.c+ #undef CPU+ #undef mips64+ #undef mips64el+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)+ CPU=mips64el+ #else+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)+ CPU=mips64+ #else+ CPU=+ #endif+ #endif+EOF+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '+ /^CPU/{+ s: ::g+ p+ }'`"+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }+ ;;+ or32:Linux:*:*)+ echo or32-unknown-linux-gnu+ exit ;;+ ppc:Linux:*:*)+ echo powerpc-unknown-linux-gnu+ exit ;;+ ppc64:Linux:*:*)+ echo powerpc64-unknown-linux-gnu+ exit ;;+ alpha:Linux:*:*)+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in+ EV5) UNAME_MACHINE=alphaev5 ;;+ EV56) UNAME_MACHINE=alphaev56 ;;+ PCA56) UNAME_MACHINE=alphapca56 ;;+ PCA57) UNAME_MACHINE=alphapca56 ;;+ EV6) UNAME_MACHINE=alphaev6 ;;+ EV67) UNAME_MACHINE=alphaev67 ;;+ EV68*) UNAME_MACHINE=alphaev68 ;;+ esac+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}+ exit ;;+ parisc:Linux:*:* | hppa:Linux:*:*)+ # Look for CPU level+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in+ PA7*) echo hppa1.1-unknown-linux-gnu ;;+ PA8*) echo hppa2.0-unknown-linux-gnu ;;+ *) echo hppa-unknown-linux-gnu ;;+ esac+ exit ;;+ parisc64:Linux:*:* | hppa64:Linux:*:*)+ echo hppa64-unknown-linux-gnu+ exit ;;+ s390:Linux:*:* | s390x:Linux:*:*)+ echo ${UNAME_MACHINE}-ibm-linux+ exit ;;+ sh64*:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-gnu+ exit ;;+ sh*:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-gnu+ exit ;;+ sparc:Linux:*:* | sparc64:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-gnu+ exit ;;+ vax:Linux:*:*)+ echo ${UNAME_MACHINE}-dec-linux-gnu+ exit ;;+ x86_64:Linux:*:*)+ echo x86_64-unknown-linux-gnu+ exit ;;+ i*86:Linux:*:*)+ # The BFD linker knows what the default object file format is, so+ # first see if it will tell us. cd to the root directory to prevent+ # problems with other programs or directories called `ld' in the path.+ # Set LC_ALL=C to ensure ld outputs messages in English.+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \+ | sed -ne '/supported targets:/!d+ s/[ ][ ]*/ /g+ s/.*supported targets: *//+ s/ .*//+ p'`+ case "$ld_supported_targets" in+ elf32-i386)+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"+ ;;+ a.out-i386-linux)+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"+ exit ;;+ coff-i386)+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"+ exit ;;+ "")+ # Either a pre-BFD a.out linker (linux-gnuoldld) or+ # one that does not give us useful --help.+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"+ exit ;;+ esac+ # Determine whether the default compiler is a.out or elf+ eval $set_cc_for_build+ sed 's/^ //' << EOF >$dummy.c+ #include <features.h>+ #ifdef __ELF__+ # ifdef __GLIBC__+ # if __GLIBC__ >= 2+ LIBC=gnu+ # else+ LIBC=gnulibc1+ # endif+ # else+ LIBC=gnulibc1+ # endif+ #else+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)+ LIBC=gnu+ #else+ LIBC=gnuaout+ #endif+ #endif+ #ifdef __dietlibc__+ LIBC=dietlibc+ #endif+EOF+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '+ /^LIBC/{+ s: ::g+ p+ }'`"+ test x"${LIBC}" != x && {+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"+ exit+ }+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }+ ;;+ i*86:DYNIX/ptx:4*:*)+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.+ # earlier versions are messed up and put the nodename in both+ # sysname and nodename.+ echo i386-sequent-sysv4+ exit ;;+ i*86:UNIX_SV:4.2MP:2.*)+ # Unixware is an offshoot of SVR4, but it has its own version+ # number series starting with 2...+ # I am not positive that other SVR4 systems won't match this,+ # I just have to hope. -- rms.+ # Use sysv4.2uw... so that sysv4* matches it.+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}+ exit ;;+ i*86:OS/2:*:*)+ # If we were able to find `uname', then EMX Unix compatibility+ # is probably installed.+ echo ${UNAME_MACHINE}-pc-os2-emx+ exit ;;+ i*86:XTS-300:*:STOP)+ echo ${UNAME_MACHINE}-unknown-stop+ exit ;;+ i*86:atheos:*:*)+ echo ${UNAME_MACHINE}-unknown-atheos+ exit ;;+ i*86:syllable:*:*)+ echo ${UNAME_MACHINE}-pc-syllable+ exit ;;+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)+ echo i386-unknown-lynxos${UNAME_RELEASE}+ exit ;;+ i*86:*DOS:*:*)+ echo ${UNAME_MACHINE}-pc-msdosdjgpp+ exit ;;+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}+ else+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}+ fi+ exit ;;+ i*86:*:5:[678]*)+ # UnixWare 7.x, OpenUNIX and OpenServer 6.+ case `/bin/uname -X | grep "^Machine"` in+ *486*) UNAME_MACHINE=i486 ;;+ *Pentium) UNAME_MACHINE=i586 ;;+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;+ esac+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}+ exit ;;+ i*86:*:3.2:*)+ if test -f /usr/options/cb.name; then+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL+ elif /bin/uname -X 2>/dev/null >/dev/null ; then+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \+ && UNAME_MACHINE=i586+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \+ && UNAME_MACHINE=i686+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \+ && UNAME_MACHINE=i686+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL+ else+ echo ${UNAME_MACHINE}-pc-sysv32+ fi+ exit ;;+ pc:*:*:*)+ # Left here for compatibility:+ # uname -m prints for DJGPP always 'pc', but it prints nothing about+ # the processor, so we play safe by assuming i386.+ echo i386-pc-msdosdjgpp+ exit ;;+ Intel:Mach:3*:*)+ echo i386-pc-mach3+ exit ;;+ paragon:*:*:*)+ echo i860-intel-osf1+ exit ;;+ i860:*:4.*:*) # i860-SVR4+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4+ else # Add other i860-SVR4 vendors below as they are discovered.+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4+ fi+ exit ;;+ mini*:CTIX:SYS*5:*)+ # "miniframe"+ echo m68010-convergent-sysv+ exit ;;+ mc68k:UNIX:SYSTEM5:3.51m)+ echo m68k-convergent-sysv+ exit ;;+ M680?0:D-NIX:5.3:*)+ echo m68k-diab-dnix+ exit ;;+ M68*:*:R3V[5678]*:*)+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)+ OS_REL=''+ test -r /etc/.relid \+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \+ && { echo i486-ncr-sysv4; exit; } ;;+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)+ echo m68k-unknown-lynxos${UNAME_RELEASE}+ exit ;;+ mc68030:UNIX_System_V:4.*:*)+ echo m68k-atari-sysv4+ exit ;;+ TSUNAMI:LynxOS:2.*:*)+ echo sparc-unknown-lynxos${UNAME_RELEASE}+ exit ;;+ rs6000:LynxOS:2.*:*)+ echo rs6000-unknown-lynxos${UNAME_RELEASE}+ exit ;;+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)+ echo powerpc-unknown-lynxos${UNAME_RELEASE}+ exit ;;+ SM[BE]S:UNIX_SV:*:*)+ echo mips-dde-sysv${UNAME_RELEASE}+ exit ;;+ RM*:ReliantUNIX-*:*:*)+ echo mips-sni-sysv4+ exit ;;+ RM*:SINIX-*:*:*)+ echo mips-sni-sysv4+ exit ;;+ *:SINIX-*:*:*)+ if uname -p 2>/dev/null >/dev/null ; then+ UNAME_MACHINE=`(uname -p) 2>/dev/null`+ echo ${UNAME_MACHINE}-sni-sysv4+ else+ echo ns32k-sni-sysv+ fi+ exit ;;+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort+ # says <Richard.M.Bartel@ccMail.Census.GOV>+ echo i586-unisys-sysv4+ exit ;;+ *:UNIX_System_V:4*:FTX*)+ # From Gerald Hewes <hewes@openmarket.com>.+ # How about differentiating between stratus architectures? -djm+ echo hppa1.1-stratus-sysv4+ exit ;;+ *:*:*:FTX*)+ # From seanf@swdc.stratus.com.+ echo i860-stratus-sysv4+ exit ;;+ i*86:VOS:*:*)+ # From Paul.Green@stratus.com.+ echo ${UNAME_MACHINE}-stratus-vos+ exit ;;+ *:VOS:*:*)+ # From Paul.Green@stratus.com.+ echo hppa1.1-stratus-vos+ exit ;;+ mc68*:A/UX:*:*)+ echo m68k-apple-aux${UNAME_RELEASE}+ exit ;;+ news*:NEWS-OS:6*:*)+ echo mips-sony-newsos6+ exit ;;+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)+ if [ -d /usr/nec ]; then+ echo mips-nec-sysv${UNAME_RELEASE}+ else+ echo mips-unknown-sysv${UNAME_RELEASE}+ fi+ exit ;;+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.+ echo powerpc-be-beos+ exit ;;+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.+ echo powerpc-apple-beos+ exit ;;+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.+ echo i586-pc-beos+ exit ;;+ SX-4:SUPER-UX:*:*)+ echo sx4-nec-superux${UNAME_RELEASE}+ exit ;;+ SX-5:SUPER-UX:*:*)+ echo sx5-nec-superux${UNAME_RELEASE}+ exit ;;+ SX-6:SUPER-UX:*:*)+ echo sx6-nec-superux${UNAME_RELEASE}+ exit ;;+ Power*:Rhapsody:*:*)+ echo powerpc-apple-rhapsody${UNAME_RELEASE}+ exit ;;+ *:Rhapsody:*:*)+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}+ exit ;;+ *:Darwin:*:*)+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown+ case $UNAME_PROCESSOR in+ unknown) UNAME_PROCESSOR=powerpc ;;+ esac+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}+ exit ;;+ *:procnto*:*:* | *:QNX:[0123456789]*:*)+ UNAME_PROCESSOR=`uname -p`+ if test "$UNAME_PROCESSOR" = "x86"; then+ UNAME_PROCESSOR=i386+ UNAME_MACHINE=pc+ fi+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}+ exit ;;+ *:QNX:*:4*)+ echo i386-pc-qnx+ exit ;;+ NSE-?:NONSTOP_KERNEL:*:*)+ echo nse-tandem-nsk${UNAME_RELEASE}+ exit ;;+ NSR-?:NONSTOP_KERNEL:*:*)+ echo nsr-tandem-nsk${UNAME_RELEASE}+ exit ;;+ *:NonStop-UX:*:*)+ echo mips-compaq-nonstopux+ exit ;;+ BS2000:POSIX*:*:*)+ echo bs2000-siemens-sysv+ exit ;;+ DS/*:UNIX_System_V:*:*)+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}+ exit ;;+ *:Plan9:*:*)+ # "uname -m" is not consistent, so use $cputype instead. 386+ # is converted to i386 for consistency with other x86+ # operating systems.+ if test "$cputype" = "386"; then+ UNAME_MACHINE=i386+ else+ UNAME_MACHINE="$cputype"+ fi+ echo ${UNAME_MACHINE}-unknown-plan9+ exit ;;+ *:TOPS-10:*:*)+ echo pdp10-unknown-tops10+ exit ;;+ *:TENEX:*:*)+ echo pdp10-unknown-tenex+ exit ;;+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)+ echo pdp10-dec-tops20+ exit ;;+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)+ echo pdp10-xkl-tops20+ exit ;;+ *:TOPS-20:*:*)+ echo pdp10-unknown-tops20+ exit ;;+ *:ITS:*:*)+ echo pdp10-unknown-its+ exit ;;+ SEI:*:*:SEIUX)+ echo mips-sei-seiux${UNAME_RELEASE}+ exit ;;+ *:DragonFly:*:*)+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`+ exit ;;+ *:*VMS:*:*)+ UNAME_MACHINE=`(uname -p) 2>/dev/null`+ case "${UNAME_MACHINE}" in+ A*) echo alpha-dec-vms ; exit ;;+ I*) echo ia64-dec-vms ; exit ;;+ V*) echo vax-dec-vms ; exit ;;+ esac ;;+ *:XENIX:*:SysV)+ echo i386-pc-xenix+ exit ;;+ i*86:skyos:*:*)+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'+ exit ;;+ i*86:rdos:*:*)+ echo ${UNAME_MACHINE}-pc-rdos+ exit ;;+esac++#echo '(No uname command or uname output not recognized.)' 1>&2+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2++eval $set_cc_for_build+cat >$dummy.c <<EOF+#ifdef _SEQUENT_+# include <sys/types.h>+# include <sys/utsname.h>+#endif+main ()+{+#if defined (sony)+#if defined (MIPSEB)+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,+ I don't know.... */+ printf ("mips-sony-bsd\n"); exit (0);+#else+#include <sys/param.h>+ printf ("m68k-sony-newsos%s\n",+#ifdef NEWSOS4+ "4"+#else+ ""+#endif+ ); exit (0);+#endif+#endif++#if defined (__arm) && defined (__acorn) && defined (__unix)+ printf ("arm-acorn-riscix\n"); exit (0);+#endif++#if defined (hp300) && !defined (hpux)+ printf ("m68k-hp-bsd\n"); exit (0);+#endif++#if defined (NeXT)+#if !defined (__ARCHITECTURE__)+#define __ARCHITECTURE__ "m68k"+#endif+ int version;+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;+ if (version < 4)+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);+ else+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);+ exit (0);+#endif++#if defined (MULTIMAX) || defined (n16)+#if defined (UMAXV)+ printf ("ns32k-encore-sysv\n"); exit (0);+#else+#if defined (CMU)+ printf ("ns32k-encore-mach\n"); exit (0);+#else+ printf ("ns32k-encore-bsd\n"); exit (0);+#endif+#endif+#endif++#if defined (__386BSD__)+ printf ("i386-pc-bsd\n"); exit (0);+#endif++#if defined (sequent)+#if defined (i386)+ printf ("i386-sequent-dynix\n"); exit (0);+#endif+#if defined (ns32000)+ printf ("ns32k-sequent-dynix\n"); exit (0);+#endif+#endif++#if defined (_SEQUENT_)+ struct utsname un;++ uname(&un);++ if (strncmp(un.version, "V2", 2) == 0) {+ printf ("i386-sequent-ptx2\n"); exit (0);+ }+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */+ printf ("i386-sequent-ptx1\n"); exit (0);+ }+ printf ("i386-sequent-ptx\n"); exit (0);++#endif++#if defined (vax)+# if !defined (ultrix)+# include <sys/param.h>+# if defined (BSD)+# if BSD == 43+ printf ("vax-dec-bsd4.3\n"); exit (0);+# else+# if BSD == 199006+ printf ("vax-dec-bsd4.3reno\n"); exit (0);+# else+ printf ("vax-dec-bsd\n"); exit (0);+# endif+# endif+# else+ printf ("vax-dec-bsd\n"); exit (0);+# endif+# else+ printf ("vax-dec-ultrix\n"); exit (0);+# endif+#endif++#if defined (alliant) && defined (i860)+ printf ("i860-alliant-bsd\n"); exit (0);+#endif++ exit (1);+}+EOF++$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&+ { echo "$SYSTEM_NAME"; exit; }++# Apollos put the system type in the environment.++test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }++# Convex versions that predate uname can use getsysinfo(1)++if [ -x /usr/convex/getsysinfo ]+then+ case `getsysinfo -f cpu_type` in+ c1*)+ echo c1-convex-bsd+ exit ;;+ c2*)+ if getsysinfo -f scalar_acc+ then echo c32-convex-bsd+ else echo c2-convex-bsd+ fi+ exit ;;+ c34*)+ echo c34-convex-bsd+ exit ;;+ c38*)+ echo c38-convex-bsd+ exit ;;+ c4*)+ echo c4-convex-bsd+ exit ;;+ esac+fi++cat >&2 <<EOF+$0: unable to guess system type++This script, last modified $timestamp, has failed to recognize+the operating system you are using. It is advised that you+download the most up to date version of the config scripts from++ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess+and+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub++If the version you run ($0) is already up to date, please+send the following data and any information you think might be+pertinent to <config-patches@gnu.org> in order to provide the needed+information to handle your system.++config.guess timestamp = $timestamp++uname -m = `(uname -m) 2>/dev/null || echo unknown`+uname -r = `(uname -r) 2>/dev/null || echo unknown`+uname -s = `(uname -s) 2>/dev/null || echo unknown`+uname -v = `(uname -v) 2>/dev/null || echo unknown`++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`++hostinfo = `(hostinfo) 2>/dev/null`+/bin/universe = `(/bin/universe) 2>/dev/null`+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`+/bin/arch = `(/bin/arch) 2>/dev/null`+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`++UNAME_MACHINE = ${UNAME_MACHINE}+UNAME_RELEASE = ${UNAME_RELEASE}+UNAME_SYSTEM = ${UNAME_SYSTEM}+UNAME_VERSION = ${UNAME_VERSION}+EOF++exit 1++# Local variables:+# eval: (add-hook 'write-file-hooks 'time-stamp)+# time-stamp-start: "timestamp='"+# time-stamp-format: "%:y-%02m-%02d"+# time-stamp-end: "'"+# End:
+ config.sub view
@@ -0,0 +1,1608 @@+#! /bin/sh+# Configuration validation subroutine script.+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,+# Inc.++timestamp='2006-07-02'++# This file is (in principle) common to ALL GNU software.+# The presence of a machine in this file suggests that SOME GNU software+# can handle that machine. It does not imply ALL GNU software can.+#+# This file 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.+#+# You should have received a copy of the GNU General Public License+# along with this program; if not, write to the Free Software+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA+# 02110-1301, USA.+#+# As a special exception to the GNU General Public License, if you+# distribute this file as part of a program that contains a+# configuration script generated by Autoconf, you may include it under+# the same distribution terms that you use for the rest of that program.+++# Please send patches to <config-patches@gnu.org>. Submit a context+# diff and a properly formatted ChangeLog entry.+#+# Configuration subroutine to validate and canonicalize a configuration type.+# Supply the specified configuration type as an argument.+# If it is invalid, we print an error message on stderr and exit with code 1.+# Otherwise, we print the canonical config type on stdout and succeed.++# This file is supposed to be the same for all GNU packages+# and recognize all the CPU types, system types and aliases+# that are meaningful with *any* GNU software.+# Each package is responsible for reporting which valid configurations+# it does not support. The user should be able to distinguish+# a failure to support a valid configuration from a meaningless+# configuration.++# The goal of this file is to map all the various variations of a given+# machine specification into a single specification in the form:+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM+# or in some cases, the newer four-part form:+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM+# It is wrong to echo any other type of specification.++me=`echo "$0" | sed -e 's,.*/,,'`++usage="\+Usage: $0 [OPTION] CPU-MFR-OPSYS+ $0 [OPTION] ALIAS++Canonicalize a configuration name.++Operation modes:+ -h, --help print this help, then exit+ -t, --time-stamp print date of last modification, then exit+ -v, --version print version number, then exit++Report bugs and patches to <config-patches@gnu.org>."++version="\+GNU config.sub ($timestamp)++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005+Free Software Foundation, Inc.++This is free software; see the source for copying conditions. There is NO+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."++help="+Try \`$me --help' for more information."++# Parse command line+while test $# -gt 0 ; do+ case $1 in+ --time-stamp | --time* | -t )+ echo "$timestamp" ; exit ;;+ --version | -v )+ echo "$version" ; exit ;;+ --help | --h* | -h )+ echo "$usage"; exit ;;+ -- ) # Stop option processing+ shift; break ;;+ - ) # Use stdin as input.+ break ;;+ -* )+ echo "$me: invalid option $1$help"+ exit 1 ;;++ *local*)+ # First pass through any local machine types.+ echo $1+ exit ;;++ * )+ break ;;+ esac+done++case $# in+ 0) echo "$me: missing argument$help" >&2+ exit 1;;+ 1) ;;+ *) echo "$me: too many arguments$help" >&2+ exit 1;;+esac++# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).+# Here we must recognize all the valid KERNEL-OS combinations.+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`+case $maybe_os in+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \+ storm-chaos* | os2-emx* | rtmk-nova*)+ os=-$maybe_os+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`+ ;;+ *)+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`+ if [ $basic_machine != $1 ]+ then os=`echo $1 | sed 's/.*-/-/'`+ else os=; fi+ ;;+esac++### Let's recognize common machines as not being operating systems so+### that things like config.sub decstation-3100 work. We also+### recognize some manufacturers as not being operating systems, so we+### can provide default operating systems below.+case $os in+ -sun*os*)+ # Prevent following clause from handling this invalid input.+ ;;+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \+ -apple | -axis | -knuth | -cray)+ os=+ basic_machine=$1+ ;;+ -sim | -cisco | -oki | -wec | -winbond)+ os=+ basic_machine=$1+ ;;+ -scout)+ ;;+ -wrs)+ os=-vxworks+ basic_machine=$1+ ;;+ -chorusos*)+ os=-chorusos+ basic_machine=$1+ ;;+ -chorusrdb)+ os=-chorusrdb+ basic_machine=$1+ ;;+ -hiux*)+ os=-hiuxwe2+ ;;+ -sco6)+ os=-sco5v6+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -sco5)+ os=-sco3.2v5+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -sco4)+ os=-sco3.2v4+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -sco3.2.[4-9]*)+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -sco3.2v[4-9]*)+ # Don't forget version if it is 3.2v4 or newer.+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -sco5v6*)+ # Don't forget version if it is 3.2v4 or newer.+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -sco*)+ os=-sco3.2v2+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -udk*)+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -isc)+ os=-isc2.2+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -clix*)+ basic_machine=clipper-intergraph+ ;;+ -isc*)+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`+ ;;+ -lynx*)+ os=-lynxos+ ;;+ -ptx*)+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`+ ;;+ -windowsnt*)+ os=`echo $os | sed -e 's/windowsnt/winnt/'`+ ;;+ -psos*)+ os=-psos+ ;;+ -mint | -mint[0-9]*)+ basic_machine=m68k-atari+ os=-mint+ ;;+esac++# Decode aliases for certain CPU-COMPANY combinations.+case $basic_machine in+ # Recognize the basic CPU types without company name.+ # Some are omitted here because they have special meanings below.+ 1750a | 580 \+ | a29k \+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \+ | am33_2.0 \+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \+ | bfin \+ | c4x | clipper \+ | d10v | d30v | dlx | dsp16xx \+ | fr30 | frv \+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \+ | i370 | i860 | i960 | ia64 \+ | ip2k | iq2000 \+ | m32c | m32r | m32rle | m68000 | m68k | m88k \+ | maxq | mb | microblaze | mcore \+ | mips | mipsbe | mipseb | mipsel | mipsle \+ | mips16 \+ | mips64 | mips64el \+ | mips64vr | mips64vrel \+ | mips64orion | mips64orionel \+ | mips64vr4100 | mips64vr4100el \+ | mips64vr4300 | mips64vr4300el \+ | mips64vr5000 | mips64vr5000el \+ | mips64vr5900 | mips64vr5900el \+ | mipsisa32 | mipsisa32el \+ | mipsisa32r2 | mipsisa32r2el \+ | mipsisa64 | mipsisa64el \+ | mipsisa64r2 | mipsisa64r2el \+ | mipsisa64sb1 | mipsisa64sb1el \+ | mipsisa64sr71k | mipsisa64sr71kel \+ | mipstx39 | mipstx39el \+ | mn10200 | mn10300 \+ | mt \+ | msp430 \+ | nios | nios2 \+ | ns16k | ns32k \+ | or32 \+ | pdp10 | pdp11 | pj | pjl \+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \+ | pyramid \+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \+ | sh64 | sh64le \+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \+ | spu | strongarm \+ | tahoe | thumb | tic4x | tic80 | tron \+ | v850 | v850e \+ | we32k \+ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \+ | z8k)+ basic_machine=$basic_machine-unknown+ ;;+ m6811 | m68hc11 | m6812 | m68hc12)+ # Motorola 68HC11/12.+ basic_machine=$basic_machine-unknown+ os=-none+ ;;+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)+ ;;+ ms1)+ basic_machine=mt-unknown+ ;;++ # We use `pc' rather than `unknown'+ # because (1) that's what they normally are, and+ # (2) the word "unknown" tends to confuse beginning users.+ i*86 | x86_64)+ basic_machine=$basic_machine-pc+ ;;+ # Object if more than one company name word.+ *-*-*)+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2+ exit 1+ ;;+ # Recognize the basic CPU types with company name.+ 580-* \+ | a29k-* \+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \+ | avr-* | avr32-* \+ | bfin-* | bs2000-* \+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \+ | clipper-* | craynv-* | cydra-* \+ | d10v-* | d30v-* | dlx-* \+ | elxsi-* \+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \+ | h8300-* | h8500-* \+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \+ | i*86-* | i860-* | i960-* | ia64-* \+ | ip2k-* | iq2000-* \+ | m32c-* | m32r-* | m32rle-* \+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \+ | m88110-* | m88k-* | maxq-* | mcore-* \+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \+ | mips16-* \+ | mips64-* | mips64el-* \+ | mips64vr-* | mips64vrel-* \+ | mips64orion-* | mips64orionel-* \+ | mips64vr4100-* | mips64vr4100el-* \+ | mips64vr4300-* | mips64vr4300el-* \+ | mips64vr5000-* | mips64vr5000el-* \+ | mips64vr5900-* | mips64vr5900el-* \+ | mipsisa32-* | mipsisa32el-* \+ | mipsisa32r2-* | mipsisa32r2el-* \+ | mipsisa64-* | mipsisa64el-* \+ | mipsisa64r2-* | mipsisa64r2el-* \+ | mipsisa64sb1-* | mipsisa64sb1el-* \+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \+ | mipstx39-* | mipstx39el-* \+ | mmix-* \+ | mt-* \+ | msp430-* \+ | nios-* | nios2-* \+ | none-* | np1-* | ns16k-* | ns32k-* \+ | orion-* \+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \+ | pyramid-* \+ | romp-* | rs6000-* \+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \+ | sparclite-* \+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \+ | tahoe-* | thumb-* \+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \+ | tron-* \+ | v850-* | v850e-* | vax-* \+ | we32k-* \+ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \+ | xstormy16-* | xtensa-* \+ | ymp-* \+ | z8k-*)+ ;;+ # Recognize the various machine names and aliases which stand+ # for a CPU type and a company and sometimes even an OS.+ 386bsd)+ basic_machine=i386-unknown+ os=-bsd+ ;;+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)+ basic_machine=m68000-att+ ;;+ 3b*)+ basic_machine=we32k-att+ ;;+ a29khif)+ basic_machine=a29k-amd+ os=-udi+ ;;+ abacus)+ basic_machine=abacus-unknown+ ;;+ adobe68k)+ basic_machine=m68010-adobe+ os=-scout+ ;;+ alliant | fx80)+ basic_machine=fx80-alliant+ ;;+ altos | altos3068)+ basic_machine=m68k-altos+ ;;+ am29k)+ basic_machine=a29k-none+ os=-bsd+ ;;+ amd64)+ basic_machine=x86_64-pc+ ;;+ amd64-*)+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ amdahl)+ basic_machine=580-amdahl+ os=-sysv+ ;;+ amiga | amiga-*)+ basic_machine=m68k-unknown+ ;;+ amigaos | amigados)+ basic_machine=m68k-unknown+ os=-amigaos+ ;;+ amigaunix | amix)+ basic_machine=m68k-unknown+ os=-sysv4+ ;;+ apollo68)+ basic_machine=m68k-apollo+ os=-sysv+ ;;+ apollo68bsd)+ basic_machine=m68k-apollo+ os=-bsd+ ;;+ aux)+ basic_machine=m68k-apple+ os=-aux+ ;;+ balance)+ basic_machine=ns32k-sequent+ os=-dynix+ ;;+ c90)+ basic_machine=c90-cray+ os=-unicos+ ;;+ convex-c1)+ basic_machine=c1-convex+ os=-bsd+ ;;+ convex-c2)+ basic_machine=c2-convex+ os=-bsd+ ;;+ convex-c32)+ basic_machine=c32-convex+ os=-bsd+ ;;+ convex-c34)+ basic_machine=c34-convex+ os=-bsd+ ;;+ convex-c38)+ basic_machine=c38-convex+ os=-bsd+ ;;+ cray | j90)+ basic_machine=j90-cray+ os=-unicos+ ;;+ craynv)+ basic_machine=craynv-cray+ os=-unicosmp+ ;;+ cr16c)+ basic_machine=cr16c-unknown+ os=-elf+ ;;+ crds | unos)+ basic_machine=m68k-crds+ ;;+ crisv32 | crisv32-* | etraxfs*)+ basic_machine=crisv32-axis+ ;;+ cris | cris-* | etrax*)+ basic_machine=cris-axis+ ;;+ crx)+ basic_machine=crx-unknown+ os=-elf+ ;;+ da30 | da30-*)+ basic_machine=m68k-da30+ ;;+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)+ basic_machine=mips-dec+ ;;+ decsystem10* | dec10*)+ basic_machine=pdp10-dec+ os=-tops10+ ;;+ decsystem20* | dec20*)+ basic_machine=pdp10-dec+ os=-tops20+ ;;+ delta | 3300 | motorola-3300 | motorola-delta \+ | 3300-motorola | delta-motorola)+ basic_machine=m68k-motorola+ ;;+ delta88)+ basic_machine=m88k-motorola+ os=-sysv3+ ;;+ djgpp)+ basic_machine=i586-pc+ os=-msdosdjgpp+ ;;+ dpx20 | dpx20-*)+ basic_machine=rs6000-bull+ os=-bosx+ ;;+ dpx2* | dpx2*-bull)+ basic_machine=m68k-bull+ os=-sysv3+ ;;+ ebmon29k)+ basic_machine=a29k-amd+ os=-ebmon+ ;;+ elxsi)+ basic_machine=elxsi-elxsi+ os=-bsd+ ;;+ encore | umax | mmax)+ basic_machine=ns32k-encore+ ;;+ es1800 | OSE68k | ose68k | ose | OSE)+ basic_machine=m68k-ericsson+ os=-ose+ ;;+ fx2800)+ basic_machine=i860-alliant+ ;;+ genix)+ basic_machine=ns32k-ns+ ;;+ gmicro)+ basic_machine=tron-gmicro+ os=-sysv+ ;;+ go32)+ basic_machine=i386-pc+ os=-go32+ ;;+ h3050r* | hiux*)+ basic_machine=hppa1.1-hitachi+ os=-hiuxwe2+ ;;+ h8300hms)+ basic_machine=h8300-hitachi+ os=-hms+ ;;+ h8300xray)+ basic_machine=h8300-hitachi+ os=-xray+ ;;+ h8500hms)+ basic_machine=h8500-hitachi+ os=-hms+ ;;+ harris)+ basic_machine=m88k-harris+ os=-sysv3+ ;;+ hp300-*)+ basic_machine=m68k-hp+ ;;+ hp300bsd)+ basic_machine=m68k-hp+ os=-bsd+ ;;+ hp300hpux)+ basic_machine=m68k-hp+ os=-hpux+ ;;+ hp3k9[0-9][0-9] | hp9[0-9][0-9])+ basic_machine=hppa1.0-hp+ ;;+ hp9k2[0-9][0-9] | hp9k31[0-9])+ basic_machine=m68000-hp+ ;;+ hp9k3[2-9][0-9])+ basic_machine=m68k-hp+ ;;+ hp9k6[0-9][0-9] | hp6[0-9][0-9])+ basic_machine=hppa1.0-hp+ ;;+ hp9k7[0-79][0-9] | hp7[0-79][0-9])+ basic_machine=hppa1.1-hp+ ;;+ hp9k78[0-9] | hp78[0-9])+ # FIXME: really hppa2.0-hp+ basic_machine=hppa1.1-hp+ ;;+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)+ # FIXME: really hppa2.0-hp+ basic_machine=hppa1.1-hp+ ;;+ hp9k8[0-9][13679] | hp8[0-9][13679])+ basic_machine=hppa1.1-hp+ ;;+ hp9k8[0-9][0-9] | hp8[0-9][0-9])+ basic_machine=hppa1.0-hp+ ;;+ hppa-next)+ os=-nextstep3+ ;;+ hppaosf)+ basic_machine=hppa1.1-hp+ os=-osf+ ;;+ hppro)+ basic_machine=hppa1.1-hp+ os=-proelf+ ;;+ i370-ibm* | ibm*)+ basic_machine=i370-ibm+ ;;+# I'm not sure what "Sysv32" means. Should this be sysv3.2?+ i*86v32)+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`+ os=-sysv32+ ;;+ i*86v4*)+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`+ os=-sysv4+ ;;+ i*86v)+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`+ os=-sysv+ ;;+ i*86sol2)+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`+ os=-solaris2+ ;;+ i386mach)+ basic_machine=i386-mach+ os=-mach+ ;;+ i386-vsta | vsta)+ basic_machine=i386-unknown+ os=-vsta+ ;;+ iris | iris4d)+ basic_machine=mips-sgi+ case $os in+ -irix*)+ ;;+ *)+ os=-irix4+ ;;+ esac+ ;;+ isi68 | isi)+ basic_machine=m68k-isi+ os=-sysv+ ;;+ m88k-omron*)+ basic_machine=m88k-omron+ ;;+ magnum | m3230)+ basic_machine=mips-mips+ os=-sysv+ ;;+ merlin)+ basic_machine=ns32k-utek+ os=-sysv+ ;;+ mingw32)+ basic_machine=i386-pc+ os=-mingw32+ ;;+ miniframe)+ basic_machine=m68000-convergent+ ;;+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)+ basic_machine=m68k-atari+ os=-mint+ ;;+ mips3*-*)+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`+ ;;+ mips3*)+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown+ ;;+ monitor)+ basic_machine=m68k-rom68k+ os=-coff+ ;;+ morphos)+ basic_machine=powerpc-unknown+ os=-morphos+ ;;+ msdos)+ basic_machine=i386-pc+ os=-msdos+ ;;+ ms1-*)+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`+ ;;+ mvs)+ basic_machine=i370-ibm+ os=-mvs+ ;;+ ncr3000)+ basic_machine=i486-ncr+ os=-sysv4+ ;;+ netbsd386)+ basic_machine=i386-unknown+ os=-netbsd+ ;;+ netwinder)+ basic_machine=armv4l-rebel+ os=-linux+ ;;+ news | news700 | news800 | news900)+ basic_machine=m68k-sony+ os=-newsos+ ;;+ news1000)+ basic_machine=m68030-sony+ os=-newsos+ ;;+ news-3600 | risc-news)+ basic_machine=mips-sony+ os=-newsos+ ;;+ necv70)+ basic_machine=v70-nec+ os=-sysv+ ;;+ next | m*-next )+ basic_machine=m68k-next+ case $os in+ -nextstep* )+ ;;+ -ns2*)+ os=-nextstep2+ ;;+ *)+ os=-nextstep3+ ;;+ esac+ ;;+ nh3000)+ basic_machine=m68k-harris+ os=-cxux+ ;;+ nh[45]000)+ basic_machine=m88k-harris+ os=-cxux+ ;;+ nindy960)+ basic_machine=i960-intel+ os=-nindy+ ;;+ mon960)+ basic_machine=i960-intel+ os=-mon960+ ;;+ nonstopux)+ basic_machine=mips-compaq+ os=-nonstopux+ ;;+ np1)+ basic_machine=np1-gould+ ;;+ nsr-tandem)+ basic_machine=nsr-tandem+ ;;+ op50n-* | op60c-*)+ basic_machine=hppa1.1-oki+ os=-proelf+ ;;+ openrisc | openrisc-*)+ basic_machine=or32-unknown+ ;;+ os400)+ basic_machine=powerpc-ibm+ os=-os400+ ;;+ OSE68000 | ose68000)+ basic_machine=m68000-ericsson+ os=-ose+ ;;+ os68k)+ basic_machine=m68k-none+ os=-os68k+ ;;+ pa-hitachi)+ basic_machine=hppa1.1-hitachi+ os=-hiuxwe2+ ;;+ paragon)+ basic_machine=i860-intel+ os=-osf+ ;;+ pbd)+ basic_machine=sparc-tti+ ;;+ pbb)+ basic_machine=m68k-tti+ ;;+ pc532 | pc532-*)+ basic_machine=ns32k-pc532+ ;;+ pc98)+ basic_machine=i386-pc+ ;;+ pc98-*)+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ pentium | p5 | k5 | k6 | nexgen | viac3)+ basic_machine=i586-pc+ ;;+ pentiumpro | p6 | 6x86 | athlon | athlon_*)+ basic_machine=i686-pc+ ;;+ pentiumii | pentium2 | pentiumiii | pentium3)+ basic_machine=i686-pc+ ;;+ pentium4)+ basic_machine=i786-pc+ ;;+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ pentiumpro-* | p6-* | 6x86-* | athlon-*)+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ pentium4-*)+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ pn)+ basic_machine=pn-gould+ ;;+ power) basic_machine=power-ibm+ ;;+ ppc) basic_machine=powerpc-unknown+ ;;+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ ppcle | powerpclittle | ppc-le | powerpc-little)+ basic_machine=powerpcle-unknown+ ;;+ ppcle-* | powerpclittle-*)+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ ppc64) basic_machine=powerpc64-unknown+ ;;+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)+ basic_machine=powerpc64le-unknown+ ;;+ ppc64le-* | powerpc64little-*)+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`+ ;;+ ps2)+ basic_machine=i386-ibm+ ;;+ pw32)+ basic_machine=i586-unknown+ os=-pw32+ ;;+ rdos)+ basic_machine=i386-pc+ os=-rdos+ ;;+ rom68k)+ basic_machine=m68k-rom68k+ os=-coff+ ;;+ rm[46]00)+ basic_machine=mips-siemens+ ;;+ rtpc | rtpc-*)+ basic_machine=romp-ibm+ ;;+ s390 | s390-*)+ basic_machine=s390-ibm+ ;;+ s390x | s390x-*)+ basic_machine=s390x-ibm+ ;;+ sa29200)+ basic_machine=a29k-amd+ os=-udi+ ;;+ sb1)+ basic_machine=mipsisa64sb1-unknown+ ;;+ sb1el)+ basic_machine=mipsisa64sb1el-unknown+ ;;+ sei)+ basic_machine=mips-sei+ os=-seiux+ ;;+ sequent)+ basic_machine=i386-sequent+ ;;+ sh)+ basic_machine=sh-hitachi+ os=-hms+ ;;+ sh64)+ basic_machine=sh64-unknown+ ;;+ sparclite-wrs | simso-wrs)+ basic_machine=sparclite-wrs+ os=-vxworks+ ;;+ sps7)+ basic_machine=m68k-bull+ os=-sysv2+ ;;+ spur)+ basic_machine=spur-unknown+ ;;+ st2000)+ basic_machine=m68k-tandem+ ;;+ stratus)+ basic_machine=i860-stratus+ os=-sysv4+ ;;+ sun2)+ basic_machine=m68000-sun+ ;;+ sun2os3)+ basic_machine=m68000-sun+ os=-sunos3+ ;;+ sun2os4)+ basic_machine=m68000-sun+ os=-sunos4+ ;;+ sun3os3)+ basic_machine=m68k-sun+ os=-sunos3+ ;;+ sun3os4)+ basic_machine=m68k-sun+ os=-sunos4+ ;;+ sun4os3)+ basic_machine=sparc-sun+ os=-sunos3+ ;;+ sun4os4)+ basic_machine=sparc-sun+ os=-sunos4+ ;;+ sun4sol2)+ basic_machine=sparc-sun+ os=-solaris2+ ;;+ sun3 | sun3-*)+ basic_machine=m68k-sun+ ;;+ sun4)+ basic_machine=sparc-sun+ ;;+ sun386 | sun386i | roadrunner)+ basic_machine=i386-sun+ ;;+ sv1)+ basic_machine=sv1-cray+ os=-unicos+ ;;+ symmetry)+ basic_machine=i386-sequent+ os=-dynix+ ;;+ t3e)+ basic_machine=alphaev5-cray+ os=-unicos+ ;;+ t90)+ basic_machine=t90-cray+ os=-unicos+ ;;+ tic54x | c54x*)+ basic_machine=tic54x-unknown+ os=-coff+ ;;+ tic55x | c55x*)+ basic_machine=tic55x-unknown+ os=-coff+ ;;+ tic6x | c6x*)+ basic_machine=tic6x-unknown+ os=-coff+ ;;+ tx39)+ basic_machine=mipstx39-unknown+ ;;+ tx39el)+ basic_machine=mipstx39el-unknown+ ;;+ toad1)+ basic_machine=pdp10-xkl+ os=-tops20+ ;;+ tower | tower-32)+ basic_machine=m68k-ncr+ ;;+ tpf)+ basic_machine=s390x-ibm+ os=-tpf+ ;;+ udi29k)+ basic_machine=a29k-amd+ os=-udi+ ;;+ ultra3)+ basic_machine=a29k-nyu+ os=-sym1+ ;;+ v810 | necv810)+ basic_machine=v810-nec+ os=-none+ ;;+ vaxv)+ basic_machine=vax-dec+ os=-sysv+ ;;+ vms)+ basic_machine=vax-dec+ os=-vms+ ;;+ vpp*|vx|vx-*)+ basic_machine=f301-fujitsu+ ;;+ vxworks960)+ basic_machine=i960-wrs+ os=-vxworks+ ;;+ vxworks68)+ basic_machine=m68k-wrs+ os=-vxworks+ ;;+ vxworks29k)+ basic_machine=a29k-wrs+ os=-vxworks+ ;;+ w65*)+ basic_machine=w65-wdc+ os=-none+ ;;+ w89k-*)+ basic_machine=hppa1.1-winbond+ os=-proelf+ ;;+ xbox)+ basic_machine=i686-pc+ os=-mingw32+ ;;+ xps | xps100)+ basic_machine=xps100-honeywell+ ;;+ ymp)+ basic_machine=ymp-cray+ os=-unicos+ ;;+ z8k-*-coff)+ basic_machine=z8k-unknown+ os=-sim+ ;;+ none)+ basic_machine=none-none+ os=-none+ ;;++# Here we handle the default manufacturer of certain CPU types. It is in+# some cases the only manufacturer, in others, it is the most popular.+ w89k)+ basic_machine=hppa1.1-winbond+ ;;+ op50n)+ basic_machine=hppa1.1-oki+ ;;+ op60c)+ basic_machine=hppa1.1-oki+ ;;+ romp)+ basic_machine=romp-ibm+ ;;+ mmix)+ basic_machine=mmix-knuth+ ;;+ rs6000)+ basic_machine=rs6000-ibm+ ;;+ vax)+ basic_machine=vax-dec+ ;;+ pdp10)+ # there are many clones, so DEC is not a safe bet+ basic_machine=pdp10-unknown+ ;;+ pdp11)+ basic_machine=pdp11-dec+ ;;+ we32k)+ basic_machine=we32k-att+ ;;+ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)+ basic_machine=sh-unknown+ ;;+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)+ basic_machine=sparc-sun+ ;;+ cydra)+ basic_machine=cydra-cydrome+ ;;+ orion)+ basic_machine=orion-highlevel+ ;;+ orion105)+ basic_machine=clipper-highlevel+ ;;+ mac | mpw | mac-mpw)+ basic_machine=m68k-apple+ ;;+ pmac | pmac-mpw)+ basic_machine=powerpc-apple+ ;;+ *-unknown)+ # Make sure to match an already-canonicalized machine name.+ ;;+ *)+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2+ exit 1+ ;;+esac++# Here we canonicalize certain aliases for manufacturers.+case $basic_machine in+ *-digital*)+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`+ ;;+ *-commodore*)+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`+ ;;+ *)+ ;;+esac++# Decode manufacturer-specific aliases for certain operating systems.++if [ x"$os" != x"" ]+then+case $os in+ # First match some system type aliases+ # that might get confused with valid system types.+ # -solaris* is a basic system type, with this one exception.+ -solaris1 | -solaris1.*)+ os=`echo $os | sed -e 's|solaris1|sunos4|'`+ ;;+ -solaris)+ os=-solaris2+ ;;+ -svr4*)+ os=-sysv4+ ;;+ -unixware*)+ os=-sysv4.2uw+ ;;+ -gnu/linux*)+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`+ ;;+ # First accept the basic system types.+ # The portable systems comes first.+ # Each alternative MUST END IN A *, to match a version number.+ # -sysv* is not here because it comes later, after sysvr4.+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \+ | -aos* \+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \+ | -openbsd* | -solidbsd* \+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \+ | -chorusos* | -chorusrdb* \+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \+ | -uxpv* | -beos* | -mpeix* | -udk* \+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \+ | -skyos* | -haiku* | -rdos* | -toppers*)+ # Remember, each alternative MUST END IN *, to match a version number.+ ;;+ -qnx*)+ case $basic_machine in+ x86-* | i*86-*)+ ;;+ *)+ os=-nto$os+ ;;+ esac+ ;;+ -nto-qnx*)+ ;;+ -nto*)+ os=`echo $os | sed -e 's|nto|nto-qnx|'`+ ;;+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)+ ;;+ -mac*)+ os=`echo $os | sed -e 's|mac|macos|'`+ ;;+ -linux-dietlibc)+ os=-linux-dietlibc+ ;;+ -linux*)+ os=`echo $os | sed -e 's|linux|linux-gnu|'`+ ;;+ -sunos5*)+ os=`echo $os | sed -e 's|sunos5|solaris2|'`+ ;;+ -sunos6*)+ os=`echo $os | sed -e 's|sunos6|solaris3|'`+ ;;+ -opened*)+ os=-openedition+ ;;+ -os400*)+ os=-os400+ ;;+ -wince*)+ os=-wince+ ;;+ -osfrose*)+ os=-osfrose+ ;;+ -osf*)+ os=-osf+ ;;+ -utek*)+ os=-bsd+ ;;+ -dynix*)+ os=-bsd+ ;;+ -acis*)+ os=-aos+ ;;+ -atheos*)+ os=-atheos+ ;;+ -syllable*)+ os=-syllable+ ;;+ -386bsd)+ os=-bsd+ ;;+ -ctix* | -uts*)+ os=-sysv+ ;;+ -nova*)+ os=-rtmk-nova+ ;;+ -ns2 )+ os=-nextstep2+ ;;+ -nsk*)+ os=-nsk+ ;;+ # Preserve the version number of sinix5.+ -sinix5.*)+ os=`echo $os | sed -e 's|sinix|sysv|'`+ ;;+ -sinix*)+ os=-sysv4+ ;;+ -tpf*)+ os=-tpf+ ;;+ -triton*)+ os=-sysv3+ ;;+ -oss*)+ os=-sysv3+ ;;+ -svr4)+ os=-sysv4+ ;;+ -svr3)+ os=-sysv3+ ;;+ -sysvr4)+ os=-sysv4+ ;;+ # This must come after -sysvr4.+ -sysv*)+ ;;+ -ose*)+ os=-ose+ ;;+ -es1800*)+ os=-ose+ ;;+ -xenix)+ os=-xenix+ ;;+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)+ os=-mint+ ;;+ -aros*)+ os=-aros+ ;;+ -kaos*)+ os=-kaos+ ;;+ -zvmoe)+ os=-zvmoe+ ;;+ -none)+ ;;+ *)+ # Get rid of the `-' at the beginning of $os.+ os=`echo $os | sed 's/[^-]*-//'`+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2+ exit 1+ ;;+esac+else++# Here we handle the default operating systems that come with various machines.+# The value should be what the vendor currently ships out the door with their+# machine or put another way, the most popular os provided with the machine.++# Note that if you're going to try to match "-MANUFACTURER" here (say,+# "-sun"), then you have to tell the case statement up towards the top+# that MANUFACTURER isn't an operating system. Otherwise, code above+# will signal an error saying that MANUFACTURER isn't an operating+# system, and we'll never get to this point.++case $basic_machine in+ spu-*)+ os=-elf+ ;;+ *-acorn)+ os=-riscix1.2+ ;;+ arm*-rebel)+ os=-linux+ ;;+ arm*-semi)+ os=-aout+ ;;+ c4x-* | tic4x-*)+ os=-coff+ ;;+ # This must come before the *-dec entry.+ pdp10-*)+ os=-tops20+ ;;+ pdp11-*)+ os=-none+ ;;+ *-dec | vax-*)+ os=-ultrix4.2+ ;;+ m68*-apollo)+ os=-domain+ ;;+ i386-sun)+ os=-sunos4.0.2+ ;;+ m68000-sun)+ os=-sunos3+ # This also exists in the configure program, but was not the+ # default.+ # os=-sunos4+ ;;+ m68*-cisco)+ os=-aout+ ;;+ mips*-cisco)+ os=-elf+ ;;+ mips*-*)+ os=-elf+ ;;+ or32-*)+ os=-coff+ ;;+ *-tti) # must be before sparc entry or we get the wrong os.+ os=-sysv3+ ;;+ sparc-* | *-sun)+ os=-sunos4.1.1+ ;;+ *-be)+ os=-beos+ ;;+ *-haiku)+ os=-haiku+ ;;+ *-ibm)+ os=-aix+ ;;+ *-knuth)+ os=-mmixware+ ;;+ *-wec)+ os=-proelf+ ;;+ *-winbond)+ os=-proelf+ ;;+ *-oki)+ os=-proelf+ ;;+ *-hp)+ os=-hpux+ ;;+ *-hitachi)+ os=-hiux+ ;;+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)+ os=-sysv+ ;;+ *-cbm)+ os=-amigaos+ ;;+ *-dg)+ os=-dgux+ ;;+ *-dolphin)+ os=-sysv3+ ;;+ m68k-ccur)+ os=-rtu+ ;;+ m88k-omron*)+ os=-luna+ ;;+ *-next )+ os=-nextstep+ ;;+ *-sequent)+ os=-ptx+ ;;+ *-crds)+ os=-unos+ ;;+ *-ns)+ os=-genix+ ;;+ i370-*)+ os=-mvs+ ;;+ *-next)+ os=-nextstep3+ ;;+ *-gould)+ os=-sysv+ ;;+ *-highlevel)+ os=-bsd+ ;;+ *-encore)+ os=-bsd+ ;;+ *-sgi)+ os=-irix+ ;;+ *-siemens)+ os=-sysv4+ ;;+ *-masscomp)+ os=-rtu+ ;;+ f30[01]-fujitsu | f700-fujitsu)+ os=-uxpv+ ;;+ *-rom68k)+ os=-coff+ ;;+ *-*bug)+ os=-coff+ ;;+ *-apple)+ os=-macos+ ;;+ *-atari*)+ os=-mint+ ;;+ *)+ os=-none+ ;;+esac+fi++# Here we handle the case where we know the os, and the CPU type, but not the+# manufacturer. We pick the logical manufacturer.+vendor=unknown+case $basic_machine in+ *-unknown)+ case $os in+ -riscix*)+ vendor=acorn+ ;;+ -sunos*)+ vendor=sun+ ;;+ -aix*)+ vendor=ibm+ ;;+ -beos*)+ vendor=be+ ;;+ -hpux*)+ vendor=hp+ ;;+ -mpeix*)+ vendor=hp+ ;;+ -hiux*)+ vendor=hitachi+ ;;+ -unos*)+ vendor=crds+ ;;+ -dgux*)+ vendor=dg+ ;;+ -luna*)+ vendor=omron+ ;;+ -genix*)+ vendor=ns+ ;;+ -mvs* | -opened*)+ vendor=ibm+ ;;+ -os400*)+ vendor=ibm+ ;;+ -ptx*)+ vendor=sequent+ ;;+ -tpf*)+ vendor=ibm+ ;;+ -vxsim* | -vxworks* | -windiss*)+ vendor=wrs+ ;;+ -aux*)+ vendor=apple+ ;;+ -hms*)+ vendor=hitachi+ ;;+ -mpw* | -macos*)+ vendor=apple+ ;;+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)+ vendor=atari+ ;;+ -vos*)+ vendor=stratus+ ;;+ esac+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`+ ;;+esac++echo $basic_machine$os+exit++# Local variables:+# eval: (add-hook 'write-file-hooks 'time-stamp)+# time-stamp-start: "timestamp='"+# time-stamp-format: "%:y-%02m-%02d"+# time-stamp-end: "'"+# End:
configure view
@@ -664,6 +664,21 @@ EGREP BUILD_PACKAGE_BOOL EXTRA_LIBS+build+build_cpu+build_vendor+build_os+host+host_cpu+host_vendor+host_os+target+target_cpu+target_vendor+target_os+PTHREAD_CFLAGS+PTHREAD_LDFLAGS+PTHREAD_LIBS LIBOBJS LTLIBOBJS' ac_subst_files=''@@ -1234,6 +1249,11 @@ _ACEOF cat <<\_ACEOF++System types:+ --build=BUILD configure for building on BUILD [guessed]+ --host=HOST cross-compile to build programs to run on HOST [BUILD]+ --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi @@ -5165,7 +5185,76 @@ done +# Avoid adding rt if absent or unneeded+{ echo "$as_me:$LINENO: checking for shm_open in -lrt" >&5+echo $ECHO_N "checking for shm_open in -lrt... $ECHO_C" >&6; }+if test "${ac_cv_lib_rt_shm_open+set}" = set; then+ echo $ECHO_N "(cached) $ECHO_C" >&6+else+ ac_check_lib_save_LIBS=$LIBS+LIBS="-lrt $LIBS"+cat >conftest.$ac_ext <<_ACEOF+/* confdefs.h. */+_ACEOF+cat confdefs.h >>conftest.$ac_ext+cat >>conftest.$ac_ext <<_ACEOF+/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error.+ Use char because int might match the return type of a GCC+ builtin and then its argument prototype would still apply. */+#ifdef __cplusplus+extern "C"+#endif+char shm_open ();+int+main ()+{+return shm_open ();+ ;+ return 0;+}+_ACEOF+rm -f conftest.$ac_objext conftest$ac_exeext+if { (ac_try="$ac_link"+case "(($ac_try" in+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;+ *) ac_try_echo=$ac_try;;+esac+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5+ (eval "$ac_link") 2>conftest.er1+ ac_status=$?+ grep -v '^ *+' conftest.er1 >conftest.err+ rm -f conftest.er1+ cat conftest.err >&5+ echo "$as_me:$LINENO: \$? = $ac_status" >&5+ (exit $ac_status); } && {+ test -z "$ac_c_werror_flag" ||+ test ! -s conftest.err+ } && test -s conftest$ac_exeext &&+ $as_test_x conftest$ac_exeext; then+ ac_cv_lib_rt_shm_open=yes+else+ echo "$as_me: failed program was:" >&5+sed 's/^/| /' conftest.$ac_ext >&5++ ac_cv_lib_rt_shm_open=no+fi++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \+ conftest$ac_exeext conftest.$ac_ext+LIBS=$ac_check_lib_save_LIBS+fi+{ echo "$as_me:$LINENO: result: $ac_cv_lib_rt_shm_open" >&5+echo "${ECHO_T}$ac_cv_lib_rt_shm_open" >&6; }+if test $ac_cv_lib_rt_shm_open = yes; then+ EXTRA_LIBS="$EXTRA_LIBS rt" CFLAGS="$CFLAGS -lrt"+fi+++# needs -lrt on linux++ for ac_func in shm_open shm_unlink do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`@@ -6292,6 +6381,178 @@ +# -{l,}pthread goo+ac_aux_dir=+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do+ if test -f "$ac_dir/install-sh"; then+ ac_aux_dir=$ac_dir+ ac_install_sh="$ac_aux_dir/install-sh -c"+ break+ elif test -f "$ac_dir/install.sh"; then+ ac_aux_dir=$ac_dir+ ac_install_sh="$ac_aux_dir/install.sh -c"+ break+ elif test -f "$ac_dir/shtool"; then+ ac_aux_dir=$ac_dir+ ac_install_sh="$ac_aux_dir/shtool install -c"+ break+ fi+done+if test -z "$ac_aux_dir"; then+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}+ { (exit 1); exit 1; }; }+fi++# These three variables are undocumented and unsupported,+# and are intended to be withdrawn in a future Autoconf release.+# They can cause serious problems if a builder's source tree is in a directory+# whose full name contains unusual characters.+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.+++# Make sure we can run config.sub.+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||+ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}+ { (exit 1); exit 1; }; }++{ echo "$as_me:$LINENO: checking build system type" >&5+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }+if test "${ac_cv_build+set}" = set; then+ echo $ECHO_N "(cached) $ECHO_C" >&6+else+ ac_build_alias=$build_alias+test "x$ac_build_alias" = x &&+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`+test "x$ac_build_alias" = x &&+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}+ { (exit 1); exit 1; }; }+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}+ { (exit 1); exit 1; }; }++fi+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5+echo "${ECHO_T}$ac_cv_build" >&6; }+case $ac_cv_build in+*-*-*) ;;+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5+echo "$as_me: error: invalid value of canonical build" >&2;}+ { (exit 1); exit 1; }; };;+esac+build=$ac_cv_build+ac_save_IFS=$IFS; IFS='-'+set x $ac_cv_build+shift+build_cpu=$1+build_vendor=$2+shift; shift+# Remember, the first character of IFS is used to create $*,+# except with old shells:+build_os=$*+IFS=$ac_save_IFS+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac+++{ echo "$as_me:$LINENO: checking host system type" >&5+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }+if test "${ac_cv_host+set}" = set; then+ echo $ECHO_N "(cached) $ECHO_C" >&6+else+ if test "x$host_alias" = x; then+ ac_cv_host=$ac_cv_build+else+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}+ { (exit 1); exit 1; }; }+fi++fi+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5+echo "${ECHO_T}$ac_cv_host" >&6; }+case $ac_cv_host in+*-*-*) ;;+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5+echo "$as_me: error: invalid value of canonical host" >&2;}+ { (exit 1); exit 1; }; };;+esac+host=$ac_cv_host+ac_save_IFS=$IFS; IFS='-'+set x $ac_cv_host+shift+host_cpu=$1+host_vendor=$2+shift; shift+# Remember, the first character of IFS is used to create $*,+# except with old shells:+host_os=$*+IFS=$ac_save_IFS+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac+++{ echo "$as_me:$LINENO: checking target system type" >&5+echo $ECHO_N "checking target system type... $ECHO_C" >&6; }+if test "${ac_cv_target+set}" = set; then+ echo $ECHO_N "(cached) $ECHO_C" >&6+else+ if test "x$target_alias" = x; then+ ac_cv_target=$ac_cv_host+else+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}+ { (exit 1); exit 1; }; }+fi++fi+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5+echo "${ECHO_T}$ac_cv_target" >&6; }+case $ac_cv_target in+*-*-*) ;;+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5+echo "$as_me: error: invalid value of canonical target" >&2;}+ { (exit 1); exit 1; }; };;+esac+target=$ac_cv_target+ac_save_IFS=$IFS; IFS='-'+set x $ac_cv_target+shift+target_cpu=$1+target_vendor=$2+shift; shift+# Remember, the first character of IFS is used to create $*,+# except with old shells:+target_os=$*+IFS=$ac_save_IFS+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac+++# The aliases save the names the user supplied, while $host etc.+# will get canonicalized.+test -n "$target_alias" &&+ test "$program_prefix$program_suffix$program_transform_name" = \+ NONENONEs,x,x, &&+ program_prefix=${target_alias}-++PTHREAD_CFLAGS=+PTHREAD_LDFLAGS=+PTHREAD_LIBS=+case "$host_os" in+openbsd*)+ PTHREAD_CFLAGS=-pthread+ PTHREAD_LDFLAGS=-pthread+ ;;+esac++++ ac_config_files="$ac_config_files unix.buildinfo" @@ -6959,11 +7220,26 @@ EGREP!$EGREP$ac_delim BUILD_PACKAGE_BOOL!$BUILD_PACKAGE_BOOL$ac_delim EXTRA_LIBS!$EXTRA_LIBS$ac_delim+build!$build$ac_delim+build_cpu!$build_cpu$ac_delim+build_vendor!$build_vendor$ac_delim+build_os!$build_os$ac_delim+host!$host$ac_delim+host_cpu!$host_cpu$ac_delim+host_vendor!$host_vendor$ac_delim+host_os!$host_os$ac_delim+target!$target$ac_delim+target_cpu!$target_cpu$ac_delim+target_vendor!$target_vendor$ac_delim+target_os!$target_os$ac_delim+PTHREAD_CFLAGS!$PTHREAD_CFLAGS$ac_delim+PTHREAD_LDFLAGS!$PTHREAD_LDFLAGS$ac_delim+PTHREAD_LIBS!$PTHREAD_LIBS$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 51; then+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 66; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
configure.ac view
@@ -27,6 +27,11 @@ AC_CHECK_FUNCS([nanosleep]) AC_CHECK_FUNCS([ptsname]) AC_CHECK_FUNCS([setitimer])++# Avoid adding rt if absent or unneeded+AC_CHECK_LIB(rt, shm_open, [EXTRA_LIBS="$EXTRA_LIBS rt" CFLAGS="$CFLAGS -lrt"])++# needs -lrt on linux AC_CHECK_FUNCS([shm_open shm_unlink]) FP_CHECK_CONSTS([SIGABRT SIGALRM SIGBUS SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIGPOLL SIGPROF SIGSYS SIGTRAP SIGURG SIGVTALRM SIGXCPU SIGXFSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK], [@@ -193,6 +198,22 @@ # Avoid adding dl if absent or unneeded AC_CHECK_LIB(dl, dlopen, [EXTRA_LIBS="$EXTRA_LIBS dl"]) AC_SUBST([EXTRA_LIBS])++# -{l,}pthread goo+AC_CANONICAL_TARGET++PTHREAD_CFLAGS=+PTHREAD_LDFLAGS=+PTHREAD_LIBS=+case "$host_os" in+openbsd*)+ PTHREAD_CFLAGS=-pthread+ PTHREAD_LDFLAGS=-pthread+ ;;+esac+AC_SUBST(PTHREAD_CFLAGS)+AC_SUBST(PTHREAD_LDFLAGS)+AC_SUBST(PTHREAD_LIBS) AC_CONFIG_FILES([unix.buildinfo])
include/HsUnix.h view
@@ -93,27 +93,19 @@ extern char **environ; -#ifndef INLINE-# if defined(__GNUC__)-# define INLINE extern inline-# else-# define INLINE inline-# endif-#endif--INLINE int __hsunix_wifexited (int stat) { return WIFEXITED(stat); }-INLINE int __hsunix_wexitstatus (int stat) { return WEXITSTATUS(stat); }-INLINE int __hsunix_wifsignaled (int stat) { return WIFSIGNALED(stat); }-INLINE int __hsunix_wtermsig (int stat) { return WTERMSIG(stat); }-INLINE int __hsunix_wifstopped (int stat) { return WIFSTOPPED(stat); }-INLINE int __hsunix_wstopsig (int stat) { return WSTOPSIG(stat); }+int __hsunix_wifexited (int stat);+int __hsunix_wexitstatus (int stat);+int __hsunix_wifsignaled (int stat);+int __hsunix_wtermsig (int stat);+int __hsunix_wifstopped (int stat);+int __hsunix_wstopsig (int stat); #ifdef HAVE_RTLDNEXT-INLINE void *__hsunix_rtldNext (void) {return RTLD_NEXT;} +void *__hsunix_rtldNext (void); #endif #ifdef HAVE_RTLDDEFAULT-INLINE void *__hsunix_rtldDefault (void) {return RTLD_DEFAULT;} +void *__hsunix_rtldDefault (void); #endif /* O_SYNC doesn't exist on Mac OS X and (at least some versions of) FreeBSD,@@ -123,94 +115,46 @@ #endif #ifdef SIGINFO-INLINE int __hsunix_SIGINFO() { return SIGINFO; }+int __hsunix_SIGINFO(); #endif #ifdef SIGWINCH-INLINE int __hsunix_SIGWINCH() { return SIGWINCH; }+int __hsunix_SIGWINCH(); #endif // lstat is a macro on some platforms, so we need a wrapper:-INLINE int __hsunix_lstat(const char *path, struct stat *buf) -{ - return lstat(path,buf);-}+int __hsunix_lstat(const char *path, struct stat *buf); // lstat is a macro on some platforms, so we need a wrapper:-INLINE int __hsunix_mknod(const char *pathname, mode_t mode, dev_t dev)-{ - return mknod(pathname,mode,dev);-}+int __hsunix_mknod(const char *pathname, mode_t mode, dev_t dev); #ifdef HAVE_PTSNAME // I cannot figure out how to make the definitions of the following // functions visible in <stdlib.h> on Linux. But these definitions // follow the POSIX specs, and everything links and runs. -INLINE char *__hsunix_ptsname(int fd)-{- extern char *ptsname(int);- return ptsname(fd);-}--INLINE int __hsunix_grantpt(int fd)-{- extern int grantpt(int);- return grantpt(fd);-}--INLINE int __hsunix_unlockpt(int fd)-{- extern int unlockpt(int);- return unlockpt(fd);-}+char *__hsunix_ptsname(int fd);+int __hsunix_grantpt(int fd);+int __hsunix_unlockpt(int fd); #endif // push a SVR4 STREAMS module; do nothing if STREAMS not available-INLINE int __hsunix_push_module(int fd, const char *module)-{-#if defined(I_PUSH) && !defined(__CYGWIN__) && !defined(HAVE_DEV_PTC)- return ioctl(fd, I_PUSH, module);-#else- return 0;-#endif-}+int __hsunix_push_module(int fd, const char *module); #if !defined(__MINGW32__)-INLINE int __hscore_mkstemp(char *filetemplate) {- return (mkstemp(filetemplate));-}+int __hscore_mkstemp(char *filetemplate); #endif #if !defined(__MINGW32__) && !defined(irix_HOST_OS)-INLINE int __hscore_getrlimit(int resource, struct rlimit *rlim) {- return (getrlimit(resource, rlim));-}--INLINE int __hscore_setrlimit(int resource, struct rlimit *rlim) {- return (setrlimit(resource, rlim));-}+int __hscore_getrlimit(int resource, struct rlimit *rlim);+int __hscore_setrlimit(int resource, struct rlimit *rlim); #endif -INLINE int __hsunix_unsetenv(const char *name)-{-#ifdef UNSETENV_RETURNS_VOID- unsetenv(name);- return 0;-#else- return unsetenv(name);-#endif-}+int __hsunix_unsetenv(const char *name); /* A size that will contain many path names, but not necessarily all * (PATH_MAX is not defined on systems with unlimited path length, * e.g. the Hurd). */-INLINE HsInt __hsunix_long_path_size() {-#ifdef PATH_MAX- return PATH_MAX;-#else- return 4096;-#endif-}+HsInt __hsunix_long_path_size(); #endif
include/HsUnixConfig.h view
@@ -191,10 +191,10 @@ #define HAVE_SETITIMER 1 /* Define to 1 if you have the `shm_open' function. */-/* #undef HAVE_SHM_OPEN */+#define HAVE_SHM_OPEN 1 /* Define to 1 if you have the `shm_unlink' function. */-/* #undef HAVE_SHM_UNLINK */+#define HAVE_SHM_UNLINK 1 /* Define to 1 if you have the <signal.h> header file. */ #define HAVE_SIGNAL_H 1
+ install-sh view
@@ -0,0 +1,507 @@+#!/bin/sh+# install - install a program, script, or datafile++scriptversion=2006-10-14.15++# This originates from X11R5 (mit/util/scripts/install.sh), which was+# later released in X11R6 (xc/config/util/install.sh) with the+# following copyright and license.+#+# Copyright (C) 1994 X Consortium+#+# Permission is hereby granted, free of charge, to any person obtaining a copy+# of this software and associated documentation files (the "Software"), to+# deal in the Software without restriction, including without limitation the+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or+# sell copies of the Software, and to permit persons to whom the Software is+# furnished to do so, subject to the following conditions:+#+# The above copyright notice and this permission notice shall be included in+# all copies or substantial portions of the Software.+#+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+#+# Except as contained in this notice, the name of the X Consortium shall not+# be used in advertising or otherwise to promote the sale, use or other deal-+# ings in this Software without prior written authorization from the X Consor-+# tium.+#+#+# FSF changes to this file are in the public domain.+#+# Calling this script install-sh is preferred over install.sh, to prevent+# `make' implicit rules from creating a file called install from it+# when there is no Makefile.+#+# This script is compatible with the BSD install script, but was written+# from scratch.++nl='+'+IFS=" "" $nl"++# set DOITPROG to echo to test this script++# Don't use :- since 4.3BSD and earlier shells don't like it.+doit="${DOITPROG-}"+if test -z "$doit"; then+ doit_exec=exec+else+ doit_exec=$doit+fi++# Put in absolute file names if you don't have them in your path;+# or use environment vars.++mvprog="${MVPROG-mv}"+cpprog="${CPPROG-cp}"+chmodprog="${CHMODPROG-chmod}"+chownprog="${CHOWNPROG-chown}"+chgrpprog="${CHGRPPROG-chgrp}"+stripprog="${STRIPPROG-strip}"+rmprog="${RMPROG-rm}"+mkdirprog="${MKDIRPROG-mkdir}"++posix_glob=+posix_mkdir=++# Desired mode of installed file.+mode=0755++chmodcmd=$chmodprog+chowncmd=+chgrpcmd=+stripcmd=+rmcmd="$rmprog -f"+mvcmd="$mvprog"+src=+dst=+dir_arg=+dstarg=+no_target_directory=++usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE+ or: $0 [OPTION]... SRCFILES... DIRECTORY+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...+ or: $0 [OPTION]... -d DIRECTORIES...++In the 1st form, copy SRCFILE to DSTFILE.+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.+In the 4th, create DIRECTORIES.++Options:+-c (ignored)+-d create directories instead of installing files.+-g GROUP $chgrpprog installed files to GROUP.+-m MODE $chmodprog installed files to MODE.+-o USER $chownprog installed files to USER.+-s $stripprog installed files.+-t DIRECTORY install into DIRECTORY.+-T report an error if DSTFILE is a directory.+--help display this help and exit.+--version display version info and exit.++Environment variables override the default commands:+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG+"++while test $# -ne 0; do+ case $1 in+ -c) shift+ continue;;++ -d) dir_arg=true+ shift+ continue;;++ -g) chgrpcmd="$chgrpprog $2"+ shift+ shift+ continue;;++ --help) echo "$usage"; exit $?;;++ -m) mode=$2+ shift+ shift+ case $mode in+ *' '* | *' '* | *'+'* | *'*'* | *'?'* | *'['*)+ echo "$0: invalid mode: $mode" >&2+ exit 1;;+ esac+ continue;;++ -o) chowncmd="$chownprog $2"+ shift+ shift+ continue;;++ -s) stripcmd=$stripprog+ shift+ continue;;++ -t) dstarg=$2+ shift+ shift+ continue;;++ -T) no_target_directory=true+ shift+ continue;;++ --version) echo "$0 $scriptversion"; exit $?;;++ --) shift+ break;;++ -*) echo "$0: invalid option: $1" >&2+ exit 1;;++ *) break;;+ esac+done++if test $# -ne 0 && test -z "$dir_arg$dstarg"; then+ # When -d is used, all remaining arguments are directories to create.+ # When -t is used, the destination is already specified.+ # Otherwise, the last argument is the destination. Remove it from $@.+ for arg+ do+ if test -n "$dstarg"; then+ # $@ is not empty: it contains at least $arg.+ set fnord "$@" "$dstarg"+ shift # fnord+ fi+ shift # arg+ dstarg=$arg+ done+fi++if test $# -eq 0; then+ if test -z "$dir_arg"; then+ echo "$0: no input file specified." >&2+ exit 1+ fi+ # It's OK to call `install-sh -d' without argument.+ # This can happen when creating conditional directories.+ exit 0+fi++if test -z "$dir_arg"; then+ trap '(exit $?); exit' 1 2 13 15++ # Set umask so as not to create temps with too-generous modes.+ # However, 'strip' requires both read and write access to temps.+ case $mode in+ # Optimize common cases.+ *644) cp_umask=133;;+ *755) cp_umask=22;;++ *[0-7])+ if test -z "$stripcmd"; then+ u_plus_rw=+ else+ u_plus_rw='% 200'+ fi+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;+ *)+ if test -z "$stripcmd"; then+ u_plus_rw=+ else+ u_plus_rw=,u+rw+ fi+ cp_umask=$mode$u_plus_rw;;+ esac+fi++for src+do+ # Protect names starting with `-'.+ case $src in+ -*) src=./$src ;;+ esac++ if test -n "$dir_arg"; then+ dst=$src+ dstdir=$dst+ test -d "$dstdir"+ dstdir_status=$?+ else++ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command+ # might cause directories to be created, which would be especially bad+ # if $src (and thus $dsttmp) contains '*'.+ if test ! -f "$src" && test ! -d "$src"; then+ echo "$0: $src does not exist." >&2+ exit 1+ fi++ if test -z "$dstarg"; then+ echo "$0: no destination specified." >&2+ exit 1+ fi++ dst=$dstarg+ # Protect names starting with `-'.+ case $dst in+ -*) dst=./$dst ;;+ esac++ # If destination is a directory, append the input filename; won't work+ # if double slashes aren't ignored.+ if test -d "$dst"; then+ if test -n "$no_target_directory"; then+ echo "$0: $dstarg: Is a directory" >&2+ exit 1+ fi+ dstdir=$dst+ dst=$dstdir/`basename "$src"`+ dstdir_status=0+ else+ # Prefer dirname, but fall back on a substitute if dirname fails.+ dstdir=`+ (dirname "$dst") 2>/dev/null ||+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \+ X"$dst" : 'X\(//\)[^/]' \| \+ X"$dst" : 'X\(//\)$' \| \+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||+ echo X"$dst" |+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{+ s//\1/+ q+ }+ /^X\(\/\/\)[^/].*/{+ s//\1/+ q+ }+ /^X\(\/\/\)$/{+ s//\1/+ q+ }+ /^X\(\/\).*/{+ s//\1/+ q+ }+ s/.*/./; q'+ `++ test -d "$dstdir"+ dstdir_status=$?+ fi+ fi++ obsolete_mkdir_used=false++ if test $dstdir_status != 0; then+ case $posix_mkdir in+ '')+ # Create intermediate dirs using mode 755 as modified by the umask.+ # This is like FreeBSD 'install' as of 1997-10-28.+ umask=`umask`+ case $stripcmd.$umask in+ # Optimize common cases.+ *[2367][2367]) mkdir_umask=$umask;;+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;++ *[0-7])+ mkdir_umask=`expr $umask + 22 \+ - $umask % 100 % 40 + $umask % 20 \+ - $umask % 10 % 4 + $umask % 2+ `;;+ *) mkdir_umask=$umask,go-w;;+ esac++ # With -d, create the new directory with the user-specified mode.+ # Otherwise, rely on $mkdir_umask.+ if test -n "$dir_arg"; then+ mkdir_mode=-m$mode+ else+ mkdir_mode=+ fi++ posix_mkdir=false+ case $umask in+ *[123567][0-7][0-7])+ # POSIX mkdir -p sets u+wx bits regardless of umask, which+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.+ ;;+ *)+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0++ if (umask $mkdir_umask &&+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1+ then+ if test -z "$dir_arg" || {+ # Check for POSIX incompatibilities with -m.+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or+ # other-writeable bit of parent directory when it shouldn't.+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.+ ls_ld_tmpdir=`ls -ld "$tmpdir"`+ case $ls_ld_tmpdir in+ d????-?r-*) different_mode=700;;+ d????-?--*) different_mode=755;;+ *) false;;+ esac &&+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"+ }+ }+ then posix_mkdir=:+ fi+ rmdir "$tmpdir/d" "$tmpdir"+ else+ # Remove any dirs left behind by ancient mkdir implementations.+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null+ fi+ trap '' 0;;+ esac;;+ esac++ if+ $posix_mkdir && (+ umask $mkdir_umask &&+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"+ )+ then :+ else++ # The umask is ridiculous, or mkdir does not conform to POSIX,+ # or it failed possibly due to a race condition. Create the+ # directory the slow way, step by step, checking for races as we go.++ case $dstdir in+ /*) prefix=/ ;;+ -*) prefix=./ ;;+ *) prefix= ;;+ esac++ case $posix_glob in+ '')+ if (set -f) 2>/dev/null; then+ posix_glob=true+ else+ posix_glob=false+ fi ;;+ esac++ oIFS=$IFS+ IFS=/+ $posix_glob && set -f+ set fnord $dstdir+ shift+ $posix_glob && set +f+ IFS=$oIFS++ prefixes=++ for d+ do+ test -z "$d" && continue++ prefix=$prefix$d+ if test -d "$prefix"; then+ prefixes=+ else+ if $posix_mkdir; then+ (umask=$mkdir_umask &&+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break+ # Don't fail if two instances are running concurrently.+ test -d "$prefix" || exit 1+ else+ case $prefix in+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;+ *) qprefix=$prefix;;+ esac+ prefixes="$prefixes '$qprefix'"+ fi+ fi+ prefix=$prefix/+ done++ if test -n "$prefixes"; then+ # Don't fail if two instances are running concurrently.+ (umask $mkdir_umask &&+ eval "\$doit_exec \$mkdirprog $prefixes") ||+ test -d "$dstdir" || exit 1+ obsolete_mkdir_used=true+ fi+ fi+ fi++ if test -n "$dir_arg"; then+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1+ else++ # Make a couple of temp file names in the proper directory.+ dsttmp=$dstdir/_inst.$$_+ rmtmp=$dstdir/_rm.$$_++ # Trap to clean up those temp files at exit.+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0++ # Copy the file name to the temp name.+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&++ # and set any options; do chmod last to preserve setuid bits.+ #+ # If any of these fail, we abort the whole thing. If we want to+ # ignore errors from any of these, just make sure not to ignore+ # errors from the above "$doit $cpprog $src $dsttmp" command.+ #+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \+ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&++ # Now rename the file to the real destination.+ { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \+ || {+ # The rename failed, perhaps because mv can't rename something else+ # to itself, or perhaps because mv is so ancient that it does not+ # support -f.++ # Now remove or move aside any old file at destination location.+ # We try this two ways since rm can't unlink itself on some+ # systems and the destination file might be busy for other+ # reasons. In this case, the final cleanup might fail but the new+ # file should still install successfully.+ {+ if test -f "$dst"; then+ $doit $rmcmd -f "$dst" 2>/dev/null \+ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \+ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\+ || {+ echo "$0: cannot unlink or rename $dst" >&2+ (exit 1); exit 1+ }+ else+ :+ fi+ } &&++ # Now rename the file to the real destination.+ $doit $mvcmd "$dsttmp" "$dst"+ }+ } || exit 1++ trap '' 0+ fi+done++# Local variables:+# eval: (add-hook 'write-file-hooks 'time-stamp)+# time-stamp-start: "scriptversion="+# time-stamp-format: "%:y-%02m-%02d.%02H"+# time-stamp-end: "$"+# End:
unix.buildinfo.in view
@@ -1,2 +1,4 @@ buildable: @BUILD_PACKAGE_BOOL@-extra-libraries: @EXTRA_LIBS@+cc-options: @PTHREAD_CFLAGS@+ld-options: @PTHREAD_LDFLAGS@+extra-libraries: @EXTRA_LIBS@ @PTHREAD_LIBS@
unix.cabal view
@@ -1,5 +1,5 @@ name: unix-version: 2.3.1.0+version: 2.3.2.0 license: BSD3 license-file: LICENSE maintainer: libraries@haskell.org@@ -36,6 +36,7 @@ System.Posix.Semaphore System.Posix.SharedMem extra-source-files:+ config.guess config.sub install-sh configure.ac configure unix.buildinfo.in include/HsUnixConfig.h.in include/HsUnix.h@@ -43,7 +44,7 @@ config.log config.status autom4te.cache unix.buildinfo include/HsUnixConfig.h build-depends: base-extensions: CPP, ForeignFunctionInterface+extensions: CPP, ForeignFunctionInterface, EmptyDataDecls include-dirs: include includes: HsUnix.h execvpe.h install-includes: