Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add .travis.yml and test target #12

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 151 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
# This Travis job script has been generated by a script via
#
# haskell-ci 'travis' 'arrayfire.cabal'
#
# For more information, see https://github.com/haskell-CI/haskell-ci
#
# version: 0.3.20190814
#
language: c
dist: xenial
sudo: required
git:
# whether to recursively clone submodules
submodules: false
cache:
directories:
- $HOME/.cabal/packages
- $HOME/.cabal/store
before_cache:
- rm -fv $CABALHOME/packages/hackage.haskell.org/build-reports.log
# remove files that are regenerated by 'cabal update'
- rm -fv $CABALHOME/packages/hackage.haskell.org/00-index.*
- rm -fv $CABALHOME/packages/hackage.haskell.org/*.json
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.cache
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar.idx
- rm -rfv $CABALHOME/packages/head.hackage
matrix:
include:
- compiler: ghc-8.8.1
addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.8.1","cabal-install-3.0"]}}
- compiler: ghc-8.6.5
addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.6.5","cabal-install-2.4"]}}
- compiler: ghc-8.4.4
addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.4.4","cabal-install-2.4"]}}
before_install:
- HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
- WITHCOMPILER="-w $HC"
- HCPKG="$HC-pkg"
- unset CC
- CABAL=/opt/ghc/bin/cabal
- CABALHOME=$HOME/.cabal
- export PATH="$CABALHOME/bin:$PATH"
- export LD_LIBRARY_PATH="/opt/arrayfire/lib64:$LD_LIBRARY_PATH"
- TOP=$(pwd)
- "HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\\d+)\\.(\\d+)\\.(\\d+)(\\.(\\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')"
- echo $HCNUMVER
- CABAL="$CABAL -vnormal+nowrap+markoutput"
- set -o pipefail
- |
echo 'function blue(s) { printf "\033[0;34m" s "\033[0m " }' >> .colorful.awk
echo 'BEGIN { state = "output"; }' >> .colorful.awk
echo '/^-----BEGIN CABAL OUTPUT-----$/ { state = "cabal" }' >> .colorful.awk
echo '/^-----END CABAL OUTPUT-----$/ { state = "output" }' >> .colorful.awk
echo '!/^(-----BEGIN CABAL OUTPUT-----|-----END CABAL OUTPUT-----)/ {' >> .colorful.awk
echo ' if (state == "cabal") {' >> .colorful.awk
echo ' print blue($0)' >> .colorful.awk
echo ' } else {' >> .colorful.awk
echo ' print $0' >> .colorful.awk
echo ' }' >> .colorful.awk
echo '}' >> .colorful.awk
- cat .colorful.awk
- |
color_cabal_output () {
awk -f $TOP/.colorful.awk
}
- echo text | color_cabal_output
install:
- echo "Downloading ArrayFire-3.6.4"
- curl -O http://arrayfire.s3.amazonaws.com/3.6.4/ArrayFire-v3.6.4_Linux_x86_64.sh
- chmod +x ArrayFire-v3.6.4_Linux_x86_64.sh
- ./ArrayFire-v3.6.4_Linux_x86_64.sh --include-subdir --prefix=/opt
- ls -lah /opt/arrayfire/
- ${CABAL} --version
- echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"
- TEST=--enable-tests
- BENCH=--enable-benchmarks
- HEADHACKAGE=false
- rm -f $CABALHOME/config
- |
echo "verbose: normal +nowrap +markoutput" >> $CABALHOME/config
echo "remote-build-reporting: anonymous" >> $CABALHOME/config
echo "write-ghc-environment-files: always" >> $CABALHOME/config
echo "remote-repo-cache: $CABALHOME/packages" >> $CABALHOME/config
echo "logs-dir: $CABALHOME/logs" >> $CABALHOME/config
echo "world-file: $CABALHOME/world" >> $CABALHOME/config
echo "extra-prog-path: $CABALHOME/bin" >> $CABALHOME/config
echo "symlink-bindir: $CABALHOME/bin" >> $CABALHOME/config
echo "installdir: $CABALHOME/bin" >> $CABALHOME/config
echo "build-summary: $CABALHOME/logs/build.log" >> $CABALHOME/config
echo "store-dir: $CABALHOME/store" >> $CABALHOME/config
echo "install-dirs user" >> $CABALHOME/config
echo " prefix: $CABALHOME" >> $CABALHOME/config
echo "repository hackage.haskell.org" >> $CABALHOME/config
echo " url: http://hackage.haskell.org/" >> $CABALHOME/config
- cat $CABALHOME/config
- rm -fv cabal.project cabal.project.local cabal.project.freeze
- travis_retry ${CABAL} v2-update -v
# Generate cabal.project
- rm -rf cabal.project cabal.project.local cabal.project.freeze
- touch cabal.project
- |
echo "packages: ." >> cabal.project
- |
- "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | (grep -vE -- '^(arrayfire)$' || true) | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
- cat cabal.project || true
- cat cabal.project.local || true
- ${CABAL} v2-install $WITHCOMPILER hspec-discover | color_cabal_output # needed on $PATH for tests
- if [ -f "./configure.ac" ]; then (cd "." && autoreconf -i); fi
- ${CABAL} v2-freeze $WITHCOMPILER ${TEST} ${BENCH} | color_cabal_output
- "cat cabal.project.freeze | sed -E 's/^(constraints: *| *)//' | sed 's/any.//'"
- rm cabal.project.freeze
- ${CABAL} v2-build $WITHCOMPILER ${TEST} ${BENCH} --dep -j2 all | color_cabal_output
- ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --dep -j2 all | color_cabal_output
script:
- DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)
# Packaging...
- ${CABAL} v2-sdist all | color_cabal_output
# Unpacking...
- mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
- cd ${DISTDIR} || false
- find . -maxdepth 1 -type f -name '*.tar.gz' -exec tar -xvf '{}' \;
- find . -maxdepth 1 -type f -name '*.tar.gz' -exec rm '{}' \;
- PKGDIR_arrayfire="$(find . -maxdepth 1 -type d -regex '.*/arrayfire-[0-9.]*')"
# Generate cabal.project
- rm -rf cabal.project cabal.project.local cabal.project.freeze
- touch cabal.project
- |
echo "packages: ${PKGDIR_arrayfire}" >> cabal.project
- |
- "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | (grep -vE -- '^(arrayfire)$' || true) | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
- cat cabal.project || true
- cat cabal.project.local || true
# Building...
# this builds all libraries and executables (without tests/benchmarks)
- ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
# Building with tests and benchmarks...
# build & run tests, build benchmarks
- ${CABAL} v2-build $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
# Testing...
- ${CABAL} v2-test $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
# cabal check...
- (cd ${PKGDIR_arrayfire} && ${CABAL} -vnormal check)
# haddock...
- ${CABAL} v2-haddock $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
# Building without installed constraints for packages in global-db...
- rm -f cabal.project.local
- ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output

