#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:
parent
cdf7735a77
commit
b402798885
4 changed files with 46 additions and 261 deletions
|
@ -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
11
INSTALL
|
@ -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:
|
||||
|
|
22
SConstruct
22
SConstruct
|
@ -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']])
|
||||
|
||||
|
|
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue