1 2Last updated Jul '99 for pdksh-5.2.14. 3 (check ftp://ftp.cs.mun.ca:/pub/pdksh/ or 4 http://www.cs.mun.ca/~michael/pdksh/ for new versions/patches) 5 6PD-ksh is a mostly complete AT&T ksh look-alike (see NOTES file for a list 7of things not supported). Work is mostly finished to make it fully 8compatible with both POSIX and AT&T ksh (when the two don't conflict). 9 10Since pdksh is free and compiles and runs on most common unix systems, it 11is very useful in creating a consistent user interface across multiple 12machines. For example, in the CS dept. of MUN, pdksh is installed on a 13variety of machines including Suns, HPs, DecStations, pcs running Linux, 14etc., and is the login shell of ~5200 users. 15 16PDksh is currently being maintained by Michael Rendell (michael@cs.mun.ca), 17who took over from Simon J. Gerraty (sjg@zen.void.oz.au) at the later's 18suggestion. A short list of things that have been added since the last 19public pdksh release (4.9) are auto-configuration, arrays, $(( .. )), 20[[ .. ]], variable attributes, co-processes, extended file globbing, 21many POSIXisms and many bug fixes. See the NEWS and ChangeLog files for 22other features added and bugs fixed. 23 24Note that pdksh is provided AS IS, with NO WARRANTY, either expressed or 25implied. Also note that although the bulk of the code in pdksh is in the 26public domain, some files are copyrighten (but freely distributable) and 27subject to certain conditions (eg, don't remove copyright, document any 28changes, etc.). See the LEGAL file for details. 29 30If you would like to be notified via email of new releases as they become 31available, send mail to pdksh-request@cs.mun.ca with subject 32"send release notifications" (or "don't send release notifications" to stop 33them). 34 35 36Files of interest: 37 NEWS short list of noticeable changes in various versions. 38 CONTRIBUTORS short history of pdksh, people who contributed, etc. 39 NOTES lists of known bugs in pdksh, at&t ksh, and posix. 40 PROJECTS list of things that need to be done in pdksh. 41 BUG-REPORTS list of recently reported bugs that have been fixed 42 and all reported bugs that haven't been fixed. 43 LEGAL A file detailing legal issues concerning pdksh. 44 etc/* system profile and kshrc files used by Simon J. Gerraty. 45 misc/README* readme files from previous versions. 46 misc/Changes* changelog files from previous versions. 47 os2/* files and info needed to compile ksh on os/2. 48 tests/* pdksh's regression testing system. 49 50 51Compiling/Installing: 52 53 The quick way: 54 ./configure 55 make 56 make check # optional 57 make install # will install /usr/local/bin/ksh 58 # and /usr/local/man/man1/ksh.1 59 [add path-to-installed-pdksh to /etc/shells] 60 61 The more detailed description: 62 * run "configure --help | your-favorite-pager" and look at the 63 --enable-* and --disable-* options (they are at the end). 64 Select any you options you wish to enable/disable 65 (most people can skip this step). 66 * run configure: this is a GNU autoconf configure script that will generate 67 a Makefile and a config.h. Some of the useful options to configure are: 68 --prefix=PATH indicates the directory tree under which the binary 69 and man page are installed (ie, PATH/bin/ksh and 70 PATH/man/man1/ksh.1). 71 The default prefix is /usr/local. 72 --exec-prefix=PATH overrides --prefix for machine dependent files 73 (ie, the ksh binary) 74 --program-prefix=pd install binary and man page as pdksh and pdksh.1 75 --verbose show what is being defined as script runs 76 Note that you don't have to build in the source directory. To build 77 in a separate directory, do something like: 78 $ mkdir objs 79 $ cd objs 80 $ ../configure --verbose 81 .... 82 $ make 83 See the file INSTALL for a more complete description of configure and its 84 generic options (ksh specific options are documented in the --help output) 85 * miscellaneous configuration notes: 86 * If your make doesn't understand VPATH, you must compile in 87 the source directory. 88 * On DecStations, MIPS and SONY machines with older C compilers that 89 can't handle "int * volatile x", you should use gcc or turn off 90 optimization. The problem is configure defines volatile to nothing 91 since the compiler can't handle it properly, but the compiler does 92 optimizations that the volatile is meant to prevent. So. Use gcc. 93 * On MIPS RISC/os 5.0 systems, sysv environment, <signal.h> is 94 messed up - it defines sigset_t, but not any of the rest of 95 the posix signals (the sigset_t typedef should be in the 96 ifdef KERNEL section) - also doesn't have waitpid() or wait3(). 97 Things compile up ok in the svr4 environment, but it dumps core 98 in __start (perhaps our system doesn't have the full svr4 99 environ?). Try compiling in the bsd43 environ instead (still not 100 perfect - see BUG-REPORTS file), using gcc - cc has problems with 101 macro expansions in the argument of a macro (in this case, the ARGS 102 macro). 103 * On TitanOS (Stardent/Titan), use `CC="cc -43" configure ...'. 104 When configure finishes, edit config.h, undef HAVE_DIRENT_H and 105 define HAVE_SYS_DIR_H (the dirent.h header file is broken). 106 * On Linux (red hat distribution), check that /dev/tty has mode 0666 107 (not mode 0644). If it has the wrong permissions, ksh will print 108 warnings about not being able to do job control. 109 * on NeXT machines (3.2, probably other releases), the siglist.out file 110 won't be generated correctly if you try to use the system's compiler 111 (it has a broken cc -E and strange header files). There are two 112 ways to make it work: 113 1) if you have gcc, use it (for everything). Alternatively, 114 force configure to use it for CPP, i.e., use 115 CPP="gcc -E" configure ... 116 2) Force configure to use some extra CPPFLAGS, using 117 CPPFLAGS="XXX" configure ... 118 where XXX is obtained from running "cc -v YYY.c" on some 119 C file. Look at the options passed to cpp (there are lots 120 of them...) and replace the XXX above with them. 121 Make sure you do a "make distclean" (or "rm config.cache") if 122 you re-run configure with a difference CPP or CPPFLAGS. 123 Also note that if you are building multiple arch binaries, you 124 will have to specify both CC and CPP. 125 * run make: everything should compile and link without problems. 126 * run make check: this fires up a perl script that checks for some known 127 and some fixed bugs. The script prints pass/fail for tests it expected 128 to pass/fail, and PASS/FAIL for tests it expected to fail/pass. If you 129 don't have perl, or if your perl doesn't work (most common problem is 130 the .ph header files are missing or broken), you can run 131 ENV= path-to-pdksh-executable misc/Bugs path-to-pdksh-executable 132 instead. 133 * run make install: this installs ksh (in /usr/local/bin/ksh by default, 134 or where ever you told configure to put things). 135 * add path-to-installed-pdksh to /etc/shells if it's not already there. 136 This is only needed if you intend to use pdksh as a login shell (things 137 like ftp won't allow users to connect in if their shell isn't in this 138 file). 139 140The following is a list of machines that pdksh is reported to work on: 141 -/PC Linux 1.x,2.x 142 -/PC NetBSD 0.9a 143 -/PC BSDI 1.1 144 -/PC FreeBSD 2.x, 3.x 145 -/PC OpenBSD 146 -/PC Interactive/Sunsoft 3.0.1 and 4.1 (note that problems have been 147 reported with isc3.2 - see the BUG-REPORTS file) 148 -/PC OS/2 149 Commadore/Amiga NetBSD 1.0 150 Dec/alpha OSF/1 v2.x, v3.x 151 Dec/alpha NetBSD 1.1B 152 Dec/pmax Ultrix 4.2 153 Dec/vax Ultrix 2.2 (not tested recently :-)) 154 Dec/vax 4.3BSD+NFS (MtXinu) (not tested recently :-)) 155 HP/pa HP-UX 9.01 156 IBM/RS/6000 AIX 3.2.5 157 MIPS/m120 RISC/os 5.0 (bsd43 environ) 158 NeXT NeXTStep 3.2 159 SGI/IRIX 6.2 160 Sun/sun4 SunOS 4.1.3, 4.1.4 161 Sun/sun4 Solaris 2.x 162 Sun/sun386i SunOS 4.0.2 163 Sun/sun3 SunOS 4.0.3, 4.1.1_U1 164 Stardent/TitanOS 4.2 165 166 167Newer versions of pdksh may be available from 168 ftp://ftp.cs.mun.ca:/pub/pdksh/ 169you may want to check for one if you run into any problems, as the problem may 170already be fixed (you can get new release notifications automatically - see 171above). The file pdksh-unstable-XXX.tar.gz has the very latest version which 172may not compile (it is generated automatically when changes are detected 173in the main source repository) - it is for those who want to follow 174changes as they are made. 175 176You can send bug reports, fixes, and enhancements to pdksh@cs.mun.ca (please 177don't assume I will see bug reports that are posted to some newsgroup or 178mailing list - I probably won't). 179If you are reporting a bug (with or without a fix), please include 180 * the version of pdksh you are using (see version.c, or, if you are 181 running pdksh, try echo $KSH_VERSION), 182 * the machine, operating system and compiler you are using, 183 * and a description of how to repeat the bug (a small shell 184 script that demonstrates the bug is best). 185as well as the following, if relevant (if you aren't sure, include them) 186 * what options you are using (both configure options and set -o options) 187 * the output of configure, with the verbose flag 188 (eg, make distclean; ./configure --verbose) 189 * the contents of config.log (this is created by the configure script) 190 * if you are using gcc (the GNU C compiler), which version it is. 191 192BTW, THE MOST FREQUENTLY REPORTED BUG IS 193 echo hi | read a; echo $a # Does not print hi 194I'm aware of this and there is no need to report it. 195 196Michael Rendell, michael@cs.mun.ca 197