From b04727191595c0df8fa877c787b07aaac9b3d1de Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Sun, 4 Sep 2022 23:05:19 +0200
Subject: [PATCH] Split timer into quasar-timer package

Co-authored-by: Jan Beinke <git@janbeinke.com>
---
 cabal.project                                 |  1 +
 flake.nix                                     |  5 +-
 .ghci => quasar-timer/.ghci                   |  0
 quasar-timer/LICENSE                          | 26 ++++++
 quasar-timer/quasar-timer.cabal               | 90 +++++++++++++++++++
 {quasar => quasar-timer}/src/Quasar/Timer.hs  |  0
 .../src/Quasar/Timer/PosixTimer.hsc           |  0
 .../src/Quasar/Timer/TimerFd.hs               |  0
 quasar-timer/test/Spec.hs                     |  3 +
 quasar/quasar.cabal                           |  5 --
 10 files changed, 124 insertions(+), 6 deletions(-)
 rename .ghci => quasar-timer/.ghci (100%)
 create mode 100644 quasar-timer/LICENSE
 create mode 100644 quasar-timer/quasar-timer.cabal
 rename {quasar => quasar-timer}/src/Quasar/Timer.hs (100%)
 rename {quasar => quasar-timer}/src/Quasar/Timer/PosixTimer.hsc (100%)
 rename {quasar => quasar-timer}/src/Quasar/Timer/TimerFd.hs (100%)
 create mode 100644 quasar-timer/test/Spec.hs

diff --git a/cabal.project b/cabal.project
index 054da09..f966205 100644
--- a/cabal.project
+++ b/cabal.project
@@ -1,3 +1,4 @@
 packages:
   quasar
+  quasar-timer
   stm-ltd
diff --git a/flake.nix b/flake.nix
index a9ff650..52c081b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -24,6 +24,7 @@
         quasar = pkgs.haskellPackages.quasar;
         quasar_ghc92 = (getHaskellPackages "ghc92.").quasar;
         quasar_ghc94 = (getHaskellPackages "ghc94.").quasar;
+        quasar-timer = pkgs.haskellPackages.quasar-timer;
         stm-ltd = pkgs.haskellPackages.stm-ltd;
       }
     );
@@ -31,8 +32,9 @@
     overlay = final: prev: {
       haskell = prev.haskell // {
         packageOverrides = hfinal: hprev: prev.haskell.packageOverrides hfinal hprev // {
-          stm-ltd = hfinal.callCabal2nix "stm-ltd" ./stm-ltd {};
           quasar = hfinal.callCabal2nix "quasar" ./quasar {};
+          quasar-timer = hfinal.callCabal2nix "quasar-timer" ./quasar-timer {};
+          stm-ltd = hfinal.callCabal2nix "stm-ltd" ./stm-ltd {};
         };
       };
     };
