From b402798885d4f33de913a1331c111c93fe1cba77 Mon Sep 17 00:00:00 2001 From: f0rt Date: Sat, 27 Mar 2010 15:52:04 +0000 Subject: [PATCH] #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 --- Docs/src/build.but | 21 +++- INSTALL | 11 +- SConstruct | 22 +++- Source/zlib/DEFLATE.H | 253 ------------------------------------------ 4 files changed, 46 insertions(+), 261 deletions(-) delete mode 100644 Source/zlib/DEFLATE.H diff --git a/Docs/src/build.but b/Docs/src/build.but index fa05aed1..b6ec882e 100644 --- a/Docs/src/build.but +++ b/Docs/src/build.but @@ -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 diff --git a/INSTALL b/INSTALL index df1b2881..06983150 100644 --- a/INSTALL +++ b/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: diff --git a/SConstruct b/SConstruct index 77625085..f8dc3428 100644 --- a/SConstruct +++ b/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']]) diff --git a/Source/zlib/DEFLATE.H b/Source/zlib/DEFLATE.H deleted file mode 100644 index 91156e5d..00000000 --- a/Source/zlib/DEFLATE.H +++ /dev/null @@ -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