@chapter History

@strong{(Please note: This section has not yet been updated for the latest
net release.)}

@include changes.texinfo

@section Release Beta 19 (Feb 26 1998)

This is a major release.  It includes a much-updated version of the
Cygwin32 library.  Because the Cygwin API has changed in incompatible
ways, the dll has been renamed cygwinb19.dll to avoid invalidating
previously built executables.

Note that a B19-compiled application exec()ing a B18-compiled
application will treat the B18-compiled executable as an ordinary
Win32 executable.  This means that open file descriptors and some other
internals will not be inheritted on exec() calls.  The reason for this
is that different shared memory areas are used by the different versions
of the cygwin library.  This may or may not be of importance to you
depending on what you're doing.

The Beta 19 release of the Cygwin32 library continues to be licensed
under the GNU General Public License (GPL).

The PE format definition used by the compiler tools now matches
Microsoft's more closely.  This should allow better interoperability
with other vendors' development tools although more work probably
remains to be done in this area.  This change invalidates all previously
built object (.o) and static library (.a) files so be sure to
delete/rebuild old .o and .a files you are using!

Finally, old symlinks are invalidated by this release.  The "system"
attribute is now used to mark symlinks which significantly speeds
up fstat and other file related calls.  Either recreate old ones or
set their "system" attribute flag so they will be recognized properly.

The new installer takes care of all environment variable settings
automatically by installing a shortcut in program files that pulls
up a bash prompt with all the correct environment variables set.
As a result, the setup process should be much cleaner than in the last
release.

For those of you who end up moving the tools around, the batch file
that sets up the default environment is called cygnus.bat and is
installed in the root of the install directory.  Because the tools have
been compiled to install in /cygnus/b19, when installed in this
location, the tools should "just work" if the bin directory is in your
path (no special environment variables are needed).  The only exception
is MAKE_MODE which needs to be set if you want to get ordinary Unix-like
make behavior -- see the make notes below for more information.

@subsection Changes in specific tools:

Ian Lance Taylor has written a resource compiler called "windres".
It can be used to compile windows resources from a textual rc file
into a COFF file.  The sources are in the binutils subdirectory of
the sources.

We have upgraded many of the utilities.  Beta 19 includes bash 2.01.1,
fileutils 3.16, gawk 3.0.3, patch 2.5, shellutils 1.16, tar 1.12,
textutils 1.22, and texinfo 3.11.  Bash under Cygwin32 now includes
working job control among other improvements.

The sh executable is now ash 0.2 from the Debian Linux distribution.
Using this more minimal shell as /bin/sh.exe speeds up configures
significantly.

Bison 1.25 has been added.

Tcl/tk are upgraded to version 8.0.  Compatible versions of tix and
itcl have been added.  These all include Cygwin32-compatible configury
files so you can do a Unix-style build of the Win32 ports of tcl/tk.

Expect 5.21.3 is included and basically works.

The binaries have been compiled with i686 optimizations turned on
which may result in a speed increase on Pentium-based systems
although the tools should work on i386 and later chips.

The linker (ld) has been enhanced -- it will now add the idata3
terminator automatically when linking dlls.

kill now supports signal names in arguments.  ps now shows process
start time information.

Although the default install of the tools should hide this detail, the
make utility now defaults to a Win32 mode which uses cmd.exe/command.com
as the subshell.  This mode allows the use of backslashes in filenames.
To build Unix programs, you need to set the MAKE_MODE environment
variable to "UNIX".  This way you will get the old behavior of using
sh.exe as the subshell.

@subsection Changes in the Cygwin32 API (cygwin.dll):

The interface is now better defined.  It contains libc, libm, and
Unix compatability calls.  It no longer contains exports for libgcc.a.
This should result in a more stable interface.  See the calls.texinfo
document for interface documentation.

There is now only one environment variable called CYGWIN32 that controls
the overall behavior of the dll:

        set CYGWIN32=[no]title [no]strip_title [no]binmode [no]glob
                strace=mask:cache,file [no]tty

So if you "set CYGWIN32=title tty", then you would get tty support
(see below) and have the current running process listed in the title
bar.

B19 adds support for:

