forked from Imagelibrary/rtems
This commit was manufactured by cvs2svn to create branch 'rtems-4-8-branch'.
Sprout from master 2007-09-19 06:34:25 UTC Ralf Corsepius <ralf.corsepius@rtems.org> 'Regenerate.' Cherrypick from shttpd 2007-06-11 13:24:29 UTC Ralf Corsepius <ralf.corsepius@rtems.org> 'Import from shttpd-1.37.': cpukit/shttpd/auth.c cpukit/shttpd/cgi.c cpukit/shttpd/compat_unix.c cpukit/shttpd/compat_unix.h cpukit/shttpd/compat_win32.c cpukit/shttpd/compat_win32.h cpukit/shttpd/compat_wince.c cpukit/shttpd/compat_wince.h cpukit/shttpd/config.c cpukit/shttpd/io.h cpukit/shttpd/io_cgi.c cpukit/shttpd/io_dir.c cpukit/shttpd/io_emb.c cpukit/shttpd/io_file.c cpukit/shttpd/io_socket.c cpukit/shttpd/io_ssl.c cpukit/shttpd/llist.h cpukit/shttpd/md5.c cpukit/shttpd/md5.h cpukit/shttpd/mime_type.c cpukit/shttpd/shttpd.1 cpukit/shttpd/shttpd.c cpukit/shttpd/shttpd.h cpukit/shttpd/ssl.h cpukit/shttpd/standalone.c cpukit/shttpd/std_includes.h Cherrypick from SLAC 2007-07-25 05:22:23 UTC Ralf Corsepius <ralf.corsepius@rtems.org> 'Import from rtems-nfs-1.5.tgz.': c/src/nfsclient/LICENSE c/src/nfsclient/README c/src/nfsclient/proto/mount_prot.h c/src/nfsclient/proto/mount_prot.x c/src/nfsclient/proto/mount_prot_xdr.c c/src/nfsclient/proto/nfs_prot.h c/src/nfsclient/proto/nfs_prot.x c/src/nfsclient/proto/nfs_prot_xdr.c c/src/nfsclient/rfc1094.txt c/src/nfsclient/rtems-filesystem-patch c/src/nfsclient/src/cexphelp.c c/src/nfsclient/src/librtemsNfs.h c/src/nfsclient/src/nfs.c c/src/nfsclient/src/nfs.modini.c c/src/nfsclient/src/nfsTest.c c/src/nfsclient/src/rpcio.h c/src/nfsclient/src/rpcio.modini.c c/src/nfsclient/src/sock_mbuf.c c/src/nfsclient/src/xdr_mbuf.c Cherrypick from zlib 2005-10-28 07:22:42 UTC Ralf Corsepius <ralf.corsepius@rtems.org> 'Import of zlib-1.2.2.2.tar.gz': cpukit/zlib/FAQ cpukit/zlib/INDEX cpukit/zlib/README cpukit/zlib/algorithm.txt cpukit/zlib/crc32.h cpukit/zlib/infback.c cpukit/zlib/inffast.c cpukit/zlib/inffast.h cpukit/zlib/inffixed.h cpukit/zlib/inflate.c cpukit/zlib/inflate.h cpukit/zlib/trees.h cpukit/zlib/zlib.3 cpukit/zlib/zlib.h Cherrypick from rtemsdoc-4-5-branch 1997-05-27 12:40:10 UTC Joel Sherrill <joel.sherrill@OARcorp.com> 'base RTEMS documentation': doc/common/treedef.tex Delete: contrib/crossrpms/cygwin/.cvsignore contrib/crossrpms/cygwin/Makefile.am contrib/crossrpms/cygwin/binutils.am contrib/crossrpms/cygwin/gcc-prep.add contrib/crossrpms/cygwin/gcc.am contrib/crossrpms/cygwin/i686/.cvsignore contrib/crossrpms/cygwin/i686/Makefile.am contrib/crossrpms/cygwin/i686/binutils-sources.add contrib/crossrpms/cygwin/i686/gcc-sources.add contrib/crossrpms/cygwin/i686/libncurses-devel.add contrib/crossrpms/cygwin/i686/libs.add contrib/crossrpms/cygwin/i686/target-libncurses-devel.add contrib/crossrpms/cygwin/i686/target-libs.add contrib/crossrpms/cygwin/i686/target-w32api.add contrib/crossrpms/cygwin/i686/target-zlib.add contrib/crossrpms/cygwin/i686/w32api.add contrib/crossrpms/cygwin/i686/zlib.add contrib/crossrpms/freebsd5.2/.cvsignore contrib/crossrpms/freebsd5.2/Makefile.am contrib/crossrpms/freebsd5.2/binutils.am contrib/crossrpms/freebsd5.2/gcc-prep.add contrib/crossrpms/freebsd5.2/gcc.am contrib/crossrpms/freebsd5.2/i586/.cvsignore contrib/crossrpms/freebsd5.2/i586/Makefile.am contrib/crossrpms/freebsd5.2/i586/binutils-sources.add contrib/crossrpms/freebsd5.2/i586/gcc-prep.add contrib/crossrpms/freebsd5.2/i586/gcc-sources.add contrib/crossrpms/freebsd5.2/i586/libs.add contrib/crossrpms/freebsd5.2/i586/target-libs.add contrib/crossrpms/freebsd6.0/.cvsignore contrib/crossrpms/freebsd6.0/Makefile.am contrib/crossrpms/freebsd6.0/binutils.am contrib/crossrpms/freebsd6.0/gcc-prep.add contrib/crossrpms/freebsd6.0/gcc.am contrib/crossrpms/freebsd6.0/i586/.cvsignore contrib/crossrpms/freebsd6.0/i586/Makefile.am contrib/crossrpms/freebsd6.0/i586/binutils-sources.add contrib/crossrpms/freebsd6.0/i586/gcc-sources.add contrib/crossrpms/freebsd6.0/i586/libs.add contrib/crossrpms/freebsd6.0/i586/target-libs.add contrib/crossrpms/freebsd6.1/.cvsignore contrib/crossrpms/freebsd6.1/Makefile.am contrib/crossrpms/freebsd6.1/binutils.am contrib/crossrpms/freebsd6.1/gcc-prep.add contrib/crossrpms/freebsd6.1/gcc.am contrib/crossrpms/freebsd6.1/i586/.cvsignore contrib/crossrpms/freebsd6.1/i586/Makefile.am contrib/crossrpms/freebsd6.1/i586/binutils-sources.add contrib/crossrpms/freebsd6.1/i586/gcc-sources.add contrib/crossrpms/freebsd6.1/i586/libs.add contrib/crossrpms/freebsd6.1/i586/target-libs.add contrib/crossrpms/freebsd6.2/.cvsignore contrib/crossrpms/freebsd6.2/Makefile.am contrib/crossrpms/freebsd6.2/binutils.am contrib/crossrpms/freebsd6.2/gcc-prep.add contrib/crossrpms/freebsd6.2/gcc.am contrib/crossrpms/freebsd6.2/i586/.cvsignore contrib/crossrpms/freebsd6.2/i586/Makefile.am contrib/crossrpms/freebsd6.2/i586/binutils-sources.add contrib/crossrpms/freebsd6.2/i586/gcc-sources.add contrib/crossrpms/freebsd6.2/i586/libs.add contrib/crossrpms/freebsd6.2/i586/target-libs.add contrib/crossrpms/mingw32/.cvsignore contrib/crossrpms/mingw32/Makefile.am contrib/crossrpms/mingw32/binutils.am contrib/crossrpms/mingw32/gcc-prep.add contrib/crossrpms/mingw32/gcc.am contrib/crossrpms/mingw32/i686/.cvsignore contrib/crossrpms/mingw32/i686/Makefile.am contrib/crossrpms/mingw32/i686/binutils-sources.add contrib/crossrpms/mingw32/i686/gcc-sources.add contrib/crossrpms/mingw32/i686/libs.add contrib/crossrpms/mingw32/i686/target-libs.add contrib/crossrpms/mingw32/i686/target-w32api.add contrib/crossrpms/mingw32/i686/w32api.add contrib/crossrpms/solaris2.7/.cvsignore contrib/crossrpms/solaris2.7/Makefile.am contrib/crossrpms/solaris2.7/binutils.am contrib/crossrpms/solaris2.7/gcc-prep.add contrib/crossrpms/solaris2.7/gcc.am contrib/crossrpms/solaris2.7/sparc/.cvsignore contrib/crossrpms/solaris2.7/sparc/Makefile.am contrib/crossrpms/solaris2.7/sparc/binutils-sources.add contrib/crossrpms/solaris2.7/sparc/gcc-sources.add contrib/crossrpms/solaris2.7/sparc/libs.add contrib/crossrpms/solaris2.7/sparc/target-libs.add cpukit/zlib/doc/rfc1950.txt cpukit/zlib/doc/rfc1951.txt cpukit/zlib/doc/rfc1952.txt cpukit/zlib/doc/txtvsbin.txt cpukit/zlib/examples/zran.c cpukit/zlib/old/as400/bndsrc cpukit/zlib/old/as400/compile.clp cpukit/zlib/old/as400/readme.txt cpukit/zlib/old/visualc6/README.txt cpukit/zlib/old/visualc6/example.dsp cpukit/zlib/old/visualc6/minigzip.dsp cpukit/zlib/old/visualc6/zlib.dsw cpukit/zlib/zlib.pc.in cpukit/zlib/zlib2ansi
This commit is contained in:
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,3 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
SUBDIRS = i686
|
||||
@@ -1,31 +0,0 @@
|
||||
EXTRA_DIST += binutils-sources.add
|
||||
|
||||
BINUTILS_OPTS =
|
||||
|
||||
BINUTILS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/prep.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/build.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/rpm-install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/target-binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/base-binutils.add
|
||||
|
||||
$(TARGET)-binutils.spec.in: $(BINUTILS_SUBPACKAGES) Makefile.am $(srcdir)/binutils-sources.add
|
||||
cat $(BINUTILS_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/binutils-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
| $(MKSPEC0) \
|
||||
-e "s/[@]BINUTILS_VERS[@]/$(BINUTILS_VERS)/g" \
|
||||
-e "s/[@]BINUTILS_PKGVERS[@]/$(BINUTILS_PKGVERS)/g" \
|
||||
-e "s/[@]BINUTILS_RPMREL[@]/$(BINUTILS_RPMREL)/g" \
|
||||
> $(TARGET)-binutils.spec.in
|
||||
CLEANFILES += $(TARGET)-binutils.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-binutils.spec: $(TARGET)-binutils.spec.in
|
||||
$(MKSPEC) $(TARGET)-binutils.spec.in | $(SPECSTRIP) $(BINUTILS_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-binutils.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-binutils.spec
|
||||
|
||||
EXTRA_DIST += $(BINUTILS_SUBPACKAGES)
|
||||
@@ -1,4 +0,0 @@
|
||||
# cygwin patches can't be directly applied through rpm
|
||||
cd gcc-%{gcc_pkgvers}
|
||||
patch -p1 -t < %{SOURCE60} || true
|
||||
cd ..
|
||||
@@ -1,39 +0,0 @@
|
||||
EXTRA_DIST += $(srcdir)/../gcc-prep.add
|
||||
EXTRA_DIST += $(srcdir)/gcc-sources.add
|
||||
|
||||
GCC_OPTS =
|
||||
|
||||
GCC_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/gccnewlib.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/prep.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/build.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-c++.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-objc.add
|
||||
|
||||
$(TARGET)-gcc.spec.in: $(GCC_SUBPACKAGES) Makefile.am $(srcdir)/gcc-sources.add $(srcdir)/../gcc-prep.add
|
||||
cat $(GCC_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/gcc-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "/[@]PREP[@]/r $(srcdir)/../gcc-prep.add" \
|
||||
-e "/[@]PREP[@]/d" \
|
||||
-e "s/[@]GCC_VERS[@]/$(GCC_VERS)/g" \
|
||||
-e "s/[@]GCC_PKGVERS[@]/$(GCC_PKGVERS)/g" \
|
||||
-e "s/[@]GCC_RPMREL[@]/$(GCC_RPMREL)/g" \
|
||||
-e "/^BuildRequ.*[@]tool_target[@]-w32api-sys-root/d" \
|
||||
-e "s,[@]tool_target[@]-w32api-sys-root,@tool_target@-w32api," \
|
||||
| $(MKSPEC0) > $(TARGET)-gcc.spec.in
|
||||
CLEANFILES += $(TARGET)-gcc.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-gcc.spec: $(TARGET)-gcc.spec.in
|
||||
$(MKSPEC) $(TARGET)-gcc.spec.in | $(SPECSTRIP) $(GCC_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-gcc.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-gcc.spec
|
||||
|
||||
EXTRA_DIST += $(GCC_SUBPACKAGES)
|
||||
@@ -1,4 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.spec
|
||||
*.spec.in
|
||||
@@ -1,116 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
TARGET = i686-pc-cygwin
|
||||
|
||||
include $(top_srcdir)/mkspec.am
|
||||
|
||||
CYGWIN_VERS = 1.5.24-2
|
||||
CYGWIN_RPMREL = 0.20070724.1
|
||||
EXTRA_DIST += libs.add
|
||||
EXTRA_DIST += target-libs.add
|
||||
|
||||
LIBS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/libs.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/target-libs.add
|
||||
|
||||
$(TARGET)-libs.spec.in: $(LIBS_SUBPACKAGES) Makefile.am
|
||||
cat $(LIBS_SUBPACKAGES) | sed \
|
||||
-e "s/[@]CYGWIN_VERS[@]/$(CYGWIN_VERS)/g" \
|
||||
-e "s/[@]CYGWIN_RPMREL[@]/$(CYGWIN_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{cygwin_rpmvers},g" \
|
||||
| $(MKSPEC0) > $(TARGET)-libs.spec.in
|
||||
CLEANFILES += $(TARGET)-libs.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-libs.spec: $(TARGET)-libs.spec.in
|
||||
$(MKSPEC) $(TARGET)-libs.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-libs.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-libs.spec
|
||||
|
||||
|
||||
W32API_VERS = 3.8-1
|
||||
W32API_RPMREL = 0.20070724.1
|
||||
EXTRA_DIST += target-w32api.add
|
||||
EXTRA_DIST += w32api.add
|
||||
|
||||
W32API_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
W32API_SUBPACKAGES += $(srcdir)/w32api.add
|
||||
W32API_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
W32API_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
W32API_SUBPACKAGES += $(srcdir)/target-w32api.add
|
||||
|
||||
$(TARGET)-w32api.spec.in: $(W32API_SUBPACKAGES) Makefile.am
|
||||
cat $(W32API_SUBPACKAGES) | sed \
|
||||
-e "s/[@]W32API_VERS[@]/$(W32API_VERS)/g" \
|
||||
-e "s/[@]W32API_RPMREL[@]/$(W32API_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{w32api_rpmvers},g" \
|
||||
| $(MKSPEC0) > $(TARGET)-w32api.spec.in
|
||||
CLEANFILES += $(TARGET)-w32api.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-w32api.spec: $(TARGET)-w32api.spec.in
|
||||
$(MKSPEC) $(TARGET)-w32api.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-w32api.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-w32api.spec
|
||||
|
||||
NCURSES_VERS = 5.5-3
|
||||
NCURSES_RPMREL = 0.20070726.1
|
||||
EXTRA_DIST += target-libncurses-devel.add
|
||||
EXTRA_DIST += libncurses-devel.add
|
||||
|
||||
NCURSES_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
NCURSES_SUBPACKAGES += $(srcdir)/libncurses-devel.add
|
||||
NCURSES_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
NCURSES_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
NCURSES_SUBPACKAGES += $(srcdir)/target-libncurses-devel.add
|
||||
|
||||
$(TARGET)-libncurses-devel.spec.in: $(NCURSES_SUBPACKAGES) Makefile.am
|
||||
cat $(NCURSES_SUBPACKAGES) | sed \
|
||||
-e "s/[@]NCURSES_VERS[@]/$(NCURSES_VERS)/g" \
|
||||
-e "s/[@]NCURSES_RPMREL[@]/$(NCURSES_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{libncurses_devel_rpmvers},g" \
|
||||
| $(MKSPEC0) > $(TARGET)-libncurses-devel.spec.in
|
||||
CLEANFILES += $(TARGET)-libncurses-devel.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-libncurses-devel.spec: $(TARGET)-libncurses-devel.spec.in
|
||||
$(MKSPEC) $(TARGET)-libncurses-devel.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-libncurses-devel.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-libncurses-devel.spec
|
||||
|
||||
ZLIB_VERS = 1.2.3-2
|
||||
ZLIB_RPMREL = 0.20070724.1
|
||||
EXTRA_DIST += target-zlib.add
|
||||
EXTRA_DIST += zlib.add
|
||||
|
||||
ZLIB_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
ZLIB_SUBPACKAGES += $(srcdir)/zlib.add
|
||||
ZLIB_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
ZLIB_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
ZLIB_SUBPACKAGES += $(srcdir)/target-zlib.add
|
||||
|
||||
$(TARGET)-zlib.spec.in: $(ZLIB_SUBPACKAGES) Makefile.am
|
||||
cat $(ZLIB_SUBPACKAGES) | sed \
|
||||
-e "s/[@]ZLIB_VERS[@]/$(ZLIB_VERS)/g" \
|
||||
-e "s/[@]ZLIB_RPMREL[@]/$(ZLIB_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{zlib_rpmvers},g" \
|
||||
| $(MKSPEC0) > $(TARGET)-zlib.spec.in
|
||||
CLEANFILES += $(TARGET)-zlib.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-zlib.spec: $(TARGET)-zlib.spec.in
|
||||
$(MKSPEC) $(TARGET)-zlib.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-zlib.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-zlib.spec
|
||||
|
||||
# Cygwin's binutils' versioning is bizarre
|
||||
# Check bfd/configure for the real version number
|
||||
BINUTILS_VERS = 2.17.50
|
||||
BINUTILS_PKGVERS = 20060817-1
|
||||
BINUTILS_RPMREL = 0.20070724.1%{?dist}
|
||||
include ../binutils.am
|
||||
BINUTILS_OPTS += --disable-infos
|
||||
|
||||
GCC_VERS = 3.4.4
|
||||
GCC_PKGVERS = $(GCC_VERS)
|
||||
GCC_RPMREL = 0.20070724.1%{?dist}
|
||||
include ../gcc.am
|
||||
GCC_OPTS += --languages=c,cxx
|
||||
@@ -1,3 +0,0 @@
|
||||
Source0: ftp://cygwin.com/pub/cygwin/release/binutils/binutils-%{binutils_pkgvers}-src.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
@PATCH0@
|
||||
@@ -1,38 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-core-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH0@
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%if %build_cxx
|
||||
Source1: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-g++-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH1@
|
||||
%{?_without_sources:NoSource: 1}
|
||||
|
||||
%endif
|
||||
%if %build_f95
|
||||
Source2: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-fortran-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH2@
|
||||
%{?_without_sources:NoSource: 2}
|
||||
|
||||
%endif
|
||||
%if %build_gcj
|
||||
Source3: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-java-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH3@
|
||||
%{?_without_sources:NoSource: 3}
|
||||
|
||||
%endif
|
||||
%if %build_gnat
|
||||
Source4: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-ada-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH4@
|
||||
%{?_without_sources:NoSource: 4}
|
||||
|
||||
%endif
|
||||
%if %build_objc
|
||||
Source5: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-objc-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH5@
|
||||
%{?_without_sources:NoSource: 5}
|
||||
%endif
|
||||
|
||||
# Cygwin patch from
|
||||
# ftp://cygwin.com/pub/cygwin/release/gcc/gcc-core/gcc-core-3.4.4-3-src.tar.bz2
|
||||
Source60: gcc-3.4.4-3.patch
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
%define libncurses_devel_version @NCURSES_VERS@
|
||||
%define libncurses_devel_rpmvers %{expand:%(echo @NCURSES_VERS@ | tr - _)}
|
||||
|
||||
Name: @rpmprefix@@tool_target@-libncurses-devel
|
||||
Release: @NCURSES_RPMREL@%{?dist}
|
||||
License: GPL
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
|
||||
Version: %libncurses_devel_rpmvers
|
||||
Summary: Cygwin libncurses_devel Libraries
|
||||
|
||||
Source0: ftp://cygwin.com/pub/cygwin/release/ncurses/libncurses-devel/libncurses-devel-%{libncurses_devel_version}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%description
|
||||
Cygwin libncurses-devel libraries.
|
||||
|
||||
%prep
|
||||
%setup -c -q
|
||||
|
||||
%build
|
||||
rm -rf @tool_target@
|
||||
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
( cd @tool_target@/sys-root ; %{__tar} xvjf %{SOURCE0})
|
||||
|
||||
sed -e 's,^prefix=\(.*\)$,prefix=$RPM_BUILD_ROOT%{_prefix}/@tool_target@/sys-root\1,' \
|
||||
> etc/postinstall/libncurses-devel.sh \
|
||||
> etc/postinstall/libncurses-devel.sh~
|
||||
mv etc/postinstall/libncurses-devel.sh~ etc/postinstall/libncurses-devel.sh
|
||||
chmod +x etc/postinstall/libncurses-devel.sh
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
./etc/postinstall/libncurses-devel.sh
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
%define cygwin_version @CYGWIN_VERS@
|
||||
%define cygwin_rpmvers %{expand:%(echo @CYGWIN_VERS@ | tr - _)}
|
||||
|
||||
Name: @rpmprefix@@tool_target@
|
||||
Release: @CYGWIN_RPMREL@%{?dist}
|
||||
License: GPL
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
|
||||
Version: %cygwin_rpmvers
|
||||
Summary: @tool_target@ libraries
|
||||
|
||||
Source0: ftp://cygwin.com/pub/cygwin/release/cygwin/cygwin-%{cygwin_version}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%description
|
||||
@tool_target@ libraries.
|
||||
|
||||
%prep
|
||||
%setup -c -q
|
||||
|
||||
%build
|
||||
rm -rf @tool_target@
|
||||
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
%{__tar} cf - usr/lib usr/include | ( cd @tool_target@/sys-root ; %{__tar} xf -)
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
@@ -1,19 +0,0 @@
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/lib
|
||||
%{_prefix}/@tool_target@/include
|
||||
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
%define w32api_version @W32API_VERS@
|
||||
%define w32api_rpmvers %{expand:%(echo @W32API_VERS@ | tr - _)}
|
||||
|
||||
Name: @rpmprefix@@tool_target@-w32api
|
||||
Release: @W32API_RPMREL@%{?dist}
|
||||
License: GPL
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
|
||||
Version: %w32api_rpmvers
|
||||
Summary: Cygwin w32api Libraries
|
||||
|
||||
Source0: ftp://cygwin.com/pub/cygwin/release/w32api/w32api-%{w32api_version}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%description
|
||||
Cygwin w32api libraries.
|
||||
|
||||
%prep
|
||||
%setup -c -q
|
||||
|
||||
%build
|
||||
rm -rf @tool_target@
|
||||
|
||||
mkdir -p @tool_target@
|
||||
cp -a usr/lib usr/include @tool_target@
|
||||
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
%{__tar} cf - usr/lib usr/include | ( cd @tool_target@/sys-root ; %{__tar} xf -)
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
%define zlib_version @ZLIB_VERS@
|
||||
%define zlib_rpmvers %{expand:%(echo @ZLIB_VERS@ | tr - _)}
|
||||
|
||||
Name: @rpmprefix@@tool_target@-zlib
|
||||
Release: @ZLIB_RPMREL@%{?dist}
|
||||
License: GPL
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
|
||||
Version: %zlib_rpmvers
|
||||
Summary: Cygwin zlib Libraries
|
||||
|
||||
Source0: ftp://cygwin.com/pub/cygwin/release/zlib/zlib-%{zlib_version}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%description
|
||||
Cygwin zlib libraries.
|
||||
|
||||
%prep
|
||||
%setup -c -q
|
||||
|
||||
%build
|
||||
rm -rf @tool_target@
|
||||
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
( cd @tool_target@/sys-root ; %{__tar} xvjf %{SOURCE0})
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,3 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
SUBDIRS = i586
|
||||
@@ -1,30 +0,0 @@
|
||||
EXTRA_DIST += binutils-sources.add
|
||||
|
||||
BINUTILS_OPTS =
|
||||
|
||||
BINUTILS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/prep.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/build.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/rpm-install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/target-binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/base-binutils.add
|
||||
|
||||
$(TARGET)-binutils.spec.in: $(BINUTILS_SUBPACKAGES) Makefile.am $(srcdir)/binutils-sources.add
|
||||
cat $(BINUTILS_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/binutils-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "s/[@]BINUTILS_VERS[@]/$(BINUTILS_VERS)/g" \
|
||||
-e "s/[@]BINUTILS_PKGVERS[@]/$(BINUTILS_PKGVERS)/g" \
|
||||
-e "s/[@]BINUTILS_RPMREL[@]/$(BINUTILS_RPMREL)/g" \
|
||||
| $(MKSPEC0) > $(TARGET)-binutils.spec.in
|
||||
CLEANFILES += $(TARGET)-binutils.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-binutils.spec: $(TARGET)-binutils.spec.in
|
||||
$(MKSPEC) $(TARGET)-binutils.spec.in | $(SPECSTRIP) $(BINUTILS_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-binutils.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-binutils.spec
|
||||
|
||||
EXTRA_DIST += $(BINUTILS_SUBPACKAGES)
|
||||
@@ -1,40 +0,0 @@
|
||||
EXTRA_DIST += $(srcdir)/../gcc-prep.add
|
||||
EXTRA_DIST += $(srcdir)/gcc-sources.add
|
||||
|
||||
GCC_OPTS =
|
||||
|
||||
GCC_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/gccnewlib.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/prep.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/build.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-c++.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-objc.add
|
||||
|
||||
$(TARGET)-gcc.spec.in: $(GCC_SUBPACKAGES) Makefile.am $(srcdir)/gcc-sources.add $(srcdir)/../gcc-prep.add
|
||||
cat $(GCC_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/gcc-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "/[@]PREP[@]/r $(srcdir)/../gcc-prep.add" \
|
||||
-e "/[@]PREP[@]/d" \
|
||||
-e "s/[@]GCC_VERS[@]/$(GCC_VERS)/g" \
|
||||
-e "s/[@]GCC_PKGVERS[@]/$(GCC_PKGVERS)/g" \
|
||||
-e "s/[@]GCC_RPMREL[@]/$(GCC_RPMREL)/g" \
|
||||
-e "/[@]tool_target[@]-newlib/d" \
|
||||
-e "/[@]tool_target[@]-w32api-sys-root/d" \
|
||||
-e "/--with-newlib/d" \
|
||||
| $(MKSPEC0) > $(TARGET)-gcc.spec.in
|
||||
CLEANFILES += $(TARGET)-gcc.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-gcc.spec: $(TARGET)-gcc.spec.in
|
||||
$(MKSPEC) $(TARGET)-gcc.spec.in | $(SPECSTRIP) $(GCC_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-gcc.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-gcc.spec
|
||||
|
||||
EXTRA_DIST += $(GCC_SUBPACKAGES)
|
||||
@@ -1,4 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.spec
|
||||
*.spec.in
|
||||
@@ -1,41 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
TARGET = i586-pc-freebsd5.2
|
||||
|
||||
include $(top_srcdir)/mkspec.am
|
||||
|
||||
FREEBSD_VERS = 5.2.1
|
||||
FREEBSD_RPMREL = @VERSION@
|
||||
EXTRA_DIST += libs.add
|
||||
EXTRA_DIST += target-libs.add
|
||||
|
||||
LIBS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/libs.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/target-libs.add
|
||||
|
||||
$(TARGET)-libs.spec.in: $(LIBS_SUBPACKAGES) Makefile.am
|
||||
cat $(LIBS_SUBPACKAGES) | sed \
|
||||
-e "s/[@]FREEBSD_VERS[@]/$(FREEBSD_VERS)/g" \
|
||||
-e "s/[@]FREEBSD_RPMREL[@]/$(FREEBSD_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{freebsd_rpmvers},g" \
|
||||
> $(TARGET)-libs.spec.in
|
||||
CLEANFILES += $(TARGET)-libs.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-libs.spec: $(TARGET)-libs.spec.in
|
||||
$(MKSPEC) $(TARGET)-libs.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-libs.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-libs.spec
|
||||
|
||||
BINUTILS_VERS = 2.17
|
||||
BINUTILS_PKGVERS = $(BINUTILS_VERS)
|
||||
BINUTILS_RPMREL = @VERSION@%{?dist}
|
||||
include ../binutils.am
|
||||
BINUTILS_OPTS +=
|
||||
|
||||
GCC_VERS = 4.1.2
|
||||
GCC_PKGVERS = $(GCC_VERS)
|
||||
GCC_RPMREL = @VERSION@%{?dist}
|
||||
include ../gcc.am
|
||||
GCC_OPTS += --languages=c,cxx,f95
|
||||
@@ -1,5 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/pub/binutils/binutils-%{binutils_pkgvers}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
%if "%{binutils_version}" == "2.16.1"
|
||||
Patch0: binutils-2.16.1-rtems-20050708.diff
|
||||
%endif
|
||||
@@ -1,33 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-core-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH0@
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%if %build_cxx
|
||||
Source1: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-g++-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH1@
|
||||
%{?_without_sources:NoSource: 1}
|
||||
|
||||
%endif
|
||||
%if %build_f95
|
||||
Source2: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-fortran-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH2@
|
||||
%{?_without_sources:NoSource: 2}
|
||||
|
||||
%endif
|
||||
%if %build_gcj
|
||||
Source3: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-java-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH3@
|
||||
%{?_without_sources:NoSource: 3}
|
||||
|
||||
%endif
|
||||
%if %build_gnat
|
||||
Source4: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-ada-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH4@
|
||||
%{?_without_sources:NoSource: 4}
|
||||
|
||||
%endif
|
||||
%if %build_objc
|
||||
Source5: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-objc-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH5@
|
||||
%{?_without_sources:NoSource: 5}
|
||||
%endif
|
||||
@@ -1,89 +0,0 @@
|
||||
%define freebsd_version @FREEBSD_VERS@
|
||||
%define freebsd_rpmvers %{expand:%(echo @FREEBSD_VERS@ | tr - _)}
|
||||
|
||||
%define _use_internal_dependency_generator 0
|
||||
%define __debug_install_post %{nil}
|
||||
|
||||
Name: @rpmprefix@@tool_target@
|
||||
Release: @FREEBSD_RPMREL@%{?dist}
|
||||
License: FreeBSD
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: /usr/bin/star
|
||||
BuildArch: noarch
|
||||
|
||||
Version: %freebsd_rpmvers
|
||||
Summary: @tool_target@ Libraries
|
||||
|
||||
Source0: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aa
|
||||
Source1: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ab
|
||||
Source2: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ac
|
||||
Source3: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ad
|
||||
Source4: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ae
|
||||
Source5: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.af
|
||||
Source6: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ag
|
||||
Source7: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ah
|
||||
Source8: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ai
|
||||
Source9: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aj
|
||||
Source10: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ak
|
||||
Source11: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.al
|
||||
Source12: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.am
|
||||
Source13: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.an
|
||||
Source14: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ao
|
||||
Source15: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ap
|
||||
Source16: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aq
|
||||
Source17: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ar
|
||||
Source18: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.as
|
||||
Source19: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.at
|
||||
Source20: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.au
|
||||
Source21: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.av
|
||||
Source22: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aw
|
||||
Source23: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ax
|
||||
Source24: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ay
|
||||
Source25: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.az
|
||||
|
||||
%description
|
||||
@tool_target@ libraries.
|
||||
|
||||
%prep
|
||||
%setup -q -c -T -n %{name}-%{version}
|
||||
|
||||
cat \
|
||||
%SOURCE0 %SOURCE1 %SOURCE2 %SOURCE3 %SOURCE4 \
|
||||
%SOURCE5 %SOURCE6 %SOURCE7 %SOURCE8 %SOURCE9 \
|
||||
%SOURCE10 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE14 \
|
||||
%SOURCE15 %SOURCE16 %SOURCE17 %SOURCE18 %SOURCE19 \
|
||||
%SOURCE20 %SOURCE21 %SOURCE22 %SOURCE23 %SOURCE24 \
|
||||
%SOURCE25 \
|
||||
| /usr/bin/star xzf - ./lib ./usr/lib ./usr/include
|
||||
|
||||
%build
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
%{__tar} cf - lib usr/lib usr/include | ( cd @tool_target@/sys-root ; %{__tar} xf -)
|
||||
|
||||
pushd @tool_target@/sys-root/usr/lib > /dev/null
|
||||
# missing files
|
||||
rm -f lib*_p.*
|
||||
# not needed
|
||||
rm -rf aout compat
|
||||
|
||||
# Fix up symlinks
|
||||
find -type l -exec ls -l {} \; | \
|
||||
while read a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aA ; do \
|
||||
case $aA in
|
||||
/lib* ) # link
|
||||
rm $a8;
|
||||
b=`basename $aA`
|
||||
ln -s ../../lib/$b $a8
|
||||
;;
|
||||
esac
|
||||
done
|
||||
popd > /dev/null
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,3 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
SUBDIRS = i586
|
||||
@@ -1,30 +0,0 @@
|
||||
EXTRA_DIST += binutils-sources.add
|
||||
|
||||
BINUTILS_OPTS =
|
||||
|
||||
BINUTILS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/prep.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/build.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/rpm-install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/target-binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/base-binutils.add
|
||||
|
||||
$(TARGET)-binutils.spec.in: $(BINUTILS_SUBPACKAGES) Makefile.am $(srcdir)/binutils-sources.add
|
||||
cat $(BINUTILS_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/binutils-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "s/[@]BINUTILS_VERS[@]/$(BINUTILS_VERS)/g" \
|
||||
-e "s/[@]BINUTILS_PKGVERS[@]/$(BINUTILS_PKGVERS)/g" \
|
||||
-e "s/[@]BINUTILS_RPMREL[@]/$(BINUTILS_RPMREL)/g" \
|
||||
| $(MKSPEC0) > $(TARGET)-binutils.spec.in
|
||||
CLEANFILES += $(TARGET)-binutils.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-binutils.spec: $(TARGET)-binutils.spec.in
|
||||
$(MKSPEC) $(TARGET)-binutils.spec.in | $(SPECSTRIP) $(BINUTILS_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-binutils.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-binutils.spec
|
||||
|
||||
EXTRA_DIST += $(BINUTILS_SUBPACKAGES)
|
||||
@@ -1,40 +0,0 @@
|
||||
EXTRA_DIST += $(srcdir)/../gcc-prep.add
|
||||
EXTRA_DIST += $(srcdir)/gcc-sources.add
|
||||
|
||||
GCC_OPTS =
|
||||
|
||||
GCC_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/gccnewlib.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/prep.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/build.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-c++.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-objc.add
|
||||
|
||||
$(TARGET)-gcc.spec.in: $(GCC_SUBPACKAGES) Makefile.am $(srcdir)/gcc-sources.add $(srcdir)/../gcc-prep.add
|
||||
cat $(GCC_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/gcc-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "/[@]PREP[@]/r $(srcdir)/../gcc-prep.add" \
|
||||
-e "/[@]PREP[@]/d" \
|
||||
-e "s/[@]GCC_VERS[@]/$(GCC_VERS)/g" \
|
||||
-e "s/[@]GCC_PKGVERS[@]/$(GCC_PKGVERS)/g" \
|
||||
-e "s/[@]GCC_RPMREL[@]/$(GCC_RPMREL)/g" \
|
||||
-e "/[@]tool_target[@]-newlib/d" \
|
||||
-e "/[@]tool_target[@]-w32api-sys-root/d" \
|
||||
-e "/--with-newlib/d" \
|
||||
| $(MKSPEC0) > $(TARGET)-gcc.spec.in
|
||||
CLEANFILES += $(TARGET)-gcc.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-gcc.spec: $(TARGET)-gcc.spec.in
|
||||
$(MKSPEC) $(TARGET)-gcc.spec.in | $(SPECSTRIP) $(GCC_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-gcc.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-gcc.spec
|
||||
|
||||
EXTRA_DIST += $(GCC_SUBPACKAGES)
|
||||
@@ -1,4 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.spec
|
||||
*.spec.in
|
||||
@@ -1,41 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
TARGET = i586-pc-freebsd6.0
|
||||
|
||||
include $(top_srcdir)/mkspec.am
|
||||
|
||||
FREEBSD_VERS = 6.0
|
||||
FREEBSD_RPMREL = @VERSION@
|
||||
EXTRA_DIST += libs.add
|
||||
EXTRA_DIST += target-libs.add
|
||||
|
||||
LIBS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/libs.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/target-libs.add
|
||||
|
||||
$(TARGET)-libs.spec.in: $(LIBS_SUBPACKAGES) Makefile.am
|
||||
cat $(LIBS_SUBPACKAGES) | sed \
|
||||
-e "s/[@]FREEBSD_VERS[@]/$(FREEBSD_VERS)/g" \
|
||||
-e "s/[@]FREEBSD_RPMREL[@]/$(FREEBSD_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{freebsd_rpmvers},g" \
|
||||
> $(TARGET)-libs.spec.in
|
||||
CLEANFILES += $(TARGET)-libs.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-libs.spec: $(TARGET)-libs.spec.in
|
||||
$(MKSPEC) $(TARGET)-libs.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-libs.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-libs.spec
|
||||
|
||||
BINUTILS_VERS = 2.17
|
||||
BINUTILS_PKGVERS = $(BINUTILS_VERS)
|
||||
BINUTILS_RPMREL = @VERSION@%{?dist}
|
||||
include ../binutils.am
|
||||
BINUTILS_OPTS +=
|
||||
|
||||
GCC_VERS = 4.1.2
|
||||
GCC_PKGVERS = $(GCC_VERS)
|
||||
GCC_RPMREL = @VERSION@%{?dist}
|
||||
include ../gcc.am
|
||||
GCC_OPTS += --languages=c,cxx,f95,objc
|
||||
@@ -1,5 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/pub/binutils/binutils-%{binutils_pkgvers}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
%if "%{binutils_version}" == "2.16.1"
|
||||
Patch0: binutils-2.16.1-rtems-20050708.diff
|
||||
%endif
|
||||
@@ -1,33 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-core-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH0@
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%if %build_cxx
|
||||
Source1: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-g++-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH1@
|
||||
%{?_without_sources:NoSource: 1}
|
||||
|
||||
%endif
|
||||
%if %build_f95
|
||||
Source2: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-fortran-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH2@
|
||||
%{?_without_sources:NoSource: 2}
|
||||
|
||||
%endif
|
||||
%if %build_gcj
|
||||
Source3: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-java-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH3@
|
||||
%{?_without_sources:NoSource: 3}
|
||||
|
||||
%endif
|
||||
%if %build_gnat
|
||||
Source4: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-ada-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH4@
|
||||
%{?_without_sources:NoSource: 4}
|
||||
|
||||
%endif
|
||||
%if %build_objc
|
||||
Source5: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-objc-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH5@
|
||||
%{?_without_sources:NoSource: 5}
|
||||
%endif
|
||||
@@ -1,108 +0,0 @@
|
||||
%define freebsd_version @FREEBSD_VERS@
|
||||
%define freebsd_rpmvers %{expand:%(echo @FREEBSD_VERS@ | tr - _)}
|
||||
|
||||
%define _use_internal_dependency_generator 0
|
||||
%define __debug_install_post %{nil}
|
||||
|
||||
Name: @rpmprefix@@tool_target@
|
||||
Release: @FREEBSD_RPMREL@%{?dist}
|
||||
License: FreeBSD
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
BuildRequires: /usr/bin/star
|
||||
|
||||
Version: %freebsd_rpmvers
|
||||
Summary: @tool_target@ Libraries
|
||||
|
||||
Source0: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aa
|
||||
Source1: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ab
|
||||
Source2: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ac
|
||||
Source3: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ad
|
||||
Source4: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ae
|
||||
Source5: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.af
|
||||
Source6: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ag
|
||||
Source7: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ah
|
||||
Source8: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ai
|
||||
Source9: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aj
|
||||
Source10: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ak
|
||||
Source11: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.al
|
||||
Source12: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.am
|
||||
Source13: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.an
|
||||
Source14: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ao
|
||||
Source15: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ap
|
||||
Source16: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aq
|
||||
Source17: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ar
|
||||
Source18: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.as
|
||||
Source19: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.at
|
||||
Source20: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.au
|
||||
Source21: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.av
|
||||
Source22: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aw
|
||||
Source23: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ax
|
||||
Source24: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ay
|
||||
Source25: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.az
|
||||
Source26: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ba
|
||||
Source27: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bb
|
||||
Source28: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bc
|
||||
Source29: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bd
|
||||
Source30: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.be
|
||||
Source31: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bf
|
||||
Source32: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bg
|
||||
Source33: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bh
|
||||
Source34: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bi
|
||||
Source35: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bj
|
||||
Source36: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bk
|
||||
Source37: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bl
|
||||
Source38: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bm
|
||||
Source39: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bn
|
||||
Source40: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bo
|
||||
Source41: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bp
|
||||
|
||||
%description
|
||||
@tool_target@ libraries.
|
||||
|
||||
%prep
|
||||
%setup -q -c -T -n %{name}-%{version}
|
||||
|
||||
cat \
|
||||
%SOURCE0 %SOURCE1 %SOURCE2 %SOURCE3 %SOURCE4 \
|
||||
%SOURCE5 %SOURCE6 %SOURCE7 %SOURCE8 %SOURCE9 \
|
||||
%SOURCE10 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE14 \
|
||||
%SOURCE15 %SOURCE16 %SOURCE17 %SOURCE18 %SOURCE19 \
|
||||
%SOURCE20 %SOURCE21 %SOURCE22 %SOURCE23 %SOURCE24 \
|
||||
%SOURCE25 %SOURCE26 %SOURCE27 %SOURCE28 %SOURCE29 \
|
||||
%SOURCE30 %SOURCE31 %SOURCE32 %SOURCE33 %SOURCE34 \
|
||||
%SOURCE35 %SOURCE36 %SOURCE37 %SOURCE38 %SOURCE39 \
|
||||
%SOURCE40 %SOURCE41 \
|
||||
| /usr/bin/star xzf - lib usr/lib usr/include
|
||||
|
||||
%build
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
%{__tar} cf - lib usr/lib usr/include | ( cd @tool_target@/sys-root ; %{__tar} xf -)
|
||||
|
||||
pushd @tool_target@/sys-root/usr/lib > /dev/null
|
||||
# missing files
|
||||
rm -f lib*_p.*
|
||||
# not needed
|
||||
rm -rf aout compat
|
||||
|
||||
# Fix up symlinks
|
||||
find -type l -exec ls -l {} \; | \
|
||||
while read a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aA ; do \
|
||||
case $aA in
|
||||
/lib* ) # link
|
||||
rm $a8;
|
||||
b=`basename $aA`
|
||||
ln -s ../../lib/$b $a8
|
||||
;;
|
||||
esac
|
||||
done
|
||||
popd > /dev/null
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,3 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
SUBDIRS = i586
|
||||
@@ -1,30 +0,0 @@
|
||||
EXTRA_DIST += binutils-sources.add
|
||||
|
||||
BINUTILS_OPTS =
|
||||
|
||||
BINUTILS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/prep.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/build.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/rpm-install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/target-binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/base-binutils.add
|
||||
|
||||
$(TARGET)-binutils.spec.in: $(BINUTILS_SUBPACKAGES) Makefile.am $(srcdir)/binutils-sources.add
|
||||
cat $(BINUTILS_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/binutils-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "s/[@]BINUTILS_VERS[@]/$(BINUTILS_VERS)/g" \
|
||||
-e "s/[@]BINUTILS_PKGVERS[@]/$(BINUTILS_PKGVERS)/g" \
|
||||
-e "s/[@]BINUTILS_RPMREL[@]/$(BINUTILS_RPMREL)/g" \
|
||||
| $(MKSPEC0) > $(TARGET)-binutils.spec.in
|
||||
CLEANFILES += $(TARGET)-binutils.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-binutils.spec: $(TARGET)-binutils.spec.in
|
||||
$(MKSPEC) $(TARGET)-binutils.spec.in | $(SPECSTRIP) $(BINUTILS_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-binutils.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-binutils.spec
|
||||
|
||||
EXTRA_DIST += $(BINUTILS_SUBPACKAGES)
|
||||
@@ -1,40 +0,0 @@
|
||||
EXTRA_DIST += $(srcdir)/../gcc-prep.add
|
||||
EXTRA_DIST += $(srcdir)/gcc-sources.add
|
||||
|
||||
GCC_OPTS =
|
||||
|
||||
GCC_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/gccnewlib.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/prep.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/build.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-c++.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-objc.add
|
||||
|
||||
$(TARGET)-gcc.spec.in: $(GCC_SUBPACKAGES) Makefile.am $(srcdir)/gcc-sources.add $(srcdir)/../gcc-prep.add
|
||||
cat $(GCC_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/gcc-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "/[@]PREP[@]/r $(srcdir)/../gcc-prep.add" \
|
||||
-e "/[@]PREP[@]/d" \
|
||||
-e "s/[@]GCC_VERS[@]/$(GCC_VERS)/g" \
|
||||
-e "s/[@]GCC_PKGVERS[@]/$(GCC_PKGVERS)/g" \
|
||||
-e "s/[@]GCC_RPMREL[@]/$(GCC_RPMREL)/g" \
|
||||
-e "/[@]tool_target[@]-newlib/d" \
|
||||
-e "/[@]tool_target[@]-w32api-sys-root/d" \
|
||||
-e "/--with-newlib/d" \
|
||||
| $(MKSPEC0) > $(TARGET)-gcc.spec.in
|
||||
CLEANFILES += $(TARGET)-gcc.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-gcc.spec: $(TARGET)-gcc.spec.in
|
||||
$(MKSPEC) $(TARGET)-gcc.spec.in | $(SPECSTRIP) $(GCC_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-gcc.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-gcc.spec
|
||||
|
||||
EXTRA_DIST += $(GCC_SUBPACKAGES)
|
||||
@@ -1,4 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.spec
|
||||
*.spec.in
|
||||
@@ -1,42 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
TARGET = i586-pc-freebsd6.1
|
||||
|
||||
include $(top_srcdir)/mkspec.am
|
||||
|
||||
FREEBSD_VERS = 6.1
|
||||
FREEBSD_RPMREL = @VERSION@
|
||||
EXTRA_DIST += libs.add
|
||||
EXTRA_DIST += target-libs.add
|
||||
|
||||
LIBS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/libs.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/target-libs.add
|
||||
|
||||
$(TARGET)-libs.spec.in: $(LIBS_SUBPACKAGES) Makefile.am
|
||||
cat $(LIBS_SUBPACKAGES) | sed \
|
||||
-e "s/[@]FREEBSD_VERS[@]/$(FREEBSD_VERS)/g" \
|
||||
-e "s/[@]FREEBSD_RPMREL[@]/$(FREEBSD_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{freebsd_rpmvers},g" \
|
||||
> $(TARGET)-libs.spec.in
|
||||
CLEANFILES += $(TARGET)-libs.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-libs.spec: $(TARGET)-libs.spec.in
|
||||
$(MKSPEC) $(TARGET)-libs.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-libs.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-libs.spec
|
||||
|
||||
|
||||
BINUTILS_VERS = 2.17
|
||||
BINUTILS_PKGVERS = $(BINUTILS_VERS)
|
||||
BINUTILS_RPMREL = @VERSION@%{?dist}
|
||||
include ../binutils.am
|
||||
BINUTILS_OPTS +=
|
||||
|
||||
GCC_VERS = 4.1.2
|
||||
GCC_PKGVERS = $(GCC_VERS)
|
||||
GCC_RPMREL = @VERSION@%{?dist}
|
||||
include ../gcc.am
|
||||
GCC_OPTS += --languages=c,cxx,f95,objc
|
||||
@@ -1,5 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/pub/binutils/binutils-%{binutils_pkgvers}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
%if "%{binutils_version}" == "2.16.1"
|
||||
Patch0: binutils-2.16.1-rtems-20050708.diff
|
||||
%endif
|
||||
@@ -1,33 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-core-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH0@
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%if %build_cxx
|
||||
Source1: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-g++-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH1@
|
||||
%{?_without_sources:NoSource: 1}
|
||||
|
||||
%endif
|
||||
%if %build_f95
|
||||
Source2: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-fortran-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH2@
|
||||
%{?_without_sources:NoSource: 2}
|
||||
|
||||
%endif
|
||||
%if %build_gcj
|
||||
Source3: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-java-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH3@
|
||||
%{?_without_sources:NoSource: 3}
|
||||
|
||||
%endif
|
||||
%if %build_gnat
|
||||
Source4: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-ada-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH4@
|
||||
%{?_without_sources:NoSource: 4}
|
||||
|
||||
%endif
|
||||
%if %build_objc
|
||||
Source5: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-objc-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH5@
|
||||
%{?_without_sources:NoSource: 5}
|
||||
%endif
|
||||
@@ -1,93 +0,0 @@
|
||||
%define freebsd_version @FREEBSD_VERS@
|
||||
%define freebsd_rpmvers %{expand:%(echo @FREEBSD_VERS@ | tr - _)}
|
||||
|
||||
%define _use_internal_dependency_generator 0
|
||||
%define __debug_install_post %{nil}
|
||||
|
||||
Name: @rpmprefix@@tool_target@
|
||||
Release: @FREEBSD_RPMREL@%{?dist}
|
||||
License: FreeBSD
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
BuildRequires: /usr/bin/star
|
||||
|
||||
Version: %freebsd_rpmvers
|
||||
Summary: @tool_target@ Libraries
|
||||
|
||||
Source0: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aa
|
||||
Source1: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ab
|
||||
Source2: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ac
|
||||
Source3: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ad
|
||||
Source4: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ae
|
||||
Source5: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.af
|
||||
Source6: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ag
|
||||
Source7: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ah
|
||||
Source8: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ai
|
||||
Source9: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aj
|
||||
Source10: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ak
|
||||
Source11: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.al
|
||||
Source12: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.am
|
||||
Source13: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.an
|
||||
Source14: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ao
|
||||
Source15: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ap
|
||||
Source16: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aq
|
||||
Source17: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ar
|
||||
Source18: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.as
|
||||
Source19: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.at
|
||||
Source20: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.au
|
||||
Source21: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.av
|
||||
Source22: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aw
|
||||
Source23: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ax
|
||||
Source24: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ay
|
||||
Source25: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.az
|
||||
Source26: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ba
|
||||
Source27: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bb
|
||||
Source28: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bc
|
||||
Source29: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bd
|
||||
|
||||
%description
|
||||
@tool_target@ libraries.
|
||||
|
||||
%prep
|
||||
%setup -q -c -T -n %{name}-%{version}
|
||||
|
||||
cat \
|
||||
%SOURCE0 %SOURCE1 %SOURCE2 %SOURCE3 %SOURCE4 \
|
||||
%SOURCE5 %SOURCE6 %SOURCE7 %SOURCE8 %SOURCE9 \
|
||||
%SOURCE10 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE14 \
|
||||
%SOURCE15 %SOURCE16 %SOURCE17 %SOURCE18 %SOURCE19 \
|
||||
%SOURCE20 %SOURCE21 %SOURCE22 %SOURCE23 %SOURCE24 \
|
||||
%SOURCE25 %SOURCE26 %SOURCE27 %SOURCE28 %SOURCE29 \
|
||||
| /usr/bin/star xzf - lib usr/lib usr/include
|
||||
|
||||
%build
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
%{__tar} cf - lib usr/lib usr/include | ( cd @tool_target@/sys-root ; %{__tar} xf -)
|
||||
|
||||
pushd @tool_target@/sys-root/usr/lib > /dev/null
|
||||
# missing files
|
||||
rm -f lib*_p.*
|
||||
# not needed
|
||||
rm -rf aout compat
|
||||
|
||||
# Fix up symlinks
|
||||
find -type l -exec ls -l {} \; | \
|
||||
while read a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aA ; do \
|
||||
case $aA in
|
||||
/lib* ) # link
|
||||
rm $a8;
|
||||
b=`basename $aA`
|
||||
ln -s ../../lib/$b $a8
|
||||
;;
|
||||
esac
|
||||
done
|
||||
popd > /dev/null
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,3 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
SUBDIRS = i586
|
||||
@@ -1,30 +0,0 @@
|
||||
EXTRA_DIST += binutils-sources.add
|
||||
|
||||
BINUTILS_OPTS =
|
||||
|
||||
BINUTILS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/prep.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/build.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/rpm-install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/target-binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/base-binutils.add
|
||||
|
||||
$(TARGET)-binutils.spec.in: $(BINUTILS_SUBPACKAGES) Makefile.am $(srcdir)/binutils-sources.add
|
||||
cat $(BINUTILS_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/binutils-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "s/[@]BINUTILS_VERS[@]/$(BINUTILS_VERS)/g" \
|
||||
-e "s/[@]BINUTILS_PKGVERS[@]/$(BINUTILS_PKGVERS)/g" \
|
||||
-e "s/[@]BINUTILS_RPMREL[@]/$(BINUTILS_RPMREL)/g" \
|
||||
| $(MKSPEC0) > $(TARGET)-binutils.spec.in
|
||||
CLEANFILES += $(TARGET)-binutils.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-binutils.spec: $(TARGET)-binutils.spec.in
|
||||
$(MKSPEC) $(TARGET)-binutils.spec.in | $(SPECSTRIP) $(BINUTILS_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-binutils.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-binutils.spec
|
||||
|
||||
EXTRA_DIST += $(BINUTILS_SUBPACKAGES)
|
||||
@@ -1,40 +0,0 @@
|
||||
EXTRA_DIST += $(srcdir)/../gcc-prep.add
|
||||
EXTRA_DIST += $(srcdir)/gcc-sources.add
|
||||
|
||||
GCC_OPTS =
|
||||
|
||||
GCC_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/gccnewlib.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/prep.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/build.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-c++.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-objc.add
|
||||
|
||||
$(TARGET)-gcc.spec.in: $(GCC_SUBPACKAGES) Makefile.am $(srcdir)/gcc-sources.add $(srcdir)/../gcc-prep.add
|
||||
cat $(GCC_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/gcc-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "/[@]PREP[@]/r $(srcdir)/../gcc-prep.add" \
|
||||
-e "/[@]PREP[@]/d" \
|
||||
-e "s/[@]GCC_VERS[@]/$(GCC_VERS)/g" \
|
||||
-e "s/[@]GCC_PKGVERS[@]/$(GCC_PKGVERS)/g" \
|
||||
-e "s/[@]GCC_RPMREL[@]/$(GCC_RPMREL)/g" \
|
||||
-e "/[@]tool_target[@]-newlib/d" \
|
||||
-e "/[@]tool_target[@]-w32api-sys-root/d" \
|
||||
-e "/--with-newlib/d" \
|
||||
| $(MKSPEC0) > $(TARGET)-gcc.spec.in
|
||||
CLEANFILES += $(TARGET)-gcc.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-gcc.spec: $(TARGET)-gcc.spec.in
|
||||
$(MKSPEC) $(TARGET)-gcc.spec.in | $(SPECSTRIP) $(GCC_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-gcc.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-gcc.spec
|
||||
|
||||
EXTRA_DIST += $(GCC_SUBPACKAGES)
|
||||
@@ -1,4 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.spec
|
||||
*.spec.in
|
||||
@@ -1,42 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
TARGET = i586-pc-freebsd6.2
|
||||
|
||||
include $(top_srcdir)/mkspec.am
|
||||
|
||||
FREEBSD_VERS = 6.2
|
||||
FREEBSD_RPMREL = @VERSION@
|
||||
EXTRA_DIST += libs.add
|
||||
EXTRA_DIST += target-libs.add
|
||||
|
||||
LIBS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/libs.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/target-libs.add
|
||||
|
||||
$(TARGET)-libs.spec.in: $(LIBS_SUBPACKAGES) Makefile.am
|
||||
cat $(LIBS_SUBPACKAGES) | sed \
|
||||
-e "s/[@]FREEBSD_VERS[@]/$(FREEBSD_VERS)/g" \
|
||||
-e "s/[@]FREEBSD_RPMREL[@]/$(FREEBSD_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{freebsd_rpmvers},g" \
|
||||
> $(TARGET)-libs.spec.in
|
||||
CLEANFILES += $(TARGET)-libs.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-libs.spec: $(TARGET)-libs.spec.in
|
||||
$(MKSPEC) $(TARGET)-libs.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-libs.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-libs.spec
|
||||
|
||||
|
||||
BINUTILS_VERS = 2.17
|
||||
BINUTILS_PKGVERS = $(BINUTILS_VERS)
|
||||
BINUTILS_RPMREL = @VERSION@%{?dist}
|
||||
include ../binutils.am
|
||||
BINUTILS_OPTS +=
|
||||
|
||||
GCC_VERS = 4.1.2
|
||||
GCC_PKGVERS = $(GCC_VERS)
|
||||
GCC_RPMREL = @VERSION@%{?dist}
|
||||
include ../gcc.am
|
||||
GCC_OPTS += --languages=c,cxx,f95,objc
|
||||
@@ -1,5 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/pub/binutils/binutils-%{binutils_pkgvers}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
%if "%{binutils_version}" == "2.16.1"
|
||||
Patch0: binutils-2.16.1-rtems-20050708.diff
|
||||
%endif
|
||||
@@ -1,33 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-core-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH0@
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%if %build_cxx
|
||||
Source1: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-g++-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH1@
|
||||
%{?_without_sources:NoSource: 1}
|
||||
|
||||
%endif
|
||||
%if %build_f95
|
||||
Source2: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-fortran-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH2@
|
||||
%{?_without_sources:NoSource: 2}
|
||||
|
||||
%endif
|
||||
%if %build_gcj
|
||||
Source3: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-java-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH3@
|
||||
%{?_without_sources:NoSource: 3}
|
||||
|
||||
%endif
|
||||
%if %build_gnat
|
||||
Source4: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-ada-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH4@
|
||||
%{?_without_sources:NoSource: 4}
|
||||
|
||||
%endif
|
||||
%if %build_objc
|
||||
Source5: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-objc-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH5@
|
||||
%{?_without_sources:NoSource: 5}
|
||||
%endif
|
||||
@@ -1,93 +0,0 @@
|
||||
%define freebsd_version @FREEBSD_VERS@
|
||||
%define freebsd_rpmvers %{expand:%(echo @FREEBSD_VERS@ | tr - _)}
|
||||
|
||||
%define _use_internal_dependency_generator 0
|
||||
%define __debug_install_post %{nil}
|
||||
|
||||
Name: @rpmprefix@@tool_target@
|
||||
Release: @FREEBSD_RPMREL@%{?dist}
|
||||
License: FreeBSD
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
BuildRequires: /usr/bin/star
|
||||
|
||||
Version: %freebsd_rpmvers
|
||||
Summary: @tool_target@ Libraries
|
||||
|
||||
Source0: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aa
|
||||
Source1: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ab
|
||||
Source2: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ac
|
||||
Source3: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ad
|
||||
Source4: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ae
|
||||
Source5: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.af
|
||||
Source6: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ag
|
||||
Source7: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ah
|
||||
Source8: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ai
|
||||
Source9: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aj
|
||||
Source10: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ak
|
||||
Source11: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.al
|
||||
Source12: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.am
|
||||
Source13: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.an
|
||||
Source14: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ao
|
||||
Source15: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ap
|
||||
Source16: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aq
|
||||
Source17: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ar
|
||||
Source18: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.as
|
||||
Source19: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.at
|
||||
Source20: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.au
|
||||
Source21: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.av
|
||||
Source22: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.aw
|
||||
Source23: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ax
|
||||
Source24: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ay
|
||||
Source25: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.az
|
||||
Source26: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.ba
|
||||
Source27: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bb
|
||||
Source28: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bc
|
||||
Source29: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/@FREEBSD_VERS@-RELEASE/base/base.bd
|
||||
|
||||
%description
|
||||
@tool_target@ libraries.
|
||||
|
||||
%prep
|
||||
%setup -q -c -T -n %{name}-%{version}
|
||||
|
||||
cat \
|
||||
%SOURCE0 %SOURCE1 %SOURCE2 %SOURCE3 %SOURCE4 \
|
||||
%SOURCE5 %SOURCE6 %SOURCE7 %SOURCE8 %SOURCE9 \
|
||||
%SOURCE10 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE14 \
|
||||
%SOURCE15 %SOURCE16 %SOURCE17 %SOURCE18 %SOURCE19 \
|
||||
%SOURCE20 %SOURCE21 %SOURCE22 %SOURCE23 %SOURCE24 \
|
||||
%SOURCE25 %SOURCE26 %SOURCE27 %SOURCE28 %SOURCE29 \
|
||||
| /usr/bin/star xzf - lib usr/lib usr/include
|
||||
|
||||
%build
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
%{__tar} cf - lib usr/lib usr/include | ( cd @tool_target@/sys-root ; %{__tar} xf -)
|
||||
|
||||
pushd @tool_target@/sys-root/usr/lib > /dev/null
|
||||
# missing files
|
||||
rm -f lib*_p.*
|
||||
# not needed
|
||||
rm -rf aout compat
|
||||
|
||||
# Fix up symlinks
|
||||
find -type l -exec ls -l {} \; | \
|
||||
while read a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aA ; do \
|
||||
case $aA in
|
||||
/lib* ) # link
|
||||
rm $a8;
|
||||
b=`basename $aA`
|
||||
ln -s ../../lib/$b $a8
|
||||
;;
|
||||
esac
|
||||
done
|
||||
popd > /dev/null
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,3 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
SUBDIRS = i686
|
||||
@@ -1,30 +0,0 @@
|
||||
EXTRA_DIST += binutils-sources.add
|
||||
|
||||
BINUTILS_OPTS =
|
||||
|
||||
BINUTILS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/prep.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/build.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/rpm-install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/target-binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/base-binutils.add
|
||||
|
||||
$(TARGET)-binutils.spec.in: $(BINUTILS_SUBPACKAGES) Makefile.am $(srcdir)/binutils-sources.add
|
||||
cat $(BINUTILS_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/binutils-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "s/[@]BINUTILS_VERS[@]/$(BINUTILS_VERS)/g" \
|
||||
-e "s/[@]BINUTILS_PKGVERS[@]/$(BINUTILS_PKGVERS)/g" \
|
||||
-e "s/[@]BINUTILS_RPMREL[@]/$(BINUTILS_RPMREL)/g" \
|
||||
| $(MKSPEC0) > $(TARGET)-binutils.spec.in
|
||||
CLEANFILES += $(TARGET)-binutils.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-binutils.spec: $(TARGET)-binutils.spec.in
|
||||
$(MKSPEC) $(TARGET)-binutils.spec.in | $(SPECSTRIP) $(BINUTILS_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-binutils.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-binutils.spec
|
||||
|
||||
EXTRA_DIST += $(BINUTILS_SUBPACKAGES)
|
||||
@@ -1,38 +0,0 @@
|
||||
EXTRA_DIST += $(srcdir)/../gcc-prep.add
|
||||
EXTRA_DIST += $(srcdir)/gcc-sources.add
|
||||
|
||||
GCC_OPTS =
|
||||
|
||||
GCC_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/gccnewlib.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/prep.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/build.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-c++.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-objc.add
|
||||
|
||||
$(TARGET)-gcc.spec.in: $(GCC_SUBPACKAGES) Makefile.am $(srcdir)/gcc-sources.add $(srcdir)/../gcc-prep.add
|
||||
cat $(GCC_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/gcc-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "/[@]PREP[@]/r $(srcdir)/../gcc-prep.add" \
|
||||
-e "/[@]PREP[@]/d" \
|
||||
-e "s/[@]GCC_VERS[@]/$(GCC_VERS)/g" \
|
||||
-e "s/[@]GCC_PKGVERS[@]/$(GCC_PKGVERS)/g" \
|
||||
-e "s/[@]GCC_RPMREL[@]/$(GCC_RPMREL)/g" \
|
||||
-e "/[@]tool_target[@]-newlib/d" \
|
||||
| $(MKSPEC0) > $(TARGET)-gcc.spec.in
|
||||
CLEANFILES += $(TARGET)-gcc.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-gcc.spec: $(TARGET)-gcc.spec.in
|
||||
$(MKSPEC) $(TARGET)-gcc.spec.in | $(SPECSTRIP) $(GCC_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-gcc.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-gcc.spec
|
||||
|
||||
EXTRA_DIST += $(GCC_SUBPACKAGES)
|
||||
@@ -1,4 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.spec
|
||||
*.spec.in
|
||||
@@ -1,66 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
TARGET = i686-pc-mingw32
|
||||
|
||||
include $(top_srcdir)/mkspec.am
|
||||
|
||||
MINGW32_VERS = 3.11
|
||||
MINGW32_RPMREL = 1
|
||||
EXTRA_DIST += libs.add
|
||||
EXTRA_DIST += target-libs.add
|
||||
|
||||
LIBS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/libs.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/target-libs.add
|
||||
|
||||
$(TARGET)-libs.spec.in: $(LIBS_SUBPACKAGES) Makefile.am
|
||||
cat $(LIBS_SUBPACKAGES) | sed \
|
||||
-e "s/[@]MINGW32_VERS[@]/$(MINGW32_VERS)/g" \
|
||||
-e "s/[@]MINGW32_RPMREL[@]/$(MINGW32_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{mingw32_rpmvers},g" \
|
||||
> $(TARGET)-libs.spec.in
|
||||
CLEANFILES += $(TARGET)-libs.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-libs.spec: $(TARGET)-libs.spec.in
|
||||
$(MKSPEC) $(TARGET)-libs.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-libs.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-libs.spec
|
||||
|
||||
W32API_VERS = 3.8
|
||||
W32API_RPMREL = 1
|
||||
EXTRA_DIST += target-w32api.add
|
||||
EXTRA_DIST += w32api.add
|
||||
|
||||
W32API_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
W32API_SUBPACKAGES += $(srcdir)/w32api.add
|
||||
W32API_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
W32API_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
W32API_SUBPACKAGES += $(srcdir)/target-w32api.add
|
||||
|
||||
$(TARGET)-w32api.spec.in: $(W32API_SUBPACKAGES) Makefile.am
|
||||
cat $(W32API_SUBPACKAGES) | sed \
|
||||
-e "s/[@]W32API_VERS[@]/$(W32API_VERS)/g" \
|
||||
-e "s/[@]W32API_RPMREL[@]/$(W32API_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{w32api_rpmvers},g" \
|
||||
> $(TARGET)-w32api.spec.in
|
||||
CLEANFILES += $(TARGET)-w32api.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-w32api.spec: $(TARGET)-w32api.spec.in
|
||||
$(MKSPEC) $(TARGET)-w32api.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-w32api.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-w32api.spec
|
||||
|
||||
|
||||
BINUTILS_VERS = 2.16.91-20060119-1
|
||||
BINUTILS_PKGVERS = $(BINUTILS_VERS)
|
||||
BINUTILS_RPMREL = 1%{?dist}
|
||||
include ../binutils.am
|
||||
BINUTILS_OPTS += --disable-infos
|
||||
|
||||
GCC_VERS = 4.1.0
|
||||
GCC_PKGVERS = $(GCC_VERS)
|
||||
GCC_RPMREL = @VERSION@%{?dist}
|
||||
include ../gcc.am
|
||||
GCC_OPTS += --languages=c
|
||||
@@ -1,3 +0,0 @@
|
||||
Source0: http://downloads.sourceforge.net/mingw/binutils-%{binutils_pkgvers}-src.tar.gz
|
||||
%{?_without_sources:NoSource: 0}
|
||||
@PATCH0@
|
||||
@@ -1,33 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-core-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH0@
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%if %build_cxx
|
||||
Source1: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-g++-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH1@
|
||||
%{?_without_sources:NoSource: 1}
|
||||
|
||||
%endif
|
||||
%if %build_f95
|
||||
Source2: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-fortran-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH2@
|
||||
%{?_without_sources:NoSource: 2}
|
||||
|
||||
%endif
|
||||
%if %build_gcj
|
||||
Source3: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-java-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH3@
|
||||
%{?_without_sources:NoSource: 3}
|
||||
|
||||
%endif
|
||||
%if %build_gnat
|
||||
Source4: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-ada-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH4@
|
||||
%{?_without_sources:NoSource: 4}
|
||||
|
||||
%endif
|
||||
%if %build_objc
|
||||
Source5: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-objc-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH5@
|
||||
%{?_without_sources:NoSource: 5}
|
||||
%endif
|
||||
@@ -1,35 +0,0 @@
|
||||
%define mingw32_version @MINGW32_VERS@
|
||||
%define mingw32_rpmvers %{expand:%(echo @MINGW32_VERS@ | tr - _)}
|
||||
|
||||
Name: @rpmprefix@@tool_target@
|
||||
Release: @MINGW32_RPMREL@%{?dist}
|
||||
License: GPL
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
|
||||
Version: %mingw32_rpmvers
|
||||
Summary: MinGW Libraries
|
||||
|
||||
Source0: http://downloads.sourceforge.net/mingw/mingw-runtime-%{mingw32_version}.tar.gz
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%description
|
||||
Mingw libraries.
|
||||
|
||||
%prep
|
||||
%setup -c -q
|
||||
|
||||
%build
|
||||
rm -rf @tool_target@
|
||||
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root/mingw
|
||||
cp -a include lib @tool_target@/sys-root/mingw
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
@@ -1,11 +0,0 @@
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
@@ -1,35 +0,0 @@
|
||||
%define w32api_version @W32API_VERS@
|
||||
%define w32api_rpmvers %{expand:%(echo @W32API_VERS@ | tr - _)}
|
||||
|
||||
Name: @rpmprefix@@tool_target@-w32api
|
||||
Release: @W32API_RPMREL@%{?dist}
|
||||
License: GPL
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
|
||||
Version: %w32api_rpmvers
|
||||
Summary: MinGW Libraries
|
||||
|
||||
Source0: http://downloads.sourceforge.net/mingw/w32api-%{w32api_version}.tar.gz
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%description
|
||||
Mingw libraries.
|
||||
|
||||
%prep
|
||||
%setup -c -q
|
||||
|
||||
%build
|
||||
rm -rf @tool_target@
|
||||
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root/mingw
|
||||
cp -a include lib @tool_target@/sys-root/mingw
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,3 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
SUBDIRS = sparc
|
||||
@@ -1,30 +0,0 @@
|
||||
EXTRA_DIST += binutils-sources.add
|
||||
|
||||
BINUTILS_OPTS =
|
||||
|
||||
BINUTILS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/prep.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/build.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/rpm-install.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/target-binutils.add
|
||||
BINUTILS_SUBPACKAGES += $(top_srcdir)/binutils/base-binutils.add
|
||||
|
||||
$(TARGET)-binutils.spec.in: $(BINUTILS_SUBPACKAGES) Makefile.am $(srcdir)/binutils-sources.add
|
||||
cat $(BINUTILS_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/binutils-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "s/[@]BINUTILS_VERS[@]/$(BINUTILS_VERS)/g" \
|
||||
-e "s/[@]BINUTILS_PKGVERS[@]/$(BINUTILS_PKGVERS)/g" \
|
||||
-e "s/[@]BINUTILS_RPMREL[@]/$(BINUTILS_RPMREL)/g" \
|
||||
| $(MKSPEC0) > $(TARGET)-binutils.spec.in
|
||||
CLEANFILES += $(TARGET)-binutils.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-binutils.spec: $(TARGET)-binutils.spec.in
|
||||
$(MKSPEC) $(TARGET)-binutils.spec.in | $(SPECSTRIP) $(BINUTILS_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-binutils.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-binutils.spec
|
||||
|
||||
EXTRA_DIST += $(BINUTILS_SUBPACKAGES)
|
||||
@@ -1,40 +0,0 @@
|
||||
EXTRA_DIST += $(srcdir)/../gcc-prep.add
|
||||
EXTRA_DIST += $(srcdir)/gcc-sources.add
|
||||
|
||||
GCC_OPTS =
|
||||
|
||||
GCC_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/gccnewlib.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/prep.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/build.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gcc.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-c++.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/base-gfortran.add
|
||||
GCC_SUBPACKAGES += $(top_srcdir)/gcc/target-objc.add
|
||||
|
||||
$(TARGET)-gcc.spec.in: $(GCC_SUBPACKAGES) Makefile.am $(srcdir)/gcc-sources.add $(srcdir)/../gcc-prep.add
|
||||
cat $(GCC_SUBPACKAGES) | sed \
|
||||
-e "/[@]SOURCES[@]/r $(srcdir)/gcc-sources.add" \
|
||||
-e "/[@]SOURCES[@]/d" \
|
||||
-e "/[@]PREP[@]/r $(srcdir)/../gcc-prep.add" \
|
||||
-e "/[@]PREP[@]/d" \
|
||||
-e "s/[@]GCC_VERS[@]/$(GCC_VERS)/g" \
|
||||
-e "s/[@]GCC_PKGVERS[@]/$(GCC_PKGVERS)/g" \
|
||||
-e "s/[@]GCC_RPMREL[@]/$(GCC_RPMREL)/g" \
|
||||
-e "/[@]tool_target[@]-newlib/d" \
|
||||
-e "/[@]tool_target[@]-w32api-sys-root/d" \
|
||||
-e "/--with-newlib/d" \
|
||||
| $(MKSPEC0) > $(TARGET)-gcc.spec.in
|
||||
CLEANFILES += $(TARGET)-gcc.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-gcc.spec: $(TARGET)-gcc.spec.in
|
||||
$(MKSPEC) $(TARGET)-gcc.spec.in | $(SPECSTRIP) $(GCC_OPTS) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-gcc.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-gcc.spec
|
||||
|
||||
EXTRA_DIST += $(GCC_SUBPACKAGES)
|
||||
@@ -1,4 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.spec
|
||||
*.spec.in
|
||||
@@ -1,42 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
TARGET = sparc-sun-solaris2.7
|
||||
|
||||
include $(top_srcdir)/mkspec.am
|
||||
|
||||
SOLARIS_VERS = 2.7
|
||||
SOLARIS_RPMREL = @VERSION@
|
||||
EXTRA_DIST += libs.add
|
||||
EXTRA_DIST += target-libs.add
|
||||
|
||||
LIBS_SUBPACKAGES = $(top_srcdir)/common/common.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/libs.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/gcc/rpm-install.add
|
||||
LIBS_SUBPACKAGES += $(top_srcdir)/common/clean.add
|
||||
LIBS_SUBPACKAGES += $(srcdir)/target-libs.add
|
||||
|
||||
$(TARGET)-libs.spec.in: $(LIBS_SUBPACKAGES) Makefile.am
|
||||
cat $(LIBS_SUBPACKAGES) | sed \
|
||||
-e "s/[@]SOLARIS_VERS[@]/$(SOLARIS_VERS)/g" \
|
||||
-e "s/[@]SOLARIS_RPMREL[@]/$(SOLARIS_RPMREL)/g" \
|
||||
-e "s,%{gcc_rpmvers},%{solaris_rpmvers},g" \
|
||||
> $(TARGET)-libs.spec.in
|
||||
CLEANFILES += $(TARGET)-libs.spec.in
|
||||
|
||||
@rpmprefix@$(TARGET)-libs.spec: $(TARGET)-libs.spec.in
|
||||
$(MKSPEC) $(TARGET)-libs.spec.in | $(SPECSTRIP) > $@
|
||||
CLEANFILES += @rpmprefix@$(TARGET)-libs.spec
|
||||
noinst_DATA += @rpmprefix@$(TARGET)-libs.spec
|
||||
|
||||
|
||||
BINUTILS_VERS = 2.17
|
||||
BINUTILS_PKGVERS = $(BINUTILS_VERS)
|
||||
BINUTILS_RPMREL = @VERSION@%{?dist}
|
||||
include ../binutils.am
|
||||
BINUTILS_OPTS +=
|
||||
|
||||
GCC_VERS = 4.1.2
|
||||
GCC_PKGVERS = $(GCC_VERS)
|
||||
GCC_RPMREL = @VERSION@%{?dist}
|
||||
include ../gcc.am
|
||||
GCC_OPTS += --languages=c,cxx,f95,objc
|
||||
@@ -1,5 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/pub/binutils/binutils-%{binutils_pkgvers}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
%if "%{binutils_version}" == "2.16.1"
|
||||
Patch0: binutils-2.16.1-rtems-20050708.diff
|
||||
%endif
|
||||
@@ -1,33 +0,0 @@
|
||||
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-core-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH0@
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%if %build_cxx
|
||||
Source1: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-g++-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH1@
|
||||
%{?_without_sources:NoSource: 1}
|
||||
|
||||
%endif
|
||||
%if %build_f95
|
||||
Source2: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-fortran-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH2@
|
||||
%{?_without_sources:NoSource: 2}
|
||||
|
||||
%endif
|
||||
%if %build_gcj
|
||||
Source3: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-java-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH3@
|
||||
%{?_without_sources:NoSource: 3}
|
||||
|
||||
%endif
|
||||
%if %build_gnat
|
||||
Source4: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-ada-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH4@
|
||||
%{?_without_sources:NoSource: 4}
|
||||
|
||||
%endif
|
||||
%if %build_objc
|
||||
Source5: ftp://ftp.gnu.org/gnu/gcc/gcc-%{gcc_version}/gcc-objc-%{gcc_pkgvers}.tar.bz2
|
||||
@PATCH5@
|
||||
%{?_without_sources:NoSource: 5}
|
||||
%endif
|
||||
@@ -1,38 +0,0 @@
|
||||
%define solaris_version @SOLARIS_VERS@
|
||||
%define solaris_rpmvers %{expand:%(echo @SOLARIS_VERS@ | tr - _)}
|
||||
|
||||
%define _use_internal_dependency_generator 0
|
||||
%define __debug_install_post %{nil}
|
||||
|
||||
Name: @rpmprefix@@tool_target@
|
||||
Release: @SOLARIS_RPMREL@%{?dist}
|
||||
License: Sun Microsystems
|
||||
Group: Development/Tools
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
|
||||
Version: %solaris_rpmvers
|
||||
Summary: @tool_target@ Libraries
|
||||
|
||||
Source0: sparc-sun-solaris2.7-libs-%{solaris_version}.tar.bz2
|
||||
%{?_without_sources:NoSource: 0}
|
||||
|
||||
%description
|
||||
@tool_target@ libraries.
|
||||
|
||||
%prep
|
||||
%setup -c -q
|
||||
|
||||
%build
|
||||
rm -rf @tool_target@
|
||||
|
||||
# Setup sys-root (Usable for gcc >= 3.4)
|
||||
mkdir -p @tool_target@/sys-root
|
||||
%{__tar} cf - usr/lib usr/include lib | ( cd @tool_target@/sys-root ; %{__tar} xf -)
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT%{_prefix}
|
||||
cp -a @tool_target@ $RPM_BUILD_ROOT%{_prefix}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
%package sys-root
|
||||
Group: Development/Tools
|
||||
Summary: @tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%description sys-root
|
||||
@tool_target@ target files for gcc >= 3.4
|
||||
|
||||
%files sys-root
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_prefix}/@tool_target@
|
||||
%{_prefix}/@tool_target@/sys-root
|
||||
@@ -1,619 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Network Working Group P. Deutsch
|
||||
Request for Comments: 1950 Aladdin Enterprises
|
||||
Category: Informational J-L. Gailly
|
||||
Info-ZIP
|
||||
May 1996
|
||||
|
||||
|
||||
ZLIB Compressed Data Format Specification version 3.3
|
||||
|
||||
Status of This Memo
|
||||
|
||||
This memo provides information for the Internet community. This memo
|
||||
does not specify an Internet standard of any kind. Distribution of
|
||||
this memo is unlimited.
|
||||
|
||||
IESG Note:
|
||||
|
||||
The IESG takes no position on the validity of any Intellectual
|
||||
Property Rights statements contained in this document.
|
||||
|
||||
Notices
|
||||
|
||||
Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly
|
||||
|
||||
Permission is granted to copy and distribute this document for any
|
||||
purpose and without charge, including translations into other
|
||||
languages and incorporation into compilations, provided that the
|
||||
copyright notice and this notice are preserved, and that any
|
||||
substantive changes or deletions from the original are clearly
|
||||
marked.
|
||||
|
||||
A pointer to the latest version of this and related documentation in
|
||||
HTML format can be found at the URL
|
||||
<ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
|
||||
|
||||
Abstract
|
||||
|
||||
This specification defines a lossless compressed data format. The
|
||||
data can be produced or consumed, even for an arbitrarily long
|
||||
sequentially presented input data stream, using only an a priori
|
||||
bounded amount of intermediate storage. The format presently uses
|
||||
the DEFLATE compression method but can be easily extended to use
|
||||
other compression methods. It can be implemented readily in a manner
|
||||
not covered by patents. This specification also defines the ADLER-32
|
||||
checksum (an extension and improvement of the Fletcher checksum),
|
||||
used for detection of data corruption, and provides an algorithm for
|
||||
computing it.
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 1]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
Table of Contents
|
||||
|
||||
1. Introduction ................................................... 2
|
||||
1.1. Purpose ................................................... 2
|
||||
1.2. Intended audience ......................................... 3
|
||||
1.3. Scope ..................................................... 3
|
||||
1.4. Compliance ................................................ 3
|
||||
1.5. Definitions of terms and conventions used ................ 3
|
||||
1.6. Changes from previous versions ............................ 3
|
||||
2. Detailed specification ......................................... 3
|
||||
2.1. Overall conventions ....................................... 3
|
||||
2.2. Data format ............................................... 4
|
||||
2.3. Compliance ................................................ 7
|
||||
3. References ..................................................... 7
|
||||
4. Source code .................................................... 8
|
||||
5. Security Considerations ........................................ 8
|
||||
6. Acknowledgements ............................................... 8
|
||||
7. Authors' Addresses ............................................. 8
|
||||
8. Appendix: Rationale ............................................ 9
|
||||
9. Appendix: Sample code ..........................................10
|
||||
|
||||
1. Introduction
|
||||
|
||||
1.1. Purpose
|
||||
|
||||
The purpose of this specification is to define a lossless
|
||||
compressed data format that:
|
||||
|
||||
* Is independent of CPU type, operating system, file system,
|
||||
and character set, and hence can be used for interchange;
|
||||
|
||||
* Can be produced or consumed, even for an arbitrarily long
|
||||
sequentially presented input data stream, using only an a
|
||||
priori bounded amount of intermediate storage, and hence can
|
||||
be used in data communications or similar structures such as
|
||||
Unix filters;
|
||||
|
||||
* Can use a number of different compression methods;
|
||||
|
||||
* Can be implemented readily in a manner not covered by
|
||||
patents, and hence can be practiced freely.
|
||||
|
||||
The data format defined by this specification does not attempt to
|
||||
allow random access to compressed data.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 2]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
1.2. Intended audience
|
||||
|
||||
This specification is intended for use by implementors of software
|
||||
to compress data into zlib format and/or decompress data from zlib
|
||||
format.
|
||||
|
||||
The text of the specification assumes a basic background in
|
||||
programming at the level of bits and other primitive data
|
||||
representations.
|
||||
|
||||
1.3. Scope
|
||||
|
||||
The specification specifies a compressed data format that can be
|
||||
used for in-memory compression of a sequence of arbitrary bytes.
|
||||
|
||||
1.4. Compliance
|
||||
|
||||
Unless otherwise indicated below, a compliant decompressor must be
|
||||
able to accept and decompress any data set that conforms to all
|
||||
the specifications presented here; a compliant compressor must
|
||||
produce data sets that conform to all the specifications presented
|
||||
here.
|
||||
|
||||
1.5. Definitions of terms and conventions used
|
||||
|
||||
byte: 8 bits stored or transmitted as a unit (same as an octet).
|
||||
(For this specification, a byte is exactly 8 bits, even on
|
||||
machines which store a character on a number of bits different
|
||||
from 8.) See below, for the numbering of bits within a byte.
|
||||
|
||||
1.6. Changes from previous versions
|
||||
|
||||
Version 3.1 was the first public release of this specification.
|
||||
In version 3.2, some terminology was changed and the Adler-32
|
||||
sample code was rewritten for clarity. In version 3.3, the
|
||||
support for a preset dictionary was introduced, and the
|
||||
specification was converted to RFC style.
|
||||
|
||||
2. Detailed specification
|
||||
|
||||
2.1. Overall conventions
|
||||
|
||||
In the diagrams below, a box like this:
|
||||
|
||||
+---+
|
||||
| | <-- the vertical bars might be missing
|
||||
+---+
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 3]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
represents one byte; a box like this:
|
||||
|
||||
+==============+
|
||||
| |
|
||||
+==============+
|
||||
|
||||
represents a variable number of bytes.
|
||||
|
||||
Bytes stored within a computer do not have a "bit order", since
|
||||
they are always treated as a unit. However, a byte considered as
|
||||
an integer between 0 and 255 does have a most- and least-
|
||||
significant bit, and since we write numbers with the most-
|
||||
significant digit on the left, we also write bytes with the most-
|
||||
significant bit on the left. In the diagrams below, we number the
|
||||
bits of a byte so that bit 0 is the least-significant bit, i.e.,
|
||||
the bits are numbered:
|
||||
|
||||
+--------+
|
||||
|76543210|
|
||||
+--------+
|
||||
|
||||
Within a computer, a number may occupy multiple bytes. All
|
||||
multi-byte numbers in the format described here are stored with
|
||||
the MOST-significant byte first (at the lower memory address).
|
||||
For example, the decimal number 520 is stored as:
|
||||
|
||||
0 1
|
||||
+--------+--------+
|
||||
|00000010|00001000|
|
||||
+--------+--------+
|
||||
^ ^
|
||||
| |
|
||||
| + less significant byte = 8
|
||||
+ more significant byte = 2 x 256
|
||||
|
||||
2.2. Data format
|
||||
|
||||
A zlib stream has the following structure:
|
||||
|
||||
0 1
|
||||
+---+---+
|
||||
|CMF|FLG| (more-->)
|
||||
+---+---+
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 4]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
(if FLG.FDICT set)
|
||||
|
||||
0 1 2 3
|
||||
+---+---+---+---+
|
||||
| DICTID | (more-->)
|
||||
+---+---+---+---+
|
||||
|
||||
+=====================+---+---+---+---+
|
||||
|...compressed data...| ADLER32 |
|
||||
+=====================+---+---+---+---+
|
||||
|
||||
Any data which may appear after ADLER32 are not part of the zlib
|
||||
stream.
|
||||
|
||||
CMF (Compression Method and flags)
|
||||
This byte is divided into a 4-bit compression method and a 4-
|
||||
bit information field depending on the compression method.
|
||||
|
||||
bits 0 to 3 CM Compression method
|
||||
bits 4 to 7 CINFO Compression info
|
||||
|
||||
CM (Compression method)
|
||||
This identifies the compression method used in the file. CM = 8
|
||||
denotes the "deflate" compression method with a window size up
|
||||
to 32K. This is the method used by gzip and PNG (see
|
||||
references [1] and [2] in Chapter 3, below, for the reference
|
||||
documents). CM = 15 is reserved. It might be used in a future
|
||||
version of this specification to indicate the presence of an
|
||||
extra field before the compressed data.
|
||||
|
||||
CINFO (Compression info)
|
||||
For CM = 8, CINFO is the base-2 logarithm of the LZ77 window
|
||||
size, minus eight (CINFO=7 indicates a 32K window size). Values
|
||||
of CINFO above 7 are not allowed in this version of the
|
||||
specification. CINFO is not defined in this specification for
|
||||
CM not equal to 8.
|
||||
|
||||
FLG (FLaGs)
|
||||
This flag byte is divided as follows:
|
||||
|
||||
bits 0 to 4 FCHECK (check bits for CMF and FLG)
|
||||
bit 5 FDICT (preset dictionary)
|
||||
bits 6 to 7 FLEVEL (compression level)
|
||||
|
||||
The FCHECK value must be such that CMF and FLG, when viewed as
|
||||
a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG),
|
||||
is a multiple of 31.
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 5]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
FDICT (Preset dictionary)
|
||||
If FDICT is set, a DICT dictionary identifier is present
|
||||
immediately after the FLG byte. The dictionary is a sequence of
|
||||
bytes which are initially fed to the compressor without
|
||||
producing any compressed output. DICT is the Adler-32 checksum
|
||||
of this sequence of bytes (see the definition of ADLER32
|
||||
below). The decompressor can use this identifier to determine
|
||||
which dictionary has been used by the compressor.
|
||||
|
||||
FLEVEL (Compression level)
|
||||
These flags are available for use by specific compression
|
||||
methods. The "deflate" method (CM = 8) sets these flags as
|
||||
follows:
|
||||
|
||||
0 - compressor used fastest algorithm
|
||||
1 - compressor used fast algorithm
|
||||
2 - compressor used default algorithm
|
||||
3 - compressor used maximum compression, slowest algorithm
|
||||
|
||||
The information in FLEVEL is not needed for decompression; it
|
||||
is there to indicate if recompression might be worthwhile.
|
||||
|
||||
compressed data
|
||||
For compression method 8, the compressed data is stored in the
|
||||
deflate compressed data format as described in the document
|
||||
"DEFLATE Compressed Data Format Specification" by L. Peter
|
||||
Deutsch. (See reference [3] in Chapter 3, below)
|
||||
|
||||
Other compressed data formats are not specified in this version
|
||||
of the zlib specification.
|
||||
|
||||
ADLER32 (Adler-32 checksum)
|
||||
This contains a checksum value of the uncompressed data
|
||||
(excluding any dictionary data) computed according to Adler-32
|
||||
algorithm. This algorithm is a 32-bit extension and improvement
|
||||
of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073
|
||||
standard. See references [4] and [5] in Chapter 3, below)
|
||||
|
||||
Adler-32 is composed of two sums accumulated per byte: s1 is
|
||||
the sum of all bytes, s2 is the sum of all s1 values. Both sums
|
||||
are done modulo 65521. s1 is initialized to 1, s2 to zero. The
|
||||
Adler-32 checksum is stored as s2*65536 + s1 in most-
|
||||
significant-byte first (network) order.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 6]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
2.3. Compliance
|
||||
|
||||
A compliant compressor must produce streams with correct CMF, FLG
|
||||
and ADLER32, but need not support preset dictionaries. When the
|
||||
zlib data format is used as part of another standard data format,
|
||||
the compressor may use only preset dictionaries that are specified
|
||||
by this other data format. If this other format does not use the
|
||||
preset dictionary feature, the compressor must not set the FDICT
|
||||
flag.
|
||||
|
||||
A compliant decompressor must check CMF, FLG, and ADLER32, and
|
||||
provide an error indication if any of these have incorrect values.
|
||||
A compliant decompressor must give an error indication if CM is
|
||||
not one of the values defined in this specification (only the
|
||||
value 8 is permitted in this version), since another value could
|
||||
indicate the presence of new features that would cause subsequent
|
||||
data to be interpreted incorrectly. A compliant decompressor must
|
||||
give an error indication if FDICT is set and DICTID is not the
|
||||
identifier of a known preset dictionary. A decompressor may
|
||||
ignore FLEVEL and still be compliant. When the zlib data format
|
||||
is being used as a part of another standard format, a compliant
|
||||
decompressor must support all the preset dictionaries specified by
|
||||
the other format. When the other format does not use the preset
|
||||
dictionary feature, a compliant decompressor must reject any
|
||||
stream in which the FDICT flag is set.
|
||||
|
||||
3. References
|
||||
|
||||
[1] Deutsch, L.P.,"GZIP Compressed Data Format Specification",
|
||||
available in ftp://ftp.uu.net/pub/archiving/zip/doc/
|
||||
|
||||
[2] Thomas Boutell, "PNG (Portable Network Graphics) specification",
|
||||
available in ftp://ftp.uu.net/graphics/png/documents/
|
||||
|
||||
[3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification",
|
||||
available in ftp://ftp.uu.net/pub/archiving/zip/doc/
|
||||
|
||||
[4] Fletcher, J. G., "An Arithmetic Checksum for Serial
|
||||
Transmissions," IEEE Transactions on Communications, Vol. COM-30,
|
||||
No. 1, January 1982, pp. 247-252.
|
||||
|
||||
[5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms,"
|
||||
November, 1993, pp. 144, 145. (Available from
|
||||
gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 7]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
4. Source code
|
||||
|
||||
Source code for a C language implementation of a "zlib" compliant
|
||||
library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/.
|
||||
|
||||
5. Security Considerations
|
||||
|
||||
A decoder that fails to check the ADLER32 checksum value may be
|
||||
subject to undetected data corruption.
|
||||
|
||||
6. Acknowledgements
|
||||
|
||||
Trademarks cited in this document are the property of their
|
||||
respective owners.
|
||||
|
||||
Jean-Loup Gailly and Mark Adler designed the zlib format and wrote
|
||||
the related software described in this specification. Glenn
|
||||
Randers-Pehrson converted this document to RFC and HTML format.
|
||||
|
||||
7. Authors' Addresses
|
||||
|
||||
L. Peter Deutsch
|
||||
Aladdin Enterprises
|
||||
203 Santa Margarita Ave.
|
||||
Menlo Park, CA 94025
|
||||
|
||||
Phone: (415) 322-0103 (AM only)
|
||||
FAX: (415) 322-1734
|
||||
EMail: <ghost@aladdin.com>
|
||||
|
||||
|
||||
Jean-Loup Gailly
|
||||
|
||||
EMail: <gzip@prep.ai.mit.edu>
|
||||
|
||||
Questions about the technical content of this specification can be
|
||||
sent by email to
|
||||
|
||||
Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
|
||||
Mark Adler <madler@alumni.caltech.edu>
|
||||
|
||||
Editorial comments on this specification can be sent by email to
|
||||
|
||||
L. Peter Deutsch <ghost@aladdin.com> and
|
||||
Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 8]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
8. Appendix: Rationale
|
||||
|
||||
8.1. Preset dictionaries
|
||||
|
||||
A preset dictionary is specially useful to compress short input
|
||||
sequences. The compressor can take advantage of the dictionary
|
||||
context to encode the input in a more compact manner. The
|
||||
decompressor can be initialized with the appropriate context by
|
||||
virtually decompressing a compressed version of the dictionary
|
||||
without producing any output. However for certain compression
|
||||
algorithms such as the deflate algorithm this operation can be
|
||||
achieved without actually performing any decompression.
|
||||
|
||||
The compressor and the decompressor must use exactly the same
|
||||
dictionary. The dictionary may be fixed or may be chosen among a
|
||||
certain number of predefined dictionaries, according to the kind
|
||||
of input data. The decompressor can determine which dictionary has
|
||||
been chosen by the compressor by checking the dictionary
|
||||
identifier. This document does not specify the contents of
|
||||
predefined dictionaries, since the optimal dictionaries are
|
||||
application specific. Standard data formats using this feature of
|
||||
the zlib specification must precisely define the allowed
|
||||
dictionaries.
|
||||
|
||||
8.2. The Adler-32 algorithm
|
||||
|
||||
The Adler-32 algorithm is much faster than the CRC32 algorithm yet
|
||||
still provides an extremely low probability of undetected errors.
|
||||
|
||||
The modulo on unsigned long accumulators can be delayed for 5552
|
||||
bytes, so the modulo operation time is negligible. If the bytes
|
||||
are a, b, c, the second sum is 3a + 2b + c + 3, and so is position
|
||||
and order sensitive, unlike the first sum, which is just a
|
||||
checksum. That 65521 is prime is important to avoid a possible
|
||||
large class of two-byte errors that leave the check unchanged.
|
||||
(The Fletcher checksum uses 255, which is not prime and which also
|
||||
makes the Fletcher check insensitive to single byte changes 0 <->
|
||||
255.)
|
||||
|
||||
The sum s1 is initialized to 1 instead of zero to make the length
|
||||
of the sequence part of s2, so that the length does not have to be
|
||||
checked separately. (Any sequence of zeroes has a Fletcher
|
||||
checksum of zero.)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 9]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
9. Appendix: Sample code
|
||||
|
||||
The following C code computes the Adler-32 checksum of a data buffer.
|
||||
It is written for clarity, not for speed. The sample code is in the
|
||||
ANSI C programming language. Non C users may find it easier to read
|
||||
with these hints:
|
||||
|
||||
& Bitwise AND operator.
|
||||
>> Bitwise right shift operator. When applied to an
|
||||
unsigned quantity, as here, right shift inserts zero bit(s)
|
||||
at the left.
|
||||
<< Bitwise left shift operator. Left shift inserts zero
|
||||
bit(s) at the right.
|
||||
++ "n++" increments the variable n.
|
||||
% modulo operator: a % b is the remainder of a divided by b.
|
||||
|
||||
#define BASE 65521 /* largest prime smaller than 65536 */
|
||||
|
||||
/*
|
||||
Update a running Adler-32 checksum with the bytes buf[0..len-1]
|
||||
and return the updated checksum. The Adler-32 checksum should be
|
||||
initialized to 1.
|
||||
|
||||
Usage example:
|
||||
|
||||
unsigned long adler = 1L;
|
||||
|
||||
while (read_buffer(buffer, length) != EOF) {
|
||||
adler = update_adler32(adler, buffer, length);
|
||||
}
|
||||
if (adler != original_adler) error();
|
||||
*/
|
||||
unsigned long update_adler32(unsigned long adler,
|
||||
unsigned char *buf, int len)
|
||||
{
|
||||
unsigned long s1 = adler & 0xffff;
|
||||
unsigned long s2 = (adler >> 16) & 0xffff;
|
||||
int n;
|
||||
|
||||
for (n = 0; n < len; n++) {
|
||||
s1 = (s1 + buf[n]) % BASE;
|
||||
s2 = (s2 + s1) % BASE;
|
||||
}
|
||||
return (s2 << 16) + s1;
|
||||
}
|
||||
|
||||
/* Return the adler32 of the bytes buf[0..len-1] */
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 10]
|
||||
|
||||
RFC 1950 ZLIB Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
unsigned long adler32(unsigned char *buf, int len)
|
||||
{
|
||||
return update_adler32(1L, buf, len);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch & Gailly Informational [Page 11]
|
||||
|
||||
@@ -1,955 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Network Working Group P. Deutsch
|
||||
Request for Comments: 1951 Aladdin Enterprises
|
||||
Category: Informational May 1996
|
||||
|
||||
|
||||
DEFLATE Compressed Data Format Specification version 1.3
|
||||
|
||||
Status of This Memo
|
||||
|
||||
This memo provides information for the Internet community. This memo
|
||||
does not specify an Internet standard of any kind. Distribution of
|
||||
this memo is unlimited.
|
||||
|
||||
IESG Note:
|
||||
|
||||
The IESG takes no position on the validity of any Intellectual
|
||||
Property Rights statements contained in this document.
|
||||
|
||||
Notices
|
||||
|
||||
Copyright (c) 1996 L. Peter Deutsch
|
||||
|
||||
Permission is granted to copy and distribute this document for any
|
||||
purpose and without charge, including translations into other
|
||||
languages and incorporation into compilations, provided that the
|
||||
copyright notice and this notice are preserved, and that any
|
||||
substantive changes or deletions from the original are clearly
|
||||
marked.
|
||||
|
||||
A pointer to the latest version of this and related documentation in
|
||||
HTML format can be found at the URL
|
||||
<ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
|
||||
|
||||
Abstract
|
||||
|
||||
This specification defines a lossless compressed data format that
|
||||
compresses data using a combination of the LZ77 algorithm and Huffman
|
||||
coding, with efficiency comparable to the best currently available
|
||||
general-purpose compression methods. The data can be produced or
|
||||
consumed, even for an arbitrarily long sequentially presented input
|
||||
data stream, using only an a priori bounded amount of intermediate
|
||||
storage. The format can be implemented readily in a manner not
|
||||
covered by patents.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 1]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
Table of Contents
|
||||
|
||||
1. Introduction ................................................... 2
|
||||
1.1. Purpose ................................................... 2
|
||||
1.2. Intended audience ......................................... 3
|
||||
1.3. Scope ..................................................... 3
|
||||
1.4. Compliance ................................................ 3
|
||||
1.5. Definitions of terms and conventions used ................ 3
|
||||
1.6. Changes from previous versions ............................ 4
|
||||
2. Compressed representation overview ............................. 4
|
||||
3. Detailed specification ......................................... 5
|
||||
3.1. Overall conventions ....................................... 5
|
||||
3.1.1. Packing into bytes .................................. 5
|
||||
3.2. Compressed block format ................................... 6
|
||||
3.2.1. Synopsis of prefix and Huffman coding ............... 6
|
||||
3.2.2. Use of Huffman coding in the "deflate" format ....... 7
|
||||
3.2.3. Details of block format ............................. 9
|
||||
3.2.4. Non-compressed blocks (BTYPE=00) ................... 11
|
||||
3.2.5. Compressed blocks (length and distance codes) ...... 11
|
||||
3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12
|
||||
3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13
|
||||
3.3. Compliance ............................................... 14
|
||||
4. Compression algorithm details ................................. 14
|
||||
5. References .................................................... 16
|
||||
6. Security Considerations ....................................... 16
|
||||
7. Source code ................................................... 16
|
||||
8. Acknowledgements .............................................. 16
|
||||
9. Author's Address .............................................. 17
|
||||
|
||||
1. Introduction
|
||||
|
||||
1.1. Purpose
|
||||
|
||||
The purpose of this specification is to define a lossless
|
||||
compressed data format that:
|
||||
* Is independent of CPU type, operating system, file system,
|
||||
and character set, and hence can be used for interchange;
|
||||
* Can be produced or consumed, even for an arbitrarily long
|
||||
sequentially presented input data stream, using only an a
|
||||
priori bounded amount of intermediate storage, and hence
|
||||
can be used in data communications or similar structures
|
||||
such as Unix filters;
|
||||
* Compresses data with efficiency comparable to the best
|
||||
currently available general-purpose compression methods,
|
||||
and in particular considerably better than the "compress"
|
||||
program;
|
||||
* Can be implemented readily in a manner not covered by
|
||||
patents, and hence can be practiced freely;
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 2]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
* Is compatible with the file format produced by the current
|
||||
widely used gzip utility, in that conforming decompressors
|
||||
will be able to read data produced by the existing gzip
|
||||
compressor.
|
||||
|
||||
The data format defined by this specification does not attempt to:
|
||||
|
||||
* Allow random access to compressed data;
|
||||
* Compress specialized data (e.g., raster graphics) as well
|
||||
as the best currently available specialized algorithms.
|
||||
|
||||
A simple counting argument shows that no lossless compression
|
||||
algorithm can compress every possible input data set. For the
|
||||
format defined here, the worst case expansion is 5 bytes per 32K-
|
||||
byte block, i.e., a size increase of 0.015% for large data sets.
|
||||
English text usually compresses by a factor of 2.5 to 3;
|
||||
executable files usually compress somewhat less; graphical data
|
||||
such as raster images may compress much more.
|
||||
|
||||
1.2. Intended audience
|
||||
|
||||
This specification is intended for use by implementors of software
|
||||
to compress data into "deflate" format and/or decompress data from
|
||||
"deflate" format.
|
||||
|
||||
The text of the specification assumes a basic background in
|
||||
programming at the level of bits and other primitive data
|
||||
representations. Familiarity with the technique of Huffman coding
|
||||
is helpful but not required.
|
||||
|
||||
1.3. Scope
|
||||
|
||||
The specification specifies a method for representing a sequence
|
||||
of bytes as a (usually shorter) sequence of bits, and a method for
|
||||
packing the latter bit sequence into bytes.
|
||||
|
||||
1.4. Compliance
|
||||
|
||||
Unless otherwise indicated below, a compliant decompressor must be
|
||||
able to accept and decompress any data set that conforms to all
|
||||
the specifications presented here; a compliant compressor must
|
||||
produce data sets that conform to all the specifications presented
|
||||
here.
|
||||
|
||||
1.5. Definitions of terms and conventions used
|
||||
|
||||
Byte: 8 bits stored or transmitted as a unit (same as an octet).
|
||||
For this specification, a byte is exactly 8 bits, even on machines
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 3]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
which store a character on a number of bits different from eight.
|
||||
See below, for the numbering of bits within a byte.
|
||||
|
||||
String: a sequence of arbitrary bytes.
|
||||
|
||||
1.6. Changes from previous versions
|
||||
|
||||
There have been no technical changes to the deflate format since
|
||||
version 1.1 of this specification. In version 1.2, some
|
||||
terminology was changed. Version 1.3 is a conversion of the
|
||||
specification to RFC style.
|
||||
|
||||
2. Compressed representation overview
|
||||
|
||||
A compressed data set consists of a series of blocks, corresponding
|
||||
to successive blocks of input data. The block sizes are arbitrary,
|
||||
except that non-compressible blocks are limited to 65,535 bytes.
|
||||
|
||||
Each block is compressed using a combination of the LZ77 algorithm
|
||||
and Huffman coding. The Huffman trees for each block are independent
|
||||
of those for previous or subsequent blocks; the LZ77 algorithm may
|
||||
use a reference to a duplicated string occurring in a previous block,
|
||||
up to 32K input bytes before.
|
||||
|
||||
Each block consists of two parts: a pair of Huffman code trees that
|
||||
describe the representation of the compressed data part, and a
|
||||
compressed data part. (The Huffman trees themselves are compressed
|
||||
using Huffman encoding.) The compressed data consists of a series of
|
||||
elements of two types: literal bytes (of strings that have not been
|
||||
detected as duplicated within the previous 32K input bytes), and
|
||||
pointers to duplicated strings, where a pointer is represented as a
|
||||
pair <length, backward distance>. The representation used in the
|
||||
"deflate" format limits distances to 32K bytes and lengths to 258
|
||||
bytes, but does not limit the size of a block, except for
|
||||
uncompressible blocks, which are limited as noted above.
|
||||
|
||||
Each type of value (literals, distances, and lengths) in the
|
||||
compressed data is represented using a Huffman code, using one code
|
||||
tree for literals and lengths and a separate code tree for distances.
|
||||
The code trees for each block appear in a compact form just before
|
||||
the compressed data for that block.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 4]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
3. Detailed specification
|
||||
|
||||
3.1. Overall conventions In the diagrams below, a box like this:
|
||||
|
||||
+---+
|
||||
| | <-- the vertical bars might be missing
|
||||
+---+
|
||||
|
||||
represents one byte; a box like this:
|
||||
|
||||
+==============+
|
||||
| |
|
||||
+==============+
|
||||
|
||||
represents a variable number of bytes.
|
||||
|
||||
Bytes stored within a computer do not have a "bit order", since
|
||||
they are always treated as a unit. However, a byte considered as
|
||||
an integer between 0 and 255 does have a most- and least-
|
||||
significant bit, and since we write numbers with the most-
|
||||
significant digit on the left, we also write bytes with the most-
|
||||
significant bit on the left. In the diagrams below, we number the
|
||||
bits of a byte so that bit 0 is the least-significant bit, i.e.,
|
||||
the bits are numbered:
|
||||
|
||||
+--------+
|
||||
|76543210|
|
||||
+--------+
|
||||
|
||||
Within a computer, a number may occupy multiple bytes. All
|
||||
multi-byte numbers in the format described here are stored with
|
||||
the least-significant byte first (at the lower memory address).
|
||||
For example, the decimal number 520 is stored as:
|
||||
|
||||
0 1
|
||||
+--------+--------+
|
||||
|00001000|00000010|
|
||||
+--------+--------+
|
||||
^ ^
|
||||
| |
|
||||
| + more significant byte = 2 x 256
|
||||
+ less significant byte = 8
|
||||
|
||||
3.1.1. Packing into bytes
|
||||
|
||||
This document does not address the issue of the order in which
|
||||
bits of a byte are transmitted on a bit-sequential medium,
|
||||
since the final data format described here is byte- rather than
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 5]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
bit-oriented. However, we describe the compressed block format
|
||||
in below, as a sequence of data elements of various bit
|
||||
lengths, not a sequence of bytes. We must therefore specify
|
||||
how to pack these data elements into bytes to form the final
|
||||
compressed byte sequence:
|
||||
|
||||
* Data elements are packed into bytes in order of
|
||||
increasing bit number within the byte, i.e., starting
|
||||
with the least-significant bit of the byte.
|
||||
* Data elements other than Huffman codes are packed
|
||||
starting with the least-significant bit of the data
|
||||
element.
|
||||
* Huffman codes are packed starting with the most-
|
||||
significant bit of the code.
|
||||
|
||||
In other words, if one were to print out the compressed data as
|
||||
a sequence of bytes, starting with the first byte at the
|
||||
*right* margin and proceeding to the *left*, with the most-
|
||||
significant bit of each byte on the left as usual, one would be
|
||||
able to parse the result from right to left, with fixed-width
|
||||
elements in the correct MSB-to-LSB order and Huffman codes in
|
||||
bit-reversed order (i.e., with the first bit of the code in the
|
||||
relative LSB position).
|
||||
|
||||
3.2. Compressed block format
|
||||
|
||||
3.2.1. Synopsis of prefix and Huffman coding
|
||||
|
||||
Prefix coding represents symbols from an a priori known
|
||||
alphabet by bit sequences (codes), one code for each symbol, in
|
||||
a manner such that different symbols may be represented by bit
|
||||
sequences of different lengths, but a parser can always parse
|
||||
an encoded string unambiguously symbol-by-symbol.
|
||||
|
||||
We define a prefix code in terms of a binary tree in which the
|
||||
two edges descending from each non-leaf node are labeled 0 and
|
||||
1 and in which the leaf nodes correspond one-for-one with (are
|
||||
labeled with) the symbols of the alphabet; then the code for a
|
||||
symbol is the sequence of 0's and 1's on the edges leading from
|
||||
the root to the leaf labeled with that symbol. For example:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 6]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
/\ Symbol Code
|
||||
0 1 ------ ----
|
||||
/ \ A 00
|
||||
/\ B B 1
|
||||
0 1 C 011
|
||||
/ \ D 010
|
||||
A /\
|
||||
0 1
|
||||
/ \
|
||||
D C
|
||||
|
||||
A parser can decode the next symbol from an encoded input
|
||||
stream by walking down the tree from the root, at each step
|
||||
choosing the edge corresponding to the next input bit.
|
||||
|
||||
Given an alphabet with known symbol frequencies, the Huffman
|
||||
algorithm allows the construction of an optimal prefix code
|
||||
(one which represents strings with those symbol frequencies
|
||||
using the fewest bits of any possible prefix codes for that
|
||||
alphabet). Such a code is called a Huffman code. (See
|
||||
reference [1] in Chapter 5, references for additional
|
||||
information on Huffman codes.)
|
||||
|
||||
Note that in the "deflate" format, the Huffman codes for the
|
||||
various alphabets must not exceed certain maximum code lengths.
|
||||
This constraint complicates the algorithm for computing code
|
||||
lengths from symbol frequencies. Again, see Chapter 5,
|
||||
references for details.
|
||||
|
||||
3.2.2. Use of Huffman coding in the "deflate" format
|
||||
|
||||
The Huffman codes used for each alphabet in the "deflate"
|
||||
format have two additional rules:
|
||||
|
||||
* All codes of a given bit length have lexicographically
|
||||
consecutive values, in the same order as the symbols
|
||||
they represent;
|
||||
|
||||
* Shorter codes lexicographically precede longer codes.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 7]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
We could recode the example above to follow this rule as
|
||||
follows, assuming that the order of the alphabet is ABCD:
|
||||
|
||||
Symbol Code
|
||||
------ ----
|
||||
A 10
|
||||
B 0
|
||||
C 110
|
||||
D 111
|
||||
|
||||
I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are
|
||||
lexicographically consecutive.
|
||||
|
||||
Given this rule, we can define the Huffman code for an alphabet
|
||||
just by giving the bit lengths of the codes for each symbol of
|
||||
the alphabet in order; this is sufficient to determine the
|
||||
actual codes. In our example, the code is completely defined
|
||||
by the sequence of bit lengths (2, 1, 3, 3). The following
|
||||
algorithm generates the codes as integers, intended to be read
|
||||
from most- to least-significant bit. The code lengths are
|
||||
initially in tree[I].Len; the codes are produced in
|
||||
tree[I].Code.
|
||||
|
||||
1) Count the number of codes for each code length. Let
|
||||
bl_count[N] be the number of codes of length N, N >= 1.
|
||||
|
||||
2) Find the numerical value of the smallest code for each
|
||||
code length:
|
||||
|
||||
code = 0;
|
||||
bl_count[0] = 0;
|
||||
for (bits = 1; bits <= MAX_BITS; bits++) {
|
||||
code = (code + bl_count[bits-1]) << 1;
|
||||
next_code[bits] = code;
|
||||
}
|
||||
|
||||
3) Assign numerical values to all codes, using consecutive
|
||||
values for all codes of the same length with the base
|
||||
values determined at step 2. Codes that are never used
|
||||
(which have a bit length of zero) must not be assigned a
|
||||
value.
|
||||
|
||||
for (n = 0; n <= max_code; n++) {
|
||||
len = tree[n].Len;
|
||||
if (len != 0) {
|
||||
tree[n].Code = next_code[len];
|
||||
next_code[len]++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 8]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
}
|
||||
|
||||
Example:
|
||||
|
||||
Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3,
|
||||
3, 2, 4, 4). After step 1, we have:
|
||||
|
||||
N bl_count[N]
|
||||
- -----------
|
||||
2 1
|
||||
3 5
|
||||
4 2
|
||||
|
||||
Step 2 computes the following next_code values:
|
||||
|
||||
N next_code[N]
|
||||
- ------------
|
||||
1 0
|
||||
2 0
|
||||
3 2
|
||||
4 14
|
||||
|
||||
Step 3 produces the following code values:
|
||||
|
||||
Symbol Length Code
|
||||
------ ------ ----
|
||||
A 3 010
|
||||
B 3 011
|
||||
C 3 100
|
||||
D 3 101
|
||||
E 3 110
|
||||
F 2 00
|
||||
G 4 1110
|
||||
H 4 1111
|
||||
|
||||
3.2.3. Details of block format
|
||||
|
||||
Each block of compressed data begins with 3 header bits
|
||||
containing the following data:
|
||||
|
||||
first bit BFINAL
|
||||
next 2 bits BTYPE
|
||||
|
||||
Note that the header bits do not necessarily begin on a byte
|
||||
boundary, since a block does not necessarily occupy an integral
|
||||
number of bytes.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 9]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
BFINAL is set if and only if this is the last block of the data
|
||||
set.
|
||||
|
||||
BTYPE specifies how the data are compressed, as follows:
|
||||
|
||||
00 - no compression
|
||||
01 - compressed with fixed Huffman codes
|
||||
10 - compressed with dynamic Huffman codes
|
||||
11 - reserved (error)
|
||||
|
||||
The only difference between the two compressed cases is how the
|
||||
Huffman codes for the literal/length and distance alphabets are
|
||||
defined.
|
||||
|
||||
In all cases, the decoding algorithm for the actual data is as
|
||||
follows:
|
||||
|
||||
do
|
||||
read block header from input stream.
|
||||
if stored with no compression
|
||||
skip any remaining bits in current partially
|
||||
processed byte
|
||||
read LEN and NLEN (see next section)
|
||||
copy LEN bytes of data to output
|
||||
otherwise
|
||||
if compressed with dynamic Huffman codes
|
||||
read representation of code trees (see
|
||||
subsection below)
|
||||
loop (until end of block code recognized)
|
||||
decode literal/length value from input stream
|
||||
if value < 256
|
||||
copy value (literal byte) to output stream
|
||||
otherwise
|
||||
if value = end of block (256)
|
||||
break from loop
|
||||
otherwise (value = 257..285)
|
||||
decode distance from input stream
|
||||
|
||||
move backwards distance bytes in the output
|
||||
stream, and copy length bytes from this
|
||||
position to the output stream.
|
||||
end loop
|
||||
while not last block
|
||||
|
||||
Note that a duplicated string reference may refer to a string
|
||||
in a previous block; i.e., the backward distance may cross one
|
||||
or more block boundaries. However a distance cannot refer past
|
||||
the beginning of the output stream. (An application using a
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 10]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
preset dictionary might discard part of the output stream; a
|
||||
distance can refer to that part of the output stream anyway)
|
||||
Note also that the referenced string may overlap the current
|
||||
position; for example, if the last 2 bytes decoded have values
|
||||
X and Y, a string reference with <length = 5, distance = 2>
|
||||
adds X,Y,X,Y,X to the output stream.
|
||||
|
||||
We now specify each compression method in turn.
|
||||
|
||||
3.2.4. Non-compressed blocks (BTYPE=00)
|
||||
|
||||
Any bits of input up to the next byte boundary are ignored.
|
||||
The rest of the block consists of the following information:
|
||||
|
||||
0 1 2 3 4...
|
||||
+---+---+---+---+================================+
|
||||
| LEN | NLEN |... LEN bytes of literal data...|
|
||||
+---+---+---+---+================================+
|
||||
|
||||
LEN is the number of data bytes in the block. NLEN is the
|
||||
one's complement of LEN.
|
||||
|
||||
3.2.5. Compressed blocks (length and distance codes)
|
||||
|
||||
As noted above, encoded data blocks in the "deflate" format
|
||||
consist of sequences of symbols drawn from three conceptually
|
||||
distinct alphabets: either literal bytes, from the alphabet of
|
||||
byte values (0..255), or <length, backward distance> pairs,
|
||||
where the length is drawn from (3..258) and the distance is
|
||||
drawn from (1..32,768). In fact, the literal and length
|
||||
alphabets are merged into a single alphabet (0..285), where
|
||||
values 0..255 represent literal bytes, the value 256 indicates
|
||||
end-of-block, and values 257..285 represent length codes
|
||||
(possibly in conjunction with extra bits following the symbol
|
||||
code) as follows:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 11]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
Extra Extra Extra
|
||||
Code Bits Length(s) Code Bits Lengths Code Bits Length(s)
|
||||
---- ---- ------ ---- ---- ------- ---- ---- -------
|
||||
257 0 3 267 1 15,16 277 4 67-82
|
||||
258 0 4 268 1 17,18 278 4 83-98
|
||||
259 0 5 269 2 19-22 279 4 99-114
|
||||
260 0 6 270 2 23-26 280 4 115-130
|
||||
261 0 7 271 2 27-30 281 5 131-162
|
||||
262 0 8 272 2 31-34 282 5 163-194
|
||||
263 0 9 273 3 35-42 283 5 195-226
|
||||
264 0 10 274 3 43-50 284 5 227-257
|
||||
265 1 11,12 275 3 51-58 285 0 258
|
||||
266 1 13,14 276 3 59-66
|
||||
|
||||
The extra bits should be interpreted as a machine integer
|
||||
stored with the most-significant bit first, e.g., bits 1110
|
||||
represent the value 14.
|
||||
|
||||
Extra Extra Extra
|
||||
Code Bits Dist Code Bits Dist Code Bits Distance
|
||||
---- ---- ---- ---- ---- ------ ---- ---- --------
|
||||
0 0 1 10 4 33-48 20 9 1025-1536
|
||||
1 0 2 11 4 49-64 21 9 1537-2048
|
||||
2 0 3 12 5 65-96 22 10 2049-3072
|
||||
3 0 4 13 5 97-128 23 10 3073-4096
|
||||
4 1 5,6 14 6 129-192 24 11 4097-6144
|
||||
5 1 7,8 15 6 193-256 25 11 6145-8192
|
||||
6 2 9-12 16 7 257-384 26 12 8193-12288
|
||||
7 2 13-16 17 7 385-512 27 12 12289-16384
|
||||
8 3 17-24 18 8 513-768 28 13 16385-24576
|
||||
9 3 25-32 19 8 769-1024 29 13 24577-32768
|
||||
|
||||
3.2.6. Compression with fixed Huffman codes (BTYPE=01)
|
||||
|
||||
The Huffman codes for the two alphabets are fixed, and are not
|
||||
represented explicitly in the data. The Huffman code lengths
|
||||
for the literal/length alphabet are:
|
||||
|
||||
Lit Value Bits Codes
|
||||
--------- ---- -----
|
||||
0 - 143 8 00110000 through
|
||||
10111111
|
||||
144 - 255 9 110010000 through
|
||||
111111111
|
||||
256 - 279 7 0000000 through
|
||||
0010111
|
||||
280 - 287 8 11000000 through
|
||||
11000111
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 12]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
The code lengths are sufficient to generate the actual codes,
|
||||
as described above; we show the codes in the table for added
|
||||
clarity. Literal/length values 286-287 will never actually
|
||||
occur in the compressed data, but participate in the code
|
||||
construction.
|
||||
|
||||
Distance codes 0-31 are represented by (fixed-length) 5-bit
|
||||
codes, with possible additional bits as shown in the table
|
||||
shown in Paragraph 3.2.5, above. Note that distance codes 30-
|
||||
31 will never actually occur in the compressed data.
|
||||
|
||||
3.2.7. Compression with dynamic Huffman codes (BTYPE=10)
|
||||
|
||||
The Huffman codes for the two alphabets appear in the block
|
||||
immediately after the header bits and before the actual
|
||||
compressed data, first the literal/length code and then the
|
||||
distance code. Each code is defined by a sequence of code
|
||||
lengths, as discussed in Paragraph 3.2.2, above. For even
|
||||
greater compactness, the code length sequences themselves are
|
||||
compressed using a Huffman code. The alphabet for code lengths
|
||||
is as follows:
|
||||
|
||||
0 - 15: Represent code lengths of 0 - 15
|
||||
16: Copy the previous code length 3 - 6 times.
|
||||
The next 2 bits indicate repeat length
|
||||
(0 = 3, ... , 3 = 6)
|
||||
Example: Codes 8, 16 (+2 bits 11),
|
||||
16 (+2 bits 10) will expand to
|
||||
12 code lengths of 8 (1 + 6 + 5)
|
||||
17: Repeat a code length of 0 for 3 - 10 times.
|
||||
(3 bits of length)
|
||||
18: Repeat a code length of 0 for 11 - 138 times
|
||||
(7 bits of length)
|
||||
|
||||
A code length of 0 indicates that the corresponding symbol in
|
||||
the literal/length or distance alphabet will not occur in the
|
||||
block, and should not participate in the Huffman code
|
||||
construction algorithm given earlier. If only one distance
|
||||
code is used, it is encoded using one bit, not zero bits; in
|
||||
this case there is a single code length of one, with one unused
|
||||
code. One distance code of zero bits means that there are no
|
||||
distance codes used at all (the data is all literals).
|
||||
|
||||
We can now define the format of the block:
|
||||
|
||||
5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286)
|
||||
5 Bits: HDIST, # of Distance codes - 1 (1 - 32)
|
||||
4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19)
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 13]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
(HCLEN + 4) x 3 bits: code lengths for the code length
|
||||
alphabet given just above, in the order: 16, 17, 18,
|
||||
0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
|
||||
|
||||
These code lengths are interpreted as 3-bit integers
|
||||
(0-7); as above, a code length of 0 means the
|
||||
corresponding symbol (literal/length or distance code
|
||||
length) is not used.
|
||||
|
||||
HLIT + 257 code lengths for the literal/length alphabet,
|
||||
encoded using the code length Huffman code
|
||||
|
||||
HDIST + 1 code lengths for the distance alphabet,
|
||||
encoded using the code length Huffman code
|
||||
|
||||
The actual compressed data of the block,
|
||||
encoded using the literal/length and distance Huffman
|
||||
codes
|
||||
|
||||
The literal/length symbol 256 (end of data),
|
||||
encoded using the literal/length Huffman code
|
||||
|
||||
The code length repeat codes can cross from HLIT + 257 to the
|
||||
HDIST + 1 code lengths. In other words, all code lengths form
|
||||
a single sequence of HLIT + HDIST + 258 values.
|
||||
|
||||
3.3. Compliance
|
||||
|
||||
A compressor may limit further the ranges of values specified in
|
||||
the previous section and still be compliant; for example, it may
|
||||
limit the range of backward pointers to some value smaller than
|
||||
32K. Similarly, a compressor may limit the size of blocks so that
|
||||
a compressible block fits in memory.
|
||||
|
||||
A compliant decompressor must accept the full range of possible
|
||||
values defined in the previous section, and must accept blocks of
|
||||
arbitrary size.
|
||||
|
||||
4. Compression algorithm details
|
||||
|
||||
While it is the intent of this document to define the "deflate"
|
||||
compressed data format without reference to any particular
|
||||
compression algorithm, the format is related to the compressed
|
||||
formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below);
|
||||
since many variations of LZ77 are patented, it is strongly
|
||||
recommended that the implementor of a compressor follow the general
|
||||
algorithm presented here, which is known not to be patented per se.
|
||||
The material in this section is not part of the definition of the
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 14]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
specification per se, and a compressor need not follow it in order to
|
||||
be compliant.
|
||||
|
||||
The compressor terminates a block when it determines that starting a
|
||||
new block with fresh trees would be useful, or when the block size
|
||||
fills up the compressor's block buffer.
|
||||
|
||||
The compressor uses a chained hash table to find duplicated strings,
|
||||
using a hash function that operates on 3-byte sequences. At any
|
||||
given point during compression, let XYZ be the next 3 input bytes to
|
||||
be examined (not necessarily all different, of course). First, the
|
||||
compressor examines the hash chain for XYZ. If the chain is empty,
|
||||
the compressor simply writes out X as a literal byte and advances one
|
||||
byte in the input. If the hash chain is not empty, indicating that
|
||||
the sequence XYZ (or, if we are unlucky, some other 3 bytes with the
|
||||
same hash function value) has occurred recently, the compressor
|
||||
compares all strings on the XYZ hash chain with the actual input data
|
||||
sequence starting at the current point, and selects the longest
|
||||
match.
|
||||
|
||||
The compressor searches the hash chains starting with the most recent
|
||||
strings, to favor small distances and thus take advantage of the
|
||||
Huffman encoding. The hash chains are singly linked. There are no
|
||||
deletions from the hash chains; the algorithm simply discards matches
|
||||
that are too old. To avoid a worst-case situation, very long hash
|
||||
chains are arbitrarily truncated at a certain length, determined by a
|
||||
run-time parameter.
|
||||
|
||||
To improve overall compression, the compressor optionally defers the
|
||||
selection of matches ("lazy matching"): after a match of length N has
|
||||
been found, the compressor searches for a longer match starting at
|
||||
the next input byte. If it finds a longer match, it truncates the
|
||||
previous match to a length of one (thus producing a single literal
|
||||
byte) and then emits the longer match. Otherwise, it emits the
|
||||
original match, and, as described above, advances N bytes before
|
||||
continuing.
|
||||
|
||||
Run-time parameters also control this "lazy match" procedure. If
|
||||
compression ratio is most important, the compressor attempts a
|
||||
complete second search regardless of the length of the first match.
|
||||
In the normal case, if the current match is "long enough", the
|
||||
compressor reduces the search for a longer match, thus speeding up
|
||||
the process. If speed is most important, the compressor inserts new
|
||||
strings in the hash table only when no match was found, or when the
|
||||
match is not "too long". This degrades the compression ratio but
|
||||
saves time since there are both fewer insertions and fewer searches.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 15]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
5. References
|
||||
|
||||
[1] Huffman, D. A., "A Method for the Construction of Minimum
|
||||
Redundancy Codes", Proceedings of the Institute of Radio
|
||||
Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101.
|
||||
|
||||
[2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data
|
||||
Compression", IEEE Transactions on Information Theory, Vol. 23,
|
||||
No. 3, pp. 337-343.
|
||||
|
||||
[3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources,
|
||||
available in ftp://ftp.uu.net/pub/archiving/zip/doc/
|
||||
|
||||
[4] Gailly, J.-L., and Adler, M., GZIP documentation and sources,
|
||||
available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/
|
||||
|
||||
[5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix
|
||||
encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169.
|
||||
|
||||
[6] Hirschberg and Lelewer, "Efficient decoding of prefix codes,"
|
||||
Comm. ACM, 33,4, April 1990, pp. 449-459.
|
||||
|
||||
6. Security Considerations
|
||||
|
||||
Any data compression method involves the reduction of redundancy in
|
||||
the data. Consequently, any corruption of the data is likely to have
|
||||
severe effects and be difficult to correct. Uncompressed text, on
|
||||
the other hand, will probably still be readable despite the presence
|
||||
of some corrupted bytes.
|
||||
|
||||
It is recommended that systems using this data format provide some
|
||||
means of validating the integrity of the compressed data. See
|
||||
reference [3], for example.
|
||||
|
||||
7. Source code
|
||||
|
||||
Source code for a C language implementation of a "deflate" compliant
|
||||
compressor and decompressor is available within the zlib package at
|
||||
ftp://ftp.uu.net/pub/archiving/zip/zlib/.
|
||||
|
||||
8. Acknowledgements
|
||||
|
||||
Trademarks cited in this document are the property of their
|
||||
respective owners.
|
||||
|
||||
Phil Katz designed the deflate format. Jean-Loup Gailly and Mark
|
||||
Adler wrote the related software described in this specification.
|
||||
Glenn Randers-Pehrson converted this document to RFC and HTML format.
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 16]
|
||||
|
||||
RFC 1951 DEFLATE Compressed Data Format Specification May 1996
|
||||
|
||||
|
||||
9. Author's Address
|
||||
|
||||
L. Peter Deutsch
|
||||
Aladdin Enterprises
|
||||
203 Santa Margarita Ave.
|
||||
Menlo Park, CA 94025
|
||||
|
||||
Phone: (415) 322-0103 (AM only)
|
||||
FAX: (415) 322-1734
|
||||
EMail: <ghost@aladdin.com>
|
||||
|
||||
Questions about the technical content of this specification can be
|
||||
sent by email to:
|
||||
|
||||
Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
|
||||
Mark Adler <madler@alumni.caltech.edu>
|
||||
|
||||
Editorial comments on this specification can be sent by email to:
|
||||
|
||||
L. Peter Deutsch <ghost@aladdin.com> and
|
||||
Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 17]
|
||||
|
||||
@@ -1,675 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Network Working Group P. Deutsch
|
||||
Request for Comments: 1952 Aladdin Enterprises
|
||||
Category: Informational May 1996
|
||||
|
||||
|
||||
GZIP file format specification version 4.3
|
||||
|
||||
Status of This Memo
|
||||
|
||||
This memo provides information for the Internet community. This memo
|
||||
does not specify an Internet standard of any kind. Distribution of
|
||||
this memo is unlimited.
|
||||
|
||||
IESG Note:
|
||||
|
||||
The IESG takes no position on the validity of any Intellectual
|
||||
Property Rights statements contained in this document.
|
||||
|
||||
Notices
|
||||
|
||||
Copyright (c) 1996 L. Peter Deutsch
|
||||
|
||||
Permission is granted to copy and distribute this document for any
|
||||
purpose and without charge, including translations into other
|
||||
languages and incorporation into compilations, provided that the
|
||||
copyright notice and this notice are preserved, and that any
|
||||
substantive changes or deletions from the original are clearly
|
||||
marked.
|
||||
|
||||
A pointer to the latest version of this and related documentation in
|
||||
HTML format can be found at the URL
|
||||
<ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
|
||||
|
||||
Abstract
|
||||
|
||||
This specification defines a lossless compressed data format that is
|
||||
compatible with the widely used GZIP utility. The format includes a
|
||||
cyclic redundancy check value for detecting data corruption. The
|
||||
format presently uses the DEFLATE method of compression but can be
|
||||
easily extended to use other compression methods. The format can be
|
||||
implemented readily in a manner not covered by patents.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 1]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
Table of Contents
|
||||
|
||||
1. Introduction ................................................... 2
|
||||
1.1. Purpose ................................................... 2
|
||||
1.2. Intended audience ......................................... 3
|
||||
1.3. Scope ..................................................... 3
|
||||
1.4. Compliance ................................................ 3
|
||||
1.5. Definitions of terms and conventions used ................. 3
|
||||
1.6. Changes from previous versions ............................ 3
|
||||
2. Detailed specification ......................................... 4
|
||||
2.1. Overall conventions ....................................... 4
|
||||
2.2. File format ............................................... 5
|
||||
2.3. Member format ............................................. 5
|
||||
2.3.1. Member header and trailer ........................... 6
|
||||
2.3.1.1. Extra field ................................... 8
|
||||
2.3.1.2. Compliance .................................... 9
|
||||
3. References .................................................. 9
|
||||
4. Security Considerations .................................... 10
|
||||
5. Acknowledgements ........................................... 10
|
||||
6. Author's Address ........................................... 10
|
||||
7. Appendix: Jean-Loup Gailly's gzip utility .................. 11
|
||||
8. Appendix: Sample CRC Code .................................. 11
|
||||
|
||||
1. Introduction
|
||||
|
||||
1.1. Purpose
|
||||
|
||||
The purpose of this specification is to define a lossless
|
||||
compressed data format that:
|
||||
|
||||
* Is independent of CPU type, operating system, file system,
|
||||
and character set, and hence can be used for interchange;
|
||||
* Can compress or decompress a data stream (as opposed to a
|
||||
randomly accessible file) to produce another data stream,
|
||||
using only an a priori bounded amount of intermediate
|
||||
storage, and hence can be used in data communications or
|
||||
similar structures such as Unix filters;
|
||||
* Compresses data with efficiency comparable to the best
|
||||
currently available general-purpose compression methods,
|
||||
and in particular considerably better than the "compress"
|
||||
program;
|
||||
* Can be implemented readily in a manner not covered by
|
||||
patents, and hence can be practiced freely;
|
||||
* Is compatible with the file format produced by the current
|
||||
widely used gzip utility, in that conforming decompressors
|
||||
will be able to read data produced by the existing gzip
|
||||
compressor.
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 2]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
The data format defined by this specification does not attempt to:
|
||||
|
||||
* Provide random access to compressed data;
|
||||
* Compress specialized data (e.g., raster graphics) as well as
|
||||
the best currently available specialized algorithms.
|
||||
|
||||
1.2. Intended audience
|
||||
|
||||
This specification is intended for use by implementors of software
|
||||
to compress data into gzip format and/or decompress data from gzip
|
||||
format.
|
||||
|
||||
The text of the specification assumes a basic background in
|
||||
programming at the level of bits and other primitive data
|
||||
representations.
|
||||
|
||||
1.3. Scope
|
||||
|
||||
The specification specifies a compression method and a file format
|
||||
(the latter assuming only that a file can store a sequence of
|
||||
arbitrary bytes). It does not specify any particular interface to
|
||||
a file system or anything about character sets or encodings
|
||||
(except for file names and comments, which are optional).
|
||||
|
||||
1.4. Compliance
|
||||
|
||||
Unless otherwise indicated below, a compliant decompressor must be
|
||||
able to accept and decompress any file that conforms to all the
|
||||
specifications presented here; a compliant compressor must produce
|
||||
files that conform to all the specifications presented here. The
|
||||
material in the appendices is not part of the specification per se
|
||||
and is not relevant to compliance.
|
||||
|
||||
1.5. Definitions of terms and conventions used
|
||||
|
||||
byte: 8 bits stored or transmitted as a unit (same as an octet).
|
||||
(For this specification, a byte is exactly 8 bits, even on
|
||||
machines which store a character on a number of bits different
|
||||
from 8.) See below for the numbering of bits within a byte.
|
||||
|
||||
1.6. Changes from previous versions
|
||||
|
||||
There have been no technical changes to the gzip format since
|
||||
version 4.1 of this specification. In version 4.2, some
|
||||
terminology was changed, and the sample CRC code was rewritten for
|
||||
clarity and to eliminate the requirement for the caller to do pre-
|
||||
and post-conditioning. Version 4.3 is a conversion of the
|
||||
specification to RFC style.
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 3]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
2. Detailed specification
|
||||
|
||||
2.1. Overall conventions
|
||||
|
||||
In the diagrams below, a box like this:
|
||||
|
||||
+---+
|
||||
| | <-- the vertical bars might be missing
|
||||
+---+
|
||||
|
||||
represents one byte; a box like this:
|
||||
|
||||
+==============+
|
||||
| |
|
||||
+==============+
|
||||
|
||||
represents a variable number of bytes.
|
||||
|
||||
Bytes stored within a computer do not have a "bit order", since
|
||||
they are always treated as a unit. However, a byte considered as
|
||||
an integer between 0 and 255 does have a most- and least-
|
||||
significant bit, and since we write numbers with the most-
|
||||
significant digit on the left, we also write bytes with the most-
|
||||
significant bit on the left. In the diagrams below, we number the
|
||||
bits of a byte so that bit 0 is the least-significant bit, i.e.,
|
||||
the bits are numbered:
|
||||
|
||||
+--------+
|
||||
|76543210|
|
||||
+--------+
|
||||
|
||||
This document does not address the issue of the order in which
|
||||
bits of a byte are transmitted on a bit-sequential medium, since
|
||||
the data format described here is byte- rather than bit-oriented.
|
||||
|
||||
Within a computer, a number may occupy multiple bytes. All
|
||||
multi-byte numbers in the format described here are stored with
|
||||
the least-significant byte first (at the lower memory address).
|
||||
For example, the decimal number 520 is stored as:
|
||||
|
||||
0 1
|
||||
+--------+--------+
|
||||
|00001000|00000010|
|
||||
+--------+--------+
|
||||
^ ^
|
||||
| |
|
||||
| + more significant byte = 2 x 256
|
||||
+ less significant byte = 8
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 4]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
2.2. File format
|
||||
|
||||
A gzip file consists of a series of "members" (compressed data
|
||||
sets). The format of each member is specified in the following
|
||||
section. The members simply appear one after another in the file,
|
||||
with no additional information before, between, or after them.
|
||||
|
||||
2.3. Member format
|
||||
|
||||
Each member has the following structure:
|
||||
|
||||
+---+---+---+---+---+---+---+---+---+---+
|
||||
|ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->)
|
||||
+---+---+---+---+---+---+---+---+---+---+
|
||||
|
||||
(if FLG.FEXTRA set)
|
||||
|
||||
+---+---+=================================+
|
||||
| XLEN |...XLEN bytes of "extra field"...| (more-->)
|
||||
+---+---+=================================+
|
||||
|
||||
(if FLG.FNAME set)
|
||||
|
||||
+=========================================+
|
||||
|...original file name, zero-terminated...| (more-->)
|
||||
+=========================================+
|
||||
|
||||
(if FLG.FCOMMENT set)
|
||||
|
||||
+===================================+
|
||||
|...file comment, zero-terminated...| (more-->)
|
||||
+===================================+
|
||||
|
||||
(if FLG.FHCRC set)
|
||||
|
||||
+---+---+
|
||||
| CRC16 |
|
||||
+---+---+
|
||||
|
||||
+=======================+
|
||||
|...compressed blocks...| (more-->)
|
||||
+=======================+
|
||||
|
||||
0 1 2 3 4 5 6 7
|
||||
+---+---+---+---+---+---+---+---+
|
||||
| CRC32 | ISIZE |
|
||||
+---+---+---+---+---+---+---+---+
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 5]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
2.3.1. Member header and trailer
|
||||
|
||||
ID1 (IDentification 1)
|
||||
ID2 (IDentification 2)
|
||||
These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139
|
||||
(0x8b, \213), to identify the file as being in gzip format.
|
||||
|
||||
CM (Compression Method)
|
||||
This identifies the compression method used in the file. CM
|
||||
= 0-7 are reserved. CM = 8 denotes the "deflate"
|
||||
compression method, which is the one customarily used by
|
||||
gzip and which is documented elsewhere.
|
||||
|
||||
FLG (FLaGs)
|
||||
This flag byte is divided into individual bits as follows:
|
||||
|
||||
bit 0 FTEXT
|
||||
bit 1 FHCRC
|
||||
bit 2 FEXTRA
|
||||
bit 3 FNAME
|
||||
bit 4 FCOMMENT
|
||||
bit 5 reserved
|
||||
bit 6 reserved
|
||||
bit 7 reserved
|
||||
|
||||
If FTEXT is set, the file is probably ASCII text. This is
|
||||
an optional indication, which the compressor may set by
|
||||
checking a small amount of the input data to see whether any
|
||||
non-ASCII characters are present. In case of doubt, FTEXT
|
||||
is cleared, indicating binary data. For systems which have
|
||||
different file formats for ascii text and binary data, the
|
||||
decompressor can use FTEXT to choose the appropriate format.
|
||||
We deliberately do not specify the algorithm used to set
|
||||
this bit, since a compressor always has the option of
|
||||
leaving it cleared and a decompressor always has the option
|
||||
of ignoring it and letting some other program handle issues
|
||||
of data conversion.
|
||||
|
||||
If FHCRC is set, a CRC16 for the gzip header is present,
|
||||
immediately before the compressed data. The CRC16 consists
|
||||
of the two least significant bytes of the CRC32 for all
|
||||
bytes of the gzip header up to and not including the CRC16.
|
||||
[The FHCRC bit was never set by versions of gzip up to
|
||||
1.2.4, even though it was documented with a different
|
||||
meaning in gzip 1.2.4.]
|
||||
|
||||
If FEXTRA is set, optional extra fields are present, as
|
||||
described in a following section.
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 6]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
If FNAME is set, an original file name is present,
|
||||
terminated by a zero byte. The name must consist of ISO
|
||||
8859-1 (LATIN-1) characters; on operating systems using
|
||||
EBCDIC or any other character set for file names, the name
|
||||
must be translated to the ISO LATIN-1 character set. This
|
||||
is the original name of the file being compressed, with any
|
||||
directory components removed, and, if the file being
|
||||
compressed is on a file system with case insensitive names,
|
||||
forced to lower case. There is no original file name if the
|
||||
data was compressed from a source other than a named file;
|
||||
for example, if the source was stdin on a Unix system, there
|
||||
is no file name.
|
||||
|
||||
If FCOMMENT is set, a zero-terminated file comment is
|
||||
present. This comment is not interpreted; it is only
|
||||
intended for human consumption. The comment must consist of
|
||||
ISO 8859-1 (LATIN-1) characters. Line breaks should be
|
||||
denoted by a single line feed character (10 decimal).
|
||||
|
||||
Reserved FLG bits must be zero.
|
||||
|
||||
MTIME (Modification TIME)
|
||||
This gives the most recent modification time of the original
|
||||
file being compressed. The time is in Unix format, i.e.,
|
||||
seconds since 00:00:00 GMT, Jan. 1, 1970. (Note that this
|
||||
may cause problems for MS-DOS and other systems that use
|
||||
local rather than Universal time.) If the compressed data
|
||||
did not come from a file, MTIME is set to the time at which
|
||||
compression started. MTIME = 0 means no time stamp is
|
||||
available.
|
||||
|
||||
XFL (eXtra FLags)
|
||||
These flags are available for use by specific compression
|
||||
methods. The "deflate" method (CM = 8) sets these flags as
|
||||
follows:
|
||||
|
||||
XFL = 2 - compressor used maximum compression,
|
||||
slowest algorithm
|
||||
XFL = 4 - compressor used fastest algorithm
|
||||
|
||||
OS (Operating System)
|
||||
This identifies the type of file system on which compression
|
||||
took place. This may be useful in determining end-of-line
|
||||
convention for text files. The currently defined values are
|
||||
as follows:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 7]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
0 - FAT filesystem (MS-DOS, OS/2, NT/Win32)
|
||||
1 - Amiga
|
||||
2 - VMS (or OpenVMS)
|
||||
3 - Unix
|
||||
4 - VM/CMS
|
||||
5 - Atari TOS
|
||||
6 - HPFS filesystem (OS/2, NT)
|
||||
7 - Macintosh
|
||||
8 - Z-System
|
||||
9 - CP/M
|
||||
10 - TOPS-20
|
||||
11 - NTFS filesystem (NT)
|
||||
12 - QDOS
|
||||
13 - Acorn RISCOS
|
||||
255 - unknown
|
||||
|
||||
XLEN (eXtra LENgth)
|
||||
If FLG.FEXTRA is set, this gives the length of the optional
|
||||
extra field. See below for details.
|
||||
|
||||
CRC32 (CRC-32)
|
||||
This contains a Cyclic Redundancy Check value of the
|
||||
uncompressed data computed according to CRC-32 algorithm
|
||||
used in the ISO 3309 standard and in section 8.1.1.6.2 of
|
||||
ITU-T recommendation V.42. (See http://www.iso.ch for
|
||||
ordering ISO documents. See gopher://info.itu.ch for an
|
||||
online version of ITU-T V.42.)
|
||||
|
||||
ISIZE (Input SIZE)
|
||||
This contains the size of the original (uncompressed) input
|
||||
data modulo 2^32.
|
||||
|
||||
2.3.1.1. Extra field
|
||||
|
||||
If the FLG.FEXTRA bit is set, an "extra field" is present in
|
||||
the header, with total length XLEN bytes. It consists of a
|
||||
series of subfields, each of the form:
|
||||
|
||||
+---+---+---+---+==================================+
|
||||
|SI1|SI2| LEN |... LEN bytes of subfield data ...|
|
||||
+---+---+---+---+==================================+
|
||||
|
||||
SI1 and SI2 provide a subfield ID, typically two ASCII letters
|
||||
with some mnemonic value. Jean-Loup Gailly
|
||||
<gzip@prep.ai.mit.edu> is maintaining a registry of subfield
|
||||
IDs; please send him any subfield ID you wish to use. Subfield
|
||||
IDs with SI2 = 0 are reserved for future use. The following
|
||||
IDs are currently defined:
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 8]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
SI1 SI2 Data
|
||||
---------- ---------- ----
|
||||
0x41 ('A') 0x70 ('P') Apollo file type information
|
||||
|
||||
LEN gives the length of the subfield data, excluding the 4
|
||||
initial bytes.
|
||||
|
||||
2.3.1.2. Compliance
|
||||
|
||||
A compliant compressor must produce files with correct ID1,
|
||||
ID2, CM, CRC32, and ISIZE, but may set all the other fields in
|
||||
the fixed-length part of the header to default values (255 for
|
||||
OS, 0 for all others). The compressor must set all reserved
|
||||
bits to zero.
|
||||
|
||||
A compliant decompressor must check ID1, ID2, and CM, and
|
||||
provide an error indication if any of these have incorrect
|
||||
values. It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC
|
||||
at least so it can skip over the optional fields if they are
|
||||
present. It need not examine any other part of the header or
|
||||
trailer; in particular, a decompressor may ignore FTEXT and OS
|
||||
and always produce binary output, and still be compliant. A
|
||||
compliant decompressor must give an error indication if any
|
||||
reserved bit is non-zero, since such a bit could indicate the
|
||||
presence of a new field that would cause subsequent data to be
|
||||
interpreted incorrectly.
|
||||
|
||||
3. References
|
||||
|
||||
[1] "Information Processing - 8-bit single-byte coded graphic
|
||||
character sets - Part 1: Latin alphabet No.1" (ISO 8859-1:1987).
|
||||
The ISO 8859-1 (Latin-1) character set is a superset of 7-bit
|
||||
ASCII. Files defining this character set are available as
|
||||
iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/
|
||||
|
||||
[2] ISO 3309
|
||||
|
||||
[3] ITU-T recommendation V.42
|
||||
|
||||
[4] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification",
|
||||
available in ftp://ftp.uu.net/pub/archiving/zip/doc/
|
||||
|
||||
[5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in
|
||||
ftp://prep.ai.mit.edu/pub/gnu/
|
||||
|
||||
[6] Sarwate, D.V., "Computation of Cyclic Redundancy Checks via Table
|
||||
Look-Up", Communications of the ACM, 31(8), pp.1008-1013.
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 9]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
[7] Schwaderer, W.D., "CRC Calculation", April 85 PC Tech Journal,
|
||||
pp.118-133.
|
||||
|
||||
[8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt,
|
||||
describing the CRC concept.
|
||||
|
||||
4. Security Considerations
|
||||
|
||||
Any data compression method involves the reduction of redundancy in
|
||||
the data. Consequently, any corruption of the data is likely to have
|
||||
severe effects and be difficult to correct. Uncompressed text, on
|
||||
the other hand, will probably still be readable despite the presence
|
||||
of some corrupted bytes.
|
||||
|
||||
It is recommended that systems using this data format provide some
|
||||
means of validating the integrity of the compressed data, such as by
|
||||
setting and checking the CRC-32 check value.
|
||||
|
||||
5. Acknowledgements
|
||||
|
||||
Trademarks cited in this document are the property of their
|
||||
respective owners.
|
||||
|
||||
Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler,
|
||||
the related software described in this specification. Glenn
|
||||
Randers-Pehrson converted this document to RFC and HTML format.
|
||||
|
||||
6. Author's Address
|
||||
|
||||
L. Peter Deutsch
|
||||
Aladdin Enterprises
|
||||
203 Santa Margarita Ave.
|
||||
Menlo Park, CA 94025
|
||||
|
||||
Phone: (415) 322-0103 (AM only)
|
||||
FAX: (415) 322-1734
|
||||
EMail: <ghost@aladdin.com>
|
||||
|
||||
Questions about the technical content of this specification can be
|
||||
sent by email to:
|
||||
|
||||
Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
|
||||
Mark Adler <madler@alumni.caltech.edu>
|
||||
|
||||
Editorial comments on this specification can be sent by email to:
|
||||
|
||||
L. Peter Deutsch <ghost@aladdin.com> and
|
||||
Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 10]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
7. Appendix: Jean-Loup Gailly's gzip utility
|
||||
|
||||
The most widely used implementation of gzip compression, and the
|
||||
original documentation on which this specification is based, were
|
||||
created by Jean-Loup Gailly <gzip@prep.ai.mit.edu>. Since this
|
||||
implementation is a de facto standard, we mention some more of its
|
||||
features here. Again, the material in this section is not part of
|
||||
the specification per se, and implementations need not follow it to
|
||||
be compliant.
|
||||
|
||||
When compressing or decompressing a file, gzip preserves the
|
||||
protection, ownership, and modification time attributes on the local
|
||||
file system, since there is no provision for representing protection
|
||||
attributes in the gzip file format itself. Since the file format
|
||||
includes a modification time, the gzip decompressor provides a
|
||||
command line switch that assigns the modification time from the file,
|
||||
rather than the local modification time of the compressed input, to
|
||||
the decompressed output.
|
||||
|
||||
8. Appendix: Sample CRC Code
|
||||
|
||||
The following sample code represents a practical implementation of
|
||||
the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42
|
||||
for a formal specification.)
|
||||
|
||||
The sample code is in the ANSI C programming language. Non C users
|
||||
may find it easier to read with these hints:
|
||||
|
||||
& Bitwise AND operator.
|
||||
^ Bitwise exclusive-OR operator.
|
||||
>> Bitwise right shift operator. When applied to an
|
||||
unsigned quantity, as here, right shift inserts zero
|
||||
bit(s) at the left.
|
||||
! Logical NOT operator.
|
||||
++ "n++" increments the variable n.
|
||||
0xNNN 0x introduces a hexadecimal (base 16) constant.
|
||||
Suffix L indicates a long value (at least 32 bits).
|
||||
|
||||
/* Table of CRCs of all 8-bit messages. */
|
||||
unsigned long crc_table[256];
|
||||
|
||||
/* Flag: has the table been computed? Initially false. */
|
||||
int crc_table_computed = 0;
|
||||
|
||||
/* Make the table for a fast CRC. */
|
||||
void make_crc_table(void)
|
||||
{
|
||||
unsigned long c;
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 11]
|
||||
|
||||
RFC 1952 GZIP File Format Specification May 1996
|
||||
|
||||
|
||||
int n, k;
|
||||
for (n = 0; n < 256; n++) {
|
||||
c = (unsigned long) n;
|
||||
for (k = 0; k < 8; k++) {
|
||||
if (c & 1) {
|
||||
c = 0xedb88320L ^ (c >> 1);
|
||||
} else {
|
||||
c = c >> 1;
|
||||
}
|
||||
}
|
||||
crc_table[n] = c;
|
||||
}
|
||||
crc_table_computed = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
Update a running crc with the bytes buf[0..len-1] and return
|
||||
the updated crc. The crc should be initialized to zero. Pre- and
|
||||
post-conditioning (one's complement) is performed within this
|
||||
function so it shouldn't be done by the caller. Usage example:
|
||||
|
||||
unsigned long crc = 0L;
|
||||
|
||||
while (read_buffer(buffer, length) != EOF) {
|
||||
crc = update_crc(crc, buffer, length);
|
||||
}
|
||||
if (crc != original_crc) error();
|
||||
*/
|
||||
unsigned long update_crc(unsigned long crc,
|
||||
unsigned char *buf, int len)
|
||||
{
|
||||
unsigned long c = crc ^ 0xffffffffL;
|
||||
int n;
|
||||
|
||||
if (!crc_table_computed)
|
||||
make_crc_table();
|
||||
for (n = 0; n < len; n++) {
|
||||
c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);
|
||||
}
|
||||
return c ^ 0xffffffffL;
|
||||
}
|
||||
|
||||
/* Return the CRC of the bytes buf[0..len-1]. */
|
||||
unsigned long crc(unsigned char *buf, int len)
|
||||
{
|
||||
return update_crc(0L, buf, len);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Deutsch Informational [Page 12]
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
A Fast Method for Identifying Plain Text Files
|
||||
==============================================
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
Given a file coming from an unknown source, it is sometimes desirable
|
||||
to find out whether the format of that file is plain text. Although
|
||||
this may appear like a simple task, a fully accurate detection of the
|
||||
file type requires heavy-duty semantic analysis on the file contents.
|
||||
It is, however, possible to obtain satisfactory results by employing
|
||||
various heuristics.
|
||||
|
||||
Previous versions of PKZip and other zip-compatible compression tools
|
||||
were using a crude detection scheme: if more than 80% (4/5) of the bytes
|
||||
found in a certain buffer are within the range [7..127], the file is
|
||||
labeled as plain text, otherwise it is labeled as binary. A prominent
|
||||
limitation of this scheme is the restriction to Latin-based alphabets.
|
||||
Other alphabets, like Greek, Cyrillic or Asian, make extensive use of
|
||||
the bytes within the range [128..255], and texts using these alphabets
|
||||
are most often misidentified by this scheme; in other words, the rate
|
||||
of false negatives is sometimes too high, which means that the recall
|
||||
is low. Another weakness of this scheme is a reduced precision, due to
|
||||
the false positives that may occur when binary files containing large
|
||||
amounts of textual characters are misidentified as plain text.
|
||||
|
||||
In this article we propose a new, simple detection scheme that features
|
||||
a much increased precision and a near-100% recall. This scheme is
|
||||
designed to work on ASCII, Unicode and other ASCII-derived alphabets,
|
||||
and it handles single-byte encodings (ISO-8859, MacRoman, KOI8, etc.)
|
||||
and variable-sized encodings (ISO-2022, UTF-8, etc.). Wider encodings
|
||||
(UCS-2/UTF-16 and UCS-4/UTF-32) are not handled, however.
|
||||
|
||||
|
||||
The Algorithm
|
||||
-------------
|
||||
|
||||
The algorithm works by dividing the set of bytecodes [0..255] into three
|
||||
categories:
|
||||
- The white list of textual bytecodes:
|
||||
9 (TAB), 10 (LF), 13 (CR), 32 (SPACE) to 255.
|
||||
- The gray list of tolerated bytecodes:
|
||||
7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB), 27 (ESC).
|
||||
- The black list of undesired, non-textual bytecodes:
|
||||
0 (NUL) to 6, 14 to 31.
|
||||
|
||||
If a file contains at least one byte that belongs to the white list and
|
||||
no byte that belongs to the black list, then the file is categorized as
|
||||
plain text; otherwise, it is categorized as binary. (The boundary case,
|
||||
when the file is empty, automatically falls into the latter category.)
|
||||
|
||||
|
||||
Rationale
|
||||
---------
|
||||
|
||||
The idea behind this algorithm relies on two observations.
|
||||
|
||||
The first observation is that, although the full range of 7-bit codes
|
||||
[0..127] is properly specified by the ASCII standard, most control
|
||||
characters in the range [0..31] are not used in practice. The only
|
||||
widely-used, almost universally-portable control codes are 9 (TAB),
|
||||
10 (LF) and 13 (CR). There are a few more control codes that are
|
||||
recognized on a reduced range of platforms and text viewers/editors:
|
||||
7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB) and 27 (ESC); but these
|
||||
codes are rarely (if ever) used alone, without being accompanied by
|
||||
some printable text. Even the newer, portable text formats such as
|
||||
XML avoid using control characters outside the list mentioned here.
|
||||
|
||||
The second observation is that most of the binary files tend to contain
|
||||
control characters, especially 0 (NUL). Even though the older text
|
||||
detection schemes observe the presence of non-ASCII codes from the range
|
||||
[128..255], the precision rarely has to suffer if this upper range is
|
||||
labeled as textual, because the files that are genuinely binary tend to
|
||||
contain both control characters and codes from the upper range. On the
|
||||
other hand, the upper range needs to be labeled as textual, because it
|
||||
is used by virtually all ASCII extensions. In particular, this range is
|
||||
used for encoding non-Latin scripts.
|
||||
|
||||
Since there is no counting involved, other than simply observing the
|
||||
presence or the absence of some byte values, the algorithm produces
|
||||
consistent results, regardless what alphabet encoding is being used.
|
||||
(If counting were involved, it could be possible to obtain different
|
||||
results on a text encoded, say, using ISO-8859-16 versus UTF-8.)
|
||||
|
||||
There is an extra category of plain text files that are "polluted" with
|
||||
one or more black-listed codes, either by mistake or by peculiar design
|
||||
considerations. In such cases, a scheme that tolerates a small fraction
|
||||
of black-listed codes would provide an increased recall (i.e. more true
|
||||
positives). This, however, incurs a reduced precision overall, since
|
||||
false positives are more likely to appear in binary files that contain
|
||||
large chunks of textual data. Furthermore, "polluted" plain text should
|
||||
be regarded as binary by general-purpose text detection schemes, because
|
||||
general-purpose text processing algorithms might not be applicable.
|
||||
Under this premise, it is safe to say that our detection method provides
|
||||
a near-100% recall.
|
||||
|
||||
Experiments have been run on many files coming from various platforms
|
||||
and applications. We tried plain text files, system logs, source code,
|
||||
formatted office documents, compiled object code, etc. The results
|
||||
confirm the optimistic assumptions about the capabilities of this
|
||||
algorithm.
|
||||
|
||||
|
||||
--
|
||||
Cosmin Truta
|
||||
Last updated: 2006-May-28
|
||||
@@ -1,404 +0,0 @@
|
||||
/* zran.c -- example of zlib/gzip stream indexing and random access
|
||||
* Copyright (C) 2005 Mark Adler
|
||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||
Version 1.0 29 May 2005 Mark Adler */
|
||||
|
||||
/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
|
||||
for random access of a compressed file. A file containing a zlib or gzip
|
||||
stream is provided on the command line. The compressed stream is decoded in
|
||||
its entirety, and an index built with access points about every SPAN bytes
|
||||
in the uncompressed output. The compressed file is left open, and can then
|
||||
be read randomly, having to decompress on the average SPAN/2 uncompressed
|
||||
bytes before getting to the desired block of data.
|
||||
|
||||
An access point can be created at the start of any deflate block, by saving
|
||||
the starting file offset and bit of that block, and the 32K bytes of
|
||||
uncompressed data that precede that block. Also the uncompressed offset of
|
||||
that block is saved to provide a referece for locating a desired starting
|
||||
point in the uncompressed stream. build_index() works by decompressing the
|
||||
input zlib or gzip stream a block at a time, and at the end of each block
|
||||
deciding if enough uncompressed data has gone by to justify the creation of
|
||||
a new access point. If so, that point is saved in a data structure that
|
||||
grows as needed to accommodate the points.
|
||||
|
||||
To use the index, an offset in the uncompressed data is provided, for which
|
||||
the latest accees point at or preceding that offset is located in the index.
|
||||
The input file is positioned to the specified location in the index, and if
|
||||
necessary the first few bits of the compressed data is read from the file.
|
||||
inflate is initialized with those bits and the 32K of uncompressed data, and
|
||||
the decompression then proceeds until the desired offset in the file is
|
||||
reached. Then the decompression continues to read the desired uncompressed
|
||||
data from the file.
|
||||
|
||||
Another approach would be to generate the index on demand. In that case,
|
||||
requests for random access reads from the compressed data would try to use
|
||||
the index, but if a read far enough past the end of the index is required,
|
||||
then further index entries would be generated and added.
|
||||
|
||||
There is some fair bit of overhead to starting inflation for the random
|
||||
access, mainly copying the 32K byte dictionary. So if small pieces of the
|
||||
file are being accessed, it would make sense to implement a cache to hold
|
||||
some lookahead and avoid many calls to extract() for small lengths.
|
||||
|
||||
Another way to build an index would be to use inflateCopy(). That would
|
||||
not be constrained to have access points at block boundaries, but requires
|
||||
more memory per access point, and also cannot be saved to file due to the
|
||||
use of pointers in the state. The approach here allows for storage of the
|
||||
index in a file.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "zlib.h"
|
||||
|
||||
#define local static
|
||||
|
||||
#define SPAN 1048576L /* desired distance between access points */
|
||||
#define WINSIZE 32768U /* sliding window size */
|
||||
#define CHUNK 16384 /* file input buffer size */
|
||||
|
||||
/* access point entry */
|
||||
struct point {
|
||||
off_t out; /* corresponding offset in uncompressed data */
|
||||
off_t in; /* offset in input file of first full byte */
|
||||
int bits; /* number of bits (1-7) from byte at in - 1, or 0 */
|
||||
unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */
|
||||
};
|
||||
|
||||
/* access point list */
|
||||
struct access {
|
||||
int have; /* number of list entries filled in */
|
||||
int size; /* number of list entries allocated */
|
||||
struct point *list; /* allocated list */
|
||||
};
|
||||
|
||||
/* Deallocate an index built by build_index() */
|
||||
local void free_index(struct access *index)
|
||||
{
|
||||
if (index != NULL) {
|
||||
free(index->list);
|
||||
free(index);
|
||||
}
|
||||
}
|
||||
|
||||
/* Add an entry to the access point list. If out of memory, deallocate the
|
||||
existing list and return NULL. */
|
||||
local struct access *addpoint(struct access *index, int bits,
|
||||
off_t in, off_t out, unsigned left, unsigned char *window)
|
||||
{
|
||||
struct point *next;
|
||||
|
||||
/* if list is empty, create it (start with eight points) */
|
||||
if (index == NULL) {
|
||||
index = malloc(sizeof(struct access));
|
||||
if (index == NULL) return NULL;
|
||||
index->list = malloc(sizeof(struct point) << 3);
|
||||
if (index->list == NULL) {
|
||||
free(index);
|
||||
return NULL;
|
||||
}
|
||||
index->size = 8;
|
||||
index->have = 0;
|
||||
}
|
||||
|
||||
/* if list is full, make it bigger */
|
||||
else if (index->have == index->size) {
|
||||
index->size <<= 1;
|
||||
next = realloc(index->list, sizeof(struct point) * index->size);
|
||||
if (next == NULL) {
|
||||
free_index(index);
|
||||
return NULL;
|
||||
}
|
||||
index->list = next;
|
||||
}
|
||||
|
||||
/* fill in entry and increment how many we have */
|
||||
next = index->list + index->have;
|
||||
next->bits = bits;
|
||||
next->in = in;
|
||||
next->out = out;
|
||||
if (left)
|
||||
memcpy(next->window, window + WINSIZE - left, left);
|
||||
if (left < WINSIZE)
|
||||
memcpy(next->window + left, window, WINSIZE - left);
|
||||
index->have++;
|
||||
|
||||
/* return list, possibly reallocated */
|
||||
return index;
|
||||
}
|
||||
|
||||
/* Make one entire pass through the compressed stream and build an index, with
|
||||
access points about every span bytes of uncompressed output -- span is
|
||||
chosen to balance the speed of random access against the memory requirements
|
||||
of the list, about 32K bytes per access point. Note that data after the end
|
||||
of the first zlib or gzip stream in the file is ignored. build_index()
|
||||
returns the number of access points on success (>= 1), Z_MEM_ERROR for out
|
||||
of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a
|
||||
file read error. On success, *built points to the resulting index. */
|
||||
local int build_index(FILE *in, off_t span, struct access **built)
|
||||
{
|
||||
int ret;
|
||||
off_t totin, totout; /* our own total counters to avoid 4GB limit */
|
||||
off_t last; /* totout value of last access point */
|
||||
struct access *index; /* access points being generated */
|
||||
z_stream strm;
|
||||
unsigned char input[CHUNK];
|
||||
unsigned char window[WINSIZE];
|
||||
|
||||
/* initialize inflate */
|
||||
strm.zalloc = Z_NULL;
|
||||
strm.zfree = Z_NULL;
|
||||
strm.opaque = Z_NULL;
|
||||
strm.avail_in = 0;
|
||||
strm.next_in = Z_NULL;
|
||||
ret = inflateInit2(&strm, 47); /* automatic zlib or gzip decoding */
|
||||
if (ret != Z_OK)
|
||||
return ret;
|
||||
|
||||
/* inflate the input, maintain a sliding window, and build an index -- this
|
||||
also validates the integrity of the compressed data using the check
|
||||
information at the end of the gzip or zlib stream */
|
||||
totin = totout = last = 0;
|
||||
index = NULL; /* will be allocated by first addpoint() */
|
||||
strm.avail_out = 0;
|
||||
do {
|
||||
/* get some compressed data from input file */
|
||||
strm.avail_in = fread(input, 1, CHUNK, in);
|
||||
if (ferror(in)) {
|
||||
ret = Z_ERRNO;
|
||||
goto build_index_error;
|
||||
}
|
||||
if (strm.avail_in == 0) {
|
||||
ret = Z_DATA_ERROR;
|
||||
goto build_index_error;
|
||||
}
|
||||
strm.next_in = input;
|
||||
|
||||
/* process all of that, or until end of stream */
|
||||
do {
|
||||
/* reset sliding window if necessary */
|
||||
if (strm.avail_out == 0) {
|
||||
strm.avail_out = WINSIZE;
|
||||
strm.next_out = window;
|
||||
}
|
||||
|
||||
/* inflate until out of input, output, or at end of block --
|
||||
update the total input and output counters */
|
||||
totin += strm.avail_in;
|
||||
totout += strm.avail_out;
|
||||
ret = inflate(&strm, Z_BLOCK); /* return at end of block */
|
||||
totin -= strm.avail_in;
|
||||
totout -= strm.avail_out;
|
||||
if (ret == Z_NEED_DICT)
|
||||
ret = Z_DATA_ERROR;
|
||||
if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
|
||||
goto build_index_error;
|
||||
if (ret == Z_STREAM_END)
|
||||
break;
|
||||
|
||||
/* if at end of block, consider adding an index entry (note that if
|
||||
data_type indicates an end-of-block, then all of the
|
||||
uncompressed data from that block has been delivered, and none
|
||||
of the compressed data after that block has been consumed,
|
||||
except for up to seven bits) -- the totout == 0 provides an
|
||||
entry point after the zlib or gzip header, and assures that the
|
||||
index always has at least one access point; we avoid creating an
|
||||
access point after the last block by checking bit 6 of data_type
|
||||
*/
|
||||
if ((strm.data_type & 128) && !(strm.data_type & 64) &&
|
||||
(totout == 0 || totout - last > span)) {
|
||||
index = addpoint(index, strm.data_type & 7, totin,
|
||||
totout, strm.avail_out, window);
|
||||
if (index == NULL) {
|
||||
ret = Z_MEM_ERROR;
|
||||
goto build_index_error;
|
||||
}
|
||||
last = totout;
|
||||
}
|
||||
} while (strm.avail_in != 0);
|
||||
} while (ret != Z_STREAM_END);
|
||||
|
||||
/* clean up and return index (release unused entries in list) */
|
||||
(void)inflateEnd(&strm);
|
||||
index = realloc(index, sizeof(struct point) * index->have);
|
||||
index->size = index->have;
|
||||
*built = index;
|
||||
return index->size;
|
||||
|
||||
/* return error */
|
||||
build_index_error:
|
||||
(void)inflateEnd(&strm);
|
||||
if (index != NULL)
|
||||
free_index(index);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Use the index to read len bytes from offset into buf, return bytes read or
|
||||
negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past
|
||||
the end of the uncompressed data, then extract() will return a value less
|
||||
than len, indicating how much as actually read into buf. This function
|
||||
should not return a data error unless the file was modified since the index
|
||||
was generated. extract() may also return Z_ERRNO if there is an error on
|
||||
reading or seeking the input file. */
|
||||
local int extract(FILE *in, struct access *index, off_t offset,
|
||||
unsigned char *buf, int len)
|
||||
{
|
||||
int ret, skip;
|
||||
z_stream strm;
|
||||
struct point *here;
|
||||
unsigned char input[CHUNK];
|
||||
unsigned char discard[WINSIZE];
|
||||
|
||||
/* proceed only if something reasonable to do */
|
||||
if (len < 0)
|
||||
return 0;
|
||||
|
||||
/* find where in stream to start */
|
||||
here = index->list;
|
||||
ret = index->have;
|
||||
while (--ret && here[1].out <= offset)
|
||||
here++;
|
||||
|
||||
/* initialize file and inflate state to start there */
|
||||
strm.zalloc = Z_NULL;
|
||||
strm.zfree = Z_NULL;
|
||||
strm.opaque = Z_NULL;
|
||||
strm.avail_in = 0;
|
||||
strm.next_in = Z_NULL;
|
||||
ret = inflateInit2(&strm, -15); /* raw inflate */
|
||||
if (ret != Z_OK)
|
||||
return ret;
|
||||
ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
|
||||
if (ret == -1)
|
||||
goto extract_ret;
|
||||
if (here->bits) {
|
||||
ret = getc(in);
|
||||
if (ret == -1) {
|
||||
ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
|
||||
goto extract_ret;
|
||||
}
|
||||
(void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
|
||||
}
|
||||
(void)inflateSetDictionary(&strm, here->window, WINSIZE);
|
||||
|
||||
/* skip uncompressed bytes until offset reached, then satisfy request */
|
||||
offset -= here->out;
|
||||
strm.avail_in = 0;
|
||||
skip = 1; /* while skipping to offset */
|
||||
do {
|
||||
/* define where to put uncompressed data, and how much */
|
||||
if (offset == 0 && skip) { /* at offset now */
|
||||
strm.avail_out = len;
|
||||
strm.next_out = buf;
|
||||
skip = 0; /* only do this once */
|
||||
}
|
||||
if (offset > WINSIZE) { /* skip WINSIZE bytes */
|
||||
strm.avail_out = WINSIZE;
|
||||
strm.next_out = discard;
|
||||
offset -= WINSIZE;
|
||||
}
|
||||
else if (offset != 0) { /* last skip */
|
||||
strm.avail_out = (unsigned)offset;
|
||||
strm.next_out = discard;
|
||||
offset = 0;
|
||||
}
|
||||
|
||||
/* uncompress until avail_out filled, or end of stream */
|
||||
do {
|
||||
if (strm.avail_in == 0) {
|
||||
strm.avail_in = fread(input, 1, CHUNK, in);
|
||||
if (ferror(in)) {
|
||||
ret = Z_ERRNO;
|
||||
goto extract_ret;
|
||||
}
|
||||
if (strm.avail_in == 0) {
|
||||
ret = Z_DATA_ERROR;
|
||||
goto extract_ret;
|
||||
}
|
||||
strm.next_in = input;
|
||||
}
|
||||
ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */
|
||||
if (ret == Z_NEED_DICT)
|
||||
ret = Z_DATA_ERROR;
|
||||
if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
|
||||
goto extract_ret;
|
||||
if (ret == Z_STREAM_END)
|
||||
break;
|
||||
} while (strm.avail_out != 0);
|
||||
|
||||
/* if reach end of stream, then don't keep trying to get more */
|
||||
if (ret == Z_STREAM_END)
|
||||
break;
|
||||
|
||||
/* do until offset reached and requested data read, or stream ends */
|
||||
} while (skip);
|
||||
|
||||
/* compute number of uncompressed bytes read after offset */
|
||||
ret = skip ? 0 : len - strm.avail_out;
|
||||
|
||||
/* clean up and return bytes read or error */
|
||||
extract_ret:
|
||||
(void)inflateEnd(&strm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Demonstrate the use of build_index() and extract() by processing the file
|
||||
provided on the command line, and the extracting 16K from about 2/3rds of
|
||||
the way through the uncompressed output, and writing that to stdout. */
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int len;
|
||||
off_t offset;
|
||||
FILE *in;
|
||||
struct access *index = NULL;
|
||||
unsigned char buf[CHUNK];
|
||||
|
||||
/* open input file */
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "usage: zran file.gz\n");
|
||||
return 1;
|
||||
}
|
||||
in = fopen(argv[1], "rb");
|
||||
if (in == NULL) {
|
||||
fprintf(stderr, "zran: could not open %s for reading\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* build index */
|
||||
len = build_index(in, SPAN, &index);
|
||||
if (len < 0) {
|
||||
fclose(in);
|
||||
switch (len) {
|
||||
case Z_MEM_ERROR:
|
||||
fprintf(stderr, "zran: out of memory\n");
|
||||
break;
|
||||
case Z_DATA_ERROR:
|
||||
fprintf(stderr, "zran: compressed data error in %s\n", argv[1]);
|
||||
break;
|
||||
case Z_ERRNO:
|
||||
fprintf(stderr, "zran: read error on %s\n", argv[1]);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "zran: error %d while building index\n", len);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
fprintf(stderr, "zran: built index with %d access points\n", len);
|
||||
|
||||
/* use index by reading some bytes from an arbitrary offset */
|
||||
offset = (index->list[index->have - 1].out << 1) / 3;
|
||||
len = extract(in, index, offset, buf, CHUNK);
|
||||
if (len < 0)
|
||||
fprintf(stderr, "zran: extraction failed: %s error\n",
|
||||
len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
|
||||
else {
|
||||
fwrite(buf, 1, len, stdout);
|
||||
fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset);
|
||||
}
|
||||
|
||||
/* clean up and exit */
|
||||
free_index(index);
|
||||
fclose(in);
|
||||
return 0;
|
||||
}
|
||||
@@ -1,132 +0,0 @@
|
||||
STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB')
|
||||
|
||||
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
|
||||
/* Version 1.1.3 entry points. */
|
||||
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE ADLER32 ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("adler32")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE COMPRESS ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("compress")
|
||||
EXPORT SYMBOL("compress2")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE CRC32 ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("crc32")
|
||||
EXPORT SYMBOL("get_crc_table")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("deflate")
|
||||
EXPORT SYMBOL("deflateEnd")
|
||||
EXPORT SYMBOL("deflateSetDictionary")
|
||||
EXPORT SYMBOL("deflateCopy")
|
||||
EXPORT SYMBOL("deflateReset")
|
||||
EXPORT SYMBOL("deflateParams")
|
||||
EXPORT SYMBOL("deflatePrime")
|
||||
EXPORT SYMBOL("deflateInit_")
|
||||
EXPORT SYMBOL("deflateInit2_")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE GZIO ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("gzopen")
|
||||
EXPORT SYMBOL("gzdopen")
|
||||
EXPORT SYMBOL("gzsetparams")
|
||||
EXPORT SYMBOL("gzread")
|
||||
EXPORT SYMBOL("gzwrite")
|
||||
EXPORT SYMBOL("gzprintf")
|
||||
EXPORT SYMBOL("gzputs")
|
||||
EXPORT SYMBOL("gzgets")
|
||||
EXPORT SYMBOL("gzputc")
|
||||
EXPORT SYMBOL("gzgetc")
|
||||
EXPORT SYMBOL("gzflush")
|
||||
EXPORT SYMBOL("gzseek")
|
||||
EXPORT SYMBOL("gzrewind")
|
||||
EXPORT SYMBOL("gztell")
|
||||
EXPORT SYMBOL("gzeof")
|
||||
EXPORT SYMBOL("gzclose")
|
||||
EXPORT SYMBOL("gzerror")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("inflate")
|
||||
EXPORT SYMBOL("inflateEnd")
|
||||
EXPORT SYMBOL("inflateSetDictionary")
|
||||
EXPORT SYMBOL("inflateSync")
|
||||
EXPORT SYMBOL("inflateReset")
|
||||
EXPORT SYMBOL("inflateInit_")
|
||||
EXPORT SYMBOL("inflateInit2_")
|
||||
EXPORT SYMBOL("inflateSyncPoint")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE UNCOMPR ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("uncompress")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE ZUTIL ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("zlibVersion")
|
||||
EXPORT SYMBOL("zError")
|
||||
|
||||
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
|
||||
/* Version 1.2.1 additional entry points. */
|
||||
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE COMPRESS ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("compressBound")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("deflateBound")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE GZIO ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("gzungetc")
|
||||
EXPORT SYMBOL("gzclearerr")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE INFBACK ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("inflateBack")
|
||||
EXPORT SYMBOL("inflateBackEnd")
|
||||
EXPORT SYMBOL("inflateBackInit_")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("inflateCopy")
|
||||
|
||||
/********************************************************************/
|
||||
/* *MODULE ZUTIL ZLIB 01/02/01 00:15:09 */
|
||||
/********************************************************************/
|
||||
|
||||
EXPORT SYMBOL("zlibCompileFlags")
|
||||
|
||||
ENDPGMEXP
|
||||
@@ -1,123 +0,0 @@
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* ZLIB */
|
||||
/* */
|
||||
/* Compile sources into modules and link them into a service program. */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
PGM
|
||||
|
||||
/* Configuration adjustable parameters. */
|
||||
|
||||
DCL VAR(&SRCLIB) TYPE(*CHAR) LEN(10) +
|
||||
VALUE('ZLIB') /* Source library. */
|
||||
DCL VAR(&SRCFILE) TYPE(*CHAR) LEN(10) +
|
||||
VALUE('SOURCES') /* Source member file. */
|
||||
DCL VAR(&CTLFILE) TYPE(*CHAR) LEN(10) +
|
||||
VALUE('TOOLS') /* Control member file. */
|
||||
|
||||
DCL VAR(&MODLIB) TYPE(*CHAR) LEN(10) +
|
||||
VALUE('ZLIB') /* Module library. */
|
||||
|
||||
DCL VAR(&SRVLIB) TYPE(*CHAR) LEN(10) +
|
||||
VALUE('LGPL') /* Service program library. */
|
||||
|
||||
DCL VAR(&CFLAGS) TYPE(*CHAR) +
|
||||
VALUE('OPTIMIZE(40)') /* Compile options. */
|
||||
|
||||
|
||||
/* Working storage. */
|
||||
|
||||
DCL VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(300) /* Command length. */
|
||||
DCL VAR(&CMD) TYPE(*CHAR) LEN(512)
|
||||
|
||||
|
||||
/* Compile sources into modules. */
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/ADLER32) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/COMPRESS) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/CRC32) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/DEFLATE) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/GZIO) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/INFBACK) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/INFFAST) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/INFLATE) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/INFTREES) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/TREES) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/UNCOMPR) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
CHGVAR VAR(&CMD) VALUE('CRTCMOD MODULE(' *TCAT &MODLIB *TCAT +
|
||||
'/ZUTIL) SRCFILE(' *TCAT +
|
||||
&SRCLIB *TCAT '/' *TCAT &SRCFILE *TCAT +
|
||||
') SYSIFCOPT(*IFSIO)' *BCAT &CFLAGS)
|
||||
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
|
||||
|
||||
|
||||
/* Link modules into a service program. */
|
||||
|
||||
CRTSRVPGM SRVPGM(&SRVLIB/ZLIB) +
|
||||
MODULE(&MODLIB/ADLER32 &MODLIB/COMPRESS +
|
||||
&MODLIB/CRC32 &MODLIB/DEFLATE +
|
||||
&MODLIB/GZIO &MODLIB/INFBACK +
|
||||
&MODLIB/INFFAST &MODLIB/INFLATE +
|
||||
&MODLIB/INFTREES &MODLIB/TREES +
|
||||
&MODLIB/UNCOMPR &MODLIB/ZUTIL) +
|
||||
SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC) +
|
||||
TEXT('ZLIB 1.2.3') TGTRLS(V4R4M0)
|
||||
|
||||
ENDPGM
|
||||
@@ -1,111 +0,0 @@
|
||||
ZLIB version 1.2.3 for AS400 installation instructions
|
||||
|
||||
I) From an AS400 *SAVF file:
|
||||
|
||||
1) Unpacking archive to an AS400 save file
|
||||
|
||||
On the AS400:
|
||||
|
||||
_ Create the ZLIB AS400 library:
|
||||
|
||||
CRTLIB LIB(ZLIB) TYPE(PROD) TEXT('ZLIB compression API library')
|
||||
|
||||
_ Create a work save file, for example:
|
||||
|
||||
CRTSAVF FILE(ZLIB/ZLIBSAVF)
|
||||
|
||||
On a PC connected to the target AS400:
|
||||
|
||||
_ Unpack the save file image to a PC file "ZLIBSAVF"
|
||||
_ Upload this file into the save file on the AS400, for example
|
||||
using ftp in BINARY mode.
|
||||
|
||||
|
||||
2) Populating the ZLIB AS400 source library
|
||||
|
||||
On the AS400:
|
||||
|
||||
_ Extract the saved objects into the ZLIB AS400 library using:
|
||||
|
||||
RSTOBJ OBJ(*ALL) SAVLIB(ZLIB) DEV(*SAVF) SAVF(ZLIB/ZLIBSAVF) RSTLIB(ZLIB)
|
||||
|
||||
|
||||
3) Customize installation:
|
||||
|
||||
_ Edit CL member ZLIB/TOOLS(COMPILE) and change parameters if needed,
|
||||
according to the comments.
|
||||
|
||||
_ Compile this member with:
|
||||
|
||||
CRTCLPGM PGM(ZLIB/COMPILE) SRCFILE(ZLIB/TOOLS) SRCMBR(COMPILE)
|
||||
|
||||
|
||||
4) Compile and generate the service program:
|
||||
|
||||
_ This can now be done by executing:
|
||||
|
||||
CALL PGM(ZLIB/COMPILE)
|
||||
|
||||
|
||||
|
||||
II) From the original source distribution:
|
||||
|
||||
1) On the AS400, create the source library:
|
||||
|
||||
CRTLIB LIB(ZLIB) TYPE(PROD) TEXT('ZLIB compression API library')
|
||||
|
||||
2) Create the source files:
|
||||
|
||||
CRTSRCPF FILE(ZLIB/SOURCES) RCDLEN(112) TEXT('ZLIB library modules')
|
||||
CRTSRCPF FILE(ZLIB/H) RCDLEN(112) TEXT('ZLIB library includes')
|
||||
CRTSRCPF FILE(ZLIB/TOOLS) RCDLEN(112) TEXT('ZLIB library control utilities')
|
||||
|
||||
3) From the machine hosting the distribution files, upload them (with
|
||||
FTP in text mode, for example) according to the following table:
|
||||
|
||||
Original AS400 AS400 AS400 AS400
|
||||
file file member type description
|
||||
SOURCES Original ZLIB C subprogram sources
|
||||
adler32.c ADLER32 C ZLIB - Compute the Adler-32 checksum of a dta strm
|
||||
compress.c COMPRESS C ZLIB - Compress a memory buffer
|
||||
crc32.c CRC32 C ZLIB - Compute the CRC-32 of a data stream
|
||||
deflate.c DEFLATE C ZLIB - Compress data using the deflation algorithm
|
||||
gzio.c GZIO C ZLIB - IO on .gz files
|
||||
infback.c INFBACK C ZLIB - Inflate using a callback interface
|
||||
inffast.c INFFAST C ZLIB - Fast proc. literals & length/distance pairs
|
||||
inflate.c INFLATE C ZLIB - Interface to inflate modules
|
||||
inftrees.c INFTREES C ZLIB - Generate Huffman trees for efficient decode
|
||||
trees.c TREES C ZLIB - Output deflated data using Huffman coding
|
||||
uncompr.c UNCOMPR C ZLIB - Decompress a memory buffer
|
||||
zutil.c ZUTIL C ZLIB - Target dependent utility functions
|
||||
H Original ZLIB C and ILE/RPG include files
|
||||
crc32.h CRC32 C ZLIB - CRC32 tables
|
||||
deflate.h DEFLATE C ZLIB - Internal compression state
|
||||
inffast.h INFFAST C ZLIB - Header to use inffast.c
|
||||
inffixed.h INFFIXED C ZLIB - Table for decoding fixed codes
|
||||
inflate.h INFLATE C ZLIB - Internal inflate state definitions
|
||||
inftrees.h INFTREES C ZLIB - Header to use inftrees.c
|
||||
trees.h TREES C ZLIB - Created automatically with -DGEN_TREES_H
|
||||
zconf.h ZCONF C ZLIB - Compression library configuration
|
||||
zlib.h ZLIB C ZLIB - Compression library C user interface
|
||||
as400/zlib.inc ZLIB.INC RPGLE ZLIB - Compression library ILE RPG user interface
|
||||
zutil.h ZUTIL C ZLIB - Internal interface and configuration
|
||||
TOOLS Building source software & AS/400 README
|
||||
as400/bndsrc BNDSRC Entry point exportation list
|
||||
as400/compile.clp COMPILE CLP Compile sources & generate service program
|
||||
as400/readme.txt README TXT Installation instructions
|
||||
|
||||
4) Continue as in I)3).
|
||||
|
||||
|
||||
|
||||
|
||||
Notes: For AS400 ILE RPG programmers, a /copy member defining the ZLIB
|
||||
API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC).
|
||||
Please read comments in this member for more information.
|
||||
|
||||
Remember that most foreign textual data are ASCII coded: this
|
||||
implementation does not handle conversion from/to ASCII, so
|
||||
text data code conversions must be done explicitely.
|
||||
|
||||
Always open zipped files in binary mode.
|
||||
@@ -1,73 +0,0 @@
|
||||
Microsoft Developer Studio Project Files, Format Version 6.00 for zlib.
|
||||
|
||||
Copyright (C) 2000-2004 Simon-Pierre Cadieux.
|
||||
Copyright (C) 2004 Cosmin Truta.
|
||||
For conditions of distribution and use, see copyright notice in zlib.h.
|
||||
|
||||
|
||||
This project builds the zlib binaries as follows:
|
||||
|
||||
* Win32_DLL_Release\zlib1.dll DLL build
|
||||
* Win32_DLL_Debug\zlib1d.dll DLL build (debug version)
|
||||
* Win32_DLL_ASM_Release\zlib1.dll DLL build using ASM code
|
||||
* Win32_DLL_ASM_Debug\zlib1d.dll DLL build using ASM code (debug version)
|
||||
* Win32_LIB_Release\zlib.lib static build
|
||||
* Win32_LIB_Debug\zlibd.lib static build (debug version)
|
||||
* Win32_LIB_ASM_Release\zlib.lib static build using ASM code
|
||||
* Win32_LIB_ASM_Debug\zlibd.lib static build using ASM code (debug version)
|
||||
|
||||
|
||||
For more information regarding the DLL builds, please see the DLL FAQ
|
||||
in ..\..\win32\DLL_FAQ.txt.
|
||||
|
||||
|
||||
To build and test:
|
||||
|
||||
1) On the main menu, select "File | Open Workspace".
|
||||
Open "zlib.dsw".
|
||||
|
||||
2) Select "Build | Set Active Configuration".
|
||||
Choose the configuration you wish to build.
|
||||
|
||||
3) Select "Build | Clean".
|
||||
|
||||
4) Select "Build | Build ... (F7)". Ignore warning messages about
|
||||
not being able to find certain include files (e.g. alloc.h).
|
||||
|
||||
5) If you built one of the sample programs (example or minigzip),
|
||||
select "Build | Execute ... (Ctrl+F5)".
|
||||
|
||||
|
||||
To use:
|
||||
|
||||
1) Select "Project | Settings (Alt+F7)".
|
||||
Make note of the configuration names used in your project.
|
||||
Usually, these names are "Win32 Release" and "Win32 Debug".
|
||||
|
||||
2) In the Workspace window, select the "FileView" tab.
|
||||
Right-click on the root item "Workspace '...'".
|
||||
Select "Insert Project into Workspace".
|
||||
Switch on the checkbox "Dependency of:", and select the name
|
||||
of your project. Open "zlib.dsp".
|
||||
|
||||
3) Select "Build | Configurations".
|
||||
For each configuration of your project:
|
||||
3.1) Choose the zlib configuration you wish to use.
|
||||
3.2) Click on "Add".
|
||||
3.3) Set the new zlib configuration name to the name used by
|
||||
the configuration from the current iteration.
|
||||
|
||||
4) Select "Build | Set Active Configuration".
|
||||
Choose the configuration you wish to build.
|
||||
|
||||
5) Select "Build | Build ... (F7)".
|
||||
|
||||
6) If you built an executable program, select
|
||||
"Build | Execute ... (Ctrl+F5)".
|
||||
|
||||
|
||||
Note:
|
||||
|
||||
To build the ASM-enabled code, you need Microsoft Assembler
|
||||
(ML.EXE). You can get it by downloading and installing the
|
||||
latest Processor Pack for Visual C++ 6.0.
|
||||
@@ -1,278 +0,0 @@
|
||||
# Microsoft Developer Studio Project File - Name="example" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=example - Win32 LIB Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "example.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "example.mak" CFG="example - Win32 LIB Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "example - Win32 DLL ASM Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "example - Win32 DLL ASM Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "example - Win32 DLL Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "example - Win32 DLL Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "example - Win32 LIB ASM Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "example - Win32 LIB ASM Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "example - Win32 LIB Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "example - Win32 LIB Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "example - Win32 DLL ASM Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "example___Win32_DLL_ASM_Release"
|
||||
# PROP BASE Intermediate_Dir "example___Win32_DLL_ASM_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Win32_DLL_ASM_Release"
|
||||
# PROP Intermediate_Dir "Win32_DLL_ASM_Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "example - Win32 DLL ASM Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "example___Win32_DLL_ASM_Debug"
|
||||
# PROP BASE Intermediate_Dir "example___Win32_DLL_ASM_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Win32_DLL_ASM_Debug"
|
||||
# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ELSEIF "$(CFG)" == "example - Win32 DLL Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "example___Win32_DLL_Release"
|
||||
# PROP BASE Intermediate_Dir "example___Win32_DLL_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Win32_DLL_Release"
|
||||
# PROP Intermediate_Dir "Win32_DLL_Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "example - Win32 DLL Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "example___Win32_DLL_Debug"
|
||||
# PROP BASE Intermediate_Dir "example___Win32_DLL_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Win32_DLL_Debug"
|
||||
# PROP Intermediate_Dir "Win32_DLL_Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ELSEIF "$(CFG)" == "example - Win32 LIB ASM Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "example___Win32_LIB_ASM_Release"
|
||||
# PROP BASE Intermediate_Dir "example___Win32_LIB_ASM_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Win32_LIB_ASM_Release"
|
||||
# PROP Intermediate_Dir "Win32_LIB_ASM_Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "example - Win32 LIB ASM Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "example___Win32_LIB_ASM_Debug"
|
||||
# PROP BASE Intermediate_Dir "example___Win32_LIB_ASM_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Win32_LIB_ASM_Debug"
|
||||
# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ELSEIF "$(CFG)" == "example - Win32 LIB Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "example___Win32_LIB_Release"
|
||||
# PROP BASE Intermediate_Dir "example___Win32_LIB_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Win32_LIB_Release"
|
||||
# PROP Intermediate_Dir "Win32_LIB_Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "example - Win32 LIB Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "example___Win32_LIB_Debug"
|
||||
# PROP BASE Intermediate_Dir "example___Win32_LIB_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Win32_LIB_Debug"
|
||||
# PROP Intermediate_Dir "Win32_LIB_Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "example - Win32 DLL ASM Release"
|
||||
# Name "example - Win32 DLL ASM Debug"
|
||||
# Name "example - Win32 DLL Release"
|
||||
# Name "example - Win32 DLL Debug"
|
||||
# Name "example - Win32 LIB ASM Release"
|
||||
# Name "example - Win32 LIB ASM Debug"
|
||||
# Name "example - Win32 LIB Release"
|
||||
# Name "example - Win32 LIB Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\example.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\zconf.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\zlib.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
@@ -1,278 +0,0 @@
|
||||
# Microsoft Developer Studio Project File - Name="minigzip" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=minigzip - Win32 LIB Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "minigzip.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "minigzip.mak" CFG="minigzip - Win32 LIB Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "minigzip - Win32 DLL ASM Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "minigzip - Win32 DLL ASM Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "minigzip - Win32 DLL Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "minigzip - Win32 DLL Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "minigzip - Win32 LIB ASM Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "minigzip - Win32 LIB ASM Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "minigzip - Win32 LIB Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "minigzip - Win32 LIB Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "minigzip - Win32 DLL ASM Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "minigzip___Win32_DLL_ASM_Release"
|
||||
# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_ASM_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Win32_DLL_ASM_Release"
|
||||
# PROP Intermediate_Dir "Win32_DLL_ASM_Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "minigzip - Win32 DLL ASM Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "minigzip___Win32_DLL_ASM_Debug"
|
||||
# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_ASM_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Win32_DLL_ASM_Debug"
|
||||
# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ELSEIF "$(CFG)" == "minigzip - Win32 DLL Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "minigzip___Win32_DLL_Release"
|
||||
# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Win32_DLL_Release"
|
||||
# PROP Intermediate_Dir "Win32_DLL_Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "minigzip - Win32 DLL Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "minigzip___Win32_DLL_Debug"
|
||||
# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Win32_DLL_Debug"
|
||||
# PROP Intermediate_Dir "Win32_DLL_Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ELSEIF "$(CFG)" == "minigzip - Win32 LIB ASM Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "minigzip___Win32_LIB_ASM_Release"
|
||||
# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_ASM_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Win32_LIB_ASM_Release"
|
||||
# PROP Intermediate_Dir "Win32_LIB_ASM_Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "minigzip - Win32 LIB ASM Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "minigzip___Win32_LIB_ASM_Debug"
|
||||
# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_ASM_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Win32_LIB_ASM_Debug"
|
||||
# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ELSEIF "$(CFG)" == "minigzip - Win32 LIB Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "minigzip___Win32_LIB_Release"
|
||||
# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Win32_LIB_Release"
|
||||
# PROP Intermediate_Dir "Win32_LIB_Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "minigzip - Win32 LIB Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "minigzip___Win32_LIB_Debug"
|
||||
# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Win32_LIB_Debug"
|
||||
# PROP Intermediate_Dir "Win32_LIB_Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "minigzip - Win32 DLL ASM Release"
|
||||
# Name "minigzip - Win32 DLL ASM Debug"
|
||||
# Name "minigzip - Win32 DLL Release"
|
||||
# Name "minigzip - Win32 DLL Debug"
|
||||
# Name "minigzip - Win32 LIB ASM Release"
|
||||
# Name "minigzip - Win32 LIB ASM Debug"
|
||||
# Name "minigzip - Win32 LIB Release"
|
||||
# Name "minigzip - Win32 LIB Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\minigzip.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\zconf.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\zlib.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
@@ -1,59 +0,0 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "example"=.\example.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name zlib
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "minigzip"=.\minigzip.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name zlib
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "zlib"=.\zlib.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: zlib
|
||||
Description: zlib compression library
|
||||
Version: @VERSION@
|
||||
|
||||
Requires:
|
||||
Libs: -L${libdir} -lz
|
||||
Cflags: -I${includedir}
|
||||
@@ -1,152 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Transform K&R C function definitions into ANSI equivalent.
|
||||
#
|
||||
# Author: Paul Marquess
|
||||
# Version: 1.0
|
||||
# Date: 3 October 2006
|
||||
|
||||
# TODO
|
||||
#
|
||||
# Asumes no function pointer parameters. unless they are typedefed.
|
||||
# Assumes no literal strings that look like function definitions
|
||||
# Assumes functions start at the beginning of a line
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
local $/;
|
||||
$_ = <>;
|
||||
|
||||
my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments
|
||||
|
||||
my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ;
|
||||
my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ;
|
||||
my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ;
|
||||
|
||||
|
||||
while (s/^
|
||||
( # Start $1
|
||||
( # Start $2
|
||||
.*? # Minimal eat content
|
||||
( ^ \w [\w\s\*]+ ) # $3 -- function name
|
||||
\s* # optional whitespace
|
||||
) # $2 - Matched up to before parameter list
|
||||
|
||||
\( \s* # Literal "(" + optional whitespace
|
||||
( [^\)]+ ) # $4 - one or more anythings except ")"
|
||||
\s* \) # optional whitespace surrounding a Literal ")"
|
||||
|
||||
( (?: $dList )+ ) # $5
|
||||
|
||||
$sp ^ { # literal "{" at start of line
|
||||
) # Remember to $1
|
||||
//xsom
|
||||
)
|
||||
{
|
||||
my $all = $1 ;
|
||||
my $prefix = $2;
|
||||
my $param_list = $4 ;
|
||||
my $params = $5;
|
||||
|
||||
StripComments($params);
|
||||
StripComments($param_list);
|
||||
$param_list =~ s/^\s+//;
|
||||
$param_list =~ s/\s+$//;
|
||||
|
||||
my $i = 0 ;
|
||||
my %pList = map { $_ => $i++ }
|
||||
split /\s*,\s*/, $param_list;
|
||||
my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ;
|
||||
|
||||
my @params = split /\s*;\s*/, $params;
|
||||
my @outParams = ();
|
||||
foreach my $p (@params)
|
||||
{
|
||||
if ($p =~ /,/)
|
||||
{
|
||||
my @bits = split /\s*,\s*/, $p;
|
||||
my $first = shift @bits;
|
||||
$first =~ s/^\s*//;
|
||||
push @outParams, $first;
|
||||
$first =~ /^(\w+\s*)/;
|
||||
my $type = $1 ;
|
||||
push @outParams, map { $type . $_ } @bits;
|
||||
}
|
||||
else
|
||||
{
|
||||
$p =~ s/^\s+//;
|
||||
push @outParams, $p;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
my %tmp = map { /$pMatch/; $_ => $pList{$1} }
|
||||
@outParams ;
|
||||
|
||||
@outParams = map { " $_" }
|
||||
sort { $tmp{$a} <=> $tmp{$b} }
|
||||
@outParams ;
|
||||
|
||||
print $prefix ;
|
||||
print "(\n" . join(",\n", @outParams) . ")\n";
|
||||
print "{" ;
|
||||
|
||||
}
|
||||
|
||||
# Output any trailing code.
|
||||
print ;
|
||||
exit 0;
|
||||
|
||||
|
||||
sub StripComments
|
||||
{
|
||||
|
||||
no warnings;
|
||||
|
||||
# Strip C & C++ coments
|
||||
# From the perlfaq
|
||||
$_[0] =~
|
||||
|
||||
s{
|
||||
/\* ## Start of /* ... */ comment
|
||||
[^*]*\*+ ## Non-* followed by 1-or-more *'s
|
||||
(
|
||||
[^/*][^*]*\*+
|
||||
)* ## 0-or-more things which don't start with /
|
||||
## but do end with '*'
|
||||
/ ## End of /* ... */ comment
|
||||
|
||||
| ## OR C++ Comment
|
||||
// ## Start of C++ comment //
|
||||
[^\n]* ## followed by 0-or-more non end of line characters
|
||||
|
||||
| ## OR various things which aren't comments:
|
||||
|
||||
(
|
||||
" ## Start of " ... " string
|
||||
(
|
||||
\\. ## Escaped char
|
||||
| ## OR
|
||||
[^"\\] ## Non "\
|
||||
)*
|
||||
" ## End of " ... " string
|
||||
|
||||
| ## OR
|
||||
|
||||
' ## Start of ' ... ' string
|
||||
(
|
||||
\\. ## Escaped char
|
||||
| ## OR
|
||||
[^'\\] ## Non '\
|
||||
)*
|
||||
' ## End of ' ... ' string
|
||||
|
||||
| ## OR
|
||||
|
||||
. ## Anything other char
|
||||
[^/"'\\]* ## Chars which doesn't start a comment, string or escape
|
||||
)
|
||||
}{$2}gxs;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user