summaryrefslogtreecommitdiff
path: root/erebos.cabal
blob: 3f6bb67057e909baab45642917246d35039bd6fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
Cabal-Version:       3.0

Name:                erebos
Version:             0.1.7
Synopsis:            Decentralized messaging and synchronization
Description:
    Library and simple CLI interface implementing the Erebos identity
    management, decentralized messaging and synchronization protocol, along
    with local storage.

    Erebos identity is based on locally stored cryptographic keys, all
    communication is end-to-end encrypted. Multiple devices can be attached to
    the same identity, after which they function interchangeably, without any
    one being in any way "primary"; messages and other state data are then
    synchronized automatically whenever the devices are able to connect with
    one another.

    See README for usage of the CLI tool.
License:             BSD-3-Clause
License-File:        LICENSE
Homepage:            https://erebosprotocol.net/erebos
Author:              Roman Smrž <roman.smrz@seznam.cz>
Maintainer:          roman.smrz@seznam.cz
Category:            Network
Stability:           experimental
Build-type:          Simple
Extra-Doc-Files:
    README.md
    CHANGELOG.md
Extra-Source-Files:
    src/Erebos/ICE/pjproject.h

Flag ice
    Description:    Enable peer discovery with ICE support using pjproject

Flag ci
    description:    Options for CI testing
    default: False
    manual: True

source-repository head
    type:       git
    location:   git://erebosprotocol.net/erebos

common common
    ghc-options:
        -Wall
        -fdefer-typed-holes

    if flag(ci)
        ghc-options:
            -Werror
            -- sometimes needed for backward/forward compatibility:
            -Wno-error=unused-imports

    build-depends:
        base ^>= { 4.15, 4.16, 4.17, 4.18, 4.19, 4.20 },

    default-extensions:
        DefaultSignatures
        ExistentialQuantification
        FlexibleContexts
        FlexibleInstances
        FunctionalDependencies
        GeneralizedNewtypeDeriving
        ImportQualifiedPost
        LambdaCase
        MultiWayIf
        RankNTypes
        RecordWildCards
        ScopedTypeVariables
        StandaloneDeriving
        TypeOperators
        TupleSections
        TypeApplications
        TypeFamilies
        TypeFamilyDependencies

    other-extensions:
        CPP
        ForeignFunctionInterface
        OverloadedStrings
        RecursiveDo
        TemplateHaskell
        UndecidableInstances

    if flag(ice)
        cpp-options: -DENABLE_ICE_SUPPORT

library
    import: common
    default-language:    Haskell2010

    hs-source-dirs:      src
    exposed-modules:
        Erebos.Attach
        Erebos.Chatroom
        Erebos.Contact
        Erebos.Conversation
        Erebos.Identity
        Erebos.Message
        Erebos.Network
        Erebos.Network.Channel
        Erebos.Network.Protocol
        Erebos.Object
        Erebos.Pairing
        Erebos.PubKey
        Erebos.Service
        Erebos.Set
        Erebos.State
        Erebos.Storable
        Erebos.Storage
        Erebos.Storage.Key
        Erebos.Storage.Merge
        Erebos.Sync

        -- Used by test tool:
        Erebos.Storage.Internal
    other-modules:
        Erebos.Flow
        Erebos.Object.Internal
        Erebos.Storage.Platform
        Erebos.Util

    c-sources:
        src/Erebos/Network/ifaddrs.c
    include-dirs:
        src

    if flag(ice)
        exposed-modules:
            Erebos.Discovery
            Erebos.ICE
        c-sources:
            src/Erebos/ICE/pjproject.c
        include-dirs:
            src/Erebos/ICE
        includes:
            src/Erebos/ICE/pjproject.h
        build-tool-depends:  c2hs:c2hs
        pkgconfig-depends:   libpjproject >= 2.9

    build-depends:
        async >=2.2 && <2.3,
        binary >=0.8 && <0.11,
        bytestring >=0.10 && <0.13,
        clock >=0.8 && < 0.9,
        containers >= 0.6 && <0.8,
        crypton ^>= { 1.0 },
        deepseq >= 1.4 && <1.6,
        directory >= 1.3 && <1.4,
        filepath >=1.4 && <1.6,
        fsnotify ^>= { 0.4 },
        hashable >=1.3 && <1.5,
        hashtables >=1.2 && <1.4,
        iproute >=1.7.12 && <1.8,
        memory >=0.14 && <0.19,
        mtl >=2.2 && <2.4,
        network >= 3.1 && <3.2,
        stm >=2.5 && <2.6,
        text >= 1.2 && <2.2,
        time >= 1.8 && <1.14,
        uuid >=1.3 && <1.4,
        zlib >=0.6 && <0.8

    if os(windows)
        hs-source-dirs: src/windows
        build-depends:
            Win32 ^>= { 2.14 },
    else
        hs-source-dirs: src/unix
        build-depends:
            unix ^>= { 2.7, 2.8 },

executable erebos
    import: common
    default-language:    Haskell2010
    hs-source-dirs:      main
    ghc-options:         -threaded

    main-is:             Main.hs
    other-modules:
        Paths_erebos
        Test
        Test.Service
        Version
        Version.Git
    autogen-modules:
        Paths_erebos

    build-depends:
        bytestring,
        crypton,
        directory,
        erebos,
        haskeline >=0.7 && <0.9,
        mtl,
        network,
        process >=1.6 && <1.7,
        template-haskell ^>= { 2.17, 2.18, 2.19, 2.20, 2.21, 2.22 },
        text,
        time,
        transformers >= 0.5 && <0.7,
        uuid,