* tty and pseudo-tty devices.  For now, ttys default to off because
taking over the console causes problems with using non-Cygwin console
programs in a Cygwin console.  To turn it on, set the environment
variable CYGWIN32 to include "tty".
* Hard links (requires NT on an NTFS filesystem).  When not possible (on
non-NTFS filesystems), link() will make a copy of the file in question
as it has done in previous releases.
* The SIGWINCH signal.  If tty handling is enabled then the process will
receive a SIGWINCH signal when the screen size changes.
* Additional terminal escape sequences recognized: scroll region setting via
<ESC>[n1;n2r and setting the console title using xterm escape sequence:
<ESC>]2;new title^G .

The following calls have been added:

* ptsname, grantpt, unlockpt
* login, logout, ttyslot, ctermid
* cfgetispeed, cfgetospeed, cfsetispeed, cfsetospeed
* setitimer, getitimer, ftime, tzset
* wait3, wait4, pause, sigpause
* getpgid, killpg, setegid (stub)
* strlwr, strupr
* sexecve, sexecl, sexecle, sexeclp, sexeclpe, sexecv, sexecp, sexecvpe
* rcmd, rresvport, rexec
* strsignal, strtosigno
* dlopen, dlsym, dlclose, dlerror
* inet_netof, inet_makeaddr
* socketpair
* fpathconf, realpath, chroot (stub)
* initgroups (stub), getgroups
* random, srandom

The following calls have been removed:

* ScreenCols, ScreenGetCursor, ScreenRows, ScreenSetCursor
* getkey, kbhit
* crypt (stub)
* all libgcc.a exports

The Winsock dll (wsock32.dll) is no longer implicitly linked into
the Cygwin32 dll.  Instead, it is explicitly loaded with LoadLibrary
the first time a process calls a Cygwin32 networking function.  This
speeds up most processes significantly (configures by about 20%).

The signal-related code has been rewritten from scratch.  Ditto for
most of the path handling code.

The globbing and getopt code has been replaced with BSD-derived
code.  The regexp code has been replaced with Henry Spencer's PD
implementation.

Doug Lea's malloc is now being used as the default malloc exported by
cygwin.  This malloc balances speed and compactness very nicely but is
more unforgiving when attempts are made to free already freed memory,
i.e., a segmentation violation will occur.

The bsearch call has been rewritten.

Alt Gr-key behavior has been changed in this release.  The left alt-key
still produces ESC-key sequence.  The right alt (Alt Gr)-key now
produces characters according to national keyboard layouts.

Processes no longer write their name in the title bar unless you include
"title" in the CYGWIN32 environment variable (see above).

Multiple cygwin.dlls no longer use the same memory space unless they are
identical (built at the same time).  This allows multiple dlls with
incompatible shared memory usage to be run simultaneously.  It also
facilitates debugging a buggy cygwin.dll.  By keeping only a single copy
of the latest cygwin.dll on your system, you can be assured of having
all cygwin processes exist in the same shared memory space.

The slash mount no longer defaults to C:.  It now defaults to the
system drive letter (where the OS is installed).

The standard dl* dynamic library loader functions are now available.
Cygwin32 B19 now correctly copies data after a fork and automatically
reloads any DLLs loaded in the parent process.  In addition, dlls will
now be correctly initialized when loaded and global constructors will
be called.  Global destructors will be called when the DLL is detached.
Handles gotten from dlopen or dlsym in the parent will be accessible in a
forked child.  The LD_LIBRARY_PATH environment variable is used in the dlopen
search.

Include the file <cygwin32/cygwin_dll.h> in a cygwin32 created .dll and
use the line DECLARE_CYGWIN_DLL(dll-entry-point) to produce .dlls that
can be used with these functions.

@section Release Beta 18 (May 6 1997)

This is a major release.  The new cygwin.dll is still
backwards-compatible with previously linked applications but
contains significant changes.

We have completely changed the installation process to make
use of an InstallShield5-based installer.  This should reduce the
number of installation problems people have experienced in the
past.  However, it is still necessary to set environment variables
by hand, as explained in the README.txt accompanying the distribution.
(Future gnu-win32 installers may include the capability to do this
automatically).

@subsection Changes in specific tools:

GCC compilation times have been improved by 20-30% by using spawn()
instead of fork().

GCC accepts both Win32 and POSIX paths/path lists in its
environment variables (COMPILER_PATH, LIBRARY_PATH, C_INCLUDE_PATH,
CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH)

GDB comes with a tcl/tk-based GUI (gdbtk).  You can still invoke the
command line gdb by invoking it with "gdb -nw".

