packages feed

ghc-byteorder (empty) → 4.11.0.0

raw patch · 5 files changed

+265/−0 lines, 5 filesdep +basedep +ghc-byteorder

Dependencies added: base, ghc-byteorder

Files

+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2020, Herbert Valerio Riedel++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Herbert Valerio Riedel nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ LICENSE.base view
@@ -0,0 +1,83 @@+This library (libraries/base) is derived from code from several+sources: ++  * Code from the GHC project which is largely (c) The University of+    Glasgow, and distributable under a BSD-style license (see below),++  * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+    and freely redistributable (but see the full license for+    restrictions).++  * Code from the Haskell Foreign Function Interface specification,+    which is (c) Manuel M. T. Chakravarty and freely redistributable+    (but see the full license for restrictions).++The full text of these licenses is reproduced below.  All of the+licenses are BSD-style or compatible.++-----------------------------------------------------------------------------++The Glasgow Haskell Compiler License++Copyright 2004, The University Court of the University of Glasgow. +All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++- Redistributions of source code must retain the above copyright notice,+this list of conditions and the following disclaimer.+ +- Redistributions in binary form must reproduce the above copyright notice,+this list of conditions and the following disclaimer in the documentation+and/or other materials provided with the distribution.+ +- Neither name of the University nor the names of its contributors may be+used to endorse or promote products derived from this software without+specific prior written permission. ++THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+DAMAGE.++-----------------------------------------------------------------------------++Code derived from the document "Report on the Programming Language+Haskell 98", is distributed under the following license:++  Copyright (c) 2002 Simon Peyton Jones++  The authors intend this Report to belong to the entire Haskell+  community, and so we grant permission to copy and distribute it for+  any purpose, provided that it is reproduced in its entirety,+  including this Notice.  Modified versions of this Report may also be+  copied and distributed for any purpose, provided that the modified+  version is clearly presented as such, and that it does not claim to+  be a definition of the Haskell 98 Language.++-----------------------------------------------------------------------------++Code derived from the document "The Haskell 98 Foreign Function+Interface, An Addendum to the Haskell 98 Report" is distributed under+the following license:++  Copyright (c) 2002 Manuel M. T. Chakravarty++  The authors intend this Report to belong to the entire Haskell+  community, and so we grant permission to copy and distribute it for+  any purpose, provided that it is reproduced in its entirety,+  including this Notice.  Modified versions of this Report may also be+  copied and distributed for any purpose, provided that the modified+  version is clearly presented as such, and that it does not claim to+  be a definition of the Haskell 98 Foreign Function Interface.++-----------------------------------------------------------------------------
+ ghc-byteorder.cabal view
@@ -0,0 +1,61 @@+cabal-version: 1.12+name: ghc-byteorder+version: 4.11.0.0++build-type: Simple+license: BSD3+license-files: LICENSE LICENSE.base+maintainer: Herbert Valerio Riedel <hvr@gnu.org>+bug-reports: https://github.com/hvr/ghc-byteorder/issues+synopsis: "GHC.ByteOrder" API Compatibility Layer+category: FFI+description:+  This package transparently supplies the "GHC.ByteOrder" API as provided in @base-4.11.0.0@ for legacy GHC releases which didn't provide it yet (i.e. GHC 7.0 through GHC 8.2).+  .+  This release provides a backported "GHC.ByteOrder" module. For GHC 8.4 and later a different release of @ghc-byteorder@ (with the same minor version) is eligible by the Cabal solver which reexports "GHC.ByteOrder" from @base@ via Cabal's @reexported-modules@ mechanism.+  .+  In order to use this compatibility layer, simply declare a dependency on @ghc-byteorder@ in your @.cabal@ package description like so+  .+  > build-depends: ghc-byteorder ^>= 4.11.0.0+  .+  And your code will be able to access this respective API version of the module via the usual+  .+  > import GHC.ByteOrder+  .+  mechanism.++source-repository head+  type:     git+  location: https://github.com/hvr/ghc-byteorder.git++library+  default-language: Haskell2010+  other-extensions: CPP+  if impl(ghc >= 7.2)+    default-extensions: Safe++  hs-source-dirs: src+  exposed-modules: GHC.ByteOrder++  build-depends: base >=4.3 && <4.11++  -- This package relies on GHC-isms+  if !(impl(ghc) || impl(ghcjs))+    build-depends: base<0++  -- place-holder for GHCJS-specific revisions+  if impl(ghcjs)+    build-depends: base++  ghc-options: -Wall++test-suite tests+  type: exitcode-stdio-1.0+  default-language: Haskell2010++  hs-source-dirs: src-test+  main-is: tests.hs++  build-depends: base, ghc-byteorder++  ghc-options: -Wall
+ src-test/tests.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE Haskell2010 #-}++module Main(main) where++import qualified Data.List             as L+import           Data.Word             (Word16, Word32, Word64, Word8)+import qualified GHC.ByteOrder         as IUT++-- Haskell2010+import qualified Foreign.Marshal.Array as FFI+import qualified Foreign.Marshal.Utils as FFI+import qualified Foreign.Ptr           as FFI+import qualified Foreign.Storable      as FFI++asOctets :: FFI.Storable a => a -> IO [Word8]+asOctets w = FFI.with w $ \p -> FFI.peekArray (FFI.sizeOf w) (FFI.castPtr p)++runtimeByteOrder :: IO IUT.ByteOrder+runtimeByteOrder = do+    w16octets <- asOctets (0x1234             :: Word16)+    w32octets <- asOctets (0x12345678         :: Word32)+    w64octets <- asOctets (0x123456789abcdef0 :: Word64)++    let octectsLst = [w16octets,w32octets,w64octets]++    case (L.nub $ zipWith inferBO octectsLst [beOctets16,beOctets32,beOctets64]) of+      [Just x] -> return x+      _        -> fail ("runtimeByteOrder failed " ++ show octectsLst)++  where+    beOctets64 = [0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0]+    beOctets32 = take 4 beOctets64+    beOctets16 = take 2 beOctets64++    inferBO host beRef+      | host == beRef           = Just IUT.BigEndian+      | host == L.reverse beRef = Just IUT.LittleEndian+      | otherwise               = Nothing++main :: IO ()+main = do+  putStrLn $ "GHC.ByteOrder.targetByteOrder = " ++ show IUT.targetByteOrder++  hostBO <- runtimeByteOrder+  putStrLn $ "probed byte-order = " ++ show hostBO++  if IUT.targetByteOrder == hostBO+   then putStrLn "success!"+   else do+    print =<< asOctets (0x1234             :: Word16)+    print =<< asOctets (0x12345678         :: Word32)+    print =<< asOctets (0x123456789abcdef0 :: Word64)+    fail "static 'targetByteOrder' doesn't match probed ByteOrder"+
+ src/GHC/ByteOrder.hs view
@@ -0,0 +1,37 @@+{-# LANGUAGE CPP #-}++-----------------------------------------------------------------------------+-- |+-- Module      :  GHC.ByteOrder+-- Copyright   :  (c) The University of Glasgow, 1994-2000+-- License     :  BSD-3-Clause+--+-- Target byte ordering.+--+-- @since 4.11.0.0+-----------------------------------------------------------------------------++module GHC.ByteOrder where++-- Required for WORDS_BIGENDIAN+#include <ghcautoconf.h>++-- | Byte ordering.+data ByteOrder+    = BigEndian    -- ^ most-significant-byte occurs in lowest address.+    | LittleEndian -- ^ least-significant-byte occurs in lowest address.+    deriving ( Eq      --   @since 4.11.0.0+             , Ord     --   @since 4.11.0.0+             , Bounded --   @since 4.11.0.0+             , Enum    --   @since 4.11.0.0+             , Read    --   @since 4.11.0.0+             , Show    --   @since 4.11.0.0+             )++-- | The byte ordering of the target machine.+targetByteOrder :: ByteOrder+#if defined(WORDS_BIGENDIAN)+targetByteOrder = BigEndian+#else+targetByteOrder = LittleEndian+#endif