Mark ENOLINK and EMULTIHOP as optional
[iolib.git] / iolib.asd
blob4ca6341471526fb73fbfe57f0f36848c823b0f0d
1 ;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*-
3 #.(unless (or #+asdf3.1 (version<= "3.1" (asdf-version)))
4     (error "You need ASDF >= 3.1 to load this system correctly."))
6 #-unix
7 (error "Unfortunately, IOlib lacks support for non-Unix OSes (like Windows).")
9 (defsystem :iolib/syscalls
10   :description "Syscalls and foreign types."
11   :author "Stelian Ionescu <sionescu@cddr.org>"
12   :licence "MIT"
13   :version (:read-file-form "version.sexp")
14   :defsystem-depends-on (:iolib.asdf :iolib.conf :cffi-grovel)
15   :depends-on (:trivial-features :cffi :iolib.base)
16   :around-compile "iolib/asdf:compile-wrapper"
17   :encoding :utf-8
18   :pathname "src/syscalls/"
19   :components
20   ((:file "pkgdcl")
21    #+unix
22    (:file "syscall-path-strings" :pathname "unix-syscall-path-strings")
23    ;; Platform-specific files
24    (:cffi-grovel-file "ffi-types" :pathname #+unix "ffi-types-unix")
25    (:file "conditions")
26    (:file "os-conditions" :pathname #+unix "os-conditions-unix")
27    (:file "designators")
28    (:file "early")
29    (:file "ffi-functions" :pathname #+unix "ffi-functions-unix"))
30   :serial t)
32 (defsystem :iolib/multiplex
33   :description "I/O multiplexing library."
34   :author "Stelian Ionescu <sionescu@cddr.org>"
35   :licence "MIT"
36   :version (:read-file-form "version.sexp")
37   :defsystem-depends-on (:iolib.asdf :iolib.conf)
38   :depends-on (:iolib.base :iolib/syscalls :cffi)
39   :around-compile "iolib/asdf:compile-wrapper"
40   :encoding :utf-8
41   :pathname "src/multiplex/"
42   :components
43   ((:file "pkgdcl")
45    ;; Scheduler
46    (:file "utils" :depends-on ("pkgdcl"))
47    (:file "timers" :depends-on ("pkgdcl"))
48    (:file "queue" :depends-on ("pkgdcl"))
49    (:file "scheduler" :depends-on ("pkgdcl" "timers" "queue"))
51    ;; Event loop
52    (:file "fd-entry" :depends-on ("pkgdcl" "timers"))
53    (:file "multiplexer" :depends-on ("pkgdcl" "utils" "fd-entry"))
54    (:file "event-loop" :depends-on ("pkgdcl" "timers" "queue" "scheduler"
55                                              "fd-entry" "multiplexer"))
57    ;; FD wait
58    (:file "fd-wait" :depends-on ("pkgdcl" "utils"))
60    ;; Event sources
61    (:file "backend-select"
62     :depends-on ("pkgdcl" "utils" "fd-entry" "multiplexer"))
63    #+linux
64    (:file "backend-epoll"
65     :depends-on ("pkgdcl" "utils" "fd-entry" "multiplexer"))
66    #+bsd
67    (:file "backend-kqueue"
68     :depends-on ("pkgdcl" "utils" "fd-entry" "multiplexer"))
69    (:file "detect"
70     :depends-on ("pkgdcl" "multiplexer" "backend-select"
71                           #+linux "backend-epoll" #+bsd "backend-kqueue"))))
73 (defsystem :iolib/streams
74   :description "Gray streams."
75   :author "Stelian Ionescu <sionescu@cddr.org>"
76   :licence "MIT"
77   :version (:read-file-form "version.sexp")
78   :defsystem-depends-on (:iolib.asdf :iolib.conf)
79   :depends-on (:iolib.base :iolib/multiplex :cffi)
80   :around-compile "iolib/asdf:compile-wrapper"
81   :encoding :utf-8
82   :pathname "src/streams/gray/"
83   :components
84   ((:file "pkgdcl")
85    (:file "classes" :depends-on ("pkgdcl"))
86    (:file "conditions" :depends-on ("pkgdcl"))
87    (:file "buffer" :depends-on ("pkgdcl" "classes"))
88    (:file "fd-mixin" :depends-on ("pkgdcl" "classes"))
89    (:file "io-helpers"
90      :depends-on ("pkgdcl" "classes" "conditions" "buffer" "fd-mixin"))
91    (:file "gray-stream-methods"
92      :depends-on ("pkgdcl" "classes" "conditions" "buffer" "fd-mixin"
93                   "io-helpers"))))
95 (defsystem :iolib/zstreams
96   :description "Zeta streams."
97   :author "Stelian Ionescu <sionescu@cddr.org>"
98   :licence "MIT"
99   :version (:read-file-form "version.sexp")
100   :defsystem-depends-on (:iolib.asdf)
101   :depends-on (:iolib.base :iolib/syscalls :iolib/pathnames :cffi :bordeaux-threads)
102   :around-compile "iolib.asdf:compile-wrapper"
103   :encoding :utf-8
104   :pathname "src/streams/zeta/"
105   :components
106   ((:file "pkgdcl")
107    (:file "types" :depends-on ("pkgdcl"))
108    (:file "conditions" :depends-on ("pkgdcl"))
110    ;; Platform-specific files
111    (:file "ffi-functions" :pathname #+unix "ffi-functions-unix"
112      :depends-on ("pkgdcl" "conditions"))
114    ;; Device interface definition
115    (:file "device" :depends-on ("pkgdcl" "types"))
117    ;; Low-level buffers
118    (:file "iobuf" :depends-on ("pkgdcl" "types"))
120    ;; Streams
121    (:file "stream" :depends-on ("pkgdcl" "types" "conditions" "device" "iobuf"))
123    ;; Devices
124    (:file "file" :pathname #+unix "file-unix"
125      :depends-on ("pkgdcl" "types" "conditions" "ffi-functions" "device" "stream"))))
127 (defsystem :iolib/sockets
128   :description "Socket library."
129   :author "Stelian Ionescu <sionescu@cddr.org>"
130   :licence "MIT"
131   :version (:read-file-form "version.sexp")
132   :defsystem-depends-on (:iolib.asdf :iolib.conf :cffi-grovel)
133   :depends-on (:iolib.base :iolib/syscalls :iolib/streams
134                :babel :cffi :bordeaux-threads
135                :idna :swap-bytes)
136   :around-compile "iolib/asdf:compile-wrapper"
137   :encoding :utf-8
138   :pathname "src/sockets/"
139   :components
140   ((:file "pkgdcl")
141    (:cffi-grovel-file "grovel" :depends-on ("pkgdcl"))
142    (:file "conditions" :depends-on ("pkgdcl" "grovel"))
143    (:file "bsd" :depends-on ("pkgdcl" "grovel" "conditions"))
144    (:file "common" :depends-on ("pkgdcl" "grovel" "bsd"))
145    (:file "config" :depends-on ("pkgdcl" "grovel" "bsd"))
147    (:file "iface" :depends-on ("pkgdcl" "grovel" "bsd" "common"))
149    (:file "address" :depends-on ("pkgdcl" "common"))
150    (:file "address-predicates" :depends-on ("pkgdcl" "common" "address"))
151    (:file "address-arithmetic" :depends-on ("pkgdcl" "common" "address" "address-predicates"))
153    (:file "base-sockets" :depends-on ("pkgdcl" "bsd" "common" "config"))
154    (:file "socket-options"
155      :depends-on ("pkgdcl" "grovel" "conditions" "bsd" "common" "config" "base-sockets"))
157    ;; Local file configuration (/etc/hosts etc...)
158    (:file "etc-files" :pathname "namedb/etc-files"
159      :depends-on ("pkgdcl"))
160    (:file "file-monitor" :pathname "namedb/file-monitor"
161      :depends-on ("pkgdcl"))
162    (:file "protocols" :pathname "namedb/protocols"
163      :depends-on ("pkgdcl" "common" "etc-files" "file-monitor"))
164    (:file "services" :pathname "namedb/services"
165      :depends-on ("pkgdcl" "common" "etc-files" "file-monitor"))
166    (:file "hosts" :pathname "namedb/hosts"
167      :depends-on ("pkgdcl" "address" "address-predicates" "etc-files" "file-monitor"))
169    (:file "socket-methods"
170      :depends-on ("pkgdcl" "grovel" "conditions" "bsd" "common" "config"
171                   "address" "address-predicates" "base-sockets" "socket-options"
172                   "protocols" "services"))
173    (:file "make-socket"
174      :depends-on ("pkgdcl" "grovel" "common" "config" "address" "address-predicates"
175                   "base-sockets" "socket-options" "services" "socket-methods"))
177    ;; DNS client
178    (:file "dns-common" :pathname "dns/common"
179      :depends-on ("pkgdcl" "common"))
180    (:file "nameservers" :pathname "dns/nameservers"
181      :depends-on ("pkgdcl" "address" "address-predicates" "etc-files" "file-monitor"))
182    (:file "message":pathname "dns/message"
183      :depends-on ("pkgdcl" "common" "dns-common"))
184    (:file "query" :pathname "dns/query"
185      :depends-on ("pkgdcl" "conditions" "address" "address-predicates"
186                   "socket-options" "socket-methods" "make-socket" "dns-common"
187                   "nameservers" "message"))
188    (:file "dns-conditions" :pathname "dns/conditions"
189      :depends-on ("pkgdcl"))
190    (:file "lookup" :pathname "dns/lookup"
191      :depends-on ("pkgdcl" "address" "address-predicates" "file-monitor" "hosts"
192                   "nameservers" "message" "query" "dns-conditions"))))
194 (defsystem :iolib/trivial-sockets
195   :description "Trivial-Sockets compatibility layer."
196   :author "Dan Barlow <dan@telent.net>"
197   :maintainer "Stelian Ionescu <sionescu@cddr.org>"
198   :licence "MIT"
199   :version (:read-file-form "version.sexp")
200   :defsystem-depends-on (:iolib.asdf :iolib.conf)
201   :depends-on (:iolib.base :iolib/sockets)
202   :around-compile "iolib/asdf:compile-wrapper"
203   :encoding :utf-8
204   :pathname "src/sockets/"
205   :components
206   ((:file "trivial-sockets")))
208 (defsystem :iolib/pathnames
209   :description "New pathnames."
210   :author "Stelian Ionescu <sionescu@cddr.org>"
211   :licence "MIT"
212   :version (:read-file-form "version.sexp")
213   :defsystem-depends-on (:iolib.asdf :iolib.conf)
214   :depends-on (:iolib.base :iolib/syscalls)
215   :around-compile "iolib/asdf:compile-wrapper"
216   :encoding :utf-8
217   :pathname "src/pathnames/"
218   :components
219   ((:file "pkgdcl")
220    (:file "file-path")
221    (:file "file-path-os" :pathname #+unix "file-path-unix"))
222   :serial t)
224 (defsystem :iolib/os
225   :description "OS interface."
226   :author "Stelian Ionescu <sionescu@cddr.org>"
227   :licence "MIT"
228   :version (:read-file-form "version.sexp")
229   :defsystem-depends-on (:iolib.asdf :iolib.conf :cffi-grovel)
230   :depends-on (:iolib.base :iolib/syscalls
231                :iolib/streams :iolib/pathnames)
232   :around-compile "iolib/asdf:compile-wrapper"
233   :encoding :utf-8
234   :pathname "src/os/"
235   :components
236   ((:file "pkgdcl")
237    (:file "os" :pathname #+unix "os-unix")
238    (:cffi-grovel-file "ffi-types" :pathname #+unix "ffi-types-unix")
239    (:file "ffi-functions" :pathname #+unix "ffi-functions-unix")
240    (:file "create-process" :pathname #+unix "create-process-unix"))
241   :serial t)
243 (defsystem :iolib
244   :description "I/O library."
245   :author "Stelian Ionescu <sionescu@cddr.org>"
246   :licence "MIT"
247   :version (:read-file-form "version.sexp")
248   :defsystem-depends-on (:iolib.asdf :iolib.conf)
249   :depends-on (:iolib.base :iolib/multiplex :iolib/streams :iolib/sockets)
250   :around-compile "iolib/asdf:compile-wrapper"
251   :encoding :utf-8
252   :pathname "src/iolib/"
253   :components ((:file "pkgdcl"))
254   :in-order-to ((test-op (test-op :iolib/tests))))
256 (defsystem :iolib/tests
257   :description "IOLib test suite."
258   :author "Luis Oliveira <loliveira@common-lisp.net>"
259   :maintainer "Stelian Ionescu <sionescu@cddr.org>"
260   :licence "MIT"
261   :version (:read-file-form "version.sexp")
262   :defsystem-depends-on (:iolib.base)
263   :depends-on (:fiveam :iolib :iolib/pathnames)
264   :around-compile "iolib/asdf:compile-wrapper"
265   :encoding :utf-8
266   :pathname "tests/"
267   :components
268   ((:file "pkgdcl")
269    (:file "defsuites" :depends-on ("pkgdcl"))
270    (:file "base" :depends-on ("pkgdcl" "defsuites"))
271    (:file "file-paths-os" :depends-on ("pkgdcl" "defsuites")
272     :pathname #+unix "file-paths-unix")
273    (:file "multiplex" :depends-on ("pkgdcl" "defsuites"))
274    (:file "streams" :depends-on ("pkgdcl" "defsuites"))
275    (:file "sockets" :depends-on ("pkgdcl" "defsuites")))
276   :perform (test-op (o c) (symbol-call :5am :run! :iolib)))