Bash verifies that /tmp exists and is a directory upon startup.
It complains if this isn't the case.

Running gcc or ld with "-s" used to create invalid executables.
The bug in bfd that was responsible for this has been fixed.

The conflict between String.h and string.h (and other such pairs
of header files) where you include one and get the other has been
fixed.

The top level install-sh script tries to install foo.exe if asked
to install foo when foo's not present.  This fixes many installs
of Unix software.

Dlltool has preliminary support for the IMPORT declaration in .def files
when invoked with -I.  Feel free to experiment with it but once this
functionality is tested more extensively this flag may go away.

Time is upgraded to version 1.7.

Make is upgraded to version 3.75.

Make accepts both Win32 and POSIX path lists in the VPATH variable.

@subsection Changes in the Cygwin32 API (cygwin.dll):

The following is now supported:

* UNC paths
* Reverse index escapes in console code
* Blocking select()s on a combination of sockets/handles
* Directory symlinks.
* Reparenting of child processes.

The following calls have been added:

* mmap(), mprotect(), msync(), munmap().  fork() changed to support these.
* fsync(), statfs(), fstatfs().
* getprotobynumber() and getservbyport().
* get_osfhandle(), cwait().
* spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnv(), spawnve(),
spawnvp(), spawnvpe().
* nice().
* sigpending(), sigsuspend()
* Under NT only, chown(), getgrgid(), getgrnam(), endgrent(), getgrent(),
setpwend(), getpwent(), endpwent().  Win95 still has these as stubs.

Significantly better signals / exception handling support added.
The kill signal works much better now (control-C works in bash).

Shell scripts now run the shell specified after the #! instead of
always defaulting to /bin/sh.

Floating point registers are now properly initialized in the crt0.o.

Opening non-disk files such as com ports no longer check to see
if they are symlinks or executables.

The console title now is set to the name of the running process.

Winsock is now initialized upon app startup.

Moved reent_data from private address space to cygwin.dll.

The system() call now invokes spawnvp() instead of fork()/exec().

Support for NT extended attributes has been added but is disabled
for now because it slowed things down too much.  We want to use them to
remember info about symlink and executable status of files.

Under NT only, utilities mkpasswd and mkgroup can generate a valid
/etc/passwd and /etc/group.

Earlier releases stored mount points in the registry under
"Cygnus Support".  This changed to "Red Hat, Inc." starting
with beta 18.  Either use a registry editor (regedit under NT)
to rename the old entry or just redo your mount points and the
cygwin.dll will automatically create the new one for you.

Mount points can now be up to MAX_PATH in length instead of 30
characters.

@section Release Beta 17.1 (Dec 10 1996)

A patch has been applied to make Win 95 configure work again.

ld has been changed to make "a.exe" be the default executable name.

@section Release Beta 17 (Dec 7 1996)

It is now possible to rebuild the tools natively under x86 NT when
the full Cygnus Developers' Kit (CDK) and the User Tools are both
installed correctly.

While the cygwin.dll underwent substantial changes, none of them
prevent you from using previously built applications  The new dll
is compatible with beta 16 to the best of our knowledge.  Beta 14-built
programs will continue to fail with the beta 17 dll -- you will have to
relink them before they will work.

The winsup files that make up the Cygwin32 API are now under the
GNU General Public License.  See the accompanying press release
for more information.

@subsection Changes in specific tools:

Gcc now links by default against -lkernel32 and also against
-luser32 -lgdi32 -lcomdlg32 when mwindows is set.  Another major
change is that when creating an executable, gcc will now create
foo.exe when given a -o argument of foo.

Dlltool has patches to make it better handle the --subsystem argument
that allows choosing console vs. GUI among other options.
ld has been changed to have a much larger stack reserve size.  This
is necessary when rebuilding the toolchain natively under NT.

The C++ headers can now be found given a correctly set GCC_EXEC_PREFIX
environment variable.

New versions of fileutils and make are included.  Findutils has been
added.

@subsection Changes in the Cygwin32 API (cygwin.dll):

Scott Christley's headers and def files for the standard Win32 dlls
have been integrated.  Anything present only in the previous Cygnus headers
has been added in the appropriate places.  There are placeholder files
with the standard Win32 header names that pull in our headers so
programs that try to include specific headers should continue to work.
Having more complete headers should make Win32 native programming
easier.

