Skip to content

Commit

Permalink
Removed the whitespaces between MakeGStorable and their arguments.
Browse files Browse the repository at this point in the history
Fixes issue #1 on OSX.

Removed the tests related to bad numbering of fields.
  • Loading branch information
Mateusz committed Nov 30, 2016
1 parent adce553 commit 242562c
Show file tree
Hide file tree
Showing 7 changed files with 244 additions and 71 deletions.
163 changes: 163 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
# This is the complex Travis configuration, which is intended for use
# on open source libraries which need compatibility across multiple GHC
# versions, must work with cabal-install, and should be
# cross-platform. For more information and other options, see:
#
# https://docs.haskellstack.org/en/stable/travis_ci/
#
# Copy these contents into the root directory of your Github project in a file
# named .travis.yml

# Use new container infrastructure to enable caching
sudo: false

# Do not choose a language; we provide our own build tools.
language: generic

# Caching so the next build will be fast too.
cache:
directories:
- $HOME/.ghc
- $HOME/.cabal
- $HOME/.stack
- $HOME/.gcc

# The different configurations we want to test. We have BUILD=cabal which uses
# cabal-install, and BUILD=stack which uses Stack. More documentation on each
# of those below.
#
# We set the compiler values here to tell Travis to use a different
# cache file per set of arguments.
#
# If you need to have different apt packages for each combination in the
# matrix, you can use a line such as:
# addons: {apt: {packages: [libfcgi-dev,libgmp-dev]}}
matrix:
include:
# - env: BUILD=cabal GHCVER=7.10.3 CABALVER=1.22 HAPPYVER=1.19.5 ALEXVER=3.1.7 GCCVER=6 COMPILER=gcc-6
# compiler: ": #GHC 7.10.3"
# addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,happy-1.19.5,alex-3.1.7,gcc-6], sources: [hvr-ghc,ubuntu-toolchain-r-test ]}}
# - env: BUILD=cabal GHCVER=8.0.1 CABALVER=1.24 HAPPYVER=1.19.5 ALEXVER=3.1.7 GCCVER=6 COMPILER=gcc-6
# compiler: ": #GHC 8.0.1"
# addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.1,happy-1.19.5,alex-3.1.7,gcc-6], sources: [hvr-ghc,ubuntu-toolchain-r-test]}}
#
# # Build with the newest GHC and cabal-install. This is an accepted failure,
# # see below.
# - env: BUILD=cabal GHCVER=head CABALVER=head HAPPYVER=1.19.5 ALEXVER=3.1.7 GCCVER=6
# compiler: ": #GHC HEAD"
# addons: {apt: {packages: [cabal-install-head,ghc-head,happy-1.19.5,alex-3.1.7,gcc-6], sources: [hvr-ghc,ubuntu-toolchain-r-test]}}
#
#
- env: BUILD=stack ARGS="--resolver lts-6"
compiler: ": #stack 7.10.3 osx"
os: osx
#
- env: BUILD=stack ARGS="--resolver lts-7"
compiler: ": #stack 8.0.1 osx"
os: osx
#
- env: BUILD=stack ARGS="--resolver nightly"
compiler: ": #stack nightly osx"
os: osx
#
# allow_failures:
# - env: BUILD=cabal GHCVER=head CABALVER=head HAPPYVER=1.19.5 ALEXVER=3.1.7 GCCVER=6
# - env: BUILD=stack ARGS="--resolver nightly"

before_install:
# Using compiler above sets CC to an invalid value, so unset it
- unset CC
# We want to always allow newer versions of packages when building on GHC HEAD
- CABALARGS=" --ghc-options=-I/usr/lib/gcc/x86_64-linux-gnu/6/include/"
- if [ "x$GHCVER" = "xhead" ]; then CABALARGS=--allow-newer; fi
# Set paths
- export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.local/bin:/opt/alex/$ALEXVER/bin:/opt/happy/$HAPPYVER/bin:$HOME/.cabal/bin:$HOME/.gcc/bin:$PATH
# Set the GCC...

