#2918870: Detect Win32 zlib in flat and include/lib directory structure, updated INSTALL and build documentation, removed obsolete Source\zlib\DEFLATE.H.

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6039 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
f0rt 2010-03-27 15:52:04 +00:00
parent cdf7735a77
commit b402798885
4 changed files with 46 additions and 261 deletions

View file

@ -8,20 +8,31 @@ Source code is available in \W{http://nsis.svn.sourceforge.net/viewvc/nsis/}{SVN
To build NSIS \W{http://www.python.org/}{Python}, \W{http://www.scons.org/}{SCons} must be installed. Currently, the supported version of SCons is version 0.98. Any version of Python above 1.6 is supported.
NSIS uses the \W{http://www.zlib.org}{zlib} compression library. As a
NSIS uses the \W{http://zlib.net}{zlib} compression library. As a
consequence the header and library files of zlib must be installed.
In case these zlib development files aren't present then they could be
installed via a package manager (apt-get, aptitude, rpm, yum) on POSIX
platforms. Another option is to build zlib from scratch and install it.
For Windows it is recommended to download \W{http://www.zlib.org}{zlib} from
\W{http://downloads.sourceforge.net/project/libpng/zlib/1.2.3/zlib123-dll.zip}{http://downloads.sourceforge.net/project/libpng/zlib/1.2.3/zlib123-dll.zip}.
For Windows it is recommended to download \W{http://zlib.net}{zlib} from
\W{http://prdownloads.sourceforge.net/libpng/zlib124-dll.zip?download}{http://prdownloads.sourceforge.net/libpng/zlib124-dll.zip?download}.
Extract the contents of this zip archive to a folder of your choice, e.g.
\c{C:\\Dev\\zlib-1.2.3} and set an environment variable named \c{ZLIB_W32} containing
this path. Alternatively the command line option ZLIB_W32 specifying the path
\c{C:\\dev\\zlib-1.2.4} and set an environment variable named \c{ZLIB_W32}
containingt his path.
\c C:\>set ZLIB_W32=C:\dev\zlib-1.2.4
Alternatively the command line option ZLIB_W32 specifying the path
could be passed with scons instead of the environment variable.
\c C:\dev\nsis>scons ZLIB_W32=C:\dev\zlib-1.2.4
The header and library files are assumed to be in %ZLIB_W32%. In addition
scons checks for zlib header files in %ZLIB_W32%\\include, the
import library zdll.lib in %ZLIB_W32%\\lib and the dynamic link library
zlib1.dll in %ZLIB_W32% respectively %ZLIB_W32%\\lib.
To build, open a console, change the working directory to the root directory of NSIS and type \c{scons}. That's it. For example:
\c C:\>cd dev\nsis

11
INSTALL
View file

@ -6,7 +6,8 @@ This is a trimmed version of Appendix "Building NSIS" of the documentation.
- Requirements
* Python version 1.6 and above (http://www.python.org/)
* SCons version 0.96.93 and above (http://www.scons.org/)
* SCons version 0.98 and above (http://www.scons.org/)
* zlib version 1.2.3 and above (http://www.zlib.net/)
* C compiler
- Optional Tools
@ -16,6 +17,14 @@ This is a trimmed version of Appendix "Building NSIS" of the documentation.
* wxWidgets 2.8 for NSIS Menu (http://www.wxwidgets.org)
WXWIN environment variable must be set to wxWidgets directory on Windows
- Preparation
* Unpack the zip archive of the downloaded zlib compiled DLL package
to a folder of your choice, e.g. C:\Dev\zlib-1.2.4 and set the
ZLIB_W32 environment variable, type:
set ZLIB_W32=C:\Dev\zlib-1.2.4
- Installing
* type:

View file

@ -376,8 +376,26 @@ defenv.Append(LIBPATH = Split('$APPEND_LIBPATH'))
defenv.Default('$BUILD_PREFIX')
if 'ZLIB_W32' in defenv:
defenv['ZLIB_W32_INC'] = os.path.join(defenv['ZLIB_W32'], 'include')
defenv['ZLIB_W32_LIB'] = os.path.join(defenv['ZLIB_W32'], 'lib')
defenv['ZLIB_W32_INC'] = os.path.dirname(str(
defenv.FindFile('zlib.h',
[
defenv['ZLIB_W32'],
os.path.join(defenv['ZLIB_W32'], 'include')
]
)
))
# Search for import library of zlib for VisualC or mingw
for importlib in ['zdll.lib', 'libzdll.a']:
defenv['ZLIB_W32_LIB'] = os.path.dirname(str(
defenv.FindFile(importlib,
[
defenv['ZLIB_W32'],
os.path.join(defenv['ZLIB_W32'], 'lib')
]
)
))
if defenv['ZLIB_W32_LIB']:
break
defenv['ZLIB_W32_DLL'] = defenv.FindFile('zlib1.dll',
[defenv['ZLIB_W32'], defenv['ZLIB_W32_LIB']])

View file

@ -1,253 +0,0 @@
/*
* This file is a part of the zlib compression module for NSIS.
*
* Copyright and license information can be found below.
* Modifications Copyright (C) 1999-2009 Nullsoft and Contributors
*
* The original zlib source code is available at
* http://www.zlib.net/
*
* This software is provided 'as-is', without any express or implied
* warranty.
*
* Reviewed for Unicode support by Jim Park -- 08/27/2007
*/
/* deflate.h -- internal compression state
* Copyright (C) 1995-1998 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#ifndef _DEFLATE_H
#define _DEFLATE_H
#include "ZUTIL.H"
/* ===========================================================================
* Internal compression state.
*/
#define LENGTH_CODES 29
/* number of length codes, not counting the special END_BLOCK code */
#define LITERALS 256
/* number of literal bytes 0..255 */
#define L_CODES (LITERALS+1+LENGTH_CODES)
/* number of Literal or Length codes, including the END_BLOCK code */
#define D_CODES 30
/* number of distance codes */
#define BL_CODES 19
/* number of codes used to transfer the bit lengths */
#define HEAP_SIZE (2*L_CODES+1)
/* maximum heap size */
#define MAX_BITS 15
/* All codes must not exceed MAX_BITS bits */
#define INIT_STATE 42
#define BUSY_STATE 113
#define FINISH_STATE 666
/* Stream status */
/* Data structure describing a single value and its code string. */
typedef struct ct_data_s {
union {
ush freq; /* frequency count */
ush code; /* bit string */
} fc;
union {
ush dad; /* father node in Huffman tree */
ush len; /* length of bit string */
} dl;
} FAR ct_data;
#define Freq fc.freq
#define Code fc.code
#define Dad dl.dad
#define Len dl.len
typedef struct static_tree_desc_s static_tree_desc;
typedef struct tree_desc_s {
ct_data *dyn_tree; /* the dynamic tree */
int max_code; /* largest code with non zero frequency */
static_tree_desc *stat_desc; /* the corresponding static tree */
} FAR tree_desc;
typedef ush Pos;
typedef Pos FAR Posf;
typedef unsigned IPos;
/* A Pos is an index in the character window. We use short instead of int to
* save space in the various tables. IPos is used only for parameter passing.
*/
typedef struct internal_state {
z_streamp strm; /* pointer back to this zlib stream */
int status; /* as the name implies */
Bytef *pending_buf; /* output still pending */
ulg pending_buf_size; /* size of pending_buf */
Bytef *pending_out; /* next pending byte to output to the stream */
int pending; /* nb of bytes in the pending buffer */
int noheader; /* suppress zlib header and adler32 */
Byte method; /* STORED (for zip only) or DEFLATED */
int last_flush; /* value of flush param for previous deflate call */
/* used by deflate.c: */
uInt w_size; /* LZ77 window size (32K by default) */
uInt w_bits; /* log2(w_size) (8..16) */
uInt w_mask; /* w_size - 1 */
Bytef *window;
ulg window_size;
Posf *prev;
Posf *head; /* Heads of the hash chains or NIL. */
uInt ins_h; /* hash index of string to be inserted */
uInt hash_size; /* number of elements in hash table */
uInt hash_bits; /* log2(hash_size) */
uInt hash_mask; /* hash_size-1 */
uInt hash_shift;
long block_start;
uInt match_length; /* length of best match */
IPos prev_match; /* previous match */
int match_available; /* set if previous match exists */
uInt strstart; /* start of string to insert */
uInt match_start; /* start of matching string */
uInt lookahead; /* number of valid bytes ahead in window */
uInt prev_length;
uInt max_chain_length;
uInt max_lazy_match;
# define max_insert_length max_lazy_match
int level; /* compression level (1..9) */
int strategy; /* favor or force Huffman coding*/
uInt good_match;
int nice_match; /* Stop searching when current match exceeds this */
struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
struct tree_desc_s l_desc; /* desc. for literal tree */
struct tree_desc_s d_desc; /* desc. for distance tree */
struct tree_desc_s bl_desc; /* desc. for bit length tree */
ush bl_count[MAX_BITS+1];
/* number of codes at each bit length for an optimal tree */
int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
int heap_len; /* number of elements in the heap */
int heap_max; /* element of largest frequency */
uch depth[2*L_CODES+1];
/* Depth of each subtree used as tie breaker for trees of equal frequency
*/
uchf *l_buf; /* buffer for literals or lengths */
uInt lit_bufsize;
uInt last_lit; /* running index in l_buf */
ushf *d_buf;
ulg opt_len; /* bit length of current block with optimal trees */
ulg static_len; /* bit length of current block with static trees */
uInt matches; /* number of string matches in current block */
int last_eob_len; /* bit length of EOB code for last block */
#ifdef DEBUG
ulg compressed_len; /* total bit length of compressed file mod 2^32 */
ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
#endif
ush bi_buf;
int bi_valid;
} FAR deflate_state;
/* Output a byte on the stream.
* IN assertion: there is enough room in pending_buf.
*/
#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
/* Minimum amount of lookahead, except at the end of the input file.
* See deflate.c for comments about the MIN_MATCH+1.
*/
#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
/* In order to simplify the code, particularly on 16 bit machines, match
* distances are limited to MAX_DIST instead of WSIZE.
*/
/* in trees.c */
void _tr_init OF((deflate_state *s));
int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len,
int eof));
void _tr_align OF((deflate_state *s));
void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
int eof));
#define d_code(dist) \
((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
/* Mapping from a distance to a distance code. dist is the distance - 1 and
* must not have side effects. _dist_code[256] and _dist_code[257] are never
* used.
*/
#ifndef DEBUG
/* Inline versions of _tr_tally for speed: */
#if defined(GEN_TREES_H) || !defined(STDC)
extern uch _length_code[];
extern uch _dist_code[];
#else
extern const uch _length_code[];
extern const uch _dist_code[];
#endif
# define _tr_tally_lit(s, c, flush) \
{ uch cc = (c); \
s->d_buf[s->last_lit] = 0; \
s->l_buf[s->last_lit++] = cc; \
s->dyn_ltree[cc].Freq++; \
flush = (s->last_lit == s->lit_bufsize-1); \
}
# define _tr_tally_dist(s, distance, length, flush) \
{ uch len = (length); \
ush dist = (distance); \
s->d_buf[s->last_lit] = dist; \
s->l_buf[s->last_lit++] = len; \
dist--; \
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
s->dyn_dtree[d_code(dist)].Freq++; \
flush = (s->last_lit == s->lit_bufsize-1); \
}
#else
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
# define _tr_tally_dist(s, distance, length, flush) \
flush = _tr_tally(s, distance, length)
#endif
#endif