# REGENDATA ["travis","arrayfire.cabal"]
# EOF
4 changes: 2 additions & 2 deletions Setup.hs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module Main where

import Distribution.Extra.Doctest (defaultMainWithDoctests)
import Distribution.Simple

main :: IO ()
main = defaultMainWithDoctests "doctests"
main = defaultMain
12 changes: 3 additions & 9 deletions arrayfire.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,20 @@ author: David Johnson
maintainer: djohnson.m@gmail.com
copyright: David Johnson (c) 2018-2020
category: Math
build-type: Custom
build-type: Simple
extra-source-files: CHANGELOG.md
cabal-version: >=1.10
description: High-level Haskell bindings to the ArrayFire General-purpose GPU library
.
<<https://user-images.githubusercontent.com/875324/59819388-9ff83f00-92f5-11e9-9ac0-51eef200c716.png>>
.
tested-with: GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.1

flag disable-default-paths
description: When enabled, don't add default hardcoded include/link dirs by default. Needed for hermetic builds like in nix.
default: False
manual: True

custom-setup
setup-depends:
base <5,
Cabal,
cabal-doctest >=1 && <1.1

library
exposed-modules:
ArrayFire
Expand Down Expand Up @@ -102,9 +97,8 @@ library
include-dirs:
/opt/arrayfire/include
extra-lib-dirs:
/opt/arrayfire/lib64
/opt/arrayfire/lib
ld-options:
-Wl,-rpath /opt/arrayfire/lib