Select has been rewritten from scratch.  The new one can deal with
all sockets, handles and sockets always ready, all handles.  Handles
and sockets with timeout not implemented yet.  Select now does
blocking and doesn't spin cpu.

File handling has been largely rewritten:
The fhandler array has been moved into local memory instead of shared
memory.  This makes a number of things behave better.  Lots of changes
to support this.  There is now fairly complete ansi/vt100 console support.
Some new file locking support has been added.  Arrow keys are now
supported.

Process handling much improved.

Significant serious bugs in fork() fixed.

The system() call now works.

unlink() now chmods read-only files to writable before attempting to
delete a file.  This fixes the outstanding problem where rm can't
delete read-only files saying "out of queue slots" repeatedly.

Text mode read has been rewritten.

New syslog code allows logging to event log under NT, file under Win 95.

Symlinks are enabled.

readv() and writev() have been written and exported.

For MS compatibility, we now export functions in the dll as _funcname
in addition to funcname.  I would suggest not making use of this fact
unless you are building code that already accesses C library calls
in this way.

Almost all of the source code is now in C++ files.

@section Release Beta 16 (Aug 30 1996)

Path handling has been completely rewritten.  To refer to drive Q: in
bash, you can now refer to //q/.  Alternatively, type "mount Q: /q" to
have drive Q: show up as /q.

We now pass the Plum Hall positive C conformance tests on the
i386 under Windows 95 and NT 4.0b2.

Fork was previously not accessible inside the dll.  This is no
longer the case which should allow us to add working system and popen
calls.

getdomainname works (it used to just return "cygnus.com") by getting
information from registry.

Fixed readdir bug that set errno improperly.  This fixed the problem
with diff not working across directories.

Better error checking in signal functions.  Initialize winsock in
cygwin32_socket with checkinit call (fixes bug that required calling any
function that did this first).

New functions: sigaddset, sigismember, sigfillset, sigemptyset.

Removed extra underscores present in sysdef files.

There is a now a major and a minor version number associated with
the cygwin.dll.  The major number changes only when incompatible changes
are made, the minor number changes when significant changes are made
to the dll that don't require relinking of old apps.

Changed value of HZ in include/sys/param.h to correct value of 1000.
(Fixes bug people reported about "time sleep 5" returning 50).

Assorted exception handling fixes for both i386 and ppc processors.

Assorted time-related fixes required for Cygnus Kerberos work.
New time functions: gmtime, corelocaltime

Assorted spawn and fork fixes.

Pseudo-Unix process handling added -- new ps and kill commands added

Control-Z's are now handled as a valid EOF token in files opened as
text.
lseek now always operates in binary mode.

Select revamped.

Various other changes.  For more detailed information, consult the file
in the source code winsup/ChangeLog.

Preprocessor define scheme changed.  Apps should now use _WIN32
instead of __WIN32__ to check for access to Win32 API and __CYGWIN32__
to check for presence of the Cygwin32 environment.

We are no longer including GNU findutils, GNU dbm, GNU bison,
GNU less, ncurses, ftp, finger, rcl, cvtres, or V.  This may or may not
change in the future.

You must relink old apps you built with prior releases with the new
cygwin.dll.

@section Release Beta 14 (April 10 1996)

Some bugs have been fixed.  GDBM and m4 are in the release.  GCC now
uses the standard install directories for cc1 etc.

A port of V to gnu-win32 is included.  You can now write graphics
applications which will run on Unix or Windows unchanged.  Some parts of
V work on the PPC too.

If you call any programs from the standard DOS shell, then the DLL will
expand all the wildcards (glob) found in the arguments on the command
line.  So ls *.exe will do what you think it should, even if you're not
in bash.

ncurses and less are included. The DLL's emulation of a vt100 isn't complete,
so ncurses doesn't do all that it should. Hence less is more or less
useless.  This can be fixed with a new DLL.  (If you want to use
something which uses curses, be sure to set your TERM and HOME
envirionment variables)

If you leave out main, then the libraries will try and call WinMain in the
usual way.

^C works much better on Windows 95.  It's still not quite right, but at
least most times it quits what you're doing, and most times doesn't
crash your machine.

You can start more than one concurrent bash session. 

Some networking support has been added.  Even though telnet.exe is provided,
I know that it doesn't work, so please don't send me bug reports.

You will have to relink your applications to go with the new DLL.