@@ -43,6 +45,7 @@
       in pkgs.mkShell {
         inputsFrom = [
           self.packages.${system}.quasar.env
+          self.packages.${system}.quasar-timer.env
           self.packages.${system}.stm-ltd.env
         ];
         packages = [
diff --git a/.ghci b/quasar-timer/.ghci
similarity index 100%
rename from .ghci
rename to quasar-timer/.ghci
diff --git a/quasar-timer/LICENSE b/quasar-timer/LICENSE
new file mode 100644
index 0000000..21eaac4
--- /dev/null
+++ b/quasar-timer/LICENSE
@@ -0,0 +1,26 @@
+Copyright Jens Nolte (c) 2020
+
+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.
+
+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.
diff --git a/quasar-timer/quasar-timer.cabal b/quasar-timer/quasar-timer.cabal
new file mode 100644
index 0000000..236296b
--- /dev/null
+++ b/quasar-timer/quasar-timer.cabal
@@ -0,0 +1,90 @@
+cabal-version: 3.0
+
+name:           quasar-timer
+version:        0.1.0.0
+license:        BSD-2-Clause
+build-type:     Simple
+
+common shared-properties
+  default-extensions:
+    AllowAmbiguousTypes
+    BangPatterns
+    BlockArguments
+    ConstraintKinds
+    DataKinds
+    DefaultSignatures
+    DeriveAnyClass
+    DeriveGeneric
+    DerivingStrategies
+    DisambiguateRecordFields
+    DuplicateRecordFields
+    ExistentialQuantification
+    FlexibleContexts
+    FlexibleInstances
+    FunctionalDependencies
+    GADTs
+    GeneralizedNewtypeDeriving
+    ImportQualifiedPost
+    InstanceSigs
+    LambdaCase
+    -- Enable once 9.0.1 is required
+    --LexicalNegation
+    MultiParamTypeClasses
+    NamedFieldPuns
+    NoImplicitPrelude
+    NumericUnderscores
+    OverloadedStrings
+    PolyKinds
+    RankNTypes
+    ScopedTypeVariables
+    StandaloneDeriving
+    TupleSections
+    TypeApplications
+    TypeFamilies
+    TypeOperators
+    ViewPatterns
+  default-language: Haskell2010
+  ghc-options:
+    -Weverything
+    -Wno-all-missed-specialisations
+    -Wno-missing-safe-haskell-mode
+    -Wno-missing-kind-signatures
+    -Wno-missing-import-lists
+    -Wno-unsafe
+    -Werror=incomplete-patterns
+    -Werror=missing-fields
+    -Werror=missing-home-modules
+    -Werror=missing-methods
+
+common shared-executable-properties
+  import: shared-properties
+  ghc-options:
+    -threaded
+    -rtsopts
+    "-with-rtsopts=-N -I0"
+
+library
+  import: shared-properties
+  build-depends:
+    base >=4.7 && <5,
+    exceptions,
+    heaps,
+    quasar,
+    time,
+  exposed-modules:
+    Quasar.Timer
+    Quasar.Timer.PosixTimer
+    Quasar.Timer.TimerFd
+  hs-source-dirs:
+    src
+
+test-suite quasar-timer-test
+  import: shared-executable-properties
+  type: exitcode-stdio-1.0
+  build-depends:
+    base >=4.7 && <5,
+    hspec,
+  main-is: Spec.hs
+  other-modules:
+  hs-source-dirs:
+    test
diff --git a/quasar/src/Quasar/Timer.hs b/quasar-timer/src/Quasar/Timer.hs
similarity index 100%
rename from quasar/src/Quasar/Timer.hs
rename to quasar-timer/src/Quasar/Timer.hs
diff --git a/quasar/src/Quasar/Timer/PosixTimer.hsc b/quasar-timer/src/Quasar/Timer/PosixTimer.hsc
similarity index 100%
rename from quasar/src/Quasar/Timer/PosixTimer.hsc
rename to quasar-timer/src/Quasar/Timer/PosixTimer.hsc
diff --git a/quasar/src/Quasar/Timer/TimerFd.hs b/quasar-timer/src/Quasar/Timer/TimerFd.hs
similarity index 100%
rename from quasar/src/Quasar/Timer/TimerFd.hs
rename to quasar-timer/src/Quasar/Timer/TimerFd.hs
diff --git a/quasar-timer/test/Spec.hs b/quasar-timer/test/Spec.hs
new file mode 100644
index 0000000..e286043
--- /dev/null
+++ b/quasar-timer/test/Spec.hs
@@ -0,0 +1,3 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
+{-# OPTIONS_GHC -Wno-missing-export-lists #-}
+{-# OPTIONS_GHC -Wno-prepositive-qualified-module #-}
diff --git a/quasar/quasar.cabal b/quasar/quasar.cabal
index a71b688..3236bda 100644
--- a/quasar/quasar.cabal
+++ b/quasar/quasar.cabal
@@ -76,11 +76,9 @@ library
     exceptions,
     ghc-prim,
     hashable,
-    heaps,
     mtl,
     stm,
     stm-ltd,
-    time,
     transformers,
     transformers-base,
     unordered-containers,
@@ -103,9 +101,6 @@ library
     Quasar.PreludeExtras
     Quasar.PreludeSTM
     Quasar.Resources
-    Quasar.Timer
-    Quasar.Timer.PosixTimer
-    Quasar.Timer.TimerFd
     Quasar.Utils.Exceptions
     Quasar.Utils.ExtraT
     Quasar.Utils.ReaderLock
-- 
GitLab