3
# Low-level wrapper around libz, making it a Tcl package.
5
# Copyright (c) 2011 Andreas Kupries <andreas_kupries@users.sourceforge.net>
7
# Example of exporting a C-level stubs API through critcl v3, linking
8
# against an external library and/or baking in the library using its sources.
10
# # ## ### ##### ######## ############# #####################
13
package require Tcl 8.4
14
package require critcl 3 ;# stubs management
16
# # ## ### ##### ######## ############# #####################
19
critcl::license {Andreas Kupries} BSD
21
critcl::summary {A C-level wrapper of the zlib compression library}
23
This package wraps around zlib, making its
24
C-level functions available as Tcl package,
25
with stubs. No Tcl-binding is provided.
28
critcl::subject gzip zip zlib libz
29
critcl::subject compression {data compression}
30
critcl::subject decompression {data decompression}
32
# # ## ### ##### ######## ############# #####################
35
critcl::userconfig define mode {
36
choose the zlib to build and link against.
43
# # ## ### ##### ######## ############# #####################
46
critcl::api scspec ZEXTERN
48
# # ## ### ##### ######## ############# #####################
51
critcl::api function {const char *} zlibVersion {}
52
critcl::api function {const char *} zError {int err}
54
critcl::api function uLong crc32 {
60
critcl::api function uLong adler32 {
66
# # ## ### ##### ######## ############# #####################
67
## Deflate = Compression
69
critcl::api function int deflateInit_ {
72
{const char *} version
76
critcl::api function int deflateInit2_ {
83
{const char *} version
87
critcl::api function int deflate {
92
critcl::api function int deflateEnd {
96
critcl::api function int deflateSetDictionary {
102
critcl::api function int deflateCopy {
107
critcl::api function int deflateReset {
111
critcl::api function int deflateParams {
117
# # ## ### ##### ######## ############# #####################
120
critcl::api function int compress {
123
{const Bytef *} source
127
critcl::api function int compress2 {
130
{const Bytef *} source
135
# # ## ### ##### ######## ############# #####################
136
## Inflate = Decompression
138
critcl::api function int inflateInit_ {
140
{const char *} version
144
critcl::api function int inflateInit2_ {
147
{const char *} version
151
critcl::api function int inflate {
156
critcl::api function int inflateEnd {
160
critcl::api function int inflateSetDictionary {
166
critcl::api function int inflateSync {z_streamp stream}
167
critcl::api function int inflateReset {z_streamp stream}
169
# # ## ### ##### ######## ############# #####################
172
critcl::api function int uncompress {
175
{const Bytef *} source
179
# # ## ### ##### ######## ############# #####################
182
critcl::api function gzFile gzopen {
187
critcl::api function gzFile gzdopen {
192
critcl::api function int gzsetparams {
198
critcl::api function int gzread {
204
critcl::api function int gzwrite {
210
critcl::api function int gzprintf {
212
{const char *} format
216
critcl::api function int gzputs {
221
critcl::api function {char *} gzgets {
227
critcl::api function int gzputc {
232
critcl::api function int gzgetc {
236
critcl::api function int gzflush {
241
critcl::api function z_off_t gzseek {
247
critcl::api function int gzrewind {gzFile file}
248
critcl::api function z_off_t gztell {gzFile file}
249
critcl::api function int gzeof {gzFile file}
250
critcl::api function int gzclose {gzFile file}
252
critcl::api function {const char *} gzerror {
257
# # ## ### ##### ######## ############# #####################
260
namespace eval ::zlib {}
262
# Export zlib version number. Together with the 'variant' (see below),
263
# we know what this package is an interface to.
264
critcl::cproc ::zlib::version {} vstring {
265
return zlibVersion ();
268
critcl::cdata ::zlib::variant [critcl::userconfig query mode]
269
critcl::msg -nonewline " /[critcl::userconfig query mode]"
271
switch -exact -- [critcl::userconfig query mode] {
273
# Build against the local z/lib/z sources.
274
critcl::api header zlib/zconf.h
275
critcl::api header zlib/zlib.h
277
critcl::cheaders zlib/*.h
278
critcl::csources zlib/adler32.c
279
critcl::csources zlib/compress.c
280
critcl::csources zlib/crc32.c
281
critcl::csources zlib/deflate.c
282
critcl::csources zlib/gzclose.c
283
critcl::csources zlib/gzlib.c
284
critcl::csources zlib/gzread.c
285
critcl::csources zlib/gzwrite.c
286
critcl::csources zlib/infback.c
287
critcl::csources zlib/inffast.c
288
critcl::csources zlib/inflate.c
289
critcl::csources zlib/inftrees.c
290
critcl::csources zlib/trees.c
291
critcl::csources zlib/uncompr.c
292
critcl::csources zlib/zutil.c
295
# Build against system z/lib/z
297
critcl::api extheader zconf.h
298
critcl::api extheader zlib.h
300
critcl::clibraries -lz
303
# Build against system z/lib/z, statically
305
critcl::api extheader zconf.h
306
critcl::api extheader zlib.h
314
if {![file exists $p/libz.a]} continue
315
critcl::clibraries $p/libz.a
320
critcl::error "Unable to find static libz.a"
325
# ### ### ### ######### ######### #########
327
package provide zlib 1 ; # for libz 1.2.5