The DLL is released in its own .zip file too, so you don't have to
download a load of other stuff if you dont want to.

@section Release Beta 13 (Feb 9 1996)

Files are opened in binary mode, unless the registry is fiddled with.

The `cat >foo <<EOF bug is fixed.

The symlink cookie has changed, so old links wont work any more.

Two resource tools are provided (untested).

More windows header files are provided. WxWindows almost compiles.

You can get to a raw floppy with `/dev/fd0 or `/dev/fd1.

You can have two filenames with the same name and different case in
the same directory.

Stat now fills in the st_nlink field for directories, so find works
better.

This version is much more stable than any previous version, and will
stay running long enough to configure and build itself on my NT box.

This version is also available in PowerPC versions.  The PowerPC
compiler doesn't do stack probing, so some applications won't work, or
they'll only work on some input data - e.g. the demo "hello world" will
compile, but gcc will crash compiling the dhrystone benchmark.

There's a new registry variable "fmode=binary" which controls
whether the tools always open files in binary mode (unless overridden
with O_TEXT), or always open files in text mode (unless overridden with
O_BINARY).

Filesystems can be mounted with the mixed_case flag.  This allows
you to use filenames with the same spelling, but different case in the
same directory.

I haven't tested or even used some of the packages that I've
provided.  I compiled them, and then fixed the obvious "the file should
have been opened in binary mode" problems.

I've already had reports of some of it not working correctly on
Windows 95.  I don't have a simple to use Windows 95 configuration, but
when I did try "it worked for me".  This may be another manifestation
of the bug which makes bash hang sometimes under NT.

@section Release Beta 12 (Jan 3 1996)

You can call non- gnu-win32 applications from bash.

You can mount other directories using the @code{mount} command.

Minimal ANSI terminal emulation included.

Packages split into smaller and more logical lumps.

/d<name> mechanism gone.

Initial support for the PowerPC added.

@section Release Beta 11 (Jan 3 1996)

Something broke on the way to the ftp site.

@section Release Beta 10 (Dec 5 1995)

You can pass environment variables around in bash.

Lots more stuff provided precompiled.

Diffs to standard FSF release provided.

It self-hosts.

It supports symbolic links.

The directory layout has changed to be more unix like.

The way that you get to non-c drives is new - i:\foo.cc
is now /di/foo.cc

Nasty bug found and fixed in fork.

CPP will now search the directories you supply in env names.

@section Release Beta 9

I've put all of libc and libm into a shared library,
This drastically reduces the size of some binaries.
e.g., ls goes from 82,949 bytes to 26,624.
"Hello World" is 2564 bytes long.
This is the first stage in greatly speeding up 
some of the stuff that's going on behind the curtain.

Different processes communicate using shared memory.

Some trivial use of the registry is made.

DLLTOOL is now *much* faster.

Some small problems have been fixed in the way that DLLs were
layed out.	

@section Release Beta 8

GDB works.

GCC now emits debug info which can make **huge** executables
Fortunately, strip works too.

More work has been done to make quoting work.

Simple termios support added to newlib.

Much nicer way of describing paths, eg //c/foo is c:\foo.

@section Release Beta 7

Works again on Win 95 (which is why -6 wasn't advertised).

Permissions are faked better.

Source of demos available without having to ftp the entire win32
binary tree. 

@section Release Beta 6

Can now generate DLLs, tiny demo included.
tcl, byacc, fileutils, diff, make included.

@section Release Beta 5

Bug preventing anything from running on recent versions
of Win95 fixed.

vfork and exec oddities fixed.

Import libraries are now really libraries and not
just .o files.

Debugging info stripped from images and libraries;
it's just bloat until gdb works.

I've filled in the four major import libraries.

The win*.h files are now installed into <foo>/include
rather that <foo>/include/sys, so more things will
compile out of the box.

@section Release Beta 4

PE support is fixed. Programs run on
NT 3.1, NT 3.5, NT 3.51 and Windows 95.

You can build GUI programs.

.DEF files for three other DLL's started.

New GUI demo program. 

C library distinguishes between text and binary files
consequently the text files generated by the
tools have the familiar ^M at the end of the line
which DOS likes so much.

Doug Evans of Cygnus has added a load
of fancy support for execve, opendir and 
various other cool things.

Exception handling is better.

@section Release Beta 3

Was so long ago we don't remember.