- if [ $BUILD == "cabal"]; then
mkdir -p ~/.gcc/bin;
ln -s /usr/bin/gcc-6 $HOME/.gcc/bin/gcc;
fi
# - echo `gcc --version`
# - echo `whereis gcc`
# - echo `find /usr/ -type f -name stdalign.h`
- export C_INCLUDE_PATH=$/usr/lib/x86_64-linux-gnu/$GCCVER/include:$C_INCLUDE_PATH
# Download and unpack the stack executable
- mkdir -p ~/.local/bin
- |
if [ `uname` = "Darwin" ]
then
travis_retry curl --insecure -L https://www.stackage.org/stack/osx-x86_64 | tar xz --strip-components=1 --include '*/stack' -C ~/.local/bin
else
travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
fi
# Use the more reliable S3 mirror of Hackage
mkdir -p $HOME/.cabal
echo 'remote-repo: hackage.haskell.org:http://hackage.fpcomplete.com/' > $HOME/.cabal/config
echo 'remote-repo-cache: $HOME/.cabal/packages' >> $HOME/.cabal/config
if [ "$CABALVER" != "1.16" ]
then
echo 'jobs: $ncpus' >> $HOME/.cabal/config
fi
install:
- if [ $BUILD == "cabal"]; then
mkdir -p ~/.gcc/include;
ln -s /usr/lib/gcc/x86_64-linux-gnu/6/include/ $HOME/.gcc/include/;
fi
# - find /usr/ -type f -name stdalign.h
- echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
- if [ -f configure.ac ]; then autoreconf -i; fi
- |
set -ex
case "$BUILD" in
stack)
stack init
if [ "$?" -ne 0]; then
stack solver
fi;
stack --no-terminal --install-ghc $ARGS test --bench --only-dependencies
;;
cabal)
cabal --version
travis_retry cabal update
# Get the list of packages from the stack.yaml file
PACKAGES=$(stack --install-ghc query locals | grep '^ *path' | sed 's@^ *path:@@')
cabal install --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls --ghc-options=-O0 --reorder-goals --max-backjumps=-1 $CABALARGS $PACKAGES
;;
esac
set +ex
script:
- |
set -ex
case "$BUILD" in
stack)
stack --no-terminal $ARGS test --bench --no-run-benchmarks --haddock --no-haddock-deps
;;
cabal)
cabal install --enable-tests --enable-benchmarks --force-reinstalls --ghc-options=-O0 --reorder-goals --max-backjumps=-1 $CABALARGS $PACKAGES
ORIGDIR=$(pwd)
for dir in $PACKAGES
do
cd $dir
cabal check || [ "$CABALVER" == "1.16" ]
cabal sdist
PKGVER=$(cabal info . | awk '{print $2;exit}')
SRC_TGZ=$PKGVER.tar.gz
cd dist
tar zxfv "$SRC_TGZ"
cd "$PKGVER"
cabal configure --enable-tests
cabal build
cd $ORIGDIR
done
;;
esac
set +ex
20 changes: 20 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Revision history for derive-storable

## 0.1.0.4 -- 2016-11-29

* Fixed the bug with Foreign.Storable.Generic.Internal.Instances module.
* Removed two tests related to numbering of fields.

## 0.1.0.3 -- 2016-09-19

* Changed the link in README to hackage repository.

## 0.1.0.2 -- 2016-09-11

* Changed generic-storable to derive-storable in README.md
* Added README.md to the package


## 0.1.0.0 -- 2016-09-08

* First version. Released on an unsuspecting world.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Introduction