executable main
hs-source-dirs:
Expand Down
35 changes: 27 additions & 8 deletions default.nix
Original file line number Diff line number Diff line change
@@ -1,9 +1,28 @@
{ pkgs ? import <nixpkgs> { config.allowUnfree = true; } }:
# Latest arrayfire is not yet procured w/ nix.
let
pkg = pkgs.haskellPackages.callCabal2nix "arrayfire" ./. {
af = null;
quickcheck-classes = pkgs.haskellPackages.quickcheck-classes_0_6_4_0;
{ pkgs ? import ./nix/nixpkgs.nix
, compiler ? "ghc865"
}:

with pkgs;

with rec {
hsPkgs = haskell.packages.${compiler}.override {
overrides = hself: hsuper: {
arrayfire = hsLib.overrideCabal (hself.callPackage ./pkg.nix { af = pkgs.arrayfire; }) (old: {
configureFlags = (old.configureFlags or []) ++ [
"-f+disable-default-paths"
"--extra-include-dirs=${arrayfire}/include"
"--extra-lib-dirs=${arrayfire}/lib"
];

doCheck = true;
doHaddock = false;
});
};
};
in
pkg

hsLib = haskell.lib;
};

rec {
inherit compiler pkgs hsPkgs;
}
79 changes: 0 additions & 79 deletions nix/default.nix

This file was deleted.

15 changes: 15 additions & 0 deletions nix/nixpkgs.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
with {
rev = "9fe4e068123146afda5f2b9a6d630ba76d1daff5";
sha256 = "1fwjf3gvhinzs9yvp7dh3im0123lbzhfrg371ingp61n7jkb73c9";

config = {
allowUnfree = true;
};

overlays = [];
};

import (builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/${rev}.tar.gz";
inherit sha256;
}) { inherit config overlays; }
28 changes: 0 additions & 28 deletions nix/no-download.patch

This file was deleted.

20 changes: 13 additions & 7 deletions pkg.nix
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
{ mkDerivation, base, directory, parsec, stdenv, text, vector
, hspec, hspec-discover
{ mkDerivation, af, base, directory, filepath, hspec
, hspec-discover, parsec, QuickCheck, quickcheck-classes, stdenv
, text, vector
}:
mkDerivation {
pname = "arrayfire";
version = "0.6.0.0"
version = "0.6.0.0";
src = ./.;
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [ base vector ];
executableHaskellDepends = [ base directory parsec text ];
testHaskellDepends = [ hspec hspec-discover ];
libraryHaskellDepends = [ base filepath vector ];
librarySystemDepends = [ af ];
executableHaskellDepends = [ base directory parsec text vector ];
testHaskellDepends = [
base directory hspec hspec-discover QuickCheck quickcheck-classes
vector
];
testToolDepends = [ hspec-discover ];
homepage = "https://github.com/arrayfire/arrayfire-haskell";
description = "Haskell bindings to ArrayFire";
description = "Haskell bindings to the ArrayFire general-purpose GPU library";
license = stdenv.lib.licenses.bsd3;
}
5 changes: 5 additions & 0 deletions release.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
ghc844 = (import ./default.nix { compiler = "ghc844"; }).hsPkgs.arrayfire;
ghc865 = (import ./default.nix { compiler = "ghc865"; }).hsPkgs.arrayfire;
ghc881 = (import ./default.nix { compiler = "ghc881"; }).hsPkgs.arrayfire;
}
Loading