CPL 0.0.7 → 0.0.8
raw patch · 12 files changed
+361/−48 lines, 12 filesbinary-added
Files
- .travis.yml +66/−42
- CHANGELOG.markdown +6/−0
- CPL.cabal +15/−2
- README.markdown +1/−1
- appveyor.yml +56/−0
- build_bdist_linux.sh +30/−0
- src/CDT.hs +2/−2
- src/CDTParser.hs +1/−1
- windows/COPYING.rtf binary
- windows/CPL.wxs +92/−0
- windows/build_msi.hs +39/−0
- windows/build_zip.hs +53/−0
.travis.yml view
@@ -1,55 +1,79 @@-# NB: don't set `language: haskell` here+language: c+sudo: false -# The following enables several GHC versions to be tested; often it's enough to test only against the last release in a major GHC version. Feel free to omit lines listings versions you don't need/want testing for.-env:-# - GHCVER=6.12.3-# - GHCVER=7.0.1-# - GHCVER=7.0.2-# - GHCVER=7.0.3-# - GHCVER=7.0.4-# - GHCVER=7.2.1-# - GHCVER=7.2.2-# - GHCVER=7.4.1- - GHCVER=7.4.2-# - GHCVER=7.6.1-# - GHCVER=7.6.2- - GHCVER=7.6.3-# - GHCVER=7.8.1 # see note about Alex/Happy- - GHCVER=7.8.2 # see note about Alex/Happy-# - GHCVER=head # see section about GHC HEAD snapshots+cache:+ directories:+ - $HOME/.cabsnap+ - $HOME/.cabal/packages -# Note: the distinction between `before_install` and `install` is not important.+before_cache:+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar++matrix:+ include:+ - env: CABALVER=1.16 GHCVER=7.6.3+ compiler: ": #GHC 7.6.3"+ addons: {apt: {packages: [cabal-install-1.16,ghc-7.6.3,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}+ - env: CABALVER=1.18 GHCVER=7.8.3 COVERAGE=1+ compiler: ": #GHC 7.8.3"+ addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.3,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}+ - env: CABALVER=1.22 GHCVER=7.10.2+ compiler: ": #GHC 7.10.2"+ addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}+ before_install:- - travis_retry sudo add-apt-repository -y ppa:hvr/ghc- - travis_retry sudo apt-get update- - travis_retry sudo apt-get install cabal-install-1.18 ghc-$GHCVER # see note about happy/alex- - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.18/bin:$PATH- - |- if [ $GHCVER = "head" ] || [ ${GHCVER%.*} = "7.8" ]; then- travis_retry sudo apt-get install happy-1.19.3 alex-3.1.3- export PATH=/opt/alex/3.1.3/bin:/opt/happy/1.19.3/bin:$PATH+ - unset CC+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:/opt/alex/3.1.4/bin:/opt/happy/1.19.5/bin:$PATH++install:+ - cabal --version+ - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"+ - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];+ then+ zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >+ $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;+ fi+ - travis_retry cabal update -v+ - sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config+ - cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt+ - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt++# check whether current requested install-plan matches cached package-db snapshot+ - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;+ then+ echo "cabal build-cache HIT";+ rm -rfv .ghc;+ cp -a $HOME/.cabsnap/ghc $HOME/.ghc;+ cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/; else- travis_retry sudo apt-get install happy alex+ echo "cabal build-cache MISS";+ rm -rf $HOME/.cabsnap;+ mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;+ cabal install --only-dependencies --enable-tests --enable-benchmarks; fi -install:- - cabal update- - cabal install --only-dependencies --enable-tests -v2 # -v2 provides useful information for debugging+# snapshot package-db on cache miss+ - if [ ! -d $HOME/.cabsnap ];+ then+ echo "snapshotting package-db to build-cache";+ mkdir $HOME/.cabsnap;+ cp -a $HOME/.ghc $HOME/.cabsnap/ghc;+ cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;+ fi -# Here starts the actual work to be performed for the package under test; any command which exits with a non-zero exit code causes the build to fail.+# Here starts the actual work to be performed for the package under test;+# any command which exits with a non-zero exit code causes the build to fail. script:- - cabal configure --enable-tests -v2 # -v2 provides useful information for debugging+ - if [ -f configure.ac ]; then autoreconf -i; fi+ - cabal configure --enable-tests --enable-benchmarks -v2 $([ "$COVERAGE" = "1" ] && echo "--enable-library-coverage") # -v2 provides useful information for debugging - cabal build # this builds all libraries and executables (including tests/benchmarks) - cabal test - cabal check - cabal sdist # tests that a source-distribution can be generated -# The following scriptlet checks that the resulting source distribution can be built & installed- - export SRC_TGZ=$(cabal-1.18 info . | awk '{print $2 ".tar.gz";exit}') ;- cd dist/;- if [ -f "$SRC_TGZ" ]; then- cabal install "$SRC_TGZ";- else- echo "expected '$SRC_TGZ' not found";- exit 1;- fi+# Check that the resulting source distribution can be built & installed.+# If there are no other `.tar.gz` files in `dist`, this can be even simpler:+# `cabal install --force-reinstalls dist/*-*.tar.gz`+ - SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz &&+ (cd dist && cabal install --force-reinstalls "$SRC_TGZ")
CHANGELOG.markdown view
@@ -1,3 +1,9 @@+Changes since the 0.0.7 release+-------------------------------++* "→" can be used instead of "->"+* GHC-7.10 support+ Changes since the 0.0.6 release -------------------------------
CPL.cabal view
@@ -1,5 +1,5 @@ Name: CPL-Version: 0.0.7+Version: 0.0.8 License: BSD3 License-File: COPYING Author: Masahiro Sakai (masahiro.sakai@gmail.com)@@ -11,6 +11,7 @@ Extra-Source-Files: README.markdown, CHANGELOG.markdown,+ appveyor.yml, .travis.yml, samples/ack.cpl, samples/automata.cdt,@@ -23,7 +24,12 @@ samples/benchmark.cpl, samples/ack_3_4.cpl, samples/function.cpl,- src/CDT.hs-boot+ src/CDT.hs-boot,+ windows/COPYING.rtf,+ windows/CPL.wxs,+ windows/build_msi.hs,+ windows/build_zip.hs,+ build_bdist_linux.sh Build-Type: Simple source-repository head@@ -38,6 +44,11 @@ Description: Use Haskeline Default: True +Flag LinuxStatic+ Description: build statically linked binaries+ Default: False+ Manual: True+ Executable cpl Main-is: Main.hs HS-Source-Dirs: src@@ -52,3 +63,5 @@ if flag(Haskeline) CPP-Options: "-DUSE_HASKELINE_PACKAGE" Build-Depends: haskeline+ if flag(LinuxStatic)+ GHC-Options: -static -optl-static -optl-pthread
README.markdown view
@@ -1,7 +1,7 @@ An implementation of "A Categorical Programing Language" ======================================================== -[](http://travis-ci.org/msakai/cpl)+[](http://travis-ci.org/msakai/cpl) [](https://ci.appveyor.com/project/msakai/cpl/branch/master) [](https://hackage.haskell.org/package/CPL) This package is an implementation of "A Categorical Programing Language" (CPL for short)[1][2] written in Haskell.
+ appveyor.yml view
@@ -0,0 +1,56 @@+platform:+- x86+- x64++install:+- ps: |+ # This is necessary because AppVeyor uses 64 bit environemnt even if "platform: x86" is specified.+ # see also <http://help.appveyor.com/discussions/questions/213-platform-x86-is-not-32-bit>+ if ("x86".Equals(${env:PLATFORM})) {+ $env:HPChocoOptions = "--x86"+ $env:HPPath = "${env:ProgramFiles(x86)}\Haskell Platform\7.10.3"+ Invoke-WebRequest -Uri https://haskell.org/platform/download/7.10.3/HaskellPlatform-7.10.3-i386-setup.exe -OutFile HaskellPlatform-7.10.3-i386-setup.exe+ .\HaskellPlatform-7.10.3-i386-setup.exe /S+ } else {+ $env:HPChocoOptions = ""+ $env:HPPath = "${env:ProgramFiles}\Haskell Platform\7.10.3"+ Invoke-WebRequest -Uri https://haskell.org/platform/download/7.10.3/HaskellPlatform-7.10.3-x86_64-setup.exe -OutFile HaskellPlatform-7.10.3-x86_64-setup.exe+ .\HaskellPlatform-7.10.3-x86_64-setup.exe /S+ }+ # choco install ${env:HPChocoOptions} haskellplatform -version 2014.2.0.0 -y+ # Haskell Platfrom package doesn't update PATH for the current shell instance+ $env:Path += ";${env:HPPath}\bin"+ $env:Path += ";${env:HPPath}\lib\extralibs\bin"+ $env:Path += ";${env:HPPath}\mingw\bin"+ $env:Path += ";.\.cabal-sandbox\bin"+ choco install wixtoolset -version 3.10.1.2213 -y+ $env:Path += ";${env:ProgramFiles}\WiX Toolset v3.10\bin"+ $env:Path += ";${env:ProgramFiles(x86)}\WiX Toolset v3.10\bin"+- cabal sandbox init+- cabal update+- cabal install --only-dependencies --enable-tests --enable-benchmarks -fHaskeline -f-Readline++build_script:+- cabal configure --enable-tests --enable-benchmarks -fHaskeline -f-Readline -v2 # -v2 provides useful information for debugging+- cabal build++after_build:+- cmd: |+ cd windows+ echo Creating msi...+ runhaskell build_msi.hs+ echo Creating zip...+ cabal install turtle+ runhaskell build_zip.hs+ cd ..++test_script:+- cabal test+- cabal check+- cabal sdist++artifacts:+- path: windows\*.msi+ name: Windows Installer+- path: windows\*.zip+ name: Portable Binary Package
+ build_bdist_linux.sh view
@@ -0,0 +1,30 @@+#!/bin/bash+export CABALVER=1.22+export GHCVER=7.10.2++sudo add-apt-repository -y ppa:hvr/ghc+sudo apt-get update++sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER+export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:~/.cabal/bin:$PATH+sudo apt-get install happy-1.19.4 alex-3.1.3+export PATH=/opt/alex/3.1.3/bin:/opt/happy/1.19.4/bin:$PATH++cabal sandbox init+cabal update+cabal install -p --only-dependencies -f-Haskeline -f-Readline+cabal configure -fLinuxStatic -f-Haskeline -f-Readline+cabal build++VER=`ghc -e ":m + Control.Monad Distribution.Package Distribution.PackageDescription Distribution.PackageDescription.Parse Distribution.Verbosity Data.Version" -e 'putStrLn =<< liftM (showVersion . pkgVersion . package . packageDescription) (readPackageDescription silent "CPL.cabal")'`+OS=`ghc -e ":m +System.Info" -e "putStrLn os"`+ARCH=`ghc -e ":m +System.Info" -e "putStrLn arch"`++PKG=CPL-${VER}-${OS}-${ARCH}++rm -r $PKG+mkdir -p $PKG/bin+cp dist/build/cpl/cpl $PKG/bin+cp CHANGELOG.markdown COPYING README.markdown $PKG/+cp -a samples $PKG+tar Jcf $PKG.tar.xz $PKG --owner=sakai --group=sakai
src/CDT.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, FlexibleContexts #-} ----------------------------------------------------------------------------- -- | -- Module : CDT@@ -7,7 +7,7 @@ -- -- Maintainer : masahiro.sakai@gmail.com -- Stability : provisional--- Portability : portable+-- Portability : non-portable (CPP, FlexibleContexts) -- -- Categorical Data Type --
src/CDTParser.hs view
@@ -57,7 +57,7 @@ char' ':' let f x = x `elemIndex` params a <- fe f- string' "->"+ string' "->" <|> string' "→" b <- fe f return (name, a :-> b)
+ windows/COPYING.rtf view
binary file changed (absent → 1818 bytes)
+ windows/CPL.wxs view
@@ -0,0 +1,92 @@+<?xml version="1.0" encoding="utf-8"?> + +<?if $(sys.BUILDARCH)=x64 ?> + <?define Win64 = "yes" ?> + <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?> +<?else ?> + <?define Win64 = "no" ?> + <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?> +<?endif ?> + +<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> + <Product Id="AD35BCFF-05F9-4467-B922-B9F76EAB2B1F" Name="Categorical Programming Language" Language="1033" Version="0.0.8.0" Manufacturer="Masahiro Sakai" UpgradeCode="8DBD2D7D-6114-4C47-A307-DD99483568C5"> + <Package Description="This package is an implementation of "A Categorical Programing Language" (CPL for short) written in Haskell" Comments="Categorical Programming Language" InstallerVersion="200" Compressed="yes" /> + <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" /> + <Directory Id="TARGETDIR" Name="SourceDir"> + <Directory Id="$(var.PlatformProgramFilesFolder)" Name="PFiles"> + <Directory Id="INSTALLDIR" Name="CPL"> + <Directory Id="BINDIR" Name="bin"> + <Component Id="MainExecutable" Guid="6E979ACB-D17F-4C9D-8BA0-041FD0D5E987"> + <File Id="cplEXE" Name="cpl.exe" Source="..\dist\build\cpl\cpl.exe" /> + </Component> + </Directory> + <Directory Id="SAMPLES" Name="samples"> + <Component Id="ACK.CPL" DiskId="1" Guid="28C7FD0E-9061-4392-9523-CBF65012F4CD"> + <File Id="ACK.CPL" Name="ack.cpl" Source="..\samples\ack.cpl" /> + </Component> + <Component Id="ACK_3_4.CPL" DiskId="1" Guid="DC20AC75-DA73-49EA-8960-48B25DA166DB"> + <File Id="ACK_3_4.CPL" Name="ack_3_4.cpl" Source="..\samples\ack_3_4.cpl" /> + </Component> + <Component Id="AUTOMATA.CDT" DiskId="1" Guid="FFD53683-7D82-4396-8649-0458BA2D695E"> + <File Id="AUTOMATA.CDT" Name="automata.cdt" Source="..\samples\automata.cdt" /> + </Component> + <Component Id="BENCHMARK.CPL" DiskId="1" Guid="CE930ED5-1D88-4DA9-9BCD-D58C78A9E727"> + <File Id="BENCHMARK.CPL" Name="benchmark.cpl" Source="..\samples\benchmark.cpl" /> + </Component> + <Component Id="CCC.CDT" DiskId="1" Guid="20974E7A-8454-406F-83B9-83ED7E582B8B"> + <File Id="CCC.CDT" Name="ccc.cdt" Source="..\samples\ccc.cdt" /> + </Component> + <Component Id="EXAMPLES.CPL" DiskId="1" Guid="A4AF9E9F-E4E5-41A2-8BD4-2A6D271E7334"> + <File Id="EXAMPLES.CPL" Name="examples.cpl" Source="..\samples\examples.cpl" /> + </Component> + <Component Id="EXAMPLES.TXT" DiskId="1" Guid="7D36629F-D94D-4080-BFC3-1EA5FBD05B33"> + <File Id="EXAMPLES.TXT" Name="examples.txt" Source="..\samples\examples.txt" /> + </Component> + <Component Id="FUNCTION.CPL" DiskId="1" Guid="2C24BD6E-F9AB-4523-B778-07258DDA11F5"> + <File Id="FUNCTION.CPL" Name="function.cpl" Source="..\samples\function.cpl" /> + </Component> + <Component Id="MISC.CDT" DiskId="1" Guid="C48F939A-D014-43EF-8631-0C8541A8A7FF"> + <File Id="MISC.CDT" Name="misc.cdt" Source="..\samples\misc.cdt" /> + </Component> + <Component Id="OBSCURE.CDT" DiskId="1" Guid="FCE812CA-5688-4ABA-BB34-93895E098424"> + <File Id="OBSCURE.CDT" Name="obscure.cdt" Source="..\samples\obscure.cdt" /> + </Component> + <Component Id="REC.CDT" DiskId="1" Guid="0C90FF11-FA31-44D4-8DD5-7D2B96D10B47"> + <File Id="REC.CDT" Name="rec.cdt" Source="..\samples\rec.cdt" /> + </Component> + </Directory> + <Component Id="ReadmeFile" Guid="EF38BFDC-5DF3-4F57-8307-75F91183FECF"> + <File Id="READMEMD" Name="README.markdown" Source="..\README.markdown" /> + </Component> + <Component Id="LicenseFile" Guid="0019EBA5-97D6-44F3-A451-84D8D9D4F89E"> + <File Id="COPYING" Name="COPYING" Source="..\COPYING" /> + </Component> + <Component Id="ChangeLogFile" Guid="778D69A3-F428-44DD-B9CD-55F976D98F33"> + <File Id="CHANGELOGMD" Name="CHANGELOG.markdown" Source="..\CHANGELOG.markdown" /> + </Component> + </Directory> + </Directory> + </Directory> + <Feature Id="DefaultFeature" Title="Main Feature" Level="1"> + <ComponentRef Id="MainExecutable" /> + <ComponentRef Id="ACK.CPL" /> + <ComponentRef Id="ACK_3_4.CPL" /> + <ComponentRef Id="AUTOMATA.CDT" /> + <ComponentRef Id="BENCHMARK.CPL" /> + <ComponentRef Id="CCC.CDT" /> + <ComponentRef Id="EXAMPLES.CPL" /> + <ComponentRef Id="EXAMPLES.TXT" /> + <ComponentRef Id="FUNCTION.CPL" /> + <ComponentRef Id="MISC.CDT" /> + <ComponentRef Id="OBSCURE.CDT" /> + <ComponentRef Id="REC.CDT" /> + <ComponentRef Id="ReadmeFile" /> + <ComponentRef Id="LicenseFile" /> + <ComponentRef Id="ChangeLogFile" /> + </Feature> + <UI /> + <UIRef Id="WixUI_InstallDir" /> + <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" /> + <WixVariable Id="WixUILicenseRtf" Value="COPYING.rtf" /> + </Product> +</Wix>
+ windows/build_msi.hs view
@@ -0,0 +1,39 @@+{-# OPTIONS_GHC -Wall #-}+{-# LANGUAGE ScopedTypeVariables #-}+import Control.Exception+import Control.Monad+import Data.Version+import Distribution.Package+import Distribution.PackageDescription+import Distribution.PackageDescription.Parse+import Distribution.Verbosity+import qualified System.Info as SysInfo+import System.Process++getGitHash :: IO (Maybe String)+getGitHash =+ liftM (Just . takeWhile (/='\n')) (readProcess "git" ["rev-parse", "--short", "HEAD"] "")+ `catch` \(_::SomeException) -> return Nothing++getVersion :: FilePath -> IO Version+getVersion cabalFile = do+ pkg <- readPackageDescription silent cabalFile+ return $ pkgVersion $ package $ packageDescription $ pkg++main :: IO ()+main = do+ gitHashMaybe <- getGitHash+ version <- getVersion "../CPL.cabal"+ let suffix_githash =+ case gitHashMaybe of+ Nothing -> ""+ Just gitHash -> "_" ++ gitHash+ msiFileName = "CPL-" ++ showVersion version ++ suffix_githash ++ "-" ++ SysInfo.os ++ "-" ++ SysInfo.arch ++ ".msi"+ arch =+ case SysInfo.arch of+ "x86_64" -> "x64"+ "i386" -> "x86"+ s -> s+ callProcess "candle" $ ["-arch", arch, "CPL.wxs"]+ callProcess "light" ["-ext", "WixUIExtension", "-out", msiFileName, "CPL.wixobj"]+ return ()
+ windows/build_zip.hs view
@@ -0,0 +1,53 @@+{-# OPTIONS_GHC -Wall #-}+{-# LANGUAGE ScopedTypeVariables, OverloadedStrings #-}+import Control.Exception+import Control.Monad+import Data.String+import Data.Version+import Distribution.Package+import Distribution.PackageDescription+import Distribution.PackageDescription.Parse+import Distribution.Verbosity+import qualified System.Info as SysInfo+import System.Process+import Turtle hiding (FilePath)++getGitHash :: IO (Maybe String)+getGitHash =+ liftM (Just . takeWhile (/='\n')) (readProcess "git" ["rev-parse", "--short", "HEAD"] "")+ `catch` \(_::SomeException) -> return Nothing++getVersion :: FilePath -> IO Version+getVersion cabalFile = do+ pkg <- readPackageDescription silent cabalFile+ return $ pkgVersion $ package $ packageDescription $ pkg++main :: IO ()+main = do+ gitHashMaybe <- getGitHash+ version <- getVersion "../CPL.cabal"+ let suffix_githash =+ case gitHashMaybe of+ Nothing -> ""+ Just gitHash -> "_" ++ gitHash+ dir :: IsString a => a+ dir = fromString $ "CPL-" ++ showVersion version ++ suffix_githash ++ "-" ++ SysInfo.os ++ "-" ++ SysInfo.arch++ let binDir = dir </> "bin"+ samplesDir = dir </> "samples"+ zipFile :: IsString a => a+ zipFile = fromString (dir ++ ".zip")+ testfile zipFile >>= \b -> when b (rm zipFile)+ testfile dir >>= \b -> when b (rmtree dir)+ mktree dir+ mktree binDir+ mktree samplesDir+ cp "../dist/build/cpl/cpl.exe" (binDir </> "cpl.exe")+ sh $ do+ fpath <- ls "../samples"+ cp fpath (samplesDir </> filename fpath)+ cp "../COPYING" (dir </> "COPYING")+ cp "../README.markdown" (dir </> "README.markdown")+ cp "../CHANGELOG.markdown" (dir </> "CHANGELOG.markdown")+ procs "7z" ["a", "-r", zipFile, dir] empty+ return ()