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 +30/−0
- LICENSE.base +83/−0
- ghc-byteorder.cabal +61/−0
- src-test/tests.hs +54/−0
- src/GHC/ByteOrder.hs +37/−0
+ 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