@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 [n1;n2r and setting the console title using xterm escape sequence: ]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 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 "Cygnus Solutions" 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 < 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 /include rather that /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.