[![Build Status](https://travis-ci.org/mkloczko/derive-storable.svg?branch=master)](https://travis-ci.org/mkloczko/derive-storable)

The `derive-storable` package allows you to automatically generate Storable instances for your datatypes. It uses GHC.Generics, which allows the coders to derive certain instances automatically. To derive a (G)Storable instance, the data-type has to:

* have only one constructor.
Expand Down
20 changes: 16 additions & 4 deletions derive-storable.cabal
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
name: derive-storable

version: 0.1.0.3
synopsis: Derive Storable instances with help of GHC.Generics.
version: 0.1.0.4
synopsis: Derive Storable instances with GHC.Generics.

description: The package allows for automatic derivation of Storable instances
with C-like memory layout.
description: Derive Storable instances with GHC.Generics. The derived Storable instances have the same alignment as C structs.

homepage: https://www.github.com/mkloczko/derive-storable/
license: MIT
Expand Down Expand Up @@ -48,3 +47,16 @@ test-suite spec
build-depends: base >= 4.8 && < 4.10, derive-storable, hspec == 2.2.*, QuickCheck == 2.8.*

default-language: Haskell2010


source-repository head
type: git
location: https://github.com/mkloczko/derive-storable
branch: master


source-repository this
type: git
location: https://github.com/mkloczko/derive-storable
branch: master
tag: bb5cc5d3fa34c8346fda84898606ea3c120ea131
82 changes: 41 additions & 41 deletions src/Foreign/Storable/Generic/Instances.hs
Original file line number Diff line number Diff line change
Expand Up @@ -52,54 +52,54 @@ MakeGStorable(Word16)
MakeGStorable(Word32)
MakeGStorable(Word64)

MakeGStorable (Fingerprint)
MakeGStorable(Fingerprint)

-- C primitives
MakeGStorable (CUIntMax)
MakeGStorable (CIntMax)
MakeGStorable (CSUSeconds)
MakeGStorable (CUSeconds)
MakeGStorable (CTime)
MakeGStorable (CClock)
MakeGStorable (CSigAtomic)
MakeGStorable (CPtrdiff)
MakeGStorable (CDouble)
MakeGStorable (CFloat)
MakeGStorable (CULLong)
MakeGStorable (CLLong)
MakeGStorable (CULong)
MakeGStorable (CLong)
MakeGStorable (CUInt)
MakeGStorable (CInt)
MakeGStorable (CUShort)
MakeGStorable (CShort)
MakeGStorable (CUChar)
MakeGStorable (CSChar)
MakeGStorable (CChar)
MakeGStorable(CUIntMax)
MakeGStorable(CIntMax)
MakeGStorable(CSUSeconds)
MakeGStorable(CUSeconds)
MakeGStorable(CTime)
MakeGStorable(CClock)
MakeGStorable(CSigAtomic)
MakeGStorable(CPtrdiff)
MakeGStorable(CDouble)
MakeGStorable(CFloat)
MakeGStorable(CULLong)
MakeGStorable(CLLong)
MakeGStorable(CULong)
MakeGStorable(CLong)
MakeGStorable(CUInt)
MakeGStorable(CInt)
MakeGStorable(CUShort)
MakeGStorable(CShort)
MakeGStorable(CUChar)
MakeGStorable(CSChar)
MakeGStorable(CChar)

-- Ptr
MakeGStorable (IntPtr)
MakeGStorable (WordPtr)
MakeGStorable(IntPtr)
MakeGStorable(WordPtr)

MakeGStorable ((StablePtr a))
MakeGStorable ((Ptr a))
MakeGStorable ((FunPtr a))
MakeGStorable((StablePtr a))
MakeGStorable((Ptr a))
MakeGStorable((FunPtr a))

-- Posix
MakeGStorable (Fd)
MakeGStorable (CRLim)
MakeGStorable (CTcflag)
MakeGStorable (CSpeed)
MakeGStorable (CCc)
MakeGStorable (CUid)
MakeGStorable (CNlink)
MakeGStorable (CGid)
MakeGStorable (CSsize)
MakeGStorable (CPid)
MakeGStorable (COff)
MakeGStorable (CMode)
MakeGStorable (CIno)
MakeGStorable (CDev)
MakeGStorable(Fd)
MakeGStorable(CRLim)
MakeGStorable(CTcflag)
MakeGStorable(CSpeed)
MakeGStorable(CCc)
MakeGStorable(CUid)
MakeGStorable(CNlink)
MakeGStorable(CGid)
MakeGStorable(CSsize)
MakeGStorable(CPid)
MakeGStorable(COff)
MakeGStorable(CMode)
MakeGStorable(CIno)
MakeGStorable(CDev)



27 changes: 1 addition & 26 deletions test/Spec/Foreign/Storable/Generic/Internal/GStorable'Spec.hs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{-#LANGUAGE ScopedTypeVariables #-}
{-#LANGUAGE DeriveGeneric #-}
{-#LANGUAGE DataKinds #-}
{-#LANGUAGE GADTs #-}
module Foreign.Storable.Generic.Internal.GStorable'Spec where


Expand Down Expand Up @@ -135,19 +136,6 @@ spec = do

v1 `shouldBe` (v2_a :*: v2_b)
)
it "crashes when ix /= number of fields" $ do
property (\(GenericType (val1 :: f p)) -> do
let offsets = internalOffsets val1
no_fields = gnumberOf' val1
-- The bad index
bad_ix <- generate $ suchThat arbitrary (/=no_fields)
-- Poked area
ptr <- mallocBytes $ internalSizeOf val1
-- The test
(gpeekByteOff' offsets bad_ix ptr 0 :: IO (f p)) `shouldThrow` anyException
-- Freeing the pointer
free ptr
)
describe "gpokeByteOff' " $ do
it "instance M1 is equal to: gpokeByteOff' offs ix ptr off val" $ do
property (\(GenericType (val :: f p)) -> do
Expand Down Expand Up @@ -228,16 +216,3 @@ spec = do
-- Check:
bytes1 `shouldBe` bytes2
)
it "crashes when ix /= number of fields" $ do
property (\(GenericType (val1 :: f p)) -> do
let offsets = internalOffsets val1
no_fields = gnumberOf' val1
-- The bad index
bad_ix <- generate $ suchThat arbitrary (/=no_fields)
-- Poked area
ptr <- mallocBytes $ internalSizeOf val1
-- The test
gpokeByteOff' offsets bad_ix ptr 0 val1 `shouldThrow` anyException
-- Freeing the pointer
free ptr
)
1 change: 1 addition & 0 deletions test/Spec/Foreign/Storable/Generic/InternalSpec.hs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{-#LANGUAGE ScopedTypeVariables #-}
{-#LANGUAGE DeriveGeneric #-}
{-#LANGUAGE DataKinds #-}
{-#LANGUAGE GADTs #-}
module Foreign.Storable.Generic.InternalSpec where


Expand Down

0 comments on commit 242562c

Please sign